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

В конце программы условие, которое возвращает в начало - C++

Восстановить пароль Регистрация
 
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 17:33     В конце программы условие, которое возвращает в начало #1
В конце основной части кода программы нужно проверить условие, если условие верно - нужно проделать ещё один цикл всего кода, если не верно - выдать ответ. Кто подскажет как это реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 17:33     В конце программы условие, которое возвращает в начало
Посмотрите здесь:

C++ Функция, которая возвращает слово в строке, которое короче всех.
Как сделать так, чтобы условие начало работать?Подскажите,пожалуйста C++
C++ Функция возвращает строку (или указатель на начало строки)
C++ Записать условие, которое является истинным, когда только одно из чисел А и В четное
C++ Как правильно создать условие, в зависимости от слова, которое вводишь в консоль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Корд
7 / 7 / 0
Регистрация: 22.03.2013
Сообщений: 185
17.08.2014, 17:38     В конце программы условие, которое возвращает в начало #2
В цикл основную часть кода.
C++
1
2
do{что-то
}while(i<10)
Или goto.
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
17.08.2014, 17:50     В конце программы условие, которое возвращает в начало #3
Цитата Сообщение от dfg Посмотреть сообщение
В конце основной части кода программы нужно проверить условие, если условие верно - нужно проделать ещё один цикл всего кода, если не верно - выдать ответ. Кто подскажет как это реализовать?
  • c помощью цикла while или с помощью цикла for
  • создать функцию, выполняющую твою задачу
  • в лоб - с помощью оператора выбора if else и goto

Пример с циклом for, обёрнутым в функцию:
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
// Напишите программу, которая читает размер стороны квадрата
// и затем печатает звездочками и пробелами пустой квадрат
// заданного размера. Ваша программа должна работать для любых
// размеров, заданных в интервале 1-20.
 
#include <iostream>
void forfunc(int, char);
int main()
{
    int squareSize = 0;
    std::cout << "Enter square size: ";
    std::cin >> squareSize;
    forfunc(squareSize, '*');
    for (int i=2; i<squareSize; ++i)
        forfunc(squareSize, ' ');
    forfunc(squareSize, '*');
    return 0;
}
void forfunc(int limit, char ch)
{
    std::cout << "*";
    for (int i=2; i<limit; ++i)
        std::cout << ch;
    std::cout << "*" << std::endl;
}
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 17:52  [ТС]     В конце программы условие, которое возвращает в начало #4
когда ставлю метку от goto в начало кода, он не выполняется с того места где она стоит
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
17.08.2014, 18:10     В конце программы условие, которое возвращает в начало #5
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
// Напишите программу, которая читает размер стороны квадрата
// и затем печатает звездочками и пробелами пустой квадрат
// заданного размера. Ваша программа должна работать для любых
// размеров, заданных в интервале 1-20.
 
#include <iostream>
void forfunc(int, char);
int main()
{
    int squareSize = 0;
    oneMoreTime:
    std::cout << "Enter square size: ";
    std::cin >> squareSize;
 
    if (std::cin)    // если ввод успешен
    {
        forfunc(squareSize, '*');
        for (int i=2; i<squareSize; ++i)
            forfunc(squareSize, ' ');
        forfunc(squareSize, '*');
        return 0;        
    }
 
    else
    {
       std::cout << "Input Error! "
       "You should enter integer value. "
       "Please try one more time." << std::endl;
       goto oneMoreTime;
    }
        
}
void forfunc(int limit, char ch)
{
    std::cout << "*";
    for (int i=2; i<limit; ++i)
        std::cout << ch;
    std::cout << "*" << std::endl;
}
Добавлено через 9 минут
Цитата Сообщение от dfg Посмотреть сообщение
когда ставлю метку от goto в начало кода, он не выполняется с того места где она стоит
Может уже код покажете? Или так и будем на кофейной гуще гадать?
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 18:13  [ТС]     В конце программы условие, которое возвращает в начало #6
а даа) вот:
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <iostream>
#include <cstring>
#include <cctype>
#include <conio.h>
#include <cmath>
 
using std::cout;
using std::cin;
using std::endl;
 
using namespace std;
 
struct member  //структура членов 
{
    char *name; //имя 
    double k; //коэффицент
    int st;//степень
};
 
void Input(member *s) // функция заполнения структуры
    {
        cout << "Введите имя переменной:";
        s -> name = new char;
        cin.get();
        cin.getline(s->name,2);
        cout << "Введите коэффициент:";
        cin >> s-> k;
        cout << "Введите степень:";
        cin >> s-> st;
        cout << endl;
    }
 
int main()
{
    setlocale(LC_ALL , "Russian");
    double e;
    cout << "Задайте относительную погрешность вычисления аргументов:" << endl;
    cin >> e;
    int N, M;
    cout << "Введите количество неизвестных:" << endl;
    cin >> M;
    cout << "Введите количество уравнений:" << endl;
    cin >> N;
 
    member **p = new member*[N];
    for(int i(0); i < N; i++)
        p[i] = new member[M];
    
    for(int i(0); i < N; i++)
    {
        for(int j(0); j < M; j++)
        {
            Input(&p[i][j]);
        }
        cout << endl;
    }
    
    double *t = new double[N];
    for(int i(0); i<N; i++)
    {
        cout << "Ввведите свободный член уравнения №" << i+1 << ':' << endl;
        cin >> t[i];
    }
 
    double *f = new double[M];
    for(int i(0); i<M; i++)
    {
        cout << "Введите значение начального приближения " << p[0][i].name << ':' << endl;
        cin >> f[i];
    }
    
    //
        point:
 
 
    //
 
    double **jak = new double*[N]; // формирование матрицы Якоби
    for(int i(0); i < N; i++)
        jak[i] = new double[M];
 
    for(int i(0); i < N; i++)
    {
        for(int j(0); j < M; j++)
        {
                double c=0;
                for(int n(0); n < M; n++)
                        c=c+(p[i][n].k)*pow((float)f[n],(p[i][n].st));   
                double h=0;
                for(int n1(0); n1 < M; n1++)
                {
                    if (n1 == j)
                        h=h+(p[i][n1].k)*pow((float)(f[n1]+f[n1]*e),(p[i][n1].st));      
                    else
                        h=h+(p[i][n1].k)*pow((float)f[n1],(p[i][n1].st));
                }
            jak[i][j]=(h-c)/(f[j]*e);
        }
    }
 
    // Формирование расширенной матрицы системы линейных алгебраических уравнений:
 
    double **mass = new double*[N]; 
    for(int i(0); i < N; i++)
        mass[i] = new double[(M+1)];
 
    for(int i(0); i < N; i++)
    {
        for(int j(0); j < M; j++)
            mass[i][j]=jak[i][j];
    }
        for(int i(0); i < N; i++)
    {
            for(int j(M); j < M+1; j++)
            mass[i][j]=t[i];
    }
 
    // Решение системы линейных алгебраических уравнений методом Гауса:
    
    // Прямой ход:
    for(int i(0); i < N; i++) 
    {
        double a=mass[i][i];
        for(int j=i+1; j < N; j++)  
        {
            double b=mass[j][i];
            for(int k=i; k < M+1; k++) 
            mass[j][k]=mass[i][k]*b-mass[j][k]*a;   
        }
            
    }
 
    // Обратный ход:
    double *t1 = new double[M];
    for(int i=N-1; i>-1; i--)
    {
        double summ=0;
        for(int j=i+1; j<M+1; j++)
            summ=summ+mass[i][j]*t1[j];
        summ=mass[i][M]-summ;
        if(mass[i][i]==0)
            cout << "Нет решения" << endl;
        t1[i]=summ/mass[i][i];
    }
    //Проверка условия:
    int n;
 
    
        for(int i(0); i < N; i++)
        if (fabs(t1[i]/f[i])>e || n<20)
        {
            for(int j(0); j < N; j++)
                f[i]=t1[i];
            n=i++;
            goto point;
        }
        else
            for(int i(0); i<N; i++)
            {
                cout << p[0][i].name << '=' << t1[i] << endl;
                cout << "Количество итераций:" << n << endl;
            }
        
    for(int i(0); i < N; i++)
        delete [] p[i];
    delete [] p;
 
    for(int i(0); i < N; i++)
        delete [] p[i];
    delete [] p;
 
    for(int i(0); i < N; i++)
        delete [] p[i];
    delete [] p;
 
    _getch();
    return 0;
}
Donnerwetter
40 / 40 / 12
Регистрация: 04.02.2014
Сообщений: 144
17.08.2014, 18:16     В конце программы условие, которое возвращает в начало #7
пара вариантов:

C++
1
2
3
4
5
6
7
char c = 'y';
while (c == 'y' || c == 'Y')
{
    /*...код программы...*/
    cout << "Continue?(Y/N): ";
    cin >> c;
}
C++
1
2
3
4
5
6
7
do
{
    /*...код программы...*/
    cout << "0 - no, 1 - yes";
    cin >> choice;
} 
while (choice == 1);
соответственно в условиях можно поставить свой вариант проверки
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
17.08.2014, 18:24     В конце программы условие, которое возвращает в начало #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Напишите программу, которая читает размер стороны квадрата
// и затем печатает звездочками и пробелами пустой квадрат
// заданного размера. Ваша программа должна работать для любых
// размеров, заданных в интервале 1-20.
 
#include <iostream>
#include <limits>
void forfunc(int, char);
int main()
{
    int squareSize = 0;
    oneMoreTime:
    std::cout << "Enter square size: ";
    std::cin >> squareSize;
    if (std::cin)    // если ввод успешен
    {
        forfunc(squareSize, '*');
        for (int i=2; i<squareSize; ++i)
            forfunc(squareSize, ' ');
        forfunc(squareSize, '*');
        return 0;
    }
 
    else
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "\nInput Error! "
        "You should enter integer value. "
        "Please try one more time.\n" << std::endl;
        goto oneMoreTime;
    }
 
}
void forfunc(int limit, char ch)
{
    std::cout << "*";
    for (int i=2; i<limit; ++i)
        std::cout << ch;
    std::cout << "*" << std::endl;
}


Добавлено через 7 минут
Цитата Сообщение от dfg Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        for(int i(0); i < N; i++)
        if (fabs(t1[i]/f[i])>e || n<20)
        {
            for(int j(0); j < N; j++)
                f[i]=t1[i];
            n=i++;
            goto point;
        }
        else
            for(int i(0); i<N; i++)
            {
                cout << p[0][i].name << '=' << t1[i] << endl;
                cout << "Количество итераций:" << n << endl;
            }
Если не переходит по метке, то может просто в if никогда не входит?
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 18:28  [ТС]     В конце программы условие, которое возвращает в начало #9
так вот я и думаю что оно как видит метку останавливается и стоит
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
17.08.2014, 18:32     В конце программы условие, которое возвращает в начало #10
Цитата Сообщение от dfg Посмотреть сообщение
так вот я и думаю что оно как видит метку останавливается и стоит
В консоли просто ничего не происходит? На бесконечный цикл похоже.

Покажи, что в консоли у тебя творится после запуска программы.
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 18:45  [ТС]     В конце программы условие, которое возвращает в начало #11
просто мигает курсор и всё, но бесконечный цикл быть не может, я поставил ограничение

Добавлено через 5 минут
что ж это такое, уже и while и for и if пробовал никак не выходит, пол дня потратил...
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
17.08.2014, 18:46     В конце программы условие, которое возвращает в начало #12
Цитата Сообщение от dfg Посмотреть сообщение
просто мигает курсор и всё, но бесконечный цикл быть не может, я поставил ограничение
И всё-таки, выложи скриншот того, что происходит у тебя в консоли. Интересно, что ты успеваешь ввести и на каком этапе происходит "залипание".
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 20:20  [ТС]     В конце программы условие, которое возвращает в начало #13
блин.. и точно зацикливание.. а я же вроде поставил ограничение до 20-ти:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int n;
    n=n+1;
        for(int i(0); i < N; i++)
        if (fabs(t1[i]/f[i])<e || n>20)
        {
            cout << p[0][i].name << '=' << t1[i] << endl;
            cout << "Количество итераций:" << n << endl;
        }
        else
        {
            for(int j(0); j < M; j++)
                f[i]=t1[i];     
            goto point;
        }
Добавлено через 1 час 24 минуты
что-то я начал сомневаться... программа которую я делаю: решение СНАУ методом Ньютона. Уравнения не высше второго порядка, сначала формирую матрицу Якоби, а потом её решаю методом Гауса, правильно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 20:46     В конце программы условие, которое возвращает в начало
Еще ссылки по теме:

Функция возвращает не ссылку а само значение переменной на которое оно ссылается C++
Записать условие, которое является истинной, когда только одно из чисел А, В и С меньше 50 C++
C++ Return возвращает условие. Для чего?

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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,835
Записей в блоге: 17
17.08.2014, 20:46     В конце программы условие, которое возвращает в начало #14
Цитата Сообщение от dfg Посмотреть сообщение
программа которую я делаю: решение СНАУ методом Ньютона. Уравнения не высше второго порядка, сначала формирую матрицу Якоби, а потом её решаю методом Гауса, правильно?
Я хз правильно или нет. Надо тех, кто шарит в математике, спрашивать. Я в этой теме пока не силён. Всю жизнь гуманитарием был, вот только сейчас что-то в другую степь потянуло.
По симптоматике похоже, что прога в бесконечный цикл уходит. Плюс ещё стоит проверять буфер на правильность ввода (на случай, если пользователь, скажем, вместо char введёт double, или вместо int введёт строку) и на оставшиеся в потоке символы \n - тоже бывает голову эта тема делает.
Yandex
Объявления
17.08.2014, 20:46     В конце программы условие, которое возвращает в начало
Ответ Создать тему
Опции темы

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