Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 17:10   #1
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
Печаль Си++. Передача массива в функцию.

Здравствуйте) Не могли бы Вы мне помочь с такой задачей: напишите функцию с именем sumarray(), принимающую два массива в качестве аргументов, которая бы складывала все элементы обоих массивов и возвращала итоговую сумму. Напишите простую программу с использованием этой функции. Никак не пойму надо ли передавать массив в функцию и зачем, если надо..у меня чет фигня получилась..помогите пожалуйста((..

Код:
#include <stdio.h>
#include <stdlib.h>
int a_mas (int *a, int i);
int b_mas (int *b, int i);
int main()
{
  int i;
  int a_mas[5], b_mas[5];
  for (i = 0; i<5; i++)
{
  printf("vvedite a_mas[%d]: ", i);
  scanf("%d", &a_mas[i]);
}
   for (i = 0; i<5; i++)
   {
  printf("vvedite b_mas[%d]: ", i);
  scanf("%d", &b_mas[i]);
}
      system("PAUSE");
      return 0;
}

Последний раз редактировалось Stilet; 03.12.2009 в 17:14.
Diamond2107 вне форума Ответить с цитированием
Старый 03.12.2009, 18:05   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ф-ция sumarray() будет выглядеть примерно так:
Код:
int sumarray(int a[], int a_len, int b[], int b_len)
{
    int s = 0;
    for(int i = 0; i < a_len; i++)
        s += a[i];
    for(int i = 0; i < b_len; i++)
        s += b[i];

    return s;
}
Конкретно по вопросу, надо ли передавать массивы в ф-цию. Безусловно надо, как иначе ф-ция будет считать сумму их элементов?
netrino вне форума Ответить с цитированием
Старый 03.12.2009, 18:19   #3
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

А вот так можно? Только всегда ноль почему то выдает((..объясните в чем ошибка пожалуйста..

#include <stdio.h>
#include <stdlib.h>
int a_mas (int *a, int i);
int b_mas (int *b, int i);
int summary(int* a, int* b);
int main()
{
int i,result_here;
int a_mas[5], b_mas[5];
for (i = 0; i<5; i++)
{
printf("vvedite a_mas[%d]: ", i);
scanf("%d", &a_mas[i]);
}
for (i = 0; i<5; i++)
{
printf("vvedite b_mas[%d]: ", i);
scanf("%d", &b_mas[i]);
}
result_here = summary(a_mas,b_mas);
printf(" \n result_here= %d ", result_here);

system("PAUSE");
return 0;
}
int a_mas (int *a, int i);
int b_mas (int *b, int i);
int summary(int* a, int* b)
{
int summ = 0; int i;
for (i=0; i<5; i++) summ+=a[i]+b[i];
return summ;
}
Diamond2107 вне форума Ответить с цитированием
Старый 03.12.2009, 19:31   #4
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Да вроде все работает))..спасибо))
А не поможите с такой задачкой: напишите функцию, принимающую два массива в качестве аргументов одинаковой длины. Функция должна складывать соответствующие элементы двух массивов и помещать результаты в третий массив.

#include <stdio.h>
#include <stdlib.h>
int a_mas (int *a, int i);
int b_mas (int *b, int i);
int Sum(int* a, int* b, int n);
int main()
{
int i,result_here;
int a_mas[5], b_mas[5];
for (i = 0; i<5; i++)
{
printf("vvedite a_mas[%d]: ", i);
scanf("%d", &a_mas[i]);
}
for (i = 0; i<5; i++)
{
printf("vvedite b_mas[%d]: ", i);
scanf("%d", &b_mas[i]);
}
rez= sum(a_mas,b_mas);
printf(" \n rez= [%d] ", rez);

system("PAUSE");
return 0;
}
int a_mas (int *a, int i);
int b_mas (int *b, int i);


int Sum(int* a, int* b, int i)
{
int i;
int* rez = new int[i];

for(int i = 0; i < 5; ++i)
rez[i] = a[i] + b[i]
return rez;
}

вот..что удалось..не могли бы Вы помочь..
Diamond2107 вне форума Ответить с цитированием
Старый 03.12.2009, 19:40   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Зачем Вы повсюду пишите
Код:
int a_mas (int *a, int i);
int b_mas (int *b, int i);
?

Код:
int Sum(int* a, int* b, int i)
{
int i;
int* rez = new int[i];

for(int i = 0; i < 5; ++i)
rez[i] = a[i] + b[i]
return rez;
}
Вы переопределяете параметр i, назовите его иначе, например n. Потом ф-ция должна возвращать int*, а не int. И в main тогда нужно выводить именно массив, а не целое число
Код:
int* Sum(int* a, int* b, int n)
{ 
   ...
   for(int i = 0; i < n;...)
   ...
 }

int main()
{
    int* rez;
...
    rez = sum(a_mas, b_mas, 5);
    for(int i = 0; i < 5; i++)
        printf("%d ", rez[i]);
...
}
netrino вне форума Ответить с цитированием
Старый 03.12.2009, 19:54   #6
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Пишу повсюду)) да так на лекции сказали..боюсь что-то менять))
#include <stdio.h>
#include <stdlib.h>
int a_mas (int *a, int i);
int b_mas (int *b, int i);
int* Sum(int* a, int* b, int n);
int main()
{
int i;
int* rez;
int a_mas[5], b_mas[5];
for (i = 0; i<5; i++)
{
printf("vvedite a_mas[%d]: ", i);
scanf("%d", &a_mas[i]);
}
for (i = 0; i<5; i++)
{
printf("vvedite b_mas[%d]: ", i);
scanf("%d", &b_mas[i]);
}
*rez= *Sum(a_mas,b_mas,5);
for(int i = 0; i < 5; i++)
printf("rez[%d] ", rez[i]);

system("PAUSE");
return 0;
}
int a_mas (int *a, int i);
int b_mas (int *b, int i);


int* Sum(int* a, int* b, int i)
{
int n;
int* rez = new int[n];

for(int i = 0; i < n; ++i)
rez[i] = a[i] + b[i]
return rez;
}
Наверно я что-то не понимаю..я исправила..все равно не работает..

Последний раз редактировалось Diamond2107; 03.12.2009 в 20:05.
Diamond2107 вне форума Ответить с цитированием
Старый 03.12.2009, 20:03   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Оформляйте код тегом code, для этого выделите код и нажмите # из меню над полем ввода )
Код:
*rez= *Sum(a_mas,b_mas,5); // тут звёздочки убрать
...
int* Sum(int* a, int* b, int i) // тут третий параметр должен быть n! я же написал :)
...
int n; // А вот этого как раз не надо
int* rez = new int[n];
...
rez[i] = a[i] + b[i] // Тут пропустили точку с запятой
return rez;
netrino вне форума Ответить с цитированием
Старый 03.12.2009, 20:15   #8
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Спасибо Вам..все работает
Diamond2107 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
передача массива в функцию JOFRIF Общие вопросы C/C++ 8 02.08.2009 12:46
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08
Передача массива из чисел в функцию x007 Общие вопросы C/C++ 3 21.04.2009 23:39
Передача двухмерного массива в функцию IgorKr Общие вопросы C/C++ 2 28.03.2008 01:11