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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
#1

Липпман для начинающих. С функцией. - C++

30.10.2010, 05:24. Просмотров 1341. Ответов 7
Метки нет (Все метки)

Всем привет. Просьба сильно не пинать, но я слегка подзабыл элементарщину. Липпман в одном из своих упражнений просит переписать функцию putValues(vector<int>) в putValues(list<string>) так, чтобы переписанная в лист функция печатала два своих значения в цикле.

putValues(vector<int> vec)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
 
const lineLength =12; //количество элементов в строке
void putValues( vector<int> vec )
{
    cout << "( " << vec.size() << " )";
    for ( int i = 0; i < vec.size(); ++1 ) {
        if ( i % lineLength == 0 && i )
            cout << "\n\t"; // строка заполнена
 
    cout << vec[ i ];
 
    // разделитель, печатаемый после каждого элемента,
    // кроме последнего
    if ( 1 % lineLength != lineLength-1 &&
      i != vec.size()-1 )
        cout << ", ";
    }
    cout << " \n";
}


А эту я подправил почти что в лучших традициях быдлокодерства
putValues(list<string>_list)
C++
1
2
3
4
5
6
7
8
9
void putValues( std::list<std::string> _list)
{
    std::string ia[2] = {"first string", "second string"};
    std::cout<< "( " << _list.size() << " )\n";
    for (int i = 2; i < 2; ++i) {
        _list.push_back(ia[i]);
    std::cout << _list.size() << std::endl;
    }
}


Погуглил, не нашёл! А в учебнике Липпмана отсутствуют решения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2010, 05:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Липпман для начинающих. С функцией. (C++):

Лефоре или Липпман? - C++
Доброго времени суток. Как вы считаете, какой книгой лучше воспользоваться для осознания принципов С++? &quot;Объектно-ориентированное...

Липпман или Шилдт - C++
Знаю, что темы &quot;что читать новичку&quot; создавались уже миллион раз. Я, собственно, многие из прочитал (на этом сайте и на других). Эксперты...

Консультации.[Липпман/Лажойе] - C++
Приветствую. Начал изучение языка C++ с книги Стенли Б.Липпмана и Жози Лажойе &quot;Язык программирование C++. Третье издание&quot;. Про то, что...

перегрузка операции ++ (Липпман) - C++
как можна перегрузить данную операцию #include&lt;iostream&gt; #include&lt;complex&gt; using namespace std; inline complex&lt;double&gt;&amp; ...

Изучение С++11: Липпман или Прата? - C++
Поделитесь общими впечатлениями или мнениями по этим двум книгам

Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман[2007] - C++
Стоит ли читать данную книгу новичку? Язык программирования С++. Вводный курс 4-е изд. Стенли Липпман

7
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.10.2010, 07:44 #2
А можно поконкретней, в чем состоит задание (а то не у всех дома Липпман есть)?
0
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 14:49  [ТС] #3
Цитата Сообщение от Nameless One Посмотреть сообщение
А можно поконкретней, в чем состоит задание (а то не у всех дома Липпман есть)?
Да, конечно. Цитирую:
Перепишите функцию putValues( vector<int> ), приведенную в подразделе 7.3.4,
так, чтобы она работала с контейнером list<string>. Печатайте по одному значению на
строке. Вот пример вывода для списка из двух строк:
( 2 )
<
"first string"
"second string"
>

Функция putValues( vector<int> ), приведённая в том подразделе и есть функция, которую я скопировал в спойлер сверху.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.10.2010, 17:03 #4
Цитата Сообщение от Aruzid Посмотреть сообщение
Да, конечно. Цитирую:
Перепишите функцию putValues( vector<int> ), приведенную в подразделе 7.3.4,
У меня нет Липпмана, я не знаю, что приведено в подразделе 7.3.4!
Может ты просто опишешь задание так, чтобы было понятно тем, у кого нет учебника имени Л.?
0
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 20:01  [ТС] #5
Цитата Сообщение от Nameless One Посмотреть сообщение
У меня нет Липпмана, я не знаю, что приведено в подразделе 7.3.4!
Может ты просто опишешь задание так, чтобы было понятно тем, у кого нет учебника имени Л.?
Я же написал, у меня сверху в спойлере есть эта функция - это всё, что есть в этом задании. Её не видно, я не понимаю? Вот перепишу:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Функция в подразделе 7.3.4(!)
#include <iostream>
#include <vector>
 
const lineLength =12; //количество элементов в строке
void putValues( vector<int> vec )
{
    cout << "( " << vec.size() << " )";
    for ( int i = 0; i < vec.size(); ++1 ) {
        if ( i % lineLength == 0 && i )
            cout << "\n\t"; // строка заполнена
 
    cout << vec[ i ];
 
    // разделитель, печатаемый после каждого элемента,
    // кроме последнего
    if ( 1 % lineLength != lineLength-1 &&
      i != vec.size()-1 )
        cout << ", ";
    }
    cout << " \n";
}
Ещё раз - задание в том, что бы переписать putValues( vector<int> vec) так, чтобы она работала не с вектором, а с листом. Функция сверху. Я всё привёл из раздела. И функция putValues должна печатать по одному значению на каждую строку. Если точнее, то putValues(list<string>) должна напечатать:
first string
second string
Надеюсь, что разъяснил

Добавлено через 17 минут
Забыл добавить, что ввод отсутствует, то есть в main() создаётся list<string>_list ( 2 ), потом putValues( _list ). И уже в функции в контейнер добавляются строки, впоследствии чего эти значения выводятся на экран.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.10.2010, 20:18 #6
Цитата Сообщение от Aruzid Посмотреть сообщение
Я же написал, у меня сверху в спойлере есть эта функция - это всё, что есть в этом задании. Её не видно, я не понимаю? Вот перепишу:
а нельзя было сразу русским языком написать, что должна делать программа? Кстати, может я тупой, но мне и сейчас непонятно, что она должна делать.
А теперь будем анализировать текст:
C++
1
if ( i % lineLength == 0 && i )
Мне одному кажется, что правая часть условного выражения будет всегда давать false? Может лучше переписать предыдущее условие так:
C++
1
if(! (i % lineLength))
C++
1
2
if ( 1 % lineLength != lineLength-1 &&
 i != vec.size()-1 )
1 % lineLength всегда будет либо 1, либо 0, а lineLength -1 будет всегда равно 11, т.к. lineLength - константа. Т.е. предыдущее условие можно переписать так:
C++
1
if (i != vec.size()-1 )
Это получается не учебник, а какой-то сборник быдлокода...
Цитата Сообщение от Aruzid Посмотреть сообщение
. И функция putValues должна печатать по одному значению на каждую строку
Вот, я написал программу, которая делает то, что тебе нужно:
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
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
 
template<class T>
struct print
{
    void operator() (const T& rhs)
    {
        std::cout << rhs << std::endl;
    }
};
 
void putValues(const std::list<std::string>& _list)
{
    std::for_each(_list.begin(), _list.end(), print<std::string>());
}
 
int main()
{
    std::list<std::string> list;
    list.push_back("foo");
    list.push_back("bar");
    putValues(list);
    return 0;
}
Печатает по одному значению на строку
1
Aruzid
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 4
30.10.2010, 20:37  [ТС] #7
Цитата Сообщение от Nameless One Посмотреть сообщение
а нельзя было сразу русским языком написать, что должна делать программа? Кстати, может я тупой, но мне и сейчас непонятно, что она должна делать.
Нуу. Извиняюсь, да, моя вина
Цитата Сообщение от Nameless One Посмотреть сообщение
Мне одному кажется, что правая часть условного выражения будет всегда давать false?
Не только тебе, но я старался не отходить от канонов учебника. Бывают примеры ещё хуже. Впрочем Липпман намекал, что будет немного троллить читающего хитрыми примерами вначале учебника. Может редакция сдала, даже не знаю.

Цитата Сообщение от Nameless One Посмотреть сообщение
Вот, я написал программу, которая делает то, что тебе нужно:
А вот за это большущее спасибо, как раз то, что нужно было!
0
Nameless One
30.10.2010, 20:39     Липпман для начинающих. С функцией.
  #8

Не по теме:

Цитата Сообщение от Aruzid Посмотреть сообщение
Не только тебе, но я старался не отходить от канонов учебника. Бывают примеры ещё хуже. Впрочем Липпман намекал, что будет немного троллить читающего хитрыми примерами вначале учебника.
ИМХО, странный учебник. Сам не читал, но вот уже этот пример меня наталкивает на нелестные отзывы об авторе

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2010, 20:39
Привет! Вот еще темы с ответами:

С++ для начинающих - C++
Пожалуйста помогите решить задачу С++ с помощью функций:Составить программу, сравнивающую два числа, введенных римскими цифрами.

С++ для начинающих - C++
не могу сгенерировать случайные целые числа. всегда одно и тоже значение выходит. при чем эта функция должна быть не в main и количество...

С/С++ для начинающих - C++
Вводится последовательность целых чисел, 0 – конец последовательности. Вычислить количество положительных чисел, кратных 7 и не кратных 5 и...

Программы для начинающих - C++
Задача №1 Товар стоит a рублей b копеек. За него заплатили c рублей d копеек. Сколько сдачи требуется получить? Формат ввода: ...


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

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

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