Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 00:00     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #1
Есть программа ввод значений в которой осущесвляется пока не будет введено отрицательное число, потом она выводит все введенные значения и их сумму, вот код:
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 ошибки. Подскажите гдя я ошибаюсь с функциями, потому как программа без функция работает на "УРА". Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 00:00     Разбиение программы на функции. Ввод последовательности неотрицательных чисел.
Посмотрите здесь:

C++ Написание программы на языке C (по теме - сумма чисел в последовательности)
Разбиение программы на функции C++
Разбиение программы на файлы С++ C++
C++ Задача на поиск делителей последовательности чисел с использованием функции
C++ составить алгоритм нахождения всех неотрицательных чисел стоящих на четных местах в последовательности х1, х2,
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
Nikko12
 Аватар для Nikko12
1 / 1 / 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??? Заранее спасибо
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
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]<<" ";
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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
Nikko12
 Аватар для Nikko12
1 / 1 / 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??? Не понимаю.....
svk2140
-8 / 0 / 1
Регистрация: 04.07.2013
Сообщений: 254
04.07.2013, 18:28     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #7
зачем же вы всё так усложняете та!
щяс поем и напишу нормальный компактный код
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.07.2013, 18:30     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #8
Nikko12, почитайте про область видимости в функциях. Дело в том, что массив созданный в функции А не будет доступен функции Б, поэтому функции Б надо передать указатель на этот массив. Таким образом Б может обращаться к массиву, а также нужно передавать размерность массива чтобы Б знала сколько в массиве элементов и не выходила за пределы.
svk2140
-8 / 0 / 1
Регистрация: 04.07.2013
Сообщений: 254
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;
            }
        }
    }
}
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
04.07.2013, 19:04     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #10
Цитата Сообщение от Nikko12 Посмотреть сообщение
void fn_output (int j,int i,int array[200])
у тебя сколько аргументов в функции? три
а сколько ты передаешь
Цитата Сообщение от Nikko12 Посмотреть сообщение
fn_output(i, array);//35 строка
два
конечно он не может найти функцию с двумя аргументами
Nikko12
 Аватар для Nikko12
1 / 1 / 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, Это вопрос и возник при прочтении книги, а Вы меня снова отсылаете к книге. Книги к сожалению не умеют отвечать на вопросы, а люди умеют Если не тяжело ответте пожалуйста.
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
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)
число, массив, число
ну и как ты думаешь это будет работать
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:39  [ТС]     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #13
ValeryS, А разве имеет значение порядок передачи?? Если "ДА", я не знал этого. Т.е. параметры должны передаваться в функцию в том порядке в котором там расположенны аргументы???
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
04.07.2013, 19:45     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #14
Цитата Сообщение от Nikko12 Посмотреть сообщение
А разве имеет значение порядок передачи??
разумеется
как объявлены так и должны передаватся
Nikko12
 Аватар для Nikko12
1 / 1 / 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]<<" ";
    }
}
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,065
04.07.2013, 19:54     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #16
можно и так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 19:57     Разбиение программы на функции. Ввод последовательности неотрицательных чисел.
Еще ссылки по теме:

Рекурсивные функции. Ввести последовательность чисел и вывести их в обратной последовательности. C++
Фильтр на ввод только целых неотрицательных чисел C++
Pascal в C++. Максимальное произведение двух элементов для последовательности целых неотрицательных чисел C++

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

Или воспользуйтесь поиском по форуму:
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.07.2013, 19:57  [ТС]     Разбиение программы на функции. Ввод последовательности неотрицательных чисел. #17
ValeryS, Благодарю Вас за помощь.
Yandex
Объявления
04.07.2013, 19:57     Разбиение программы на функции. Ввод последовательности неотрицательных чисел.
Ответ Создать тему
Опции темы

Текущее время: 10:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru