4 / 4 / 0
Регистрация: 04.12.2010
Сообщений: 93
1

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

05.07.2012, 13:46. Показов 13520. Ответов 51
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Меня настораживает несколько странная формулировка, я не понимаю зачем так предлагают решать задачу:
Напишите программу, содержащую цикл 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2012, 13:46
Ответы с готовыми решениями:

Задача из книги Страуструпа (4.6.3)
Читаю книгу Страуструпа не могу понять как сортировать функцией sort. пример взят и переписан их...

Задача из книги Страуструпа
В общем, не могу понять логику, по которой необходимо выполнить небольшое задание. Само задание:...

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

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

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

Добавлено через 6 минут
Чтобы именно два числа в цикле вводилось, можно так написать:
C++
1
cin >> buff1 >> buff2;
0
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2012, 03:46 6
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Вы тему не сечете!
Извините, но, по-моему, это вы не сечёте.
Цитата Сообщение от Bogdand Посмотреть сообщение
цикл while, в котором считываются и выводятся на экран два целых числа
В вашем коде есть цикл while, который считывает и выводит одно число два раза. А нужен цикл в котором (т.е. в теле цикла) происходит считывание двух чисел и их вывод.
Цитата Сообщение от Bogdand Посмотреть сообщение
Для выхода из программы введите символ '|'
А это в вашем коде где?
0
4 / 4 / 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
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
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++);
0
24 / 24 / 10
Регистрация: 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;
}
З.Ы. Сколько звёздочек это задание ?
1
4 / 4 / 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
18 / 13 / 1
Регистрация: 04.07.2012
Сообщений: 523
06.07.2012, 18:01 11
Цитата Сообщение от Bogdand Посмотреть сообщение
Да боже ж ты мой, делать бесконечный цикл ради тупого ввода двух чисел? я перестал понимать Страуструпа напрочь!
во первых: цикл не бесконечный раз есть условия выхода из него, во вторых: это пример, может понадобиться вводить 20 чисел, или 200..
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
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
4 / 4 / 0
Регистрация: 04.12.2010
Сообщений: 93
06.07.2012, 19:03  [ТС] 13
Цитата Сообщение от Веди Посмотреть сообщение
во первых: цикл не бесконечный раз есть условия выхода из него, во вторых: это пример, может понадобиться вводить 20 чисел, или 200..
из бесконечных циклов всегда есть условие выхода иначе они бы были неактуальны ни в каком виде!
0
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
06.07.2012, 23:04 15
Цитата Сообщение от Bogdand Посмотреть сообщение
из бесконечных циклов всегда есть условие выхода иначе они бы были неактуальны ни в каком виде!
а как же микроконтроллеры???
0
5498 / 4893 / 831
Регистрация: 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, самое простое решение, вводить строку, и только потому переводить её в число.
Согласен. Без этого здесь не обойтись.
0
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;
}
Компилятора под рукой нет, проверить не могу...
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 10:32 18
Цитата Сообщение от iandi Посмотреть сообщение
А нельзя ли сделать так?
Цикл прервётся, если любую букву ввести, а не только '|'.
0
4 / 4 / 0
Регистрация: 04.12.2010
Сообщений: 93
07.07.2012, 10:38  [ТС] 19
Ну вообще страуструп, когда обьяснял ввод, показал решение программы для заполнения вектора, где ввод прерывается именно |. Он это делал так:
C++
1
while (cin >> buf)
так что я думаю '|' ненастолько критичное условие, а лишь одно из условий выхода, с таким же успехом я мог использовать и комбинацию Ctrl + D
0
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
07.07.2012, 13:37 20
Цитата Сообщение от iandi Посмотреть сообщение
А нельзя ли сделать так?
Нельзя, даже в случаи успешной реализации у Вас не будет доступно для ввода число, что соответствует числовому значению символа "|".
0
07.07.2012, 13:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2012, 13:37
Помогаю со студенческими работами здесь

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

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

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

Задачка из книги Страуструпа...
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак:...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru