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

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

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

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

05.07.2012, 13:46. Просмотров 4569. Ответов 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 но это какой то мазахизм ей богу, видимо я что то упустил...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 13:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача из книги Страуструпа (C++):

Задача из книги Страуструпа (4.6.3) - C++
Читаю книгу Страуструпа не могу понять как сортировать функцией sort. пример взят и переписан их книги: &quot;Принципы и практика...

Задача из книги Страуструпа - C++
Нужна ваша помощь или хотя бы подсказка, в одном из упражнений в книге Страуструпа &quot; Программирование. Принципы и практика с использованием...

Задача из книги Страуструпа 4 глава векторы - C++
Задача: Напишите программу, заглушающую нежелательные слова; иначе говоря, считайте слова из потока cin и выведите их в поток cout, заменив...

Задачка из книги Страуструпа... - C++
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак: &quot;Считайте последовательности чисел...

Задачка из книги Страуструпа - C++
Здравствуйте могли бы вы мне помочь в решении задачи. Вот собственно само условие. Условие: Теперь измените тело цикла так, чтобы он...

Задание из книги Страуструпа - C++
Здравствуйте! Я решил начать изучать программирование, конкретнее - язык C++. Самым логичным способом изучения мне показалось попробовать...

45
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 17:39 #2
Цитата Сообщение от Bogdand Посмотреть сообщение
Для выхода из программы введите символ '|'
А где это в коде?
0
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
05.07.2012, 19:48  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
А где это в коде?
C++
1
while (cin >> buf)
перестанет вводить числа если ввести не число, включая |
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.07.2012, 20:42 #4
Цитата Сообщение от Bogdand Посмотреть сообщение
перестанет вводить числа если ввести не число, включая |
Мне кажется, это не совсем по заданию.

Добавлено через 6 минут
Чтобы именно два числа в цикле вводилось, можно так написать:
C++
1
cin >> buff1 >> buff2;
0
ШКІПЕР
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;
}
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2012, 03:46 #6
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Вы тему не сечете!
Извините, но, по-моему, это вы не сечёте.
Цитата Сообщение от Bogdand Посмотреть сообщение
цикл while, в котором считываются и выводятся на экран два целых числа
В вашем коде есть цикл while, который считывает и выводит одно число два раза. А нужен цикл в котором (т.е. в теле цикла) происходит считывание двух чисел и их вывод.
Цитата Сообщение от Bogdand Посмотреть сообщение
Для выхода из программы введите символ '|'
А это в вашем коде где?
0
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;
}
он обычно даёт разумные задания, с вайлом можно придумать много всего где он действительно необходим
0
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
06.07.2012, 14:38 #8
Цитата Сообщение от alsav22 Посмотреть сообщение
В вашем коде есть цикл while, который считывает и выводит одно число два раза. А нужен цикл в котором (т.е. в теле цикла) происходит считывание двух чисел и их вывод.
агась

http://img37.imageshack.us/img37/996...enshot91tl.jpg


Цитата Сообщение от 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++);
0
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;
}
З.Ы. Сколько звёздочек это задание ?
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;
}
З.Ы. Сколько звёздочек это задание ?
Да боже ж ты мой, делать бесконечный цикл ради тупого ввода двух чисел? я перестал понимать Страуструпа напрочь!
0
Веди
20 / 11 / 1
Регистрация: 04.07.2012
Сообщений: 225
06.07.2012, 18:01 #11
Цитата Сообщение от Bogdand Посмотреть сообщение
Да боже ж ты мой, делать бесконечный цикл ради тупого ввода двух чисел? я перестал понимать Страуструпа напрочь!
во первых: цикл не бесконечный раз есть условия выхода из него, во вторых: это пример, может понадобиться вводить 20 чисел, или 200..
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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 у вас не инициализирована.
0
Bogdand
3 / 3 / 0
Регистрация: 04.12.2010
Сообщений: 93
06.07.2012, 19:03  [ТС] #13
Цитата Сообщение от Веди Посмотреть сообщение
во первых: цикл не бесконечный раз есть условия выхода из него, во вторых: это пример, может понадобиться вводить 20 чисел, или 200..
из бесконечных циклов всегда есть условие выхода иначе они бы были неактуальны ни в каком виде!
0
ШКІПЕР
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 у вас не инициализирована.
Прикол в том, что это не ошибка. Дальше варнинга не уйдет ну а вот в кастомера могут быть "чудеса"
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
06.07.2012, 23:04 #15
Цитата Сообщение от Bogdand Посмотреть сообщение
из бесконечных циклов всегда есть условие выхода иначе они бы были неактуальны ни в каком виде!
а как же микроконтроллеры???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2012, 23:04
Привет! Вот еще темы с ответами:

пример из книги страуструпа - C++
struct pair { char* name; // ñòðîêà int val; // öåëîå }; const int large = 1024; ...

Достаточно ли книги Страуструпа? - C++
В общем, учу с++ по страуструпу и думаю: &quot; а хватит ли этого???&quot; . Подскажите книгу, по которой учиться дальше? Спасибо!

Библиотеки для книги Страуструпа - C++
Доброго времени суток! Дядя Бьярне использует библиотеки в своей книге &quot;Принципы и практика использования С++&quot;, которых нет в компиляторах....

Объяснить код из книги Страуструпа - C++
Здравствуйте форумчане, помогите пожалуйста со строуструповским калькулятором. В книге он определяет тип Token для хранения лексем: ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
06.07.2012, 23:04
Ответ Создать тему
Опции темы

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