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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 621, средняя оценка - 4.99
Kimel
15 / 16 / 0
Регистрация: 01.02.2012
Сообщений: 182
#1

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

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

Хотя я и начинающий с++-шник. Хочу помочь другим людям. Здесь я буду выкладывать всё что мне удалось решить. В моих решениях будет много хедеров, делал я это в 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" (C++):

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

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

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

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

Объектно-ориентированное программирование - C++
Помогите мне отредактировать программу...У меня есть исходники..Склеить нужно.... Класс Данные класса Методы ...

Объектно-ориентированное программирование в С++ ? - C++
Книга Р. Лафоре - Объектно-ориентированное программирование в С++ как вам ?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Recrut_rf
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 49
Завершенные тесты: 2
14.10.2014, 00:52 #151
Здравствуйте. Искал решения из книги Р. Лафоре "Объектно-ориентированное программирование в С++" и наткнулся на этот форум. Во общем до 3 -ей главы удалось решить всё самому, но на 6-ом упражнении 3-ей главы застрял. Нашёл тут решение Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" , но что-то данный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    char ch;
    unsigned long fact=1, r=0;
    cout <<"Введите число: ";
    while ((ch=_getche()) !='0')
    {
        r= r* 10+ ch -'0';//получаем число в long
        for (int j=r; j>0; j--)//цикл для расчета факториала
            fact *=j;//расчет факториала
    }
    
    cout <<"\nФакториал числа равен: " <<fact <<endl;
    
    system ("pause >>void");


у меня не работает. Написал свой - факториалы считает без проблем, но после этого сразу же прога завершается. Как сделать так, чтобы выходил запрос на ввод следующего числа?
вот мой исходник:
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
#include <iostream>
#include <locale>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main() 
{
    setlocale (LC_ALL, "rus");
    unsigned int numb;
    unsigned long fact =1;
    cout << "Введите целое число:";
    cin >> numb;
    while (numb!=0)
    {
        cout << "Факториал числа равен:";
        for (int j=numb; j>0; j--)
        {
            fact*=j;
                   
        }
        cout << fact << endl;
        break;
    }
    
    return 0;
}
0
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
18.10.2014, 14:19 #152
а можете подсказать зачем в вашем исходнике while и break; ???
Имхо для запроса на следующее число нужно вот так.
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
#include <iostream>
#include <windows.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    unsigned int numb;
    int var;
    do
    {
           cout << "Введите целое число:";
           cin >> numb;
           cout << "Факториал числа равен:";
           unsigned long fact =1;
           for (int j=numb; j>0; j--)
             {
                fact*=j;
             }
           cout << fact << endl;
       cout<<"нажмите 0 для выхода";
       cin >>var;
    }
    while(var!=0);
    return 0;
}
1
Recrut_rf
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 49
Завершенные тесты: 2
25.10.2014, 14:50 #153
while - что бы при нажатии 0 программа завершалась, ну а без break - факториал считается бесконечно.
Вообще я хотел организовать подобную конструкцию:
Вводим 0 - получаем надпись - Некорректное число;
Вводим целое число - получаем факториал и надпись - Продолжать? (введите 'y' или 'n').
Вводим отличное от 'n' - программа запрашивает новое число и считает новый факториал.
Вот исходник:
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
#include <iostream>
#include <locale>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main() 
{
    setlocale (LC_ALL, "rus");
    char ch;
    unsigned int numb;
    unsigned long fact =1;
    do
    {
    cout << "Введите целое число:";
    cin >> numb;
    if (numb==0)
    {
        cout << "Некорректное число!\n";
        continue;
        cin >> numb;
    } 
    for (int j=numb; j>0; j--)
    fact*=j;
    cout << "Факториал числа равен:";
    cout << fact << endl;
    cout << "Продолжать? (введите 'y' или 'n')\n";
    cin >> ch;
    }
    while (ch!='n');
    return 0;
}
Вроде при первом прогоне числа всё работает нормально. Но если в конце выбрать продолжение (нажать что-нибудь кроме 'n') - получаем ерунду:
например - вводим первый раз 5 - в итоге получаем факториал -120 и запрос на продолжение. Если продолжить - то при вводе той же 5 получим результат 14400. То есть из цикла не выходит и полученные 120 умножает на новые 120.
Вот я и думал - как организовать выход из цикла - break вставлял поочерёдно во всех циклах - не помогло, continue и exit пробовал - тот же результат. Хочу разобраться - что не так сделано?

Добавлено через 3 минуты
Цитата Сообщение от Aleksandr644 Посмотреть сообщение
SetConsoleOutputCP(1251); SetConsoleCP(1251);
а что это за функции?
0
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
25.10.2014, 15:02 #154
Выход тут ни при чем.
Надо в начале цикла КАЖДЫЙ раз обнулять( "ободинять" ) fact:
C++
1
2
fact=1;for (int j=numb; j>0; j--)
    fact*=j;
1
Recrut_rf
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 49
Завершенные тесты: 2
25.10.2014, 19:06 #155
Слава Всевышнему !!! Работает!!!! Большое спасибо!
0
8tomat8
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 1
08.01.2015, 14:40 #156
Прошу прощения что поднимаю некропост. Выкладываю свой вариант решения 12ой задачи. Вариант решения предложенный в книге - не понравился...
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    float dec_amount,temp;
    int dec_pou,pou,pen,shil;
    cout << "New amount: ";
    cin >> dec_amount;
    dec_pou = static_cast<int>(dec_amount);
    temp = dec_amount*240-dec_pou*240;
    shil = static_cast<int>(temp/12);
    pen = temp-shil*12;
    cout << "Result: " << dec_pou << "." << shil << "." << pen;
    return 0;
}
0
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
15.01.2015, 02:13 #157
Цитата Сообщение от Kins Посмотреть сообщение

Решение глава 3 задача №8:

int a, b, c, d, e, f, x, y, z;
char ch;
do {
cout <<"\nВведите первую сумму: \x9c "; cin >>a >>b >>c;
cout <<"Введите вторую сумму: \x9c "; cin >>d >>e >>f;
z=c+f;//рассчет пенсов
y=b+e;//рассчет шиллингов
x=a+d;//рассчет фунтов
if (z>11)(y+=1)&&(z=z%12);//если сумма пенсов >11, то прибавляем к сумме шиллингов 1 и приводим сумму пенсов к виду кратной 12
if (y>19)(x+=1)&&(y=y%20);//если сумма шиллингов >19, то прибавляем к сумме фунтов 1 и приводим сумму шиллингов к виду кратной 20
cout <<"Всего: \x9c " <<x <<"." <<y <<"." <<z <<endl;
cout <<"Продолжить? (y/n)";
} while ((ch=_getche())!='n');
Или я чего не понял либо у вас тут ошибка.

if (z>11)(y+=1)&&(z=z%12);//если сумма пенсов >11, то прибавляем к сумме шиллингов 1 и приводим с

Т.е по вашему получается, что если сумма пенсов >11 мы к шиллингам прибавляем 1. Но если допустим я ввиду число пенсов=34. В вашем случае шиллинги увеличатся только на 1 и в пенсы попадет 1. А должно количество шиллингов увеличиться на 3 а количество пенсов должно быть равно 1.
0
Recrut_rf
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 49
Завершенные тесты: 2
17.01.2015, 01:10 #158
А разве в книге есть решение 12-ой задачи второй главы? (судя по коду это это оно ) Мой вариант если что ...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <clocale>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
 
int main()
 {
    setlocale (LC_CTYPE, "rus");
    float decfunt, decshiling, decpens, a, b;
    int funt, shiling, pens;
    cout << "Введите число десятичных фунтов:";
    cin >> decfunt;
    funt = static_cast<int>(decfunt);
    a = decfunt - funt;
    decshiling = a * 20;
    shiling = static_cast<int>(decshiling);
    b = decshiling - shiling;
    decpens = b * 12;
    pens = static_cast<int>(decpens);
    cout << "Эквивалентная сумма в старой форме записи:" << funt << '.' << shiling << '.' << pens << endl;
    system("pause");
    return 0;
}
Вроде не сильно отличается от вашего...

Добавлено через 1 час 32 минуты
Цитата Сообщение от dicros Посмотреть сообщение
Или я чего не понял либо у вас тут ошибка.
if (z>11)(y+=1)&&(z=z%12);//если сумма пенсов >11, то прибавляем к сумме шиллингов 1 и приводим с
Т.е по вашему получается, что если сумма пенсов >11 мы к шиллингам прибавляем 1. Но если допустим я ввиду число пенсов=34. В вашем случае шиллинги увеличатся только на 1 и в пенсы попадет 1. А должно количество шиллингов увеличиться на 3 а количество пенсов должно быть равно 1.
Значение шилингов увеличивается на 1 а в пенсы попадёт 10 а не 1 (если складывать 0.0.34 + 0.0.0), хотя вроде как должно быть 2 шилинга и 10 пенсов (12+12+10). Один хрен - если подставить значения из книги - 5.10.6 + 3.2.6 - получим нужные 8.13.0. У меня результаты точно такие же. Вот код если что:
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
#include <iostream>
#include <clocale>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv)
 {
    setlocale (LC_ALL, "rus");
    char ch;
    int funt, shiling, pens, funt2, shiling2, pens2, vsegosh, vsegop, vsegof;
    do
    {
        cout << "Введите первую сумму :\n";
        cin >> funt >> shiling >> pens;
        cout << "\nВведите вторую сумму:\n";
        cin >> funt2 >> shiling2 >> pens2;
        vsegof = funt + funt2;
        vsegosh = shiling+shiling2;
        vsegop = pens + pens2;
        if (pens + pens2 > 11)
        {
            (vsegosh+=1) && (vsegop = vsegop%12);
            
        }
        if (shiling+shiling2 > 19)
        {
            (vsegof+=1) && (vsegosh = vsegosh%20);
        
        }
        cout << "\nВсего:" << vsegof << '.' << vsegosh << '.' << vsegop << endl;
        cout << "\nЕщё раз? (y,n)";
        cin >> ch;
    }
    while (ch!='n');
    return 0;
}
0
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
17.01.2015, 22:33 #159
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Значение шилингов увеличивается на 1 а в пенсы попадёт 10 а не 1 (если складывать 0.0.34 + 0.0.0), хотя вроде как должно быть 2 шилинга и 10 пенсов (12+12+10). Один хрен - если подставить значения из книги - 5.10.6 + 3.2.6 - получим нужные 8.13.0. У меня результаты точно такие же. Вот код если что:
Если вводить пример из книжки понятно что получиться потому-что там значения маленькие а попробуй другие....
Хорошо может быть так будет понятней попробуй ввести такие значения:
5.25.6 + 3.12.35 = ? (сколько получиться у тебя)

И сравни результат свой и правильный (10.2.8)

Я этот пример решил так:
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
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(0, "Rus");
    int shil, penc, funt, shil2, penc2, funt2, shil3, penc3;
    char ch;
 
    do
    {
        cout << "Введите первую сумму: "; cin >> funt >> shil >> penc;
        cout << "Введите вторую сумму: "; cin >> funt2 >> shil2 >> penc2;
 
        funt += funt2;
 
        if ((penc3 = penc + penc2) > 11)
        {
            shil += (penc3 / 11);
            penc = penc3 % 11;
        }
        else
        {
            penc += penc2;
        }
 
        if ((shil3 = shil + shil2) > 19)
        {
            funt += (shil3 / 19);
            shil = shil3 % 19;
        }
        else
        {
            shil += shil2;
        }
 
        cout << "Всего " << funt << "." << shil << "." << penc << endl;
 
        cout << "Продолжить(y/n)?"; cin >> ch;
    } while (ch != 'n');
 
    return 0;
}
1
Recrut_rf
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 49
Завершенные тесты: 2
17.01.2015, 23:28 #160
Признаю - мой код неправильный...
у тебя верно только надо в строках
Цитата Сообщение от dicros Посмотреть сообщение
if ((penc3 = penc + penc2) > 11) { shil += (penc3 / 11); penc = penc3 % 11; } else
и
Цитата Сообщение от dicros Посмотреть сообщение
if ((shil3 = shil + shil2) > 19) { funt += (shil3 / 19); shil = shil3 % 19; } else
поменять кое какие цифры. Вот правильный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if ((penc3 = penc + penc2) > 11)
        {
            shil += (penc3 / 12);
            penc = penc3 % 12;
        }
        else
        {
            penc += penc2;
        }
 
        if ((shil3 = shil + shil2) > 19)
        {
            funt += (shil3 / 20);
            shil = shil3 % 20;
        }
        else
Цитата Сообщение от dicros Посмотреть сообщение
5.25.6 + 3.12.35 = ? (сколько получиться у тебя)
И сравни результат свой и правильный (10.2.8)
Правильный результат - 10.0.5 (пенсов - 35+6=41 из них 5 пенсов и 3 шилинга получаем, шилингов значит будет 25+12+3(от пенсов)=40 что равоносильно 2 фунтам, фунтов - 5+3+2(от шилингов) = 10. Итого - 10.0.5).
Спасибо что заставил довести до ума это задание
1
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
18.01.2015, 06:16 #161
Цитата Сообщение от Recrut_rf Посмотреть сообщение
поменять кое какие цифры. Вот правильный вариант:
Ты прав как-то не обратил на этот ньюанс внимание.
0
Иван89
4 / 4 / 2
Регистрация: 07.02.2014
Сообщений: 73
23.01.2015, 13:46 #162
Доброго времени суток. В программировании только начал разбираться. Попробовал решить 12 задачу из 2 главы и вот что получилось. Правильно ли я все сделал?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    float sh, p, f;
    float newp;
    cout << "Введите число десятичных фунтов: ";
    cin >> newp;
    f = static_cast<int>(newp);
    sh = static_cast<int>((newp*240-f*240)/12);
    p = static_cast<int>((newp * 240 - f * 240)- sh*12);
    cout << "Эквивалентная сумма в старой форме записи: " << "J"<< f << "." << sh << "." << p << endl;
    system("pause");
    return 0;
}
0
dicros
1 / 1 / 1
Регистрация: 24.04.2014
Сообщений: 64
23.01.2015, 15:28 #163
Цитата Сообщение от Иван89 Посмотреть сообщение
Доброго времени суток. В программировании только начал разбираться. Попробовал решить 12 задачу из 2 главы и вот что получилось. Правильно ли я все сделал?
Я сам тока начинаю поэтому не факт что я буду прав. Но на мой взгляд как это понял я то вот эти строчки никчему
static_cast<int>(newp)

т.е предположим что в переменной news хранится число 10.23 (оно имеет тип float)
затем вы его явно преобразовываете в int, а это значит откусываете остаток от целой части и у вас получается число 10. Затем вы это же число 10 переводите обратно в тип float, значит у вас уже туда попадет целое число без остатка.

P.S повторюсь это лишь мое мнение, возможно я и не прав(сам еще только учусь)))
0
Иван89
4 / 4 / 2
Регистрация: 07.02.2014
Сообщений: 73
23.01.2015, 18:26 #164
тут newp остается без изменений. изменяются только переменные p,f,sh. Хотя я пробовал их изначально задавать в типе int, и все так же работало. И можно было обойтись без этих строчек static_cast<int>(newp)
0
Recrut_rf
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 49
Завершенные тесты: 2
23.01.2015, 21:36 #165
Цитата Сообщение от dicros Посмотреть сообщение
вот эти строчки никчему
static_cast<int>(newp)
Задание подразумевает оттачивание навыков явного преобразования типов, что в нём кстати и изложено. Поэтому этот оператор нужен. И да - я сам тоже начинающий.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 21:36
Привет! Вот еще темы с ответами:

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

Объектно-ориентированное программирование - C++
Составить описание класса одномерных массивов строк, каждая строка которых задается длиной и указателем на выделенную для нее память....

Объектно-ориентированное программирование - C++
На основе объектного подхода создать программу которая рассчитывает значения степенных функций y=sqr(x), корень 3, 4, 5 степеней. В...

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


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

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

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