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

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

02.11.2011, 22:38. Показов 1895. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Эта задача не работает полностью.Это программа с использованием меню. Зацикливается,когда переходит к 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();
 }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2011, 22:38
Ответы с готовыми решениями:

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

Помочь доделать программу с реккурентными соотношениями. (Исправить ошибку)
Здравствуйте, дорогие форумчане. Опять нуждаюсь в вас. Мне помочь доделать программу. Задание...

Просьба помочь исправить ошибку в форме обратной связи (HTML коде)
Может покажутся глупыми мои вопросы, но я самоучка всего лишь..... Мне нужно, чтобы информация...

Программа работает неправильно. Можете исправить ошибку? Справка о междугородном телефонном разговоре...
Справка о междугороднем телефонном разговоре содержит: номер телефона абонента (6 цифр), дату (год,...

22
Заблокирован
02.11.2011, 22:50 2
Евклид, это вы специально так все поперезапутывали?
А то... может быть лучше сначала сделать код попростому-читабельному, а уже потом готовый рабочий код начать путать?

В спаггети то не больно хочется разбираться.
0
Студент
148 / 148 / 64
Регистрация: 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");
0
101 / 22 / 7
Регистрация: 10.11.2010
Сообщений: 208
03.11.2011, 00:17 4
Хм...один маленький вопрос.
По какой книжке вы учитесь? Те книги которые я видел, то в главах которых расказывается про оператор "goto", сразу отмечается тот момент, что НЕ рекомендуют его использовать и то что он устарел.
Это просто совет.
1
Студент
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
03.11.2011, 00:24 5
здесь видимо отсутствовала книга так писать switch case...
0
Заблокирован
03.11.2011, 00:27 6
Цитата Сообщение от hoot Посмотреть сообщение
и то что он устарел.
Видимо, плохие книжки вы читаете)
Ну или у вас с пониманием не все чудесно)


/зы так и знал, что щас кто нить до goto докалебёццо
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
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;
вообще не нужно.
0
101 / 22 / 7
Регистрация: 10.11.2010
Сообщений: 208
03.11.2011, 00:42 8
Цитата Сообщение от Bers Посмотреть сообщение
Видимо, плохие книжки вы читаете)
Ну или у вас с пониманием не все чудесно)
Что-то изменилось?
У меня в книге написано что этот оператор пришел с "С" и его не рекомендуют использовать так как появляется спагетний код.

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

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

Не по теме:

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

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

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

В умелых руках позволяет оптимизировать алгоритмы. И сокращать размеры исходного кода.
0
101 / 22 / 7
Регистрация: 10.11.2010
Сообщений: 208
03.11.2011, 13:19 13
Цитата Сообщение от Bers Посмотреть сообщение
goto не устарел, и не устареет никогда.
Не факт. Все переменчиво в нашем мире!.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/зы Я б на вашем месте ещё раз пересмотрел б архитектуру, а не изобретал бы очередные пляски с бубнами.
0
Заблокирован
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
.
0
03.11.2011, 17:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2011, 17:59
Помогаю со студенческими работами здесь

Программисты, можете ли вы мне объяснить почему выдает эту ошибку час сижу не могу исправить
Задание: Разработать программу для генерации числового массива, его сортировки по возрастанию и по...

Разобраться с каптчей и исправить ошибку в ней
Добрый день. На просторах сети нашел код простенькой капчи: session_start(); ...

можете помочь ?
В массиве b=(b1,b2,...,bn) найти количество элементов , больших средноге арифметического значения...

Парни можете помочь !!!
Распечатать фамилии тех студентов группы, которые являются хорошистами и отличниками по итогам...

Делаем игру. Можете помочь?
Знаю, что ваще не по теме, но нормальных программистов, кроме как на специальных форумах, как этот,...

можете помочь понять этот код?
/// &lt;summary&gt; /// Сводка для Form1 /// &lt;/summary&gt; public ref class Form1 : public...


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

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