С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22

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

17.08.2014, 17:33. Показов 2312. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В конце основной части кода программы нужно проверить условие, если условие верно - нужно проделать ещё один цикл всего кода, если не верно - выдать ответ. Кто подскажет как это реализовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2014, 17:33
Ответы с готовыми решениями:

Напишите универсальное начало программы, которое вызывает файл input.txt и выводит в файл output.txt
Проверим вашу сообразительность господа) Напишите универсальное начала проги которое вызывает файл input.txt и вводить в файл output.txt....

Начало записи в конце файла
Всем привет. Необходимо сделать так, чтобы запись начиналась в конце файла, при этом не должно быть указано количество строк. ...

Перенести в начало массива все четные элементы, а нечетные оставить в конце
Дан одномерный массив, состоящий из N элементов. Перенести в начло массива все четные элементы, а в конец массива-все нечетные.

13
41 / 37 / 15
Регистрация: 22.03.2013
Сообщений: 293
17.08.2014, 17:38
В цикл основную часть кода.
C++
1
2
do{что-то
}while(i<10)
Или goto.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.08.2014, 17:50
Цитата Сообщение от 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;
}
0
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 17:52  [ТС]
когда ставлю метку от goto в начало кода, он не выполняется с того места где она стоит
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.08.2014, 18:10
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 в начало кода, он не выполняется с того места где она стоит
Может уже код покажете? Или так и будем на кофейной гуще гадать?
0
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 18:13  [ТС]
а даа) вот:
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;
}
0
40 / 40 / 17
Регистрация: 04.02.2014
Сообщений: 144
17.08.2014, 18:16
пара вариантов:

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);
соответственно в условиях можно поставить свой вариант проверки
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.08.2014, 18:24
Со своим кодом опять у меня чутка недоделка случилась. Вот так корректно работает:
Кликните здесь для просмотра всего текста

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 никогда не входит?
0
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 18:28  [ТС]
так вот я и думаю что оно как видит метку останавливается и стоит
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.08.2014, 18:32
Цитата Сообщение от dfg Посмотреть сообщение
так вот я и думаю что оно как видит метку останавливается и стоит
В консоли просто ничего не происходит? На бесконечный цикл похоже.

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

Добавлено через 5 минут
что ж это такое, уже и while и for и if пробовал никак не выходит, пол дня потратил...
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.08.2014, 18:46
Цитата Сообщение от dfg Посмотреть сообщение
просто мигает курсор и всё, но бесконечный цикл быть не может, я поставил ограничение
И всё-таки, выложи скриншот того, что происходит у тебя в консоли. Интересно, что ты успеваешь ввести и на каком этапе происходит "залипание".
0
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 20:20  [ТС]
блин.. и точно зацикливание.. а я же вроде поставил ограничение до 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 минуты
что-то я начал сомневаться... программа которую я делаю: решение СНАУ методом Ньютона. Уравнения не высше второго порядка, сначала формирую матрицу Якоби, а потом её решаю методом Гауса, правильно?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
17.08.2014, 20:46
Цитата Сообщение от dfg Посмотреть сообщение
программа которую я делаю: решение СНАУ методом Ньютона. Уравнения не высше второго порядка, сначала формирую матрицу Якоби, а потом её решаю методом Гауса, правильно?
Я хз правильно или нет. Надо тех, кто шарит в математике, спрашивать. Я в этой теме пока не силён. Всю жизнь гуманитарием был, вот только сейчас что-то в другую степь потянуло.
По симптоматике похоже, что прога в бесконечный цикл уходит. Плюс ещё стоит проверять буфер на правильность ввода (на случай, если пользователь, скажем, вместо char введёт double, или вместо int введёт строку) и на оставшиеся в потоке символы \n - тоже бывает голову эта тема делает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2014, 20:46
Помогаю со студенческими работами здесь

Toolbar лого которое возвращает на главное активити
Здравствуйте, я использую Toolbar с помощью AppCompat v7:21 , и мне нужно сделать что то наподобие этого (рис с Gmail) чтобы по клике на...

Когда в конце строки нажимаешь стрелку вниз, то курсор перескакивает в начало текста
Почему при печатании текста в Паскаль абц,когда к конце строки нажимаешь стрелку вниз, то курсор перескакивает в начало текста?

Расположить все положительные элементы в начало, а отрицательные - в конце, не нарушая порядок следования
#include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; #define SIZE 5 void perestanovka(const int,int); void main(){ int...

GetSysColor: как вывести значение, которое она возвращает
Привет всем! Проблема вот в чем: Функция GetSysColor возвращает значение цвета элементов Windows: окна, фона, тейбла... и тд Ну так...

Написать функцию, которая возвращает 1, если строка str1 расположена в конце строки str2
Написать и протестировать функцию STREND(str1, str2), которая возвращает 1, если строка str1 расположена в конце строки str2, и 0 - в...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru