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

Как повторить программу - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.63
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 00:02     Как повторить программу #1
Как сделать чтоб если я с клавиатуры в консоли введу "y" программа повторилась а если "n" то завершилась?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
23.06.2011, 13:21     Как повторить программу
  #21

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
Я не забуду.
Спс. Поржал.
Большую программу не просто невозможно запомнить, этого не нужно!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
23.06.2011, 13:43     Как повторить программу #22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Спс. Поржал.
ОМГ, еще один. Все ? Поржал ? Молодец.

Добавлено через 13 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Большую программу не просто невозможно запомнить, этого не нужно!
И позволь я сам буду решать что мне нужно запоминать, а что нет, okda
Deviaphan
23.06.2011, 13:48
  #23

Не по теме:

Позволяю. Не мне с этим жить.)

asics
23.06.2011, 14:03
  #24

Не по теме:

Благодарствую.

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2011, 14:22     Как повторить программу #25

Не по теме:

Цитата Сообщение от lqazxsazl Посмотреть сообщение
Попробовал вот так но программа закрывается в любом случае.
Может память в компе битая? У меня работает...



C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void){
    char ch;
 
    do {
        printf("Do some job...\n");
        printf("continue? (y/n): ");
    } while ( scanf("%c%*c", &ch) == 1 && ( ch == 'y' || ch == 'Y' ) );
 
    return 0;
}
Как повторить программу

Цитата Сообщение от accept Посмотреть сообщение
эта штука на два перевода строки реагирует, чего не должно быть
%с считывает любой символ
эта штука считывает введённую букву и пропускает символ '\n', следующий за ней в потоке, иначе только один раз сработало бы.

 Комментарий модератора 
asics, Deviaphan, обстановку не нагнетаем...
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 16:32  [ТС]     Как повторить программу #26
Уф уф уф короче та же хрень при любом раскладе закрывается. Вот код на котором ставлю эксперименты кто нибудь попробуйте заработает у вас или нет отпишитесь если да.
Программа решает квадратное уравнение надо ввести 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
#include <iostream> 
#include <windows.h> 
#include <math.h> 
#include <stdio.h>
using namespace std; 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
          char ch;
do {
   cout << "Введите a, b, c" << endl;
    int a, b, b2, c, d, x1, x2, y;
    cin >> a;
    cin >> b;
    cin >> c;
    y = 2;
    b2 = pow(b,y);
    d = b2-(4*a*c); 
    cout << "d=" << d << endl;
    x1 = (-(b)+(sqrt(d)))/(2*a); 
    x2 = (-(b)-(sqrt(d)))/(2*a); 
           if (d>0) 
    cout << "d>0 Два корня." << endl;
        else
    cout << "d<0 Нет решений" << endl;
    cout << "Ответ:" << endl;
    cout << "x1=" << x1 << endl;
    cout << "x2=" << x2 << endl;
    printf("Do some job...\n");
                printf("continue? (y/n): ");
        } while ( scanf("%c%*c", &ch) == 1 && ( ch == 'y' || ch == 'Y' ) );
         return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2011, 18:50     Как повторить программу #27
вот так переспрашивает
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
#include <iostream> 
#include <windows.h> 
#include <math.h> 
#include <stdio.h>
using namespace std; 
int main(void){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char ch;
    do {
        cout << "Введите a, b, c" << endl;
        int a, b, b2, c, d, x1, x2, y;
        cin >> a;
        cin >> b;
        cin >> c;
        y = 2;
        b2 = pow(b,y);
        d = b2-(4*a*c); 
        cout << "d=" << d << endl;
        x1 = (-(b)+(sqrt(d)))/(2*a); 
        x2 = (-(b)-(sqrt(d)))/(2*a); 
        if (d>0)
            cout << "d>0 Два корня." << endl;
        else
            cout << "d<0 Нет решений" << endl;
        cout << "Ответ:" << endl;
        cout << "x1=" << x1 << endl;
        cout << "x2=" << x2 << endl;
        cout << "continue? (y/n): ";
        cin.ignore(1024, '\n');
        cin >> ch;
    } while ( ch == 'y' || ch == 'Y'  );
    
    return 0;
}
Но программа по сути всё равно не правильно написана - при отрицательном дискриминанте выведет или случайные числа, или результаты предыдущих вычислений, если они были. Да и с приведением int к double и обратно тоже смело... А это ничего, что дробные части результатов будут отбрасываться? И кстати, при нулевом дискриминанте уравнение имеет одно решение - этот случай вообще никак не предусмотрен...
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 19:17  [ТС]     Как повторить программу #28
Ну по поводу что она не до конца правильная я не великий программист я только учусь , а про дискриминант равен 0 я хотел учесть но пока не придумал как. Только учу c++ это так для закрепления ввода вывода итд......
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2011, 19:24     Как повторить программу #29
Строго говоря, решений всегда 2. Просто при нулевом дискриминанте одинаковые, а при отрицательном комплексно-сопряжённые. Но автор задания может и не оценить
Учесть так же как и для 2 корней: сравнивать с нулём. Будет цепочка if {...} else if {...} else {...} Только вывод корней надо внутрь условий внести.
Ну и действительно непонятно, почему переменные для вещественных чисел объявлены как int.
lqazxsazl
2 / 2 / 0
Регистрация: 22.06.2011
Сообщений: 42
23.06.2011, 19:30  [ТС]     Как повторить программу #30
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну и действительно непонятно, почему переменные для вещественных чисел объявлены как int.
Ну потому что я учу с++ 3 день и книги по с++ помогают не очень путаю еще...........
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.06.2011, 19:32     Как повторить программу #31
Мы, одинокие стареющие мужчины, делаем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h> 
#include <conio.h> 
int main () {
 char per= 'y';;
 while (per== 'y'|| per== 'Y') {
  printf ("prodolzhit?\n");
  do {
   per= getch ();
  }
  while (per!= 'y'&&per!= 'Y'&&per!= 'N'&&per!= 'n');
 }
 return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2011, 22:38     Как повторить программу #32
Цитата Сообщение от lqazxsazl Посмотреть сообщение
путаю еще...
ну тогда постарайтесь запомнить:
char (character) - символьный тип данных, собственно для хранения символов в основном и используется.
int (integer) - целочисленный тип данных. Подходит для хранения индекса в массиве, календарного числа, месяца или года, количества учащихся в классе (был, помню, старый мультик, там у ученика в задаче 1 1/2 землекопа получилось), etc...
float (floating point) - вещественный тип "обычной" точности. Служит для хранения десятичных дробей. Примечателен тем, что совершенно непредсказуемо порой округляет хранимые значения. Использовать можно разве, что при серьёзной необходимости экономить память, пусть даже в ущерб точности.
double (double precision floating point) - вещественный тип "двойной" точности. Тот самый тип данных, который в большинстве случаев нужно использовать для хранения вещественных чисел.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2011, 02:09     Как повторить программу #33
Цитата Сообщение от easybudda
эта штука считывает введённую букву и пропускает символ '\n
эта штука реагирует на два пробела, как на ввод буквы, потому что спецификатор %c отличается от %s
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
24.06.2011, 02:34     Как повторить программу #34
Цитата Сообщение от accept Посмотреть сообщение
while (1) - стиль новичков
а что
C
1
for(;;)
тру?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2011, 03:12     Как повторить программу #35
это точно такие же break
одно дело, когда ты ставишь бесконечный цикл, когда без этого не обойтись, а другое - когда ты ставишь бесконечные циклы, расчитывая на break'и, потому что так проще по логике, и типа "не надо продумывать качественное условие выхода"

нужен один вход и один выход, тогда любые внутренние изменения цикла не затрагивают его ход
чего не скажешь про break'и, которые чуть что, надо сразу переписывать, или вообще переставлять местами, причём все
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.06.2011, 06:08     Как повторить программу #36
Цитата Сообщение от accept Посмотреть сообщение
которые чуть что, надо сразу переписывать, или вообще переставлять местами, причём все
о_0 С какого перепугу?
Разумеется, гораздо удобнее напихать в цикле кучу ифов, проверяющих на каждой итерации цикла необходимость выполнения кода, находящегося после изменения флага завершения. Ну и что, что цикл потенциально бесконечный и лишний (даже один) иф приравнивается к бесконечной потери времени... Кому какое дело, ведь break так внезапно код прерывает, что даже деструкторы от удивления не вызываются, глобальное потепление начинается и пингвины подняться не могут...
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.06.2011, 10:08     Как повторить программу #37
break - это jmp из выхода за условие цикла кто-то думает что когда цикл прервётся ниже его код выпониться это особенно новички так break на ASM кидает за цикл метку. Два цикла ни чем друг от друга не отличаются.

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
    while(1) {
            
        printf("input word: ");
        char buff[32];
        scanf("%s", buff);
        if(! stricmp(buff, "exit"))
            break;
 
        printf("\tprint: %s\n", buff);
 
    }
 
    // здесь goto
 
    while(1) {
 
                      printf("input word: ");
        char buff[32];
        scanf("%s", buff);
        if(! stricmp(buff, "exit"))
            goto  jmp;
            
        printf("\tprint: %s\n", buff);
 
    }
jmp:   ;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.06.2011, 14:02     Как повторить программу #38
Цитата Сообщение от accept Посмотреть сообщение
эта штука реагирует на два пробела, как на ввод буквы
Ну хорошо. Конструкция
C
1
scanf("%c%*c", &ch);
читает из потока ввода два символа (вернее пытается прочитать). Первый прочитанный присваивает переданной переменной, а второй просто отбрасывает. В качестве учебного примера (учитывая уровень ТС) вполне достаточно. Но. Если мы решим почувствовать себя кулхацкерами, или кем-то вроде, и захотим взломать этот код, то начинать, конечно, нужно с добавления кучи пробелов после буквы 'y'...


xAtom, я думаю, основная идея в том, чтобы внутри тела цикла небыло заморочек по поводу им (циклом) управления, кроме, разумеется, случаев аварийного завершения. Кстати, в принципе согласен. Тело цикла - одна история, а сколько раз и при каких условиях это тело должно отработать - совсем другая...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.06.2011, 05:38     Как повторить программу #39
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
scanf("\t%c%*c", &ch);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2011, 09:58     Как повторить программу
Еще ссылки по теме:

C++ повторить введенные символы, за исключением десятичных символов
Повторить исполнение кода C++
Функция, в которой повторить алгоритм любой сортировки n раз C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.06.2011, 09:58     Как повторить программу #40
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void){
    char ch;
    
    while ( scanf("\t%c%*c", &ch) == 1 )
        printf("%#x\n", (unsigned)ch);
    
    return 0;
}
тот же
Как повторить программу
только в профиль...
Yandex
Объявления
25.06.2011, 09:58     Как повторить программу
Ответ Создать тему
Опции темы

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