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

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

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

Author24 — интернет-сервис помощи студентам
Есть программа ввод значений в которой осущесвляется пока не будет введено отрицательное число, потом она выводит все введенные значения и их сумму, вот код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2013, 00:00
Ответы с готовыми решениями:

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

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

Определить сумму последних трёх неотрицательных чисел последовательности
задаются целые числа a,b,n. определить сумму последних трёх неотрицательных чисел...

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

16
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.07.2013, 00:04 2
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
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 07:28  [ТС] 3
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.07.2013, 07:45 4
Цитата Сообщение от 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
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.07.2013, 11:25 5
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
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 18:16  [ТС] 6
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 7
зачем же вы всё так усложняете та!
щяс поем и напишу нормальный компактный код
0
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.07.2013, 18:30 8
Nikko12, почитайте про область видимости в функциях. Дело в том, что массив созданный в функции А не будет доступен функции Б, поэтому функции Б надо передать указатель на этот массив. Таким образом Б может обращаться к массиву, а также нужно передавать размерность массива чтобы Б знала сколько в массиве элементов и не выходила за пределы.
0
89 / 1 / 3
Регистрация: 04.07.2013
Сообщений: 282
04.07.2013, 18:49 9
да чтото у меня не получается( может ты приведёшь в порялок...
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.07.2013, 19:04 10
Цитата Сообщение от Nikko12 Посмотреть сообщение
void fn_output (int j,int i,int array[200])
у тебя сколько аргументов в функции? три
а сколько ты передаешь
Цитата Сообщение от Nikko12 Посмотреть сообщение
fn_output(i, array);//35 строка
два
конечно он не может найти функцию с двумя аргументами
0
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:27  [ТС] 11
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.07.2013, 19:31 12
Цитата Сообщение от Nikko12 Посмотреть сообщение
Теперь-то я 3 значения предаю в функцию.
ну а как ты их передаешь
Цитата Сообщение от Nikko12 Посмотреть сообщение
fn_output(i, j, array);
первый параметр число, второй число, а третий массив
а в прототипе
Цитата Сообщение от Nikko12 Посмотреть сообщение
void fn_output (int i,int array[200],int j)
число, массив, число
ну и как ты думаешь это будет работать
0
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:39  [ТС] 13
ValeryS, А разве имеет значение порядок передачи?? Если "ДА", я не знал этого. Т.е. параметры должны передаваться в функцию в том порядке в котором там расположенны аргументы???
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.07.2013, 19:45 14
Цитата Сообщение от Nikko12 Посмотреть сообщение
А разве имеет значение порядок передачи??
разумеется
как объявлены так и должны передаватся
1
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:52  [ТС] 15
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.07.2013, 19:54 16
можно и так
0
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:57  [ТС] 17
ValeryS, Благодарю Вас за помощь.
0
04.07.2013, 19:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2013, 19:57
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru