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

Программа не выполняется как надо. - C++

Восстановить пароль Регистрация
 
 
sunlight17
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 29
10.01.2011, 16:50     Программа не выполняется как надо. #1
Вот две программы, по идее они должны выполнятся одинаково, но первая выполняется правильно, а вторая нет.
№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
#include <stdio.h>
#include <iostream>
#include <conio.h>
int main(int argc, char *argv[])
{
    int acc=0;
    do
    {
        for (;;)
        {
            int value;
            std::cin>>value;
            if (value<0)
            {
                       break;
                       }
                       acc=acc+value;
                       }
                       }while(!(acc>=100));
                       std::cout<<acc;
                                                    
    getch();
    return 0;
}
№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
#include <stdio.h>
#include <iostream>
#include <conio.h>
int VVV(void)
{
int acc=0;
for (;;)
{
int value;
std::cin>>value;
if (value<0)
{break;
}
acc=acc+value;
}
return acc;
}
int main(int argc, char *argv[])
{
    int nN;
do    
{
nN=VVV();
}while (!(nN>=100));
std::cout<<nN;                              
    getch();
    return 0;
}
Объясните плз , что не так во втором коде?
P.S.
Целью программ(по крайней мере первой) было суммирование положительных чисел пока сумма не будет равна стам .(процесс суммирования можно прекратить введением отрицательного числа, но если вы ввели отрицательное число , а сумма ещё не равна стам , то суммирование можно продолжить)

Добавлено через 33 минуты
как объявить переменную acc так чтобы она относилась к обеим функциям?во втором коде
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2011, 16:50     Программа не выполняется как надо.
Посмотрите здесь:

C++ Двумерный массив чисел, не выполняется программа
C++ надо что бы как только встречаются данные о женщине программа преуменьшала ее возвраст.
дана программа на рекурсивную функцию надо разработать как рисунке C++
Закрывается, а не выполняется программа после нажатия enter C++
Программа со сверхбольшими числами не выполняется до конца C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.01.2011, 16:55     Программа не выполняется как надо. #2
sunlight17, разница двух программ, в том, что если в первой набрали какую-то сумму (меньше 100) и ввели отрицательное число, то процесс суммирования продолжается с учетом набранной ранее суммой. А во второй программе в этом случае процесс суммирования начинается опять с нуля.

Цитата Сообщение от sunlight17 Посмотреть сообщение
как объявить переменную acc так чтобы она относилась к обеим функциям?во втором коде
К каким обеим?
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
10.01.2011, 17:02     Программа не выполняется как надо. #3
C++
1
2
3
4
int nN=0;
/*
*/
nN+=VVV();
Chesslov
 Аватар для Chesslov
2 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 29
10.01.2011, 17:06     Программа не выполняется как надо. #4
Чтобы переменная (acc) была видна во всей программе - объяви ее как глобальную.

В функции VVV - переменная acc объявляется как локальная - либо переименуй, либо вообще из тела функции убери.

В принципе для работы программы достаточно двух действий:
1 Убрать объявление acc из VVV
2 Вставить объявление acc до VVV.

Удачи!
sunlight17
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 29
10.01.2011, 17:09  [ТС]     Программа не выполняется как надо. #5
valerii, к VVV() и к main().
Я просто хочу чтобы свойства второй программы имели такие же свойства первой которые ты описал,
чтобы если мы введём отрицательное цисло,процесс суммирования продолжался бы с учётом уже набранной суммы

Добавлено через 13 секунд
valerii, к VVV() и к main().
Я просто хочу чтобы свойства второй программы имели такие же свойства первой которые ты описал,
чтобы если мы введём отрицательное цисло,процесс суммирования продолжался бы с учётом уже набранной суммы
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.01.2011, 17:09     Программа не выполняется как надо. #6
Chesslov, Не советуйте такого
объяви ее как глобальную.
никому и никогда. Особенно там где это не нужно.
sunlight17
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 29
10.01.2011, 17:11  [ТС]     Программа не выполняется как надо. #7
chess, а как это сделать?
как видно из программы мои познания в С++ не велики =)))
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.01.2011, 17:12     Программа не выполняется как надо. #8
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
#include <stdio.h>
#include <iostream>
#include <conio.h>
int VVV(int acc)
{
for (;;)
{
int value;
std::cin>>value;
if (value<0)
{break;
}
acc=acc+value;
}
return acc;
}
int main(int argc, char *argv[])
{
    int nN=0;
do    
{
nN=VVV(nN);
}while (!(nN>=100));
std::cout<<nN;                              
    getch();
    return 0;
}
sunlight17
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 29
10.01.2011, 17:23  [ТС]     Программа не выполняется как надо. #9
ForEveR, спс помогло
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
10.01.2011, 17:36     Программа не выполняется как надо. #10
я вам еще в третьем сообщении написал что и как исправить
sunlight17
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 29
10.01.2011, 18:16  [ТС]     Программа не выполняется как надо. #11
И всё-таки как объявлять глобальную переменную? мне просто интересно
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
10.01.2011, 18:39     Программа не выполняется как надо. #12
Цитата Сообщение от sunlight17 Посмотреть сообщение
И всё-таки как объявлять глобальную переменную? мне просто интересно
вне функции. но их использование - очень и очень плохой тон
sunlight17
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 29
10.01.2011, 19:55  [ТС]     Программа не выполняется как надо. #13
почему?это преследуется законодательством))?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.01.2011, 20:48     Программа не выполняется как надо. #14
sunlight17, просто не стоит. Всегда (или почти всегда) можно обойтись без их использования.
1) К ним очень легкий доступ, отовсюду практически (в пределах одного файла, если нет инклада этого файла в другие) - следовательно легко записать туда что-то не то.
2) Если и писать глобальные переменные - то имя должно быть уникально, так, чтобы не перепутали с глобальной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int i;
 
int main()
{
    std::cout<<i<<'\n';
    int i=10;//Глобальная переменная перекрыта
    std::cout<<i<<'\n';
    std::cout<<::i<<'\n';//Печатаем глобальную переменную
    return 0;
}
metallhead
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 4
10.01.2011, 21:57     Программа не выполняется как надо. #15
Товарищи, помогите, пожалуйста!!
В универе задали написать программу, вот код:
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
42
43
44
45
46
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <iomanip.h>
 
 
void main ()
{
    float xn, a, dx, x, y, z, S=0, P=1;
    short K=0;
 
    clrscr();
 
    cout <<"Введите данные"<<endl;
    cout <<"a=";
    cin >>a;
    cout <<"xn=";
    cin >>xn;
    cout <<"dx=";
    cin >>dx;
 
    while (x/(2*x*x+1)>=0)
    {
        cout <<"x="<<x;
        if (x<=1)
        if (x==1)
        {
            cout <<"y=нет решений    z=нет решений"<<endl;
            goto a1;
        }
        else y=0.5*a*x/(1-x)+pow(sin(x*a),2);
        else y=4*a+exp(-x)+2*pow(cos(x*x),3);
        if (y<0) P*=y;
        z=2.3*y+sqrt(x/(2*x*x+1));
        if (z>0)
        {
            K++;
            S+=z;
        }
        cout <<"x="<<x<<" "<<"y="<<y<<" "<<"z="<<z<<endl;
        a1: x+=dx;
    }
    cout <<"K="<<K<<" "<<"S="<<S<<" "<<"P="<<P;
 
    getch();
}
компилируется без ошибок, но всё время пишет К=0, S=0, P=1. Компилятор Borland C++ 3.1
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
10.01.2011, 22:14     Программа не выполняется как надо. #16
Цитата Сообщение от metallhead Посмотреть сообщение
goto a1;
за такое сразу двойку ставить надо
metallhead
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 4
10.01.2011, 22:29     Программа не выполняется как надо. #17
Цитата Сообщение от vx5 Посмотреть сообщение
за такое сразу двойку ставить надо
лучше подскажи, как исправить
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.01.2011, 22:32     Программа не выполняется как надо. #18
metallhead, См комментарии:
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
42
43
44
45
46
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <iomanip.h>
 
 
void main ()
{
        float xn, a, dx, x, y, z, S=0, P=1;
        short K=0;
 
        clrscr();
 
        cout <<"Введите данные"<<endl;
        cout <<"a=";
        cin >>a;
        cout <<"xn=";
        cin >>xn;
        cout <<"dx=";
        cin >>dx;
 
        while (x/(2*x*x+1)>=0)// на момент начала этого цикла значение x вообще не определено, поэтому цикл сразу пропускается
        {
                cout <<"x="<<x;
                if (x<=1)
                if (x==1)
                {
                        cout <<"y=нет решений    z=нет решений"<<endl;
                        goto a1;
                }
                else y=0.5*a*x/(1-x)+pow(sin(x*a),2);
                else y=4*a+exp(-x)+2*pow(cos(x*x),3);
                if (y<0) P*=y;
                z=2.3*y+sqrt(x/(2*x*x+1));
                if (z>0)
                {
                        K++;
                        S+=z;
                }
                cout <<"x="<<x<<" "<<"y="<<y<<" "<<"z="<<z<<endl;
                a1: x+=dx;
        }
        cout <<"K="<<K<<" "<<"S="<<S<<" "<<"P="<<P;// и выводятся значения заданные изначально
 
        getch();
}
metallhead
0 / 0 / 0
Регистрация: 10.01.2011
Сообщений: 4
10.01.2011, 22:48     Программа не выполняется как надо. #19
valeriikozlov, спасибо огромное!!)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2011, 19:47     Программа не выполняется как надо.
Еще ссылки по теме:

C++ Не выполняется программа проводника
C++ Программа не работает как надо. Задача: Вывести сумму всех элементов массива, кратных данному числу К (вводится с клавиатуры)
Поиск в ширину - Неправильно выполняется программа C++

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

Или воспользуйтесь поиском по форуму:
Chesslov
 Аватар для Chesslov
2 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 29
11.01.2011, 19:47     Программа не выполняется как надо. #20
Цитата Сообщение от ForEveR Посмотреть сообщение
sunlight17, просто не стоит. Всегда (или почти всегда) можно обойтись без их использования.
1) К ним очень легкий доступ, отовсюду практически (в пределах одного файла, если нет инклада этого файла в другие) - следовательно легко записать туда что-то не то.
2) Если и писать глобальные переменные - то имя должно быть уникально, так, чтобы не перепутали с глобальной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int i;
 
int main()
{
    std::cout<<i<<'\n';
    int i=10;//Глобальная переменная перекрыта
    std::cout<<i<<'\n';
    std::cout<<::i<<'\n';//Печатаем глобальную переменную
    return 0;
}
Согласен на все 1000!
Yandex
Объявления
11.01.2011, 19:47     Программа не выполняется как надо.
Ответ Создать тему
Опции темы

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