Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
CheOmsk
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 9
1

Заполнение массива через функцию

14.09.2013, 17:23. Просмотров 1505. Ответов 6
Метки нет (Все метки)

Задание следующее:

Определить функцию, которая для каждого элемента переданного ей массива вычисляет функцию cos(2*3.14*i/25), и сохраняет результат во второй массив, переданный этой функции. Заполнить массив числами от 1 до 50 и с помощью определенной функции заполнить второй массив соответствующими значениями.
Написал следующий код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "math.h"
 
void cosinus (int *a, float *b)
{
    *b = cos(2*3.14*(*a)/25);
}
 
main()
{ 
    int i, c=0;
    int a[50];
    for(i=0; i < 50; i++)
        a[i] = c++;                                     
    printf("Значения функции cos(2*3.14*i/25) равны: ");
    float b[50];
    for(i=0; i < 50; i++)
    {
        printf("%f, ", b[i]);
    }
}
Никак не могу сообразить, почему после выполнения результаты получаются неккоректные (скрин в аттаче).
Натолкните, плз, на нужное направление мыслей... Спасибо!
0
Миниатюры
Заполнение массива через функцию  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 17:23
Ответы с готовыми решениями:

Заполнение структуры через функцию
#include &lt;stdio.h&gt; #include &lt;string.h&gt; char ch; int i,j; struct loc { char *name; ...

Заполнение массива целыми числами через цикл
Как заполнить массив целыми числами через цикл?

Вывод массива через функцию
Подскажите, как вывести массив через функцию. Итак, я сгенерировал массив случайных чисел....

Перемножить элементы массива через функцию
Нужно перемножить все элементы массива через функцию. Без функции все получилось, а если через...

Передача массива в функцию через указатель
Доброго времени суток! Почему компилятор ругается : error C2664 невозможно преобразовать...

6
NoMasters
Псевдослучайный
1912 / 1123 / 90
Регистрация: 13.09.2011
Сообщений: 3,182
14.09.2013, 17:29 2
А где по-вашему в этом коде должно происходить заполнение b?
1
CheOmsk
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 9
14.09.2013, 18:16  [ТС] 3
Видимо, я неправильно понял фразу
...Поскольку результаты работы функции уже находятся в нужном массиве, указанном при вызове, такой функции не нужно возвращать результат. Поэтому оператор return в рассмотренной функции отсутствует.
Подумал, что заполнение массива через функцию происходит автоматически при инициализации массива.

Хорошо. Теперь я пытаюсь заполнить массив с помощью обращения к функции:

C
1
2
3
4
5
6
    float b[50];
    for(i=0; i < 50; i++)
    {
        b[i] = cosinus (int *a, float *b);
        printf("%f, ", b[i]);
    }
Но мне выдает следующие ошибки: (в аттаче)
Что это значит? Каких функции не хватает аргументов? О_о
0
Миниатюры
Заполнение массива через функцию  
rublag
52 / 52 / 14
Регистрация: 06.02.2013
Сообщений: 156
14.09.2013, 18:24 4
ещё первый массив будет заполнен числами от 1 до 49,
исправить можно заменив
C
1
2
for(i=0; i < 50; i++)
    a[i] = c++;
на
C
1
2
for(i=0; i < 50; i++)
    a[i] = ++c;
или, если нужно короче, то так:
C
1
for(i=0; (a[i] = i+1) < 50; ++i);
здесь дело в том, что c++ возвращает c, а затем прибавляет единицу, а ++c сначала прибавляет, затем возвращает

Добавлено через 6 минут
я не понял, зачем ссылки, но будет компилироваться, если сделать так:
C
1
2
3
4
5
6
    float b[50];
    for(i=0; i < 50; i++)
    {
        cosinus(&(a[i]), &(b[i]));
        printf("%f, ", b[i]);
    }
1
Stella
75 / 75 / 10
Регистрация: 26.02.2013
Сообщений: 224
14.09.2013, 18:27 5
CheOmsk, функция cosinus ничего не возвращает (тип возвращаемого значения void), поэтому
C
1
b[i] = cosinus (int *a, float *b);
неверно. И при вызове функции типы не указываются.
Попробуйте так:
C
1
2
3
4
5
for(i=0; i < 50; i++)
    {
        cosinus (&a[i], &b[i]);
        printf("%f, \t", b[i]);
    }
1
CheOmsk
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 9
14.09.2013, 18:51  [ТС] 6
Спасибо, ребята, все корректно заработало.

Цитата Сообщение от rublag Посмотреть сообщение
ещё первый массив будет заполнен числами от 1 до 49
Хз, корректно заполняется, до 50, вот проверил:
0
Миниатюры
Заполнение массива через функцию  
rublag
52 / 52 / 14
Регистрация: 06.02.2013
Сообщений: 156
15.09.2013, 03:28 7
CheOmsk, функцию cosinus было бы проще сделать так:
C
1
2
3
4
float cosinus (int a)
{
    return cos(2*3.14*a/25);
}
и вызывать так:
C
1
2
3
int a = 5;
float b;
b=cosinus(a)
0
15.09.2013, 03:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 03:28

Ввод и вывод массива через функцию
Здраствуйте, написал программу для ввода/вывода массива с заданным количеством елементов, но не...

Вывод массива через функцию после сортировки
У меня есть небольшая проблема, помогите, пожалуйста. Как мне распечатать массив после его...

Не удается передать значение массива через функцию. Си
в функции maxElementsinMassive нужно найти максимальное значение из двух массивов (a(n) и b (m)) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru