Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/569: Рейтинг темы: голосов - 569, средняя оценка - 4.54
Kimel
15 / 16 / 0
Регистрация: 01.02.2012
Сообщений: 182
1

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"

01.02.2012, 17:47. Просмотров 102464. Ответов 308
Метки нет (Все метки)

Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в Dev C++. Ос Win 7 64 bit.

Начнём со второй главы:
Упражнение 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
 
using namespace std;
 
int main()
{
   setlocale(0,"Rus");
   float gallons, cufeet;
 
   cout << "Введите количество галоннов: \n";
   cin >> gallons;
   cufeet = gallons / 7.481;
   cout << "Еквивалент в футах = " << cufeet << endl;
    
   return 0;
}

Упражнение 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main()
{
   setlocale(0,"Rus");
   
    cout << 1990 << setw(8) << 135 << endl
           << 1991 << setw(8) << 7290 << endl 
           << 1992 << setw(8) << 11300 << endl
           << 1993 << setw(8) << 16200 << endl;
  
   return 0;
}

Упражнение 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    int var = 10;
 
    cout << var << endl;      
    var *= 2;                 
    cout << var-- << endl;    
    cout << var << endl;      
    return 0;
}

Упражнение 4
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    cout<<"\nУ лукоморья дуб срубили\nКота на мясо порубили \nА по неведанным дорожкам\nШагали черти в босоножках\n"; 
    return 0;
}

Упражнение 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
#include <ctype.h>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    char ch;
    cin >> ch;
    cout << islower(ch);  // При вводе строчной буквы будет 2 при прописной 0. Но есть нюанс, поддерживаються только англ буквы 
    return 0;
}


Упражнение 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
 
    float a,b,c,d,f;
    cout << "Введите кол-во доларов"<<endl;
    cin >> f;
    b=f/1.487;
    c=f/0.172;
    a=f/0.584;
    d=f/0.00955;
    cout << f <<"доларов = "<< b<<" фунтов стерлинга"<<endl;
    cout << f <<"доларов = "<< c<<" франков"<<endl;
    cout << f <<"доларов = "<< a<<" немецких марок"<<endl;
    cout << f <<"доларов = "<< d<<" японских йен"<<endl;
    return 0;
}

Упражнение 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    double f,c;
    cout << "Введите количество градусов по Цельсию"<<endl;
    cin >> c;
    f=c*1.8+32;
    cout <<setprecision(3)<< f << " градусов по Фаренгейту "<< endl; // Регуляция кол-во символов после запятой
    return 0;
}

Упражнение 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    long pop1=2425785, pop2=47, pop3=9761;       
 
    cout << setfill('.') <<setw(8) << "LOCATION" << setw(12) // Обратите внимание на одинарные кавычки
           << "POPULATION" << endl
           <<setw(8) << "Portcity" << setw(12) << pop1 << endl
           << setw(8) << "Hightown" << setw(12) << pop2 << endl
           << setw(8) << "Lowville" << setw(12) << pop3 << endl;
    return 0;
}

Упражнение 9

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    char dummychar;
    double a,b,c,d,e,f;
    cout << "Введите а и b"<< endl;
    cin >>a>>dummychar>>b;
    cout << "Введите c и d"<<endl;
    cin >>c>>dummychar>>d;
    cout <<(b*c)+(d*a)<<dummychar<<(b*d)<<endl;
 
    return 0;
}

Упражнение 10 (Намучился с этой задачей)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream> 
 
using namespace std;
 
int main() 
{
    setlocale(0,"Rus");
    float a,b,c,f;
    cout << "Введите количество фунтов"<<endl;
    cin >> a;
    cout << "Введите количество шиллингов"<<endl;
    cin >> b;
    cout << "Введите количество пенсов"<<endl;
    cin >> c;
    f = a+(b+c/12)/20;
    cout << "Количество фунтов = " << f << endl;
    return 0;
}

Упражнение 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream> 
#include <iomanip>
 
using namespace std;
 
int main() 
{
     setlocale(0,"Rus");
     cout << setiosflags(ios::left) <<setw(15) << "Фамилия"<< setw(15)<< "Имя"<<setw(15) << "Адресс"<<setw(15)<< "Город"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl
            <<setw(15)<< "Иванов"<<setw(15)<<"Петя"<<setw(15)<<"Кленовая 16"<<setw(10)<<"Москва"<<endl;
    return 0;
}

Упражнение 12 (это самая геморная программа на разработку которой ушло больше дня)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
 
using namespace std;
 
int main() 
{
setlocale(0,"Rus");
float a,b,z;
int c,k;
cout << "Введите кол-во футов " << endl;
cin >> a;
c = static_cast<int>(a);
b = a - c;
b *= 20;
k = static_cast<int>(b);
z = b - k;
z = z*12;
z = static_cast<int>(z);
k = static_cast<int>(k);
cout << c <<"."<< k <<"."<< z << endl;
return 0;
}
Это конец второй главы, третюю сделаю позже если будет нужна
 Комментарий модератора 
Пост обновлен по просьбе ТС
12
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2012, 17:47
Ответы с готовыми решениями:

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Мне надо решение упражнений из книги Р. Лафоре &quot;Объектно-ориентированное...

Ищу ответы на задания из книги Лафоре Р. "Объектно-ориентированное программирование в С++" 4 издание.
Дошел до 10 главы, из каждой главы делал все 12 заданий, хочу проверить...

Книга "Объектно-ориентированное программирование на C++", Автор Васильев А.Н. Стоит ли читать?
Как Вам книга &quot;Объектно-ориентированное программирование на C++&quot;? Автор...

Объектно-ориентированное приложение: "Эмулятор банкомата"
Доброго времени всем! я начал изучать С++ И хотел бы спросить вашей помощи в...

Разобраться в примерх к книге Лафоре "Обьектно-ориентированое программирование в С++"
Всем доброго времени суток кто читает эту тему. Сегодня, изучая С++ по книге...

308
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.02.2012, 17:54 2
Цитата Сообщение от Kimel Посмотреть сообщение
#include<conio.h>
этому тоже Лафоре научил? очень сомневаюсь
0
Kimel
15 / 16 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 18:11  [ТС] 3
Цитата Сообщение от Jupiter Посмотреть сообщение
этому тоже Лафоре научил? очень сомневаюсь
Это ваш прекрасный форум научил, в теме выше, а так же в других тема. Это сделано что бы окно не закрывалось после выполнения программы.
1
fasked
Эксперт С++
4984 / 2563 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.02.2012, 18:31 4
Цитата Сообщение от Kimel Посмотреть сообщение
Это ваш прекрасный форум научил, в теме выше, а так же в других тема. Это сделано что бы окно не закрывалось после выполнения программы.
Единственный правильный способ - запуск программы из консоли или из скрипта или еще чего, но явно это не должно быть костылем в коде. Это ересь и провокация. Не учитесь плохому.
3
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
01.02.2012, 18:34 5
Цитата Сообщение от Jupiter Посмотреть сообщение
этому тоже Лафоре научил? очень сомневаюсь
Да. Так лучше не писать, но я сам у него этот хедер встречал

Добавлено через 1 минуту
Цитата Сообщение от Kimel Посмотреть сообщение
system("pause"); *// выведет "нажмите любую клавишу"
getch(); * // особенности экспресс-версии
А тут getch() зачем?
0
Kimel
15 / 16 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 18:37  [ТС] 6
Цитата Сообщение от fasked Посмотреть сообщение
Единственный правильный способ - запуск программы из консоли или из скрипта или еще чего, но явно это не должно быть костылем в коде. Это ересь и провокация. Не учитесь плохому.
Спасибо что откликнулись в этой теме и подметили ошибки в коде. Я извиняюсь что пришлось прибегнуть к такому решению, оно временное и работает. Если у вас есть конкретный совет, как только что скомпилированную программу заставить не закрываться сразу же после исполнения, то пожалуйста изложите, мне это очень важно. Еще раз спасибо.

Добавлено через 1 минуту
Цитата Сообщение от go Посмотреть сообщение
Да. Так лучше не писать, но я сам у него этот хедер встречал

Добавлено через 1 минуту

А тут getch() зачем?
Вы правы, это без надобности, сейчас уберу.

Добавлено через 1 минуту
Уважаемы модераторы. Подскажите как изменить первый пост в топике
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
01.02.2012, 18:40 7
Цитата Сообщение от Kimel Посмотреть сообщение
вас есть конкретный совет, как только что скомпилированную программу заставить не закрываться сразу же после исполнения, то пожалуйста изложите, мне это очень важно.
Смотря что вам надо. Если сделать паузу при выполнении
C++
1
std::system("pause");
Если просто хотите увидеть результат работы, то запускайте .exe из командной строки. В студии можно чуть иначе
0
Kimel
15 / 16 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 18:46  [ТС] 8
Цитата Сообщение от go Посмотреть сообщение
Смотря что вам надо. Если сделать паузу при выполнении
C++
1
std::system("pause");
Если просто хотите увидеть результат работы, то запускайте .exe из командной строки. В студии можно чуть иначе
Вы правы, сейчас так и использую.

Добавлено через 4 минуты
Пожалуйста, скажите какие хедеры лишние
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
01.02.2012, 18:50 9
№2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream> 
#include <iomanip>
 
int main()
{   
   std::cout << 1990 << std::setw(8) << 135   << std::endl
             << 1991 << std::setw(8) << 7290  << std::endl 
             << 1992 << std::setw(8) << 11300 << std::endl
             << 1993 << std::setw(8) << 16200 << std::endl;
  
   return 0;
}
http://liveworkspace.org/code/76c85b9355c7d863e47d5b849ed061c7
0
fasked
Эксперт С++
4984 / 2563 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.02.2012, 18:59 10
Цитата Сообщение от Kimel Посмотреть сообщение
Вы правы, сейчас так и использую.
Прошу Вас, не надо в коде таких штук делать. Во-первых, только для windows. Во-вторых, некрасиво.
Цитата Сообщение от go Посмотреть сообщение
Если просто хотите увидеть результат работы, то запускайте .exe из командной строки. В студии можно чуть иначе
0
Kimel
15 / 16 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 19:32  [ТС] 11
Цитата Сообщение от fasked Посмотреть сообщение
Прошу Вас, не надо в коде таких штук делать. Во-первых, только для windows. Во-вторых, некрасиво.

Спасибо, учту ваше замечание.
0
AAA-
13 / 13 / 5
Регистрация: 14.02.2012
Сообщений: 46
14.02.2012, 17:13 12
нужна помощь с 3 главой
есть решение ?
0
muradasilov
0 / 0 / 0
Регистрация: 22.02.2012
Сообщений: 5
24.02.2012, 18:25 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
 
using namespace std;
 
int main() 
{
setlocale(0,"Rus");
float a,b,z;
int c,k;
cout << "Введите кол-во футов " << endl;
cin >> a;
c = static_cast<int>(a);
b = a - c;
b *= 20;
k = static_cast<int>(b);
z = b - k;
z = z*12;
z = static_cast<int>(z);
k = static_cast<int>(k);
cout << c <<"."<< k <<"."<< z << endl;
return 0;
}
Кажется не совсем корректно работает!
\\\\\
Пример: введите значение фунта 8.65, выдает ответ 8.12.11, а надо 8.13.0,
Кто поможет??

Добавлено через 1 минуту
Цитата Сообщение от AAA- Посмотреть сообщение
нужна помощь с 3 главой
есть решение ?
какие именно задачи, попробую помочь

Добавлено через 2 минуты
ну собственно почему static_cast делает из значения 13, 12
0
Vihost
0 / 0 / 0
Регистрация: 05.08.2015
24.02.2012, 21:14 14
Мой вариант решения задачи 12 Главы 2.
Оформлена как отдельная функция т.к. пишу все упражнения в отдельном модуле.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void nfunt_ofunt()
{
    double nFunt, temp;
    int shil, pens;
    cout<<"Введите сумму в новых фунтах: ";
    cin>>nFunt;
    temp=nFunt*20;                                    //Переводим все в шиллинги
    shil=static_cast<int>(temp)%20;              //Количество шиллингов
    pens=(temp-static_cast<int>(temp))*12;  //Количество пенсов
    cout<<static_cast<int>(nFunt)                //Количество фунтов
          <<"."<<shil<<"."<<pens<<endl;
 
    return;
}
0
xxbigxl
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 8
29.02.2012, 13:13 15
Упражнение 12___Обратная конвертация____Лафоре C++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//------------------Кампилятор dev-C++ 4.9.9.2 Windows 7 x64------------------------------------------------------------
#include <iostream>
using namespace std;
int main ()
{
setlocale(LC_ALL,"Russian"); // Русский язык 
float new_$, new_pens, shiling;
int funt,  pens, int_shiling;
 
cout << "Введите число десятичных фунтов: ";
cin >> new_$;                     // 5.13
  funt = static_cast<int>(new_$); // 5 фунтов ---------------------------------------------------------------------- в ответ
    new_pens = new_$ - funt;       // 0.13
    shiling = new_pens * 20;         // 0.13*20(20 шилингов в 1 фунте) = 2.6 2 шиллинга и 6 десятичных пенсов т.е 0.6 
      int_shiling = static_cast<int>(shiling); // 2 шиллинга  ------------------------------------------------------------ в ответ
        new_pens = shiling - int_shiling;         // 0.6  десятичных пенсов
        pens = new_pens * 12;                   // 0.6*12(12 пенсов в 1 шилинге)= 7 пенсов ------------------------------ в ответ
    cout << endl << "Эквивалентная сумма в старой форме записи: $" << funt << "." << int_shiling << "." << pens << endl << endl;     
   system ("pause");
   return 0;    
}
0
muradasilov
0 / 0 / 0
Регистрация: 22.02.2012
Сообщений: 5
29.02.2012, 16:37 16
спасибо за помошь, но у Вас та же проблема, посмотрите пошаговое выполнение программы.
Прилагаю скрин выполнения программы, результат снова не корректный((((
Вот как раз в той строке где отделяется десятичная часть(в моем случае 0.65), и после умножения на 20 по формуле

(shiling = new_pens * 20 =0.65*20=13),

и после

int_shiling = static_cast<int>(shiling),

число 13 становится 12. Разъясните плиз, каким образом????
0
Миниатюры
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"  
muradasilov
0 / 0 / 0
Регистрация: 22.02.2012
Сообщений: 5
01.03.2012, 13:57 17
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
36
#include<iostream>
using namespace std;
int main()
{
    char ch;
    do
    {
    
        double s,s1,s2,a,a1,b,b1,c,c1;
        cout<<"Enter first sum in old pounds: ";
        cin>>a>>b>>c;
        cout<<"Enter second sum in old pounds: ";
        cin>>a1>>b1>>c1;
        s1=(a*240+b*12+c)/240;
        s2=(a1*240+b1*12+c1)/240;
        s=s1+s2;
    
/////////////////////////////////////////////////////////////////////   
    
        double p,z,f;
        int y,m,n;
    
            y=static_cast<int>(s);
            z=s-y;                        //old pound, goes to answer;
            f=z*20;
            m=static_cast<int>(f);
            p=f-m;                        //old shillings, goes to answer;
            n=p*12;                       //old penns, goes to answer;  
            cout<<y<<"."<<m<<"."<<n<<endl;
            cout<<"Try again?(y/n):";
            cin>>ch;
    }
    while(ch!='n');
    return 0;
 
}
Заранее извиняюсь за синтаксис.
вот решение задачи 8 главы 3, в ней заключен ответ на задачу 12 главы 2.
Прошу строго не судить, так как в программировании Ваапще новичок!
0
xxbigxl
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 8
04.03.2012, 18:40 18
Вот отдельно вынес это действие и получается 13.
Я не знаю как это объяснить.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main ()
{
setlocale(LC_ALL,"Russian"); // Русский язык 
float new_$, new_pens, shiling;
int funt,  pens, int_shiling;
 
cout << "Вводим число 0.65: ";
cin >> new_pens;
 
shiling = new_pens * 20;
int_shiling = static_cast<int>(shiling); 
       
             
       cout << endl << int_shiling << endl;
       
       system("pause");
       return 0;
}
0
Nicholas
0 / 0 / 0
Регистрация: 21.08.2012
Сообщений: 5
21.08.2012, 00:43 19
Привет. Такой вопрос, по поводу 11 задания второй главы книгы. Решение правильное, но в твоем коде нет нижнего подчеркивания, как бы оттделения заголовков от данных. Я все не могу решить данную проблему, все мои попытки увенчались неудачей, в итоге я просто прописал строковой константой. Есть другой солюшен. Общим можно поставить эти подчеркивания с помощью манипулятора setfill(). Этот манипулятор принимает в качестве аргумента один символ, допустим в моем случае setfill('.'), который замещает пробелы на незаполненых позициях поля. Мне нужно сделать так чтобы он прирывался сразу после окончания второй строки. Как я не старался его прервать не получаеться, а символ заполняет все пустые пробелы. Вот мой код, как сделать со вторым солюшеном, немогу догнать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//11 task.cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main()
 
{
    setlocale (0, "Rus");
 
    cout<<setiosflags(ios::left) <<setw(15) << "Фамилия" << setw(15) << "Имя" << setw(15) << "Адрес" << setw(15) << "Город"<< endl;
    cout<<"..............................................................."<<endl;
    cout <<setiosflags (ios::left) <<setw(15) << "Петров" <<setw(15) << "Василий" << setw(15) <<"Кленовая 16" << setw(15) << "Санкт-Петербург"<<endl
    <<setw(15)<< "Иванов" <<setw(15) << "Сергей" << setw(15) <<"Осиновая 3" << setw(15) << "Находка"<<endl
    <<setw(15)<< "Сидоров" <<setw(15) << "Иван" << setw(15) <<"Березовая 21" << setw(15) << "Калининград"<<endl;
    
    return 0;
}
Заранее благодарен.
0
Sabbat
135 / 23 / 1
Регистрация: 19.10.2012
Сообщений: 43
28.01.2013, 00:09 20
to Nicholas
тоже думал, но больше чем
C++
1
cout<<"..............................................................."<<endl;
заменить на
C++
1
cout<<setfill('.')<<setw(4*15)<<'.'<<endl<<setfill(' ');
(в выше написанном коде) так и ничего не додумал.

............................................................................
Интересует задание 5 глава 3
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n=20; //работает корректно при n%2=0
for (int i=1; i<=n; i++)
    {
        cout<<setw(n/2-i/2);
        if (i%2)
            {
                for(int j=1; j<=i; j++)
                        cout<<'X';
                cout<<endl;
            }
    }
system("pause"); 
return 0;
}
Как правильно сделать с пробелами во втором цикле (в соответствии с указанием в задании)? Я что-то не понимаю. Буду благодарен за любой ответ.
0
28.01.2013, 00:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2013, 00:09

Объектно ориентированное программирование.
Нужно решить задачи. Помогите кому это не сложно, очень нужно. Вот задачи: ...

Объектно-ориентированное программирование
Кто силён и мне поможет? Объектно-ориентированное программирование 1....

Объектно-ориентированное программирование
На основе объектного подхода создать программу которая рассчитывает значения...


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

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

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