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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2011, 17:08   #11
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Вроде как-то так...
Код:
#include <stdio.h>
#include <conio.h>                      
float Input(float* array, int length)
{
int i;
printf("введите значение length:\n");
scanf("%d",&length);
printf("введите значение элементов массива:\n");
for (i=0;i<length;i++)
{
printf("array[%d] =",i);
scanf("%f",&array[i]);
}
return;
}
float SumElementsOfArray(const float* array, int length)
{
float sum;
int i;
for (sum=0, i=0;i<length;i++)
{
sum+=array[i];
}
printf("\nсумма элементов в массиве:%f",sum);
return sum;
}
void main()
{
Input();
SumElementsOfArray();
getch();
}
И теперь у меня проблема с вызовом)
(=Hello=) вне форума Ответить с цитированием
Старый 07.11.2011, 17:17   #12
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Именно. Потому что массив где-то надо создать. (И, к слову, Input вроде как не возвращает ничего - задайте возвращаемый тип void, приведите заголовок в соответствие с реальностью). И при вызове функций, как описано выше, им надо передавать аргументы.

Логично создавать массив в main, поскольку именно main связывает разные операции над одним и тем же массивом. Имеем:
Код:
//Никогда не помешает явно обозначить, что аргументов на вход не ожидается
void main(void)
{
    //Заводим массив - то есть, фактически, место под массив
    float x[20];

    Input(x, 20);
    //Вызываем функцию, получаем возвращаемое значение в переменную sum
    float sum = SumElementsOfArray(x, 20);
    printf("Sum is %f\n", sum);

    //Ждём нажатия клавиши перед выходом
    getch();
}
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 17:35   #13
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Почему-то программа считает сумму через раз, значение выводит каждый раз, но иногда какую-то чушь.
(=Hello=) вне форума Ответить с цитированием
Старый 07.11.2011, 17:38   #14
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Когда я ввожу length=4 и значения элементов массива все 4, то выводит не правильный результат. И так же если ввести length=5 и значения 5 и т.д.
(=Hello=) вне форума Ответить с цитированием
Старый 07.11.2011, 20:07   #15
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Создал функцию для вывода введенного массива, но выводится введенный массив + нули до конца размера массива.
Код:
float Output(float* array, int length)
{
int i;
printf("Массив:");
for (i=0;i<length;i++)
{
printf("%4.0f",array[i]);
}
return 0;
}
(=Hello=) вне форума Ответить с цитированием
Старый 07.11.2011, 20:26   #16
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ну... да. Массив сам по себе не содержит информации о том, какой он длины, её надо передавать. Мы передаём параметр length, причём при вызовах я изначально счёл его постоянным (невнимательно посмотрел, в первую очередь обратил на себя внимание лимит 20).

Что ж, можно изменить функцию Input. Она сейчас ничего не возвращает - пусть будет возвращать длину введённого массива (а принимать - максимум того, какую длину можно задать). main тогда изменится таким образом:
Код:
//Никогда не помешает явно обозначить, что аргументов на вход не ожидается
void main(void)
{
    //Заводим массив - то есть, фактически, место под массив
    float x[20];

    int length = Input(x, 20);
    //А остальные функции будут работать с нашим массивом как с массивом длины length
    //и не подозревать об ограничении в 20 элементов
    Output(x, length);
    //Вызываем функцию, получаем возвращаемое значение в переменную sum
    float sum = SumElementsOfArray(x, length);
    printf("Sum is %f\n", sum);

    //Ждём нажатия клавиши перед выходом
    getch();
}
Соответствующим образом изменить функцию Input сможете?
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 20:31   #17
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Постараемся)
(=Hello=) вне форума Ответить с цитированием
Старый 08.11.2011, 08:52   #18
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

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

А что получилось?
Код:
//Функция принимает указатель на массив и его максимальную длину.
//Пользователь вводит элементы массива, функция записывает их в массив и возвращает число элементов
int Input(float* array, int maxLength)
{
    int i;
    //Аргументы функции лучше не изменять без нужды. Заведём ещё одну переменную
    int length;
    //Пользователю не надо знать, как у нас называются переменные
    printf("введите длину массива:\n");
    scanf("%d",&length);
    printf("введите значения элементов массива:\n");
    for (i=0;i<length;i++)
    {
        printf("array[%d] =",i);
        scanf("%f",&array[i]);
    }
    //Возвращаем реальное число элементов массива
    return length;
}
Здесь всё понятно?
Тогда подумайте вот над чем: что делать, если пользователь ввёл желаемую длину массива 100500?
Abstraction вне форума Ответить с цитированием
Старый 08.11.2011, 14:59   #20
(=Hello=)
Пользователь
 
Регистрация: 24.02.2011
Сообщений: 39
По умолчанию

Ну можно просто поставить условие - если length>20, то вывести сообщение об ошибке.
(=Hello=) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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