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

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

Войти
Регистрация
Восстановить пароль
 
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
#1

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

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

В конце основной части кода программы нужно проверить условие, если условие верно - нужно проделать ещё один цикл всего кода, если не верно - выдать ответ. Кто подскажет как это реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 17:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В конце программы условие, которое возвращает в начало (C++):

Функция возвращает строку (или указатель на начало строки) - C++
Подскажите пожалуйста. Застрял на тривиальной задачке. Никак не могу добится чтобы функция возвращала корректно строку.(правильнее наверное...

Функция, которая возвращает слово в строке, которое короче всех. - C++
Добрый день уважаемые программисты! Есть задание: Написать функцию, которая возвращает слово в строке, которое короче всех. Заголовок...

Функция возвращает не ссылку а само значение переменной на которое оно ссылается - C++
Скажите пожалуйста есть функция `int& my(){return a} которая возвращает ссылку если возвращаемое функцией значение присвоить переменной...

Написать функцию, которая возвращает слово в строке, которое короче всех - C++
Задание: Написать функцию, которая возвращает слово в строке, которое короче всех. Заголовок функции: char * mostlyWord (const char * s );...

Return возвращает условие. Для чего? - C++
Не перестаю удивляться языку с++... Встретил сегодня такую строчку в программе if(Fun::fff(argv)) { cout << "Correct " << argv;} ...

Записать условие, которое является истинным, когда: - C++ - C++
а) каждое из чисел X и Y нечетное; б) только одно из чисел X и Y меньше 20; в) хотя бы одно из чисел X и Y =0; г) каждое из чисел...

13
Корд
7 / 7 / 0
Регистрация: 22.03.2013
Сообщений: 192
17.08.2014, 17:38 #2
В цикл основную часть кода.
C++
1
2
do{что-то
}while(i<10)
Или goto.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
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;
}
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 17:52  [ТС] #4
когда ставлю метку от goto в начало кода, он не выполняется с того места где она стоит
0
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
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 в начало кода, он не выполняется с того места где она стоит
Может уже код покажете? Или так и будем на кофейной гуще гадать?
0
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;
}
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);
соответственно в условиях можно поставить свой вариант проверки
0
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
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 никогда не входит?
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
17.08.2014, 18:28  [ТС] #9
так вот я и думаю что оно как видит метку останавливается и стоит
0
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
17.08.2014, 18:32 #10
Цитата Сообщение от dfg Посмотреть сообщение
так вот я и думаю что оно как видит метку останавливается и стоит
В консоли просто ничего не происходит? На бесконечный цикл похоже.

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

Добавлено через 5 минут
что ж это такое, уже и while и for и if пробовал никак не выходит, пол дня потратил...
0
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
17.08.2014, 18:46 #12
Цитата Сообщение от dfg Посмотреть сообщение
просто мигает курсор и всё, но бесконечный цикл быть не может, я поставил ограничение
И всё-таки, выложи скриншот того, что происходит у тебя в консоли. Интересно, что ты успеваешь ввести и на каком этапе происходит "залипание".
0
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 минуты
что-то я начал сомневаться... программа которую я делаю: решение СНАУ методом Ньютона. Уравнения не высше второго порядка, сначала формирую матрицу Якоби, а потом её решаю методом Гауса, правильно?
0
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
17.08.2014, 20:46 #14
Цитата Сообщение от dfg Посмотреть сообщение
программа которую я делаю: решение СНАУ методом Ньютона. Уравнения не высше второго порядка, сначала формирую матрицу Якоби, а потом её решаю методом Гауса, правильно?
Я хз правильно или нет. Надо тех, кто шарит в математике, спрашивать. Я в этой теме пока не силён. Всю жизнь гуманитарием был, вот только сейчас что-то в другую степь потянуло.
По симптоматике похоже, что прога в бесконечный цикл уходит. Плюс ещё стоит проверять буфер на правильность ввода (на случай, если пользователь, скажем, вместо char введёт double, или вместо int введёт строку) и на оставшиеся в потоке символы \n - тоже бывает голову эта тема делает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2014, 20:46
Привет! Вот еще темы с ответами:

Записать условие, которое является истинным, когда: - C++ - C++
а) каждое из чисел X и Y нечетное; б) только одно из чисел X и Y меньше 20; в) хотя бы одно из чисел X и Y =0; г) каждое из чисел...

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

Динамические массивы, как отобразить в switch условие, если функция возвращает 0 - C++
Подскажите пожалуйста, если стоит условие, что при некорректно введенных данных, а именно элементов массива - вернуть NULL, как это...

Как сделать так, чтобы условие начало работать?Подскажите,пожалуйста - C++
Здравствуйте. Прошу,подскажите,пожалуйста, ступор уже. Вот прога: for(n=1;n&lt;=100;n++) do { P0=1/(exp(r,n));...


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

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

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