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

Ребят, можете помочь исправить ошибку, долго с ней мучался. - C++

Восстановить пароль Регистрация
 
 
Евклид
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 10
02.11.2011, 22:38     Ребят, можете помочь исправить ошибку, долго с ней мучался. #1
Эта задача не работает полностью.Это программа с использованием меню. Зацикливается,когда переходит к case3. Помогите пожалуйста.
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 #include<iostream.h>
 #include<conio.h>
 #include<math.h>
 #include<string.h>
 int main()
 {
 m1:
 {
 clrscr();
 int f1,f2=0;
 char s[15],passw[]="123456";
 cout<<"vvedite parol"<<endl;
 cin>>s;
 if (strstr(s,passw))f2=1;
 if(f2==1)
 cout<<"Parol verniy"<<endl;
 if(f2!=1)
 {
 cout<<"Parol neverniy"<<endl;
 getch();
 goto m1;
 }
 }
 int perekl;
 int j;
 link:
 cout<<"              MENU             "<<endl;
 cout<<"1)Arifmetisheskie operazii"<<endl<<"2)Odnomerniy massiv"<<endl<<"3)Dvumerniy massiv"<<endl<<"4)Exit"<<endl;
 cout<<"Vibirite komandu"<<endl;
 cin>>perekl;
 switch(perekl)
main()
{
case1:
int a,b;
float y,c;
cout<<"vvedite chislo a,b,c"<<endl;
cin>> a>>b>>c;
if (c>0) y=8*a-b- 31/c;
if(c<=0) y= 3*a+b/7-c;
cout<< "y= "<<y;
getch ();
goto link;
case2:
#define HB 5 
int a[HB];  
int min;   
int i;     
printf("\nПоиск минимального элемента массива\n");
    printf("Введите в одной строке ");
    printf("%i целых чисел, и нажмите <Enter>\n", HB);
    printf("-> ");
    for (i = 0; i < HB; i++)
 scanf("%i",&a[i]);
max = 0; 
 for (i = 1; i < HB; i++)
        if (a[i] > a[max])  max  =  i;
 
    printf("Максимальный элемент массива: a[%i]=%i ", max+1, a[max]);
    printf("\nДля завершения работы программы нажмите <Enter>");
    getch();
goto link;
case3:
int i,j,mas[10][10],n,m,sum[10];
clrscr();
cout<<"Vvedite kol-vo strok massiva:"<<endl;
cin>>n;
cout<<"Vvedite kol-vo stolbchov massiva:"<<endl;
cin>>m;
cout<<"Vvedite elementi massiva:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cin>>mas[i][j];
}
cout<<"Vvedenniy massiv:"<<endl;
for(i=0;i<n;i++)
{
cout<<endl;
for(j=0;j<n;j++)
cout<<mas[i][j]<<" ";
}
cout<<endl;
cout<<"Summa elementov po stolbcam:"<<endl;
for(j=0;j<n;j++)
sum[j]=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
sum[j]=sum[j]+mas[i][j];
for(j=0;j<n;j++)
cout<<sum[j]<<" "<<endl;
getch();
goto link;
case4:
goto exit;
 default:
 goto link;
 }
 exit:
 cout<<"the end";
 getch();
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 22:38     Ребят, можете помочь исправить ошибку, долго с ней мучался.
Посмотрите здесь:

C++ прошу помочь найти ошибку
C++ Помочь исправить
C++ завтра лабу сдавать.. сделать не успеваю.. Если время есть можете помочь?
C++ Ребят, подскажите как исправить ошибку...
Можете помочь дописать программу, неправильно работает. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
02.11.2011, 22:50     Ребят, можете помочь исправить ошибку, долго с ней мучался. #2
Евклид, это вы специально так все поперезапутывали?
А то... может быть лучше сначала сделать код попростому-читабельному, а уже потом готовый рабочий код начать путать?

В спаггети то не больно хочется разбираться.
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
03.11.2011, 00:13     Ребят, можете помочь исправить ошибку, долго с ней мучался. #3
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<math.h>
#include<string.h>
#define HB 5 
using namespace std;
int main()
{
m1:
    clrscr();
    int a[HB];  
    int max = 0; 
    int f1,f2=0;
    char s[15],passw[]="123456";
    cout<<"vvedite parol"<<endl;
    cin>>s;
    if (strstr(s,passw))f2=1;
    if(f2==1)
        cout<<"Parol verniy"<<endl;
    if(f2!=1)
    {
        cout<<"Parol neverniy"<<endl;
        getch();
        goto m1;
    }
    int perekl;
    int j;
link:
    cout<<"              MENU             "<<endl;
    cout<<"1)Arifmetisheskie operazii"<<endl<<"2)Odnomerniy massiv"<<endl<<"3)Dvumerniy massiv"<<endl<<"4)Exit"<<endl;
    cout<<"Vibirite komandu"<<endl;
    cin>>perekl;
    switch(perekl)
    {
    case 1:
        int a1,a2;
        float y,c;
        cout<<"vvedite chislo a,b,c"<<endl;
        cin>> a1>>a2>>c;
        if (c>0) y=8*a1-a2- 31/c;
        if(c<=0) y= 3*a1+a2/7-c;
        cout<< "y= "<<y;
        getch();
        goto link;
    case 2:
        int i;     
        printf("\nПоиск минимального элемента массива\n");
        printf("Введите в одной строке ");
        printf("%i целых чисел, и нажмите <Enter>\n", HB);
        printf("-> ");
        for (i = 0; i < HB; i++)
            scanf("%i",&a[i]);
        max = 0; 
        for (i = 0; i < HB; i++)
            if (a[i] > a[max])  max  =  i;
 
        printf("Максимальный элемент массива: a[%i]=%i ", max+1, a[max]);
        printf("\nДля завершения работы программы нажмите <Enter>");
        getch();
        goto link;
    case 3:
        clrscr();
        int j,mas[10][10],n,m,sum[10];
        cout<<"Vvedite kol-vo strok massiva:"<<endl;
        cin>>n;
        cout<<"Vvedite kol-vo stolbchov massiva:"<<endl;
        cin>>m;
        cout<<"Vvedite elementi massiva:"<<endl;
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
            {
                cin>>mas[i][j];
            }
            cout<<"Vvedenniy massiv:"<<endl;
            for(i=0;i<n;i++)
            {
                cout<<endl;
                for(j=0;j<n;j++)
                    cout<<mas[i][j]<<" ";
            }
            cout<<endl;
            cout<<"Summa elementov po stolbcam:"<<endl;
            for(j=0;j<n;j++)
                sum[j]=0;
            for(i=0;i<n;i++)
                for(j=0;j<m;j++)
                    sum[j]=sum[j]+mas[i][j];
            for(j=0;j<n;j++)
                cout<<sum[j]<<" "<<endl;
            getch();
            goto link;
    case 4:
        goto exit;
    default:
        goto link;
    }
exit:
    cout<<"the end";
    getch();
}
Ошибок море! Кто вас учил программировать? У вас проблемы с грамматикой, из-за которых ваш код и неисправен... Вроде что-то подправил

Добавлено через 55 секунд
и вообще, у вас код на каком языке?
C++
1
cout<<"Parol verniy"<<endl;
C
1
printf("\nПоиск минимального элемента массива\n");
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
03.11.2011, 00:17     Ребят, можете помочь исправить ошибку, долго с ней мучался. #4
Хм...один маленький вопрос.
По какой книжке вы учитесь? Те книги которые я видел, то в главах которых расказывается про оператор "goto", сразу отмечается тот момент, что НЕ рекомендуют его использовать и то что он устарел.
Это просто совет.
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
03.11.2011, 00:24     Ребят, можете помочь исправить ошибку, долго с ней мучался. #5
здесь видимо отсутствовала книга так писать switch case...
Bers
Заблокирован
03.11.2011, 00:27     Ребят, можете помочь исправить ошибку, долго с ней мучался. #6
Цитата Сообщение от hoot Посмотреть сообщение
и то что он устарел.
Видимо, плохие книжки вы читаете)
Ну или у вас с пониманием не все чудесно)


/зы так и знал, что щас кто нить до goto докалебёццо
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
03.11.2011, 00:33     Ребят, можете помочь исправить ошибку, долго с ней мучался. #7
C++
1
goto m1;
Это разве не приведет к тому, что будет переопределяться объекты
C++
1
2
3
4
int a[HB];  
int max = 0; 
int f1,f2=0;
char s[15],passw[]="123456";
?
Честно говоря, я не знаю, что в этом случае будет происходить. По идее ошибка(?), но уже runtime(?) error.
Этот оператор
C++
1
goto m1;
легко заменяется на цикл.
Так же и этот оператор
C++
1
goto link;
заменяется на цикл.
Это
C++
1
2
case 4:
                goto exit;
вообще не нужно.
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
03.11.2011, 00:42     Ребят, можете помочь исправить ошибку, долго с ней мучался. #8
Цитата Сообщение от Bers Посмотреть сообщение
Видимо, плохие книжки вы читаете)
Ну или у вас с пониманием не все чудесно)
Что-то изменилось?
У меня в книге написано что этот оператор пришел с "С" и его не рекомендуют использовать так как появляется спагетний код.

Чем моя книга плоха?

зы. Вы должны были знать что это Я))) Не зря у меня под ником пишется новичок)))
I2um1
03.11.2011, 00:49
  #9

Не по теме:

Чую с таким успехом сейчас разразится холивар касательно goto.

hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
03.11.2011, 00:50     Ребят, можете помочь исправить ошибку, долго с ней мучался. #10
Та нет, просто интересно.)
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
03.11.2011, 00:57     Ребят, можете помочь исправить ошибку, долго с ней мучался. #11
goto в C++ это уже скорее атавизм...
обычно goto и в чистом C избегали, разве что удобно было применять для отделения кода ошибок от функционального кода, но теперь в C++ эти занимается try, catch, throw...

И да, вместо использования goto в этом коде имхо лучше было бы вынести некоторые куски кода в функцию и вызывать просто нужные функции когда надо/при каких то условиях, а не метаться по программе вверх-вниз.
Bers
Заблокирован
03.11.2011, 01:05     Ребят, можете помочь исправить ошибку, долго с ней мучался. #12
Цитата Сообщение от hoot Посмотреть сообщение
Чем моя книга плоха?
goto не устарел, и не устареет никогда.

В умелых руках позволяет оптимизировать алгоритмы. И сокращать размеры исходного кода.
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
03.11.2011, 13:19     Ребят, можете помочь исправить ошибку, долго с ней мучался. #13
Цитата Сообщение от Bers Посмотреть сообщение
goto не устарел, и не устареет никогда.
Не факт. Все переменчиво в нашем мире!.

Цитата Сообщение от Bers Посмотреть сообщение
В умелых руках позволяет оптимизировать алгоритмы. И сокращать размеры исходного кода.
То что в умелых руках его можно применять очень изобретательно согласен.
НО! Зачем новичкам советовать его использовать, это будет убийство для них. Потому что:
1) еще не достаточно знаний.
2) недостаточно опыта
3) Очень неоднозначен для применения(некоторые говорят что стоит его выкинуть другие наоборот)

В связи с этим, имхо его если и применять то уже прогерамми которые уж точно обладают хорошими знаниями и кое-каким опытом.

Вы сами писали о вышенаписанном коде что не код а итальянская паста.)
Bers
Заблокирован
03.11.2011, 15:57     Ребят, можете помочь исправить ошибку, долго с ней мучался. #14
Цитата Сообщение от hoot Посмотреть сообщение
Не факт. Все переменчиво в нашем мире!.
goto это ж безусловый переход на другую строчку кода.
На нем держится все и вся)
Или все эти ваши свитчи, вайлы, форы во что потом разворачивает компилятор?

Вам, как прикладному программисту на верхнем уровне он три раза не упал - это я согласен.

Но есть люди, которые разрабатывают супер-пупер-мега сложные и требовательные к ресурсам вещи, связанные с графическими расчетами, или там, разработки в области искусственного интеллекта - для них эффективность работы машины может перевесить "удобство поддержки и сопровождения". Спагетти при грамотном подходе может выполнятся на несколько порядков эффективнее.

А на низких уровнях, до сих пор ещё никто не придумал, как без него циклы организовать.

Цитата Сообщение от hoot Посмотреть сообщение
НО! Зачем новичкам советовать его использовать, это будет убийство для них.
А его новичкам никто и не советует. Но если вам, как новичку, не рекомендуют его использовать, то это не значит что goto плохой. И что от него нужно избавляться всеми правдами-не правдами, и разводить холивары по этому поводу.

Просто goto не выгодно использовать там, где не требуется выживать максимум эффективности из машины, в ущерб поддержке и сопровождению.

А в с++ он помимо всего прочего ходячий вызов инкапсуляции. Простую и понятную оо-модель можно до такой степени заморочить goto, что там и со 100 грамм уже не разберёшься)

Иногда, препроцессор, goto и многие другие такие приколы так же используют для того, что бы намеренно путать код. Что бы нем было как можно труднее разобраться.

Цитата Сообщение от hoot Посмотреть сообщение
Вы сами писали о вышенаписанном коде что не код а итальянская паста.)
Слишком уж вызывающе запутанный код. Создалось впечатление, что человек запутывал специально.

Некоторые так делают - создают программулечку-решение какой нибудь матрицы. И продают её по дешовке студентам. И вот что бы другие студенты покупали у него опять эту же самую матрицу (а не ковыряли уже проданный исходник) - он его запутывает с помощью всяких goto, сокрытием одних имен другими (например две функции main() в разных областях видимости) и тд. Получается, проще купить, или с нуля написать, чем разобраться в этой каше.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
03.11.2011, 16:04     Ребят, можете помочь исправить ошибку, долго с ней мучался. #15
Кто-нибудь может ответить, что будет, если сработает
C++
1
goto m1;
в программе ТС? Ведь там будет переопределение уже созданных объектов.
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
03.11.2011, 17:14     Ребят, можете помочь исправить ошибку, долго с ней мучался. #16
Bers,
по сути говорим одно и тоже но разными словами.
Что б не разводить демагогию, предлагаю завершить дискуссию.
А вот что касается меня как "Прикладного программиста верхнего уровня", не красиво на личности переходить. Все были такими прикладными прогеррами. И всегда хорошо когда человек имеет свое мнение, только нужно слышать опонента, а не слушать.
Плох тот кто закрыл свое сознание от нового!
100 грам, код, мир?)))
Bers
Заблокирован
03.11.2011, 17:33     Ребят, можете помочь исправить ошибку, долго с ней мучался. #17
Цитата Сообщение от hoot Посмотреть сообщение
А вот что касается меня как "Прикладного программиста верхнего уровня", не красиво на личности переходить.
Это не переход на личности, и это даже не показатель "профессионализма" программиста. Это просто предметная область в которой он работает.

Я тоже прикладной программист, и всякие там goto не использую. Зачем он мне нужен в ОО-архитектуре, когда и без него все шустро работает.

Использовал его несколько раз, но каждый раз это были ситуации, когда:
1. Хотелось из лени сэкономить на нескольких строчках кода.
2. Это было глубоко запрятано в кишках библиотеки, и кроме меня туда нехай вапще кому соваться.
3. Первый же рефакторинг позволил сделать кишки более красиво, а goto просто остался не у дел.

Я вообще считаю, что всякого рода оптимизации (не обязательно с goto) лучше оставить на совести компилятора, ну или на совести специального софта, который уже рабочий код сможет "оптимизировать" перед непосредственно компиляцией, с возможностью обратного преобразования.

А сам человек в ручную этим заниматься не должен, тем паче на высоком уровне.

Добавлено через 19 секунд
Цитата Сообщение от hoot Посмотреть сообщение
100 грам, код, мир?)))
ага
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
03.11.2011, 17:42     Ребят, можете помочь исправить ошибку, долго с ней мучался. #18
народ раз уж тема зашла про goto, у меня тут появился вопрос:
мне однажды лень было писать пару строк кода, а по ситуации нужно было чтобы один (из двух) конструкторов класса, при определенных обстоятельствах работал как другой, вызывать конструктор из конструктора напрямую запрещенно... задумал сделать goto на начало другого конструктора, но как выяснилось goto подвержен влиянию областей видимости.
так вот вопрос, как при помощи goto можно сделать переход на метку в другой области видимости?
по аналогии с неймспейсами? goto class_name::class_construc::link; ?
Bers
Заблокирован
03.11.2011, 17:55     Ребят, можете помочь исправить ошибку, долго с ней мучался. #19
Razzeeyy, Это вам у Сыроежки спросить надобно) Он у нас великий знаток с++

/зы Я б на вашем месте ещё раз пересмотрел б архитектуру, а не изобретал бы очередные пляски с бубнами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2011, 17:59     Ребят, можете помочь исправить ошибку, долго с ней мучался.
Еще ссылки по теме:

C++ Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку)
Программа на контестере проходит только 1 тест из 9. Можете объяснить, в чем моя ошибка и как ее исправить! C++

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

Или воспользуйтесь поиском по форуму:
LosAngeles
Заблокирован
03.11.2011, 17:59     Ребят, можете помочь исправить ошибку, долго с ней мучался. #20
Razzeeyy,
The
only use of an identifier label is as the target of a goto. The scope of a label is the function in which it
appears. Labels shall not be redeclared within a function. A label can be used in a goto statement before
its definition. Labels have their own name space and do not interfere with other identifiers.
The goto statement unconditionally transfers control to the statement labeled by the identifier. The identifier
shall be a label (6.1) located in the current function
.
Yandex
Объявления
03.11.2011, 17:59     Ребят, можете помочь исправить ошибку, долго с ней мучался.
Ответ Создать тему
Опции темы

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