Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Lexxxxy
6 / 6 / 7
Регистрация: 07.08.2016
Сообщений: 44
1

Объясните как работает программа

07.08.2016, 12:51. Просмотров 907. Ответов 4
Метки нет (Все метки)

Задание звучит так: "Разработать функцию, в которую передаются в качестве аргументов массив типа float и его размер. Функция должна возвращать среднее арифметическое элементов массива".

Как бы то странно ни было, я не совсем понимаю как работает мой код
А если быть точнее, то в строках 9 и 32, если я убираю * и оставляю строки такими:
C++
1
2
float averageFunc(float, int);
float averageFunc(float array, int sizeOfArray)
То у меня вылезают ошибки в строках 28: cannot convert 'float*' to 'float' for argument '1' to 'float averageFunc(float, int)' и в 38: invalid types 'float[int]' for array subscript.

Удивительным образом додумался поставить знак * в строки 9 и 32, всё заработало. А как, я так и не понял)
Прошу объяснить как это работает, пожалуйста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<cstdlib>
#include<Windows.h>
#include<ctime>
#include<iomanip>
 
using namespace std;
 
float averageFunc(float *, int);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int sizeOfArray;
    cout << "Введите размер массива: ";
    cin >> sizeOfArray;
    float array[sizeOfArray] = {};
 
    srand(time(NULL));
    for(int i = 0; i < sizeOfArray; i++)
    {
        array[i] = rand() % 100 / (rand() % 10 + 1.0);;
        cout << array[i] << " ";
    }
 
  cout << "\n\nСреднее арифметическое: " << averageFunc(array, sizeOfArray) << endl << endl;
 
}
 
float averageFunc(float *array, int sizeOfArray)
{
    float average = 0.0;
    float sumArray = 0.0;
    for(int i = 0; i < sizeOfArray; i++)
    {
        sumArray += array[i];
    }
    return(sumArray / sizeOfArray);
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2016, 12:51
Ответы с готовыми решениями:

Объясните как работает программа
Данная программа делает подсчёт символов. Помогите разобраться как она работает. Сижу смотрю - и...

Объясните, как работает программа
объясните как работает программа #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std;...

Объясните как работает программа
Цель задачи была: Возведение X в 59 степень за самое малое количество шагов. 1. Ввод...

Объясните, как работает программа
Поясните пожалуйста чайнику! Объясните плиз как работает программа, то есть что значит &quot;**&quot; и...

Объясните, как работает программа возведения числа в степень
A в степени K, как работает эта программа, за что отвечают m и s ? #include &quot;stdafx.h&quot; #include...

4
Doctor123
22 / 22 / 8
Регистрация: 03.12.2013
Сообщений: 144
07.08.2016, 13:27 2
Вы с помощью * (звёздочки) передали в функцию адрес начала массива "array" из главной функции main.
Иначе массив "array" в функции averageFunc() мог бы начинаться с любого другого адреса.
Вы (до * звёздочки) передавали значение, которое не совпадает с адресом массива и получали ошибку.
А теперь функция averageFunc() работает с вашим массивом из функции main() и всё OK


P.S. Звёздочка означает передачу адреса переменной или массива, а не значения
1
Lexxxxy
6 / 6 / 7
Регистрация: 07.08.2016
Сообщений: 44
07.08.2016, 13:36  [ТС] 3
Ааа, кажется, понял. Адрес массива всегда передаётся в функциях?
Ну то есть, если я буду писать другую программу, где мне опять придётся использовать функцию, взяв массив из main-функции, то я должен буду указать именно на адрес? (*)
0
Doctor123
22 / 22 / 8
Регистрация: 03.12.2013
Сообщений: 144
07.08.2016, 13:48 4
Лучший ответ Сообщение было отмечено Lexxxxy как решение

Решение

Наверное правильно поняли.
Функция это почти как отдельная программа.
Поэтому Вам нужно передавать функции либо значение, либо адрес переменных или массивов.
Но по значению массив передавать очень громоздко. Адрес начала массива передать намного удобнее и быстрее.
1
Lexxxxy
6 / 6 / 7
Регистрация: 07.08.2016
Сообщений: 44
07.08.2016, 13:51  [ТС] 5
Спасибо! Кажется, всё понял.
0
07.08.2016, 13:51
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 13:51

Объясните, как работает программа
программа по трем введеным числам определяет и выводит на экран число имеющее в составе наибольше...

Объясните как работает программа
Если символ: не пробел, не новая строка, не табуляция. То in присваивается no(все слова). Дальше я...

Объясните, как работает программа
Підскажіть будьласка як працює програма. #include &quot;stdafx.h&quot; #include&lt;iostream&gt;...


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

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

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