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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Евклид
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 10
#1

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

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

Эта задача не работает полностью.Это программа с использованием меню. Зацикливается,когда переходит к 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ребят, можете помочь исправить ошибку, долго с ней мучался. (C++):

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

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

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

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

Можете помочь дописать программу, неправильно работает. - C++
Вариант 8 Даны целые массивы А, B и значения R и F. Каждый массив пpеобpазовать по пpавилу: компоненты с четными номеpами,...

Помочь исправить - C++
Здравствуйте, в с++ я новичок, программирую 2 день, дошел до одномерных массивов, помогите разобраться в чем ошибка. Задача: В одномерном...

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

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


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

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

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

Не по теме:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Некоторые так делают - создают программулечку-решение какой нибудь матрицы. И продают её по дешовке студентам. И вот что бы другие студенты покупали у него опять эту же самую матрицу (а не ковыряли уже проданный исходник) - он его запутывает с помощью всяких goto, сокрытием одних имен другими (например две функции main() в разных областях видимости) и тд. Получается, проще купить, или с нуля написать, чем разобраться в этой каше.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
03.11.2011, 16:04 #15
Кто-нибудь может ответить, что будет, если сработает
C++
1
goto m1;
в программе ТС? Ведь там будет переопределение уже созданных объектов.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2011, 16:04
Привет! Вот еще темы с ответами:

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

прошу помочь найти ошибку - C++
задача должна заключатЬся в следующем: вводится предположим число 5, программа обрабатывает и выдает на строке 5 звездочек. #include...

Нахождение суммы большего и меньшего из 3 чисел (помочь найти ошибку) - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; int MAX(int,int); int MIN(int,int); int a,b,c,d,e,f void main() {cout&gt;&gt;&quot;Vvedite tri...

Программа на контестере проходит только 1 тест из 9. Можете объяснить, в чем моя ошибка и как ее исправить! - C++
Объясните, в чем моя ошибка в решении задачи. Условие: 103. Подсчет войск ограничение времени на тест: 0.5 сек. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.11.2011, 16:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru