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

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

Войти
Регистрация
Восстановить пароль
 
 
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
#1

Задача из книги Страуструпа - C++

05.07.2012, 13:46. Просмотров 4120. Ответов 45
Метки нет (Все метки)

Меня настораживает несколько странная формулировка, я не понимаю зачем так предлагают решать задачу:
Напишите программу, содержащую цикл while, в котором считываются и выводятся на экран два целых числа . Для выхода из программы введите символ '|'. Я как вариант написал без проверки что вводится именно 2, но чую хотели от меня что то другое!
C++
1
2
3
4
5
6
7
8
9
#include "std_lib_facilities.h"
int main()
{
    int buf = 0;
    while (cin >> buf)
        cout << buf << "\n";
 
    return 0;
}
Разумеется можно поставить счётчик, который бы отследил чтоб я ввёл только 2 но это какой то мазахизм ей богу, видимо я что то упустил...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 17:39     Задача из книги Страуструпа #2
Цитата Сообщение от Bogdand Посмотреть сообщение
Для выхода из программы введите символ '|'
А где это в коде?
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
05.07.2012, 19:48  [ТС]     Задача из книги Страуструпа #3
Цитата Сообщение от alsav22 Посмотреть сообщение
А где это в коде?
C++
1
while (cin >> buf)
перестанет вводить числа если ввести не число, включая |
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 20:42     Задача из книги Страуструпа #4
Цитата Сообщение от Bogdand Посмотреть сообщение
перестанет вводить числа если ввести не число, включая |
Мне кажется, это не совсем по заданию.

Добавлено через 6 минут
Чтобы именно два числа в цикле вводилось, можно так написать:
C++
1
cin >> buff1 >> buff2;
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
05.07.2012, 22:02     Задача из книги Страуструпа #5
Bogdand, эээээ, неее! Вы тему не сечете!
Естественно, задание так не решается, но Страустрап решил, что для новичков будет неплохо поупражняться в использовании цикла while.

Пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int counter = 2, tempNum;
    while ( counter--){
        scanf("%d", &tempNum);
        printf("%d ", tempNum);
    }
    return EXIT_SUCCESS;
}
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2012, 03:46     Задача из книги Страуструпа #6
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Вы тему не сечете!
Извините, но, по-моему, это вы не сечёте.
Цитата Сообщение от Bogdand Посмотреть сообщение
цикл while, в котором считываются и выводятся на экран два целых числа
В вашем коде есть цикл while, который считывает и выводит одно число два раза. А нужен цикл в котором (т.е. в теле цикла) происходит считывание двух чисел и их вывод.
Цитата Сообщение от Bogdand Посмотреть сообщение
Для выхода из программы введите символ '|'
А это в вашем коде где?
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
06.07.2012, 05:49  [ТС]     Задача из книги Страуструпа #7
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Bogdand, эээээ, неее! Вы тему не сечете!
Естественно, задание так не решается, но Страустрап решил, что для новичков будет неплохо поупражняться в использовании цикла while.

Пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int counter = 2, tempNum;
    while ( counter--){
        scanf("%d", &tempNum);
        printf("%d ", tempNum);
    }
    return EXIT_SUCCESS;
}
он обычно даёт разумные задания, с вайлом можно придумать много всего где он действительно необходим
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
06.07.2012, 14:38     Задача из книги Страуструпа #8
Цитата Сообщение от alsav22 Посмотреть сообщение
В вашем коде есть цикл while, который считывает и выводит одно число два раза. А нужен цикл в котором (т.е. в теле цикла) происходит считывание двух чисел и их вывод.


Цитата Сообщение от alsav22 Посмотреть сообщение
А это в вашем коде где?
Не вопрос:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main()
{
    int counter = 2, tempNum;
    while ( counter--){
        scanf("%d", &tempNum);
        printf("%d ", tempNum);
    }
    while (_getch()!='|');
    return EXIT_SUCCESS;
}
Добавлено через 8 минут
Цитата Сообщение от Bogdand Посмотреть сообщение
с вайлом можно придумать много всего где он действительно необходим

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


C++
1
while (строка1++=*строка2++);
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
06.07.2012, 16:23     Задача из книги Страуструпа #9
Вроде, так правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
char buf,buf1;
int x;
while (x)
{
cin>>buf;
if (buf=='|') break;
cin>>buf1;
if (buf1=='|') break;
cout << buf << "\t"<< buf1<<endl;
}
return 0;
}
З.Ы. Сколько звёздочек это задание ?
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
06.07.2012, 17:51  [ТС]     Задача из книги Страуструпа #10
Цитата Сообщение от Aesonet Посмотреть сообщение
Вроде, так правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
char buf,buf1;
int x;
while (x)
{
cin>>buf;
if (buf=='|') break;
cin>>buf1;
if (buf1=='|') break;
cout << buf << "\t"<< buf1<<endl;
}
return 0;
}
З.Ы. Сколько звёздочек это задание ?
Да боже ж ты мой, делать бесконечный цикл ради тупого ввода двух чисел? я перестал понимать Страуструпа напрочь!
Веди
20 / 11 / 1
Регистрация: 04.07.2012
Сообщений: 225
06.07.2012, 18:01     Задача из книги Страуструпа #11
Цитата Сообщение от Bogdand Посмотреть сообщение
Да боже ж ты мой, делать бесконечный цикл ради тупого ввода двух чисел? я перестал понимать Страуструпа напрочь!
во первых: цикл не бесконечный раз есть условия выхода из него, во вторых: это пример, может понадобиться вводить 20 чисел, или 200..
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
06.07.2012, 18:24     Задача из книги Страуструпа #12
Bogdand, самое простое решение, вводить строку, и только потому переводить её в число. Например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool read_int(int* value)
{
    // 1) вводим строку
 
    // 2) если поток(cin) перешёл в состояние ошибки... 
    // ...либо введённая строка соответствует символу '|', возвращаем false
 
    // 3) пробуем перевести строку в число(например, с помощью stringstream)
    // 4) в случае ошибки выводим соответствующее сообщение и возращаемся к п.1
 
    // возращаем true
}
 
int main()
{
    int a, b;
    while(read_int(&a) && read_int(&b))
        // выводим значениея переменных
}
Цитата Сообщение от Aesonet Посмотреть сообщение
C++
1
2
int x;
while (x)
Переменная x у вас не инициализирована.
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
06.07.2012, 19:03  [ТС]     Задача из книги Страуструпа #13
Цитата Сообщение от Веди Посмотреть сообщение
во первых: цикл не бесконечный раз есть условия выхода из него, во вторых: это пример, может понадобиться вводить 20 чисел, или 200..
из бесконечных циклов всегда есть условие выхода иначе они бы были неактуальны ни в каком виде!
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
06.07.2012, 22:58     Задача из книги Страуструпа #14
Цитата Сообщение от rangerx Посмотреть сообщение
самое простое решение
Ну... а самым простым решением останется

C
1
2
3
int a,b;
scanf ("%d %d", &a,&b);
prinf("%d %d", a, b);
или для любителей С++ и больших цифр:

C++
1
2
3
std::string строкаПервая, строкаВторая;
std::cin>>строкаПервая >> строкаВторая;
std::cout<<строкаПервая << строкаВторая;
Вот только while здесь нет... не судьба... не катит решение на простоту.

Цитата Сообщение от rangerx Посмотреть сообщение
Переменная x у вас не инициализирована.
Прикол в том, что это не ошибка. Дальше варнинга не уйдет ну а вот в кастомера могут быть "чудеса"
ValeryS
Модератор
6513 / 4979 / 460
Регистрация: 14.02.2011
Сообщений: 16,488
06.07.2012, 23:04     Задача из книги Страуструпа #15
Цитата Сообщение от Bogdand Посмотреть сообщение
из бесконечных циклов всегда есть условие выхода иначе они бы были неактуальны ни в каком виде!
а как же микроконтроллеры???
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 05:46     Задача из книги Страуструпа #16
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Ну... а самым простым решением останется
C++
1
2
3
int a,b;
scanf ("%d %d", &a,&b);
printf("%d %d", a, b);
Если не число?

Цитата Сообщение от rangerx Посмотреть сообщение
Bogdand, самое простое решение, вводить строку, и только потому переводить её в число.
Согласен. Без этого здесь не обойтись.
iandi
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 20
07.07.2012, 09:04     Задача из книги Страуструпа #17
А нельзя ли сделать так?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
int main()
{
    int a, b;
    while(std::cin >> a >> b && (a != '|' && b != '|'))
    {
        std::cout << a << b;
    }
    return 0;
}
Компилятора под рукой нет, проверить не могу...
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 10:32     Задача из книги Страуструпа #18
Цитата Сообщение от iandi Посмотреть сообщение
А нельзя ли сделать так?
Цикл прервётся, если любую букву ввести, а не только '|'.
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
07.07.2012, 10:38  [ТС]     Задача из книги Страуструпа #19
Ну вообще страуструп, когда обьяснял ввод, показал решение программы для заполнения вектора, где ввод прерывается именно |. Он это делал так:
C++
1
while (cin >> buf)
так что я думаю '|' ненастолько критичное условие, а лишь одно из условий выхода, с таким же успехом я мог использовать и комбинацию Ctrl + D
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2012, 13:37     Задача из книги Страуструпа
Еще ссылки по теме:

C++ Задача из книги Страуструпа 4 глава векторы
Задача из книги Страуструпа C++
C++ Задача из книги Страуструпа (4.6.3)
C++ Упражнение №8 глава 5 из книги Страуструпа
Не получается собрать проект из задания книги Страуструпа C++

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

Или воспользуйтесь поиском по форуму:
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
07.07.2012, 13:37     Задача из книги Страуструпа #20
Цитата Сообщение от iandi Посмотреть сообщение
А нельзя ли сделать так?
Нельзя, даже в случаи успешной реализации у Вас не будет доступно для ввода число, что соответствует числовому значению символа "|".
Yandex
Объявления
07.07.2012, 13:37     Задача из книги Страуструпа
Ответ Создать тему
Опции темы

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