Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162

Разбиение программы на функции. Ввод последовательности неотрицательных чисел.

04.07.2013, 00:00. Показов 1409. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть программа ввод значений в которой осущесвляется пока не будет введено отрицательное число, потом она выводит все введенные значения и их сумму, вот код:
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
#include<iostream>
using namespace std;
int main()
{
    int array[200],i=0,number,j,sum=0;
    while(true)
    {
        cin>>number;
        if (number<0)
        {
            break;
        }
        else
        {
            array[i]=number;
            i++;
        }
    }
    for(j=0;j<i;++j)
    {
        cout<<array[j]<<" ";
    }
    cout<<endl;
    for(j=0;j<i;++j)
    {
        sum=sum+array[j];
    }
    cout<<sum;
    return 0;
}
Хотел создать две функции 1 выводит кол-во веденных элементов:
C++
1
2
3
4
for(j=0;j<i;++j)
    {
        cout<<array[j]<<" ";
    }
2 выводит сумму введеных элементов:
C++
1
2
3
4
5
for(j=0;j<i;++j)
    {
        sum=sum+array[j];
    }
    return sum;
Вот код который получился в конце:
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
#include<iostream>
using namespace std;
void fn_output (int i,int j,int array[200])
{
    for(j=0;j<i;++j)
    {
        cout<<array[j]<<" ";
    }
}
int fn_sum(int i,int j,int array[200],sum=0)
{
    for(j=0;j<i;++j)
    {
        sum=sum+array[j];
    }
    return sum;
}
int main()
{
    int array[200],i=0,number,j,sum=0;
    while(true)
    {
        cin>>number;
        if (number<0)
        {
            break;
        }
        else
        {
            array[i]=number;
            i++;
        }
    }
    cout<<fn_output(i);
    cout<<endl;
    cout<<fn_sum(i);
    return 0;
}
Но компилятор пишет 34 ошибки. Подскажите гдя я ошибаюсь с функциями, потому как программа без функция работает на "УРА". Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2013, 00:00
Ответы с готовыми решениями:

Фильтр на ввод только целых неотрицательных чисел
Как создать функцию, позволяющую вводить только целые неотрицательные числа в с++? Как она будет выглядеть?

Вычислите количество неотрицательных значений в последовательности из 5 чисел
Программа нужна сегодня Введите 5 целых чисел. Вычислите количество неотрицательных значений или сообщите что таких чисел нет P.S....

Определить сумму последних трёх неотрицательных чисел последовательности
задаются целые числа a,b,n. определить сумму последних трёх неотрицательных чисел последовательности значений. Y(n)=x(n)-cos(x(n)-0.3),где...

16
 Аватар для Olivеr
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.07.2013, 00:04
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
#include<iostream>
 
using namespace std;
 
void fn_output (int i,int array[200])
{
    for(int j=0; j<i; ++j) {
        cout<<array[j]<<" ";
    }
}
 
int fn_sum(int i,int array[200])
{
    int sum = 0;
    for(int j=0; j<i; ++j) {
        sum=sum+array[j];
    }
    return sum;
}
 
int main()
{
    int array[200],i=0,number,j,sum=0;
    while(true) {
        cin>>number;
        if (number<0) {
            break;
        } else {
            array[i]=number;
            i++;
        }
    }
    fn_output(i, array);
    cout<<endl;
    cout<<fn_sum(i, array);
    return 0;
}
2
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 07:28  [ТС]
Olivеr, Скажите пожалуйста, почему пишет ошибку если написать так:
C++
1
2
3
4
5
6
7
void fn_output (int i,int j,int array[200])
{
    for(j=0;j<i;++j)
    {
        cout<<array[j]<<" ";
    }
}
а если так, то не пишет:
C++
1
2
3
4
5
6
void fn_output (int i,int array[200])
{
    for(int j=0; j<i; ++j) {
        cout<<array[j]<<" ";
    }
}
И почему в функцию передаются именно параметры i и array??? Заранее спасибо
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.07.2013, 07:45
Цитата Сообщение от Nikko12 Посмотреть сообщение
Olivеr, Скажите пожалуйста, почему пишет ошибку если написать так:
C++
1
for(j=0;j<i;++j)
скорее не ошибку(error)
а предупреждение (warning)
аргументом j не разу не воспользовался, сразу его обнулил
Цитата Сообщение от Nikko12 Посмотреть сообщение
И почему в функцию передаются именно параметры i и array???
чтобы вывести что то на экран функции нужно знать это что то
вот ты ей и передаешь i размер массива и array массив

Добавлено через 4 минуты
Цитата Сообщение от Olivеr Посмотреть сообщение
void fn_output (int i,int array[200])
и мы тупо для функции копируем все 200 элементов массива
вот так и быстрее и памяти меньше
C++
1
2
3
4
5
void fn_output (int i /* размер*/, int* array/* адрес массива*/)
{
  for(int j=0; j<i; ++j) 
     cout<<array[j]<<" ";
}
0
 Аватар для Olivеr
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.07.2013, 11:25
ValeryS, с чего вы взяли, что происходит копирование массива? Копируется только указатель указывающий на последовательность из 3 интов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
void Plus5(int arr[3], int i)
{
while (i--) arr[i] += 5;
}
 
int main()
{
int arr[3] = {1, 2, 3};
Plus5(arr, 3);
for (auto x : arr)
cout << x << ", ";
    cin.get();
    return 0;
}
http://ideone.com/EAxSD6
0
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 18:16  [ТС]
ValeryS, Нет если писать:
C++
1
2
3
4
5
6
7
8
void fn_output (int j,int i,int array[200])
{// 6 строка
    
    for(j=0; j<i; ++j) 
    {
        cout<<array[j]<<" ";
    }
}
Пишет ошибка в этой строке 6 и 35 стоке
C++
1
fn_output(i, array);//35 строка
Вот список предупреждений и ошибок которые выдает компилятор если написать так:
1.cpp: In function `int main()':
1.cpp:35: error: invalid conversion from `int*' to `int'
1.cpp:6: error: too few arguments to function `void fn_output(int, int, int*)'
1.cpp:35: error: at this point in file
1.cpp:25: warning: unused variable 'j'
1.cpp:25: warning: unused variable 'sum'
1.cpp:39:2: warning: no newline at end of file
Вот мне и стало интересно, почему ошибка????
Мне кажется, может я конечно ошибаюсь, но в функции
C++
1
void fn_output (int i,int array[200])
объявленны 2 переменные и передаем мы ей 2 аргумента, если объявить еще 1 переменную, то и передовать нужно 3 аргумента.
Добавлено через 6 минут
Вы говорите "чтобы вывести что то на экран функции нужно знать это что то вот ты ей и передаешь i размер массива и array массив", если я правильно поинмаю то те i и array , что я передаю в функцию и i и array в самой функции это совсем разные переменные. А если так, то почему именно i и array нужно передовать в функцию, почему нельзя передать например i и j??? Не понимаю.....
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
04.07.2013, 18:28
зачем же вы всё так усложняете та!
щяс поем и напишу нормальный компактный код
0
 Аватар для Olivеr
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.07.2013, 18:30
Nikko12, почитайте про область видимости в функциях. Дело в том, что массив созданный в функции А не будет доступен функции Б, поэтому функции Б надо передать указатель на этот массив. Таким образом Б может обращаться к массиву, а также нужно передавать размерность массива чтобы Б знала сколько в массиве элементов и не выходила за пределы.
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
04.07.2013, 18:49
да чтото у меня не получается( может ты приведёшь в порялок...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int main()
{
    int q = 0;
    
    int s[] = {};
    
    cout << "skilko znachenij hotite vvesti?: ";
    cin >> q;
    
    for(int i = 0;i < q;i++)
    {
        cin >> s[i];
        if(s[i] < 0)
        {
            for(int i = 0;i < q;i++)
            {
                cout << s[i] << endl;
            }
        }
    }
}
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.07.2013, 19:04
Цитата Сообщение от Nikko12 Посмотреть сообщение
void fn_output (int j,int i,int array[200])
у тебя сколько аргументов в функции? три
а сколько ты передаешь
Цитата Сообщение от Nikko12 Посмотреть сообщение
fn_output(i, array);//35 строка
два
конечно он не может найти функцию с двумя аргументами
0
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:27  [ТС]
ValeryS, При передаче 3 аргументов функции:
C++
1
2
3
4
5
6
7
8
9
void fn_output (int i,int array[200],int j)
{
    for(j=0; j<i; ++j) 
    {
        cout<<array[j]<<" ";
    }
}
...
fn_output(i, j, array);
Пишет:
1.cpp:34: error: invalid conversion from `int' to `int*'
1.cpp:34: error: initializing argument 2 of `void fn_output(int, int*, int)'
1.cpp:34: error: invalid conversion from `int*' to `int'
1.cpp:34: error: initializing argument 3 of `void fn_output(int, int*, int)'
P.S. 34 строка, это
C++
1
fn_output(i, j, array);
Теперь-то я 3 значения предаю в функцию.

Добавлено через 3 минуты
Olivеr, Это вопрос и возник при прочтении книги, а Вы меня снова отсылаете к книге. Книги к сожалению не умеют отвечать на вопросы, а люди умеют Если не тяжело ответте пожалуйста.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.07.2013, 19:31
Цитата Сообщение от Nikko12 Посмотреть сообщение
Теперь-то я 3 значения предаю в функцию.
ну а как ты их передаешь
Цитата Сообщение от Nikko12 Посмотреть сообщение
fn_output(i, j, array);
первый параметр число, второй число, а третий массив
а в прототипе
Цитата Сообщение от Nikko12 Посмотреть сообщение
void fn_output (int i,int array[200],int j)
число, массив, число
ну и как ты думаешь это будет работать
0
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:39  [ТС]
ValeryS, А разве имеет значение порядок передачи?? Если "ДА", я не знал этого. Т.е. параметры должны передаваться в функцию в том порядке в котором там расположенны аргументы???
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.07.2013, 19:45
Цитата Сообщение от Nikko12 Посмотреть сообщение
А разве имеет значение порядок передачи??
разумеется
как объявлены так и должны передаватся
1
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:52  [ТС]
ValeryS, Вы мне открыли глаза Спасибо большое, буду знать.

Добавлено через 4 минуты
ValeryS, А что бы выводить адреса ячеек куда помещаются вводимые значения, нужно сделать так??
C++
1
2
3
4
5
6
7
void fn_output (int i,int j,int array[200])
{
    for(j=0; j<i; ++j) 
    {
        cout<<array[j]<<" "<<&array[j]<<" ";
    }
}
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
04.07.2013, 19:54
можно и так
0
 Аватар для Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:57  [ТС]
ValeryS, Благодарю Вас за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2013, 19:57
Помогаю со студенческими работами здесь

Найти среднее арифметическое последовательности неотрицательных целых чисел
Дана непустая последовательность неотрицательных целых чисел оканчивающихся отрицательным числом. Найти среднее арифметическое всех чисел...

Нахождение всех неотрицательных чисел, стоящих на четных местах в последовательности
=-O

В данной последовательности целых чисел найти максимальное значение среди неотрицательных элементов
В данной последовательности целых чисел найти максимальное значение среди неотрицательных элементов и все номера членов последовательности,...

Pascal в C++. Максимальное произведение двух элементов для последовательности целых неотрицательных чисел
Здравствуйте! Переведите пожалуйста из Pascal в C++: program N_27; const d = 8; var N: integer; a: array of integer; x:...

Разбиение программы на функции
Никак не могу решить проблему с функцией outnewRB: bool outnewRB(bool &amp;check,int &amp;k, int n, RecordBook *RB, RecordBook *newRB) { for...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru