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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2011, 12:14   #1
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию Использование функций в Си

Программа вводит и выводит массив, но не считает сумму, произведение и т.д. Подскажите в чём ошибка.


Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int massiv(void)  //ввод массива
{
int i,n;
float x[20];
printf("введите n:\n");
scanf("%d",&n);
printf("введите массив:\n");
for (i=0;i<n;i++)
{
printf("x[%d] =",i);
scanf("%f",&x[i]);
}
return x[i];
}
int group(void)    //кол-во эл-тов в группе
{
int k;
printf("введите k:\n");
scanf("%d",&k);
return k;
}
int vmassiv(void)   //вывод массива
{
int i,n;
float x[20];
printf("массив:");
for (i=0;i<n;i++)
{
printf("%4.0f",x[i]);
}
return x[i];
}
int copy(void)        //копирование массива
{
int i,n;
float x[20],y[20];
printf("\nскопиров.массив:");
for (i=0;i<n;i++)
{
y[i]=x[i];
printf("%4.0f",y[i]);
}
return y[i];
}
int vsumma(void)   //сумма в группе
{
int s,i,k;
float x[20];
for (s=i=0;i<=k-1;i++)
{
s+=x[i];
}
printf("\nсумма эл-тов в группе:%d", s);
return s;
}
int summa(void)    //сумма  в массиве
{
int s1,i,n;
float x[20];
for (s1=i=0;i<n;i++)
{
s1+=x[i];
}
printf("\nсумма в массиве*: %d",s1);
return s1;
}
int proiz(void)         //произведение
{
int p,i,n;
float x[20];
for (p=1,i=0;i<n;i++)
{
p*=x[i];
}
printf("\nпроизведение: %d",p);
return p;
}
int vmassiva (void)    //вывод массива
{
int i,k,n,s;
float x[20];
for (i>k+1;i<n;i++)
{
x[i]=0;
}
x[k]=s;
printf("\nполученный массив:");
for (i=0;i<n;i++)
{
printf("%4.0f",x[i]);
}
return x[i];
}
void main()
{
clrscr();
massiv();
group();
vmassiv();
copy();
printf("\n");
summa();
copy();
getch();
}
(=Hello=) вне форума Ответить с цитированием
Старый 06.11.2011, 12:17   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Код:
int vsumma(void)   //сумма в группе
{
    int s,i,k;
    float x[20];
    for (s=i=0;i<=k-1;i++)
    {
        s+=x[i];
    }
    printf("\nсумма эл-тов в группе:%d", s);
    return s;
}
Внимание, вопрос: чему равно k?
Abstraction вне форума Ответить с цитированием
Старый 06.11.2011, 12:22   #3
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Количество элементов в группе) А вот как соединить эти две функции я не догоняю(

Последний раз редактировалось (=Hello=); 06.11.2011 в 12:24.
(=Hello=) вне форума Ответить с цитированием
Старый 06.11.2011, 15:28   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Неверный ответ. int k означает "завести переменную k типа int, которая равна чему угодно". Хотите передать в функцию информацию - передавайте через аргументы.
Что характерно, всё вышесказанное в той же мере относится к x: в данном случае считается сумма неизвестно чего.
Abstraction вне форума Ответить с цитированием
Старый 06.11.2011, 15:37   #5
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Цитата:
передавайте через аргументы
А можно узнать как это сделать?)
(=Hello=) вне форума Ответить с цитированием
Старый 06.11.2011, 16:27   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
//Функция суммирует элементы массива array, с индексами от 0 до length-1
//Возвращает сумму, никоим образом не изменяет массив array (гарантировано const)
int SumElementsOfArray(const float* array, int length)
Такая запись не встречалась?
Abstraction вне форума Ответить с цитированием
Старый 06.11.2011, 18:37   #7
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Пробовал что-то сделать с использованием указателей, попытка не удалась.
(=Hello=) вне форума Ответить с цитированием
Старый 06.11.2011, 19:40   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Хм. В данном случае, с array можно работать ровно так же, как и с исходным массивом x. Единственное отличие - по-другому будет работать оператор sizeof.

То есть,
Код:
//Функция суммирует элементы массива array, с индексами от 0 до length-1
//Возвращает сумму, никоим образом не изменяет массив array (гарантировано const)
int SumElementsOfArray(const float* array, int length){
    //То же самое: в переменную a заносится значение первого элемента массива
    int a = array[0];
}

//Вызов тоже очень прост (я использую именованную константу для размера массива вместо числа 20):
float x[SIZE];
int sum = SumElementsOfArray(x, SIZE);
Abstraction вне форума Ответить с цитированием
Старый 06.11.2011, 20:02   #9
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Не мог бы ты показать как это будет выглядеть через мои переменные, никак не догоню(
(=Hello=) вне форума Ответить с цитированием
Старый 07.11.2011, 10:47   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Я бы советовал сразу привыкать к содержательным именам переменных: в этих s, k, x очень легко запутаться и довольно неприятно потом искать ошибки. Итак, Ваш же код, но с изменённым заголовком и именами переменных:
Код:
//Функция суммирует элементы массива array, с индексами от 0 до length-1
//Возвращает сумму, никоим образом не изменяет массив array (гарантировано const)
float SumElementsOfArray(const float* array, int length){
    //Если элементы массива - float, то и сумма, по идее, должна быть float
    float sum;
    int i;

    //Предпочтительней привыкать к ++i, хотя i++ здесь тоже нормально 
    for (sum=0, i=0; i<length; i++)
    {
        sum+=array[i];
    }
    //Эту строку лучше бы перенести в вызывающий код - 
    //или переименовать функцию в SumElementsOfArrayAndPrintSum
    printf("\nсумма эл-тов в группе:%f", sum);

    return sum;
}
Abstraction вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование функций в C++ из DLL. VintProg Общие вопросы C/C++ 5 04.09.2011 03:02
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
Использование функций prikolist Общие вопросы C/C++ 15 06.04.2009 18:42
Использование логических функций Клубничка Microsoft Office Excel 52 15.01.2009 15:01
использование процедур и функций! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 15:33