Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/389: Рейтинг темы: голосов - 389, средняя оценка - 4.90
ZarinZomanu4
9 / 9 / 0
Регистрация: 27.05.2013
Сообщений: 93
1

Решение всех задач из учебника Стивена Прата

23.03.2015, 12:20. Просмотров 78708. Ответов 211
Метки нет (Все метки)

Здравствуйте!Решил выложить свои решения задач книги С. Прата. Код ни в коем случае не претендует на звание эталонного, если есть замечания с радостью выслушаю и приму к сведению.

Глава 4

Задания




Задача №1
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>
 
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    int age;
    char bit;
    //enum gradeW {A,B,C};
    cout<<"what is your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"what is your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"wrong"<<endl;}
    cin.get();
    return 0;
  }

Задача №2
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
#include <iostream>
#include <string>
int main ()
{ 
    using namespace std;
    string Fname;
    string Lname;
    int age;
    char bit;
    cout<<"what is your first name "<<endl;
    getline(cin,Fname);
    cout<<"what is your last name "<<endl;
    getline(cin,Lname);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"dsfsfsfsfsd"<<endl;}
    cin.get();
    return 0;
  }

Задача №3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
//#include <string>
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    cout<<"Enter your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"Enter your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"Name: "<<Lname<<",  "<<Fname<<endl;
    cin.get();
    return 0;
  }

Задача №5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack={"Mocha Much",2.3,350};
    cout<<"Struct )))) "<<snack.Name<<snack.netto<<"     "<<snack.Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack[3]={
        {"Mocha Much",2.3,350},
        {"sfdsfsdf",2.45,435},
        {"bnderlogi", 2.12 , 777}};
 
    cout<<"Struct  "<<snack[2].Name<<"    "<<snack[2].netto<<"   "<<snack[0].Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
struct Pizza
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{   using namespace std;
    Pizza Peper;
    cout<<"Enter Name:"<<endl;
    cin.getline (Peper.Name,20);
    cout<<"Enter diametr:"<<endl;
    cin>>Peper.netto;
    cout<<"Enter ves:"<<endl;
    cin>>Peper.Ccal;
    cout<<"Pizza: "<<Peper.Name<<endl<<"Diametr: "<<Peper.netto<<endl<<"Ves: "<<Peper.Ccal<<endl;
    cin.get();
    cin.get();
    return 0;
  }

Задача №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
#include <iostream>
#include <string>
struct Pizza
{
    std :: string Name ;
    double netto;
    int Ccal;
    };
int main ()
{   using namespace std;
    Pizza *pz =new Pizza;
    cout<<"Enter diametr:"<<endl;
    cin>>(*pz).netto;
    cout<<"Enter Name:"<<endl;
    cin>>(*pz).Name ;
    cout<<"Enter ves:"<<endl;
    cin>>(*pz).Ccal;
    cout<<"Pizza: "<<(*pz).Name<<endl;
    cout<<"Diametr: "<<(*pz).netto<<endl<<"Ves: "<<(*pz).Ccal<<endl;
    system ("pause");
    delete pz;
    return 0;
  }

Задача №9
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
#include <iostream>
#include <string>
struct CandyBar
    {
        std::string Name  ;
        double netto;
        int Ccal;
    };
void main ()
{ 
    using namespace std;
    CandyBar *bar= new CandyBar[3];
    bar[0].Name="Mocha Much";
    bar[0].netto=2.3;
    bar[0].Ccal=350;
    bar[1].Name="sfdsfsdf";
    bar[1].netto=2.45;
    bar[1].Ccal=435;
    bar[2].Name="bnderlogi";
    bar[2].netto=2.12;
    bar[2].Ccal=777;
    cout<<"Struct  "<<bar[0].Name<<"    "<<bar[0].netto<<"   "<<bar[0].Ccal<<endl;
    system("pause");
    delete bar;
          }

Задача №10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
int main ()
{ 
    using namespace std;
    int bar[3];
    cout<<"Vvedite rezyltat 1 "<<endl;
    cin>>bar[0];
    cout<<"Vvedite rezyltat 2 "<<endl;
    cin>>bar[1];
    cout<<"Vvedite rezyltat 3 "<<endl;
    cin>>bar[2];
    int Sr=(bar[0]+bar[1]+bar[2])/3;
    cout<<"Rezyltat  "<<bar[0]<<"    "<<bar[1]<<"   "<<bar[2]<<"  Srednee "<<Sr<<endl;
    system("pause");
}


Задачи из глав с 4 о 10, решенные gru74ik
8
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2015, 12:20
Ответы с готовыми решениями:

Пример с книги Стивена Прата (Язык программирования с++). Расхождение в ответе
В книге один ответ. У меня другой выходит (На русский перевод, не обращайте внимание) Сама...

Решение задач из учебника Томшина
Я являюсь студентом 1-го курса, и нам дали задачи по c# которые необходимо решить. Задачи взяты из...

Понятен материал учебника, но не получается самостоятельное решение задач
Здравствуйте. Читаю книжку Дейтелов, переписываю код, который дан в учебнике, потом читаю...

Нюансы синтаксиса: классы, список инициализации (неясная строка из учебника Стивена Праты)
Вот сам класс #ifndef TABTENN0_H_ #define TABTENN0_H_ #include &lt;string&gt; using std ::...

211
DobroAlex
Форумчанин
423 / 363 / 169
Регистрация: 30.04.2016
Сообщений: 1,808
Завершенные тесты: 3
12.08.2017, 14:28 161
Georgiy2017, я о выводе трёх членов одного инстанса класса. Цикл выводит три члена трёх разных инстансов (экземпляров) одного класса
1
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
12.08.2017, 17:47 162
Вильям Вингейт (William Wingrate) заведует службой анализа рынка пиццы.
О каждой пицце он записывает след. информацию:
1) наименование компании - производителя пиццы, которое может состоять из более чем одного слова
2) диаметр пицца.
3) вес пиццы.
Разработайте структуру, которая может содержать всю эту информацию, и напишите программу, использующую структурную
переменную этого типа. Программа должна запрашивать у пользоваеля каждый из перечисленных показателей и затем отображать введенную информацию.
Применяйте cin (или его методы) и cout
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 <string>
#include <cstring>
int main()
{
    setlocale(LC_ALL, "Russian");
    using std::cout;
    using std::cin;
    using std::endl;
    using std::string;
    struct MarketAnalysis
    {
        string NameCompany;
        double DiameterPizza;
        double Weight;
    };
 
    MarketAnalysis User;
    cout << "Название компании: ";
    getline(cin, User.NameCompany);
    cout << "Диаметр пиццы: ";
    cin >> User.DiameterPizza;
    cout << "Вес пиццы: ";
    cin >> User.Weight;
    cout << "Компания " << User.NameCompany << " имеет пиццу диаметром " << User.DiameterPizza << " и ее вес " << User.Weight << endl;
        return 0;
}
и 2 вариант решения
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
44
#include <iostream>
#include <cstring>
int main()
{
    setlocale(LC_ALL, "Russian");
    using std::cout;
    using std::cin;
    using std::endl;
 
    struct MarketAnalysis
    {
        char NameCompany[256];
        double DiameterPizza;
        double Weight;
    };
 
    MarketAnalysis User;
    cout << "Название компании: ";
    cin.getline(User.NameCompany, 256);
    cout << "Диаметр пиццы: ";
    cin >> User.DiameterPizza;
    cout << "Вес пиццы: ";
    cin >> User.Weight;
    char *p2 = new char[strlen("Компания ") + strlen(User.NameCompany) + strlen(" имеет пищу диаметром ") + 1];
    strcpy(p2, "Компания ");
    strcat(p2, User.NameCompany);
    strcat(p2, " имеет пищу диаметром ");
    cout << p2;
    cout << User.DiameterPizza;
    char *p3 = new char[strlen(" и ее вес ") + 1];
    strcpy(p3, " и ее вес ");
    cout << p3;
    cout << User.Weight << endl;
    cout << endl << endl;
    cout << "===================== <<< Размер в байтах указателей >>> ===================================\n";
    cout << "Компания: " << sizeof(p2) << " байт\n"; // 4 байта
    delete[] p2;
    delete[] p3;
    cout << "===================== <<< Размер в байтах членов >>> ===================================\n";
    cout << "Компания: " << sizeof(User.NameCompany) << " байт\n"; // 256 байт
    cout << "Диаметр: " << sizeof(User.DiameterPizza) << " байт\n"; // 8 байт
    cout << "Вес: " << sizeof(User.Weight) << " байт\n"; // 4 байта
    return 0;
}
Пишите свои решения
0
rikimaru2013
2527 / 1187 / 357
Регистрация: 30.11.2013
Сообщений: 3,817
12.08.2017, 18:25 163
Цитата Сообщение от Georgiy2017 Посмотреть сообщение
Пишите свои решения
Первое решение вполне крутое - зачем вам еще решения?

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 <string>
using namespace std;
 
struct PizzaCompanyInfo
{
    string m_companyName;
    double m_diametr;
    double m_weight;
 
    PizzaCompanyInfo()
        : m_diametr( 0.0f)
        , m_weight( 0.0f )
    {
    }   
};
 
istream & operator >> ( istream & is, PizzaCompanyInfo& f )
{
    is >> f.m_companyName >> f.m_diametr >> f.m_weight;
    return is;
}
 
ostream & operator<< ( ostream & os, PizzaCompanyInfo& f )
{
    os << "Company: " << f.m_companyName << " product pizza with diametr " << f.m_diametr << " that weight over " << f.m_weight << std::endl;
    return os;
}
 
int main()
{
    PizzaCompanyInfo obj;
    cin >> obj;
    cout << obj;
}
1
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
12.08.2017, 19:14 164
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Первое решение вполне крутое - зачем вам еще решения?
Ну там с массивом)
А что вы тут сделали?
C++
1
2
3
4
5
PizzaCompanyInfo()
        : m_diametr( 0.0f)
        , m_weight( 0.0f )
    {
    }
0
rikimaru2013
2527 / 1187 / 357
Регистрация: 30.11.2013
Сообщений: 3,817
12.08.2017, 19:16 165
Цитата Сообщение от Georgiy2017 Посмотреть сообщение
А что вы тут сделали?
Инициализировал поля класса. Можете почитать constructor initialization list
0
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
12.08.2017, 19:28 166
rikimaru2013, уже 2 раз делают так
C++
1
2
3
4
5
6
7
8
9
10
11
istream & operator >> ( istream & is, PizzaCompanyInfo& f )
{
    is >> f.m_companyName >> f.m_diametr >> f.m_weight;
    return is;
}
 
ostream & operator<< ( ostream & os, PizzaCompanyInfo& f )
{
    os << "Company: " << f.m_companyName << " product pizza with diametr " << f.m_diametr << " that weight over " << f.m_weight << std::endl;
    return os;
}
Так лучше работать со структурами, если нужно показать содержимое структуры?
0
Senarist
51 / 55 / 34
Регистрация: 14.03.2014
Сообщений: 739
13.08.2017, 11:31 167
Georgiy2017, изучайте дальше по книге. В главе 11 вы познакомитесь с этим.
1
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
13.08.2017, 12:37 168
Цитата Сообщение от Georgiy2017 Посмотреть сообщение
А что вы тут сделали?
Georgiy2017, начиная с C++11 можно делать так:
C++
1
2
3
4
5
6
struct PizzaCompanyInfo
{
    // инициализация данных-членов прямо в объявлении класса:
    float m_diametr = 0.0;
    float m_weight = 0.0;
}
P.S. Чтобы задействовать фишки из новых стандартов, надо включить их поддержку в своей IDE.
1
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
14.08.2017, 16:28 169
Решение 8 задачи из 4 главы

Выполните упражнения 7, но с применением операции new для размещения структуры в свободном хранилище вместо объявления структурной переменной.
Кроме того, сделайте так, чтобы программа сначала запрашивала диаметр пиццы, а потом - наименование компании.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string>
using std::ostream;
using std::istream;
using std::string;
using std::cout;
using std::cin;
using std::endl;
 
struct MarketAnalysis
{
    string NameCompany;
    double DiameterPizza;
    double Weight;
};
 
 
istream & operator>> ( istream & SwingYourFingers, MarketAnalysis * p)
{
    cout << "Диаметр пиццы: ";
    (SwingYourFingers >> p->DiameterPizza).get();
    cout << "Название компании: ";
    getline(SwingYourFingers, p->NameCompany);
    cout << "Вес: ";
    SwingYourFingers >> p->Weight;
    return SwingYourFingers;
}
 
ostream & operator<< ( ostream & Exit, MarketAnalysis * p)
{
    Exit << "Компания: " << p->NameCompany << endl;
    Exit << "Диаметр: " << p->DiameterPizza << endl;
    Exit << "Вес: " << p->Weight << endl;
    return Exit;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    
 
    MarketAnalysis *p = new MarketAnalysis;
    cin >> p; // Ввод 3 члена одним оператором :)
    /*или убрать функцию istream & operator>> и написать так
 
    cout << "Диаметр пиццы: ";
    (cin >> p->DiameterPizza).get();
    cout << "Название компании: ";
    getline(cin, p->NameCompany);
    cout << "Вес: ";
    cin >> p->Weight;
    cout << endl << endl;*/
    cout << endl << endl;
 
    cout << p; // Вывод 3 члена одним ударом :))
    /*или убрать функцию ostream & operator<< и написать так
 
    cout << "Компания: " << p->NameCompany << endl;
    cout << "Диаметр: " << p->DiameterPizza << endl;
    cout << "Вес: " << p->Weight << endl;
    */
    delete p;
    return 0;
}
Добавлено через 4 часа 3 минуты
Задача 9 глава 4

Выполните упражнение 6, но вместо объявления массива из трех структур CandyBar используйте операцию new для
динамического размещения массива.

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 <string>
using std::string;
using std::endl;
using std::cout;
 
struct  CandyBar
{
    string BoxName;
    double Weight;
    unsigned int Calories;
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    CandyBar *p = new CandyBar[3];
    p[0] = { "Кукуруза", 0.100, 103 };
    p[1] = { "Молочные сосиски", 0.100, 260 };
    p[2] = { "Арбуз", 0.100, 40 };
    
    cout << "Название: " << p->BoxName << ", вес " << p->Weight << ", калорий " << p->Calories << endl;
    cout << "Название: " << (p + 1)->BoxName << ", вес " << (p + 1)->Weight << ", калорий " << (p + 1)->Calories << endl;
    cout << "Название: " << (p + 2)->BoxName << ", вес " << (p + 2)->Weight << ", калорий " << (p + 2)->Calories << endl;
    delete[] p;
    return 0;
}
Вот только я хотел сделать с перегрузкой функций ввода/вывода, но что-то не получается, подскажите как это сделать

Добавлено через 18 часов 34 минуты
Решение 10 задачи 4 главы

Напишите программу, которая приглашает пользователя ввести три результата забега на 40 ярдов (или 40 метров, если желаете)
и затем отображает эти значения и их среднее. Для хранения данных применяйте объект array. (Если объект array не доступен,
воспользуйтесь встроенным массивом.)

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 <array>
using std::cout;
using std::cin;
using std::endl;
using std::array;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Введите результат забега:\n";
    double Race1, Race2, Race3;
    cout << "Первый результат забега: ";
    cin >> Race1;
    cout << "Второй результат забега: ";
    cin >> Race2;
    cout << "Тртий результат забега: ";
    cin >> Race3;
 
    array<double, 3> Race = { Race1, Race2, Race3 };
    cout << "1) " << Race[0] << endl
        << "2) " << Race[1] << endl
        << "3) " << Race[2] << endl;
    cout << "Их среднее " << Race[0] + Race[1] + Race[2] / 3 << endl;
    return 0;
}
0
Senarist
51 / 55 / 34
Регистрация: 14.03.2014
Сообщений: 739
14.08.2017, 17:02 170
Georgiy2017,
C++
1
cout << "Их среднее " << (Race[0] + Race[1] + Race[2]) / Race.size() << endl;
1
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
17.08.2017, 23:32 171
Решение 1 задачи 5 главы

Напишите программу, запрашивающую у пользователя ввод двух целых чисел.
Затем программа должна вычислить и выдать сумму всех целых чисел, лежащих
между этими двумя целыми. Предполагается, что меньшее значение вводится первым.
Например, если пользователь введ 2 и 9, программа должна сообщить, что сумма всеъ целых
чисел от 2 до 9 равна 44.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int a, b; // Ввод двух целых чисел
    std::cout << "Введите первое значение: "; 
    std::cin >> a;
    std::cout << "Введите второе значение: ";
    std::cin >> b;
    int Sum = 0; // Накопительная переменная
    for (int Counter = a; Counter <= b; Counter++)
    {
        Sum += Counter;
    }
    std::cout << Sum << std::endl; // вывод накопленной суммы
}

Решение 2 задачи главы 5
/*
Перепишите код из листинга 5.4

=============================================================================================================================
const int ArSize = 16;
long long factorials[ArSize];
factorials[0] = factorials[1] = 1LL;
for (int Counter = 2; Counter < ArSize; Counter++)
factorials[Counter] = Counter * factorials[Counter - 1];
for (int Counter = 0; Counter < ArSize; Counter++)
cout << Counter << "! = " << factorials[Counter] << endl;
============================================================================================================================

с использованием объекта array вместо встроенного массива и типа long double вместо long long.
Найдите значение 100!
*/

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <array>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int ArSize = 101;
    std::array<long double, ArSize> factorials;
    factorials[0] = factorials[1] = 1LL;
    for (int Counter = 2; Counter < ArSize; Counter++)
        factorials[Counter] = Counter * factorials[Counter - 1];
    for (int Counter = 0; Counter < ArSize; Counter++)
        std::cout << Counter << ": = " << factorials[Counter] << std::endl;
    return 0;
}
Добавлено через 56 минут
Решение 3 задачи главы 5

Напишите программу, которая приглашает пользователя вводить числа. После каждого
введенного значения программа должна выдавать накопленную сумму введенных значений.
Программа должна завершится при вводе 0.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int Number;
    int Sum = 0;
    do
    {
        std::cout << "Введите значение: ";
        std::cin >> Number;
        Sum += Number;
    } while (Number);
    std::cout << "Сумма: " << Sum << std::endl;
}
Добавлено через 4 часа 8 минут
Решение 4 задачи главы 5

Дафна инвестировала $100 под простые 10%. Другими словами, ежегодно инвестиция должна приносить 10% инвестированной суммы, т.е. $10 каждый год:
Прибыль = 0,10 х исходный баланс
В то же время Клео инвестировала $100 под сложные 5%. Это значит, что прибыль составит 5% от текущего баланса, включая предыдущую накопленную прибыль:
прибыль = 0,5 х текущий баланс
Клео зарабатывает 5% от $100 в первый год, что дает ей $105. На след. год она зарабатывает 5% от $105? что составляет $5.25, и т.д. Напишите программу,
которая вычислит, сколько лет понадобится для того, чтобы сумма баланса Клео превысила сумму баланса Дафны, с отображением значений обоих балансов за каждый год.

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>
int main()
{
    setlocale(LC_ALL, "Russian");
    double Dafna = 100; // начальная сумма Дафны
    double Dafna2;
    std::cout << "Дафна инвестирована $" << Dafna << " под простые 10%\n";
    double Cleo = 100; // начальная сумма Клео
    std::cout << "Клео инвестировала $" << Cleo << " под сложные 5%\n";
    unsigned int Year = 1; // Год
    double DafnaBalance = 0.10 * Dafna; // Прибыль от 10%
    double CleoBalance = 0.05 * Cleo; // Прибыль от 5%
    double DafnaBalanceForTheYear = Dafna + DafnaBalance; // Суммируем прибыль от процента к балансу 
    double CleoBalanceForTheYear = Cleo + CleoBalance; // то же самое
    while (CleoBalanceForTheYear < DafnaBalanceForTheYear)  // В то время как Клео получает меньше чем Дафна
    {
        CleoBalance = 0.05 * Cleo; // Прибыль от 5%
        CleoBalanceForTheYear = Cleo + CleoBalance; // Присваиваем к балансу
        Cleo = CleoBalanceForTheYear; // Присваиваем к изначальной сумме, так как в дальнейшем из этой суммы будем брать процент
        
        DafnaBalanceForTheYear = Dafna + (DafnaBalance * (double) Year); // DafnaBalanceForTheYear будет увеличиватся (умножаем на год чтобы не стоять на месте) // 110 120 130 140 150 ...
        Dafna2 = DafnaBalanceForTheYear; // специально, чтобы показать в конце сумму 38 строка (можно использовать и DafnaBalanceForTheYear
 
        std::cout << std::endl;
        std::cout << "==========================================\n";
        std::cout << Year << " год\n";
        std::cout << "Баланс Дафны составляет " << DafnaBalanceForTheYear << std::endl;
        std::cout << "Баланс Клео составляет " << CleoBalanceForTheYear << std::endl;
        Year++; // след. год
    }
    std::cout << "Клео понадобилось " << Year << " лет чтобы привысить сумму баланса Дафны\n";
    std::cout << "Баланс Дафины составляет " << Dafna2 << std::endl;
    std::cout << "Баланс Клео составляет " << Cleo << std::endl;
    
    return 0;
}
Добавлено через 1 час 29 минут
Решение 5 задачи главы 5

Предположим, что вы продаете книгу по программированию С++ для начинающих. Напишите программу, которая позволит ввести ежемесячные
объемы продаж в течение года (в количестве книг, а не в деньгах). Программа должна использовать цикл, в котором выводится приглашение
с названием месяца, применяя массив указателей на char (или массив объектов string, если вы предпочитаете его), инициализированный строками
- названиями месяцев, и сохраняя введенные значения в массиве int. Затем программа должна найти сумму содержимого массива и выдать общий объем продаж за год.

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 <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    const unsigned int Month = 12;
    std::string Year[Month] = {
        "Янаварь",
        "Февраль",
        "Март",
        "Апрель",
        "Май",
        "Июнь",
        "Июль",
        "Август",
        "Сентябрь",
        "Октябрь",
        "Ноябрь",
        "Декабрь"
    };
    unsigned int NumberOfBook[Month];
    unsigned int Sum = 0;
    for (int month = 0; month < Month; month++)
    {
        std::cout << Year[month] << ": ";
        std::cin >> NumberOfBook[month];
        Sum += NumberOfBook[month];
    }
    std::cout << "Общий объем продаж: " << Sum << std::endl;
    return 0;
}
Не знаю, правильно или нет

Добавлено через 3 часа 25 минут
Решение 6 задачи 5 главы

Выполните упражнение 5, но используя двумерный массив для сохранения данных о месячных продажах за 3 года.
Выдайте общую сумму продаж за каждый год и за все годы вместе.

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
44
45
46
47
48
#include <iostream>
#include <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    const unsigned int Month = 12; 
    const unsigned int year = 3;
    std::string Year[Month] = { // Месяцы
        "Январь\t",
        "Февраль\t",
        "Март\t",
        "Апрель\t",
        "Май\t",
        "Июнь\t",
        "Июль\t",
        "Август\t",
        "Сентябрь",
        "Октябрь\t",
        "Ноябрь\t",
        "Декабрь\t"
    };
 
    std::string SaleOfBooks[year] = { // Года
        "2017",
        "2018",
        "2019"
    };
 
    unsigned int NumberOfBook; // количество книг
    unsigned int SalesAmount = 0; 
    for (int CounterYear = 0; CounterYear < year; CounterYear++)
    {
        unsigned int Sum = 0;
        std::cout << "===========================================\n";
        std::cout << SaleOfBooks[CounterYear] << " год\n"; //  год
        std::cout << "===========================================\n";
        for (int month = 0; month < Month; month++)
        {
            std::cout << Year[month] << ": "; // Вывод месяца
            std::cin >> NumberOfBook; // Ввод количества книг
            Sum += NumberOfBook; // Количество книг за год
        }
        std::cout << "За " << SaleOfBooks[CounterYear] << " продано: " << Sum << " книг.\n";
        SalesAmount += Sum;
    }
    std::cout << "Общий объем продаж за 3 года: " << SalesAmount << std::endl;
    return 0;
}
Добавлено через 8 минут
Изменил 6 упражнение, так как не использовал двумерный массив

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    const unsigned int Month = 12; 
    const unsigned int year = 3;
    int Mass[Month][year];
    std::string Year[Month] = { // Месяцы
        "Январь\t",
        "Февраль\t",
        "Март\t",
        "Апрель\t",
        "Май\t",
        "Июнь\t",
        "Июль\t",
        "Август\t",
        "Сентябрь",
        "Октябрь\t",
        "Ноябрь\t",
        "Декабрь\t"
    };
 
    unsigned int SaleOfBooks[year] = { 2017, 2018, 2019 };
 
    unsigned int NumberOfBook; // количество книг
    unsigned int SalesAmount = 0; 
    for (int CounterYear = 0; CounterYear < year; CounterYear++)
    {
        std::cout << "===========================================\n";
        std::cout << SaleOfBooks[CounterYear] << " год\n"; //  год
        std::cout << "===========================================\n";
        for (int month = 0; month < Month; month++)
        {
            std::cout << Year[month] << ": "; // Вывод месяца
            std::cin >> Mass[CounterYear][month]; // Ввод количества книг (Создал пустой массив для хранения целых значений)
        }
    }
    std::cout << std::endl << std::endl;
 
    ////// Вывод массива /////
    std::cout << "\t";
    for (int x = 0; x < Month; x++)
    {
        std::cout << Year[x]; // Вывод месяца
    }
    std::cout << std::endl;
    for (int y = 0; y < year; y++)
    {
        unsigned int Sum = 0;
        std::cout << SaleOfBooks[y] << ":\t"; // Год
        for (int x = 0; x < Month; x++)
        {
            std::cout << Mass[y][x] << "\t"; // Вывод сохраненых значений
            Sum += Mass[y][x]; // Количество книг за год
        } 
        std::cout << "| продано: " << Sum << std::endl; // Вывод количество проданых книг за год
        SalesAmount += Sum; // Общее количество проданых книг за 3 года
    }
    std::cout << "\nОбщий объем продаж за 3 года: " << SalesAmount << std::endl; 
    return 0;
}
Добавлено через 12 минут
Цитата Сообщение от Georgiy2017 Посмотреть сообщение
C++
1
unsigned int NumberOfBook; // количество книг
Лишняя переменная, для сохранения количество книг создал массив
Цитата Сообщение от Georgiy2017 Посмотреть сообщение
C++
1
int Mass[Month][year];
Добавлено через 6 часов 4 минуты
Решение 7 задачи 5 главы

Разработайте структуру по имени car, которая будет хранить след. информацию об автомобиле:
название производителя в виде строки в символьном массиве или в объекте string, а также год выпуска автомобиля в виде целого числа.
Напишите программу, которая запросит пользователя, сколько автомобилей необходимо включить в каталог. Затем программа должна применить new
для создания динамического массива структур car указанного пользователем размера. Далее она должна пригласить пользователя ввести название производителя и год
выпуска для наполнения данными каждой структуры в массиве (см. главу 4). И, наконец, она должна отобразить содержимое каждой структуры.
Пример запуска программы должен выглядеть подобно следующему:

Сколько автомобилей поместит в каталог? 2
Автомобиль #1:
Введите производителя: Hudson Hornet
Укажите год выпуска: 1952
Автомобиль #2:
Введите производителя: Kaiser
Укажите год выпуска: 1951
Вот ваша коллекция:
1952 Hudson Hornet
1951 Kaiser

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
#include <iostream>
#include <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    struct  Car
    {
        std::string  Manufacturer; // производитель
        unsigned short YearOfIssue; // год выпуска
    };
    unsigned int NumberOfCars; // Количество автомобилей
    std::cout << "Сколько автомобилей поместить в каталог? ";
    (std::cin >> NumberOfCars).get();
    Car * ChoiseOfMachines = new Car[NumberOfCars]; // Выделяем память для хранения массива структуры под столько штук сколько указал пользователь
    for (short CounterCar = 0; CounterCar < NumberOfCars; CounterCar++) // пробегаемся по указаному количеству автомобилей
    {
        std::cout << "Автомобиль #" << CounterCar + 1 << std::endl; // Номер автомобиля
        std::cout << "Введите производителя: ";
        getline(std::cin, (ChoiseOfMachines + CounterCar)->Manufacturer); // Ввод производителя ( getline отбрасывает нулевой символ в то время как cin оставляет во входной очереди)
        std::cout << "Укажите год выпуска: ";
        (std::cin >> (ChoiseOfMachines + CounterCar)->YearOfIssue).get(); // Ввод года выпуска ( .get() для того чтобы прочитать входной символ)
    }
 
    std::cout << "\n\aВот ваша коллекция:\n";
    for (short Counter = 0; Counter < NumberOfCars; Counter++) // Вывод содержимого структуры
    {
        std::cout << (ChoiseOfMachines + Counter)->YearOfIssue << " " << // (ChoiseOfMachines + Counter) смещение указателя на столько штук сколько указано
            (ChoiseOfMachines + Counter)->Manufacturer << std::endl;
    }
    delete[] ChoiseOfMachines; // освобождаем выделенную память
    return 0;
}
Добавлено через 1 час 46 минут
Решение 8 задачи 5 глава

Напишите программу, которая использует массив char и цикл для чтения по одному слову за раз до тех пор, пока не будет введено слово done.
Затем программа должна сообщить количество введенных слов ( исключая done ). Пример запуска должен быть таким:

Вводите слова (для завершения введите слово done):
anteater birthday category umpster
envy finagle geometry done for sure
Вы ввели 7 слов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int Size = 50;
    char MassChar[Size];
    std::cout << "Вводите слова (для заавершения введите слово done):\n";
    std::cin >> MassChar;
    unsigned int Words = 0;
    while (strcmp(MassChar, "done"))
    {
        std::cin >> MassChar;
        Words++;
    }
    std::cout << "Вы ввели " << Words << " слова." << std::endl;
    return 0;
}
Добавлено через 1 час 37 минут
Решение 9 задачи 5 главы

Напишите программу, соответствующую описанию программы из упражнения 8, но с использование объекта string
вместо символьного массива. Включите заголовочный файл string и применяйте операции отношений для выполнения проверки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    std::string Text;
    std::cout << "Вводите слова (для заавершения введите слово done):\n";
    std::cin >> Text;
    unsigned int Words = 0;
    while (Text != "done")
    {
        std::cin >> Text;
        Words++;
    }
    std::cout << "Вы ввели " << Words << " слова." << std::endl;
    return 0;
}
0
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
18.08.2017, 00:42 172
Решение 10 задачи 5 главы

Напишите программу, использующую вложенные циклы, которая запрашивает у пользователя значение количество строк для отображения.
Затем она должна отобразить указанное число строк со звездочками, с одной звездочкой в первой строке, двумя - во второй и т.д. В
каждой строке звездочкам должны предшествовать точки - в таком количестве, чтобы общее число символов в каждой строке было равно количеству строк.
Пример запуска программы должен выглядеть след. образом:

Введите количество строк: 5
....*
...**
..***
.****
*****

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>
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int NumberOfLines;
    std::cout << "Введите количество строк: ";
    std::cin >> NumberOfLines;
    int y, x, dot, star;
    for (y = 0, dot = 1; y < NumberOfLines; y++, dot++)
    {
        for (x = 0; x < NumberOfLines - dot; x++)
        {
            std::cout << ".";
        }
        for (star = NumberOfLines; star > x; star--)
        {
            std::cout << "*";
        }
        std::cout << std::endl;
    }
    return 0;
}
0
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
24.08.2017, 10:33 173
Решение задач 6 главы

Упражнение 1
Кликните здесь для просмотра всего текста

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
/*
Напишите программу, которая читает клавиатурный ввод до символа @ и повторяет его, за исключением десятичных цифр,
преобразуя каждую букву верхнего регистра в букву нижнего регистра и наоборот. (Не забудьте о семействе функции cctype)
*/
#include <iostream>
#include <cctype>
int main()
{
    setlocale(LC_ALL, "Russian");
    char ch;
    std::cout << "Введите строку: ";
    std::cin.get(ch);
    while (ch != '@')
    {
        if (ch == '\n')
            std::cout << ch;
        else
        {
            if (ch >= 'a' && ch <= 'z')
                std::cout << (char) toupper(ch);
            else if (ch >= 'A' && ch <= 'Z')
                std::cout << (char) tolower(ch);
        }
        std::cin.get(ch);
    }
    return 0;
}


Упражнение 2
Кликните здесь для просмотра всего текста

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
/*
Напишите программу, читающую в массив double до 10 значений пожертвований. (Или, если хотите, используйте шаблонный объект array.)
Программа должна прекращать ввод при получении нечисловой величины. Она должна выдавать среднее  значение полученных чисел, а также количество значений
в массиве, превышающих среднее.
*/
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int SIZE = 10;
    double donations[SIZE];
    double sum = 0.0;
    unsigned count = 0;
    unsigned count2 = 0;
    for (int i = 0; i < SIZE; i++)
    {
        std::cout << "Введите " << i + 1 << " значение: ";
        if (!(std::cin >> donations[i]))
            break;
        count2++;
        sum += donations[i];
    }
    sum /= count2;
    for (int i = 0; i < SIZE; i++)
    {
        if (sum < donations[i])
        {
            ++count;
        }
    }
    std::cout << "Количество значений которые превышают среднее " << sum << ": " << count << std::endl;
    return 0;
}


Упражнение 3
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
/*
Напишите предшественник программы, управляемой меню. Она должна отображать меню из четырех пунктов,
каждый из них помечен буквой. Если пользователь вводит букву, отличающуюся от четырех допустимых, программа должна повторно
приглашать его ввести правильное значение до тех пор, пока он этого не сделает. Затем она должна выполнить некоторое простое действие
на основе пользовательского выбора. Работа программы должна выглядеть примерно так:
 
Введите один из следующих вариантов:
C) плотоядное животное
T) дерево
P) пианист
G) игра
f
Введите c, p, t или g: q
Введите c, p, t или g: t
Клен - это дерево
*/
#include <iostream>
void showmenu();
int main()
{
    setlocale(LC_ALL, "Russian");
    char ch;
    showmenu();
    std::cin >> ch;
    while (ch != 'c' && ch != 'C' && ch != 't' && ch != 'T' && ch != 'p' && ch != 'P' && ch != 'g' && ch != 'G')
    {
        std::cout << "Введите c, p, t или q: ";
        std::cin >> ch;
    }
    switch (ch)
    {
    case 'c':
    case 'C': std::cout << "Лев - это плотоядное животное\n"; break;
    case 't':
    case 'T': std::cout << "Клен - это дерево\n"; break;
    case 'p':
    case 'P': std::cout << "Пианист играет\n"; break;
    case 'g':
    case 'G': std::cout << "CS - это игра\n"; break;
    }
    
    return 0;
}
void showmenu()
{
    std::cout << "Введите один из следующих вариантов:\n";
    std::cout << "c) плотоядное животное\n";
    std::cout << "t) дерево\n";
    std::cout << "p) пианист\n";
    std::cout << "g) игра\n";
}


Упражнение 4
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
Когда вы вступите в благотворительный Орден Программистов (БОП), к вам могут обращаться на заседания БОП по вашему реальному имени, по должности либо секретному имени БОП.
Напишите программу, которая может выводить списки членов по реальным именам, должностям, секретным именам либо по предпочтению самого члена. В основу положите следующую структуру:
 
// Структура имен Благотворительного Ордена Программистов (БОП)
struct bop
{
char fullname[strsize]; // реальное имя
char title[strsize]; // должность
char bopname[strsize]; // секретное имя БОП
int preference; // 0 = полное имя, 1 = титул, 2 = имя БОП
};
 
В этой программе создайте небольшой массив таких структур и инициализируйте его соответствующими значениями. Пусть программа запустит цикл,  который даст возможность
пользователю выбирать разные альтернативы:
 
a.Отображение по имени
b.Отображение по названию
c.Отображение по имени bop
d.Отображать по предпочтению
q.выход
 
Обратите внимание, что "Отображать по предпочтению" не означает, что нужно отобразить член preference; это значит, что необходимо отобразить член структуры, который соответствует
значению preference. Например, если preference равно 1, то выбор d должен вызвать отображение должности данного программиста. Пример запуска этой программы может выглядеть следующим
образом:
 
Отчет о доброжелательном статусе программистов
a.Отображение по имени
b.Отображение по названию
c.Отображение по имени bop
d.Отображать по предпочтению
q.выход
Введите свой выбор: a
Wimp Macho
Raki Rhodes
Celia Laiter
Hoppy Hipman
Pat Hand
Следующий выбор: d
Wimp Macho
Младший программист
чокнутый
Следующий выбор: q
Bye!
*/
#include <iostream>
void showmanu();
const int strsize = 40;
struct bop
{
    char fullname[strsize]; // реальное имя
    char title[strsize]; // должность
    char bopname[strsize]; // секретное имя БОП
    int preference; // 0 = полное имя, 1 = титул, 2 = имя БОП
};
int main()
{
    setlocale(LC_ALL, "Russian");
    showmanu();
    char ch;
    std::cout << "Введите свой выбор: ";
    std::cin >> ch;
    bop Mass[5] = {
        { "Wimp Macho\n", "Младший программист\n", "чокнутый\n" },
        { "Raki Rhodes\n", "AAAAAA\n", "Бешеный\n" },
        { "Celia Later\n", "BBBBBB\n", "Красавица\n" },
        { "Happy Hipman\n", "EEEEE\n", "Санта\n" },
        { "Pet Hend\n", "CCCCCCCC\n", "Шапка\n" }
    };
    while (ch != 'q')
    {
        switch (ch)
        {
        case 'a':
            for (int i = 0; i < 5; i++)
            {
                std::cout << Mass[i].fullname;
            }
            break;
        case 'b': 
            for (int i = 0; i < 5; i++)
            {
                std::cout << Mass[i].title;
            }
            break;
        case 'c':
            for (int i = 0; i < 5; i++)
            {
                std::cout << Mass[i].bopname;
            }
            break;
        case 'd':
            for (int i = 0; i < 5; i++)
            {
                if (Mass[i].preference)
                {
                    std::cout << Mass[i].fullname;
                    break;
                }   
                else if (Mass[i].preference == 1)
                {
                    std::cout << Mass[i].title;
                    break;
                }
                else if (Mass[i].preference == 2)
                {
                    std::cout << Mass[i].bopname;
                    break;
                }
                else
                {
                    std::cout << Mass[i].fullname
                        << Mass[i].title
                        << Mass[i].bopname;
                    break;
                }
            }
        }
        std::cout << "Следующий выбор: ";
        std::cin >> ch;
    }
    std::cout << "Пока\n";
}
void showmanu()
{
    std::cout << "Отчет о доброжелательном статусе программистов\n";
    std::cout << "a.Отображение по имени\n";
    std::cout << "b.Отображение по названию\n";
    std::cout << "c.Отображение по имени bop\n";
    std::cout << "d.Отображать по предпочтению\n";
    std::cout << "q.выход\n";
}


Упражнение 5
Кликните здесь для просмотра всего текста

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
/*
Королевство Нейтрония, где денежной единицей служит тварп, использует следующую шкалу налогооблажения:
первые 5000 тварпов - налог 0%
следующие 10 000 тварпов - налог 10%
следующие 20 000 тварпов - налог 15%
свыше 35 000 тварпов - налог 20%
 
Например, если некто зарабатывает 38 000 тварпов, то он должен заплатить налогов 5000 х 0,00 + 10000 х 0,10 + 20000 х 0,15 + 3000 х 0,20, или 4 600 тварпов.
Напишите программу, которая использует цикл для запроса доходов и выдачи подлежащего к выплате налога. Цикл должен завершаться, когда пользователь вводит
отрицательное или нечисловое значение.
*/
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    long long tvarp;
    std::cout << "Какой ваш доход? ";
    while ((std::cin >> tvarp) && tvarp > 0)
    {
        if (tvarp >= 1 && tvarp < 10000)
        {
            std::cout << "Вы ничего не должны налоговой\n";
        }
        else if (tvarp >= 10000 && tvarp < 20000)
        {
            int temp = (tvarp - 10000) * 0.10;
            std::cout << "Вы должны выплатить налоговой " << temp << std::endl;
        }
        else if (tvarp >= 20000 && tvarp < 35000)
        {
            int temp = 10000 * 0.10 + (tvarp - 20000) * 0.15;
            std::cout << "Вы должны выплатить налоговой " << temp << std::endl;
        }
        else
        {
            int temp = 10000 * 0.10 + 20000 * 0.15 + (tvarp - 35000) * 0.20;
            std::cout << "Вы должны выплатить налоговой " << temp << std::endl;
        }
    }
    std::cout << "Пока\n";
    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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
Постройте программу, которая отслеживает пожертвования в Общество Защиты Влиятельных Лиц. Она должна запрашивать у пользователя количество меценатов,
а затем приглашать вводить их имена и суммы пожертвований от каждого. Информация должна сохраняться в динамически выделяемом массиве структур.
Каждая структура должна иметь два члена: символьный массив (или объект string) для хранения имени и переменную-член типа double - для хранения суммы пожертвования.
После чтения всех данных программа должна отображать именна и суммы пожертвований тех, кто не пожалел $10 000 и более. Этот список должен быть озаглавлен меткой 
"Grand Patrons". После этого программа должна выдать список остальных жертвователей. Он должен быть озаглавлен "Patrons". Если в одной из двух категорий не окажется никого,
программа должна напечатать "none". Помимо отображения двух категорий, никакой другой сортировки делать не нужно.
*/
#include <iostream>
#include <string>
struct MembersDonations
{
    std::string name;
    double price;
};
int main()
{
    setlocale(LC_ALL, "Russian");
    int Donations;
    std::cout << "Сколько человек пожертвовало: ";
    (std::cin >> Donations).get();
    MembersDonations *pMass = new MembersDonations[Donations];
    if (Donations != 0)
    {
        for (int i = 0; i < Donations; i++)
        {
            std::cout << i + 1 << " человек\n";
            std::cout << "Введите имя: ";
            getline(std::cin, (pMass + i)->name);
            std::cout << "Введите сумму пожертвования: ";
            (std::cin >> (pMass + i)->price).get();
        }
        std::cout << "============[ "Grand Patrons" ]============\n";
        int GrandPatrons = 0;
        for (int i = 0; i < Donations; i++)
        {
            if ((pMass + i)->price >= 10000)
            {
                std::cout << "Имя: ";
                std::cout << (pMass + i)->name << std::endl;
                std::cout << "Сумма: ";
                std::cout << (pMass + i)->price << std::endl << std::endl;
                ++GrandPatrons;
            }
        }
        if (GrandPatrons == 0)
        {
            std::cout << "Никого нету!\n";
        }
        std::cout << "============[ "Patrons" ]============\n";
        int Patrons = 0;
        for (int j = 0; j < Donations; j++)
        {
            if ((pMass + j)->price < 10000)
            {
                std::cout << "Имя: ";
                std::cout << (pMass + j)->name << std::endl;
                std::cout << "Сумма: ";
                std::cout << (pMass + j)->price << std::endl << std::endl;
                ++Patrons;
            }
        }
        if (Patrons == 0)
        {
            std::cout << "Никого нету!\n";
        }
    }
    else
        std::cout << ""Нету"\n";
    return 0;
}


Упражнение 7
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
/*
Напишите программу, которая читает слова по одному за раз, пока не будет введена отдельная буква q. После этого программа должна сообщить количество слов,
начинающихся с гласных, количество слов, начинающихся с согласных, а также количество слова, не попадающих ни в одну из этих категорий. Одним из возможных
подходов может быть применение isalpha() для различения слов, начинающихся с букв, и остальных, с последующим применением if или switch для идентификации тех слов,
прошедших проверку isalpha(), которые начинаются с гласных. Пример запуска может выглядеть так: 
 
Введите слова (q для выхода):
The 12 awesome oxen ambled quietly across 15 meters of lawn. q
5 слов, начинающихся с гласных
4 слов, начинающихся с согласных
2 другие
*/
#include <iostream>
#include <cctype>
#include <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int ArSize = 12;
    char MassVowels[ArSize] = { 'a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y' };
    std::string ch;
    std::cout << "Введите слова (q для выхода):\n";
    std::cin >> ch;
    int Consonants = 0; // гласные
    int Vowels = 0; // согласные
    int Other = 0; // другие
    while (ch != "q")
    {
        if (isalpha(ch[0]))
        {
            for (int i = 0; i < ArSize; i++)
            {
                if (ch[0] == MassVowels[i])
                {
                    Consonants++;
                }
            }
            Vowels++;
        }
        else
            Other++;
        std::cin >> ch;
    }
    Vowels = Vowels - Consonants;
    std::cout << Consonants << " слов, начинающихся с гласных\n";
    std::cout << Vowels << " слов, начинающихся с согласных\n";
    std::cout << Other << " другие\n";
    return 0;
}


Упражнение 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
44
45
46
47
48
/*
Напишите программу, которая открывает текстовый файл, читает его символ за символом до самого конца и сообщает количество символов в файле.
*/
#include <iostream>
#include <fstream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int ArSize = 60;
    std::fstream inFile;
    char filename[ArSize];
    std::cout << "Введите имя файла: ";
    std::cin.getline(filename, ArSize);
    inFile.open(filename);
    if (!inFile.is_open())
    {
        std::cout << "Не могу найти файл " << filename << std::endl;
        exit(EXIT_FAILURE);
    }
    int Countch = 0;
    char ch;
    inFile >> ch;
    while (inFile.good())
    {
        Countch++;
        inFile >> ch;
    }
    if (inFile.eof())
    {
        std::cout << "Я достиг конца файла\n";
    }
    else if (inFile.fail())
    {
        std::cout << "Ввод прекращен из-за несоответствия типов\n";
    }
    else
    {
        std::cout << "Упс, ввод приостановлен по неизвестно ошибке\n";
    }
    if (Countch == 0)
        std::cout << "Данные в файле отсутствуют\n";
    else
    {
        std::cout << "Количество символов в файле " << Countch << std::endl;
    }
    inFile.close();
    return 0;
}
0
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
24.08.2017, 10:33 174
Решение задач 6 главы

Упражнение 1
Кликните здесь для просмотра всего текста

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
/*
Напишите программу, которая читает клавиатурный ввод до символа @ и повторяет его, за исключением десятичных цифр,
преобразуя каждую букву верхнего регистра в букву нижнего регистра и наоборот. (Не забудьте о семействе функции cctype)
*/
#include <iostream>
#include <cctype>
int main()
{
    setlocale(LC_ALL, "Russian");
    char ch;
    std::cout << "Введите строку: ";
    std::cin.get(ch);
    while (ch != '@')
    {
        if (ch == '\n')
            std::cout << ch;
        else
        {
            if (ch >= 'a' && ch <= 'z')
                std::cout << (char) toupper(ch);
            else if (ch >= 'A' && ch <= 'Z')
                std::cout << (char) tolower(ch);
        }
        std::cin.get(ch);
    }
    return 0;
}


Упражнение 2
Кликните здесь для просмотра всего текста

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
/*
Напишите программу, читающую в массив double до 10 значений пожертвований. (Или, если хотите, используйте шаблонный объект array.)
Программа должна прекращать ввод при получении нечисловой величины. Она должна выдавать среднее  значение полученных чисел, а также количество значений
в массиве, превышающих среднее.
*/
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int SIZE = 10;
    double donations[SIZE];
    double sum = 0.0;
    unsigned count = 0;
    unsigned count2 = 0;
    for (int i = 0; i < SIZE; i++)
    {
        std::cout << "Введите " << i + 1 << " значение: ";
        if (!(std::cin >> donations[i]))
            break;
        count2++;
        sum += donations[i];
    }
    sum /= count2;
    for (int i = 0; i < SIZE; i++)
    {
        if (sum < donations[i])
        {
            ++count;
        }
    }
    std::cout << "Количество значений которые превышают среднее " << sum << ": " << count << std::endl;
    return 0;
}


Упражнение 3
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
/*
Напишите предшественник программы, управляемой меню. Она должна отображать меню из четырех пунктов,
каждый из них помечен буквой. Если пользователь вводит букву, отличающуюся от четырех допустимых, программа должна повторно
приглашать его ввести правильное значение до тех пор, пока он этого не сделает. Затем она должна выполнить некоторое простое действие
на основе пользовательского выбора. Работа программы должна выглядеть примерно так:
 
Введите один из следующих вариантов:
C) плотоядное животное
T) дерево
P) пианист
G) игра
f
Введите c, p, t или g: q
Введите c, p, t или g: t
Клен - это дерево
*/
#include <iostream>
void showmenu();
int main()
{
    setlocale(LC_ALL, "Russian");
    char ch;
    showmenu();
    std::cin >> ch;
    while (ch != 'c' && ch != 'C' && ch != 't' && ch != 'T' && ch != 'p' && ch != 'P' && ch != 'g' && ch != 'G')
    {
        std::cout << "Введите c, p, t или q: ";
        std::cin >> ch;
    }
    switch (ch)
    {
    case 'c':
    case 'C': std::cout << "Лев - это плотоядное животное\n"; break;
    case 't':
    case 'T': std::cout << "Клен - это дерево\n"; break;
    case 'p':
    case 'P': std::cout << "Пианист играет\n"; break;
    case 'g':
    case 'G': std::cout << "CS - это игра\n"; break;
    }
    
    return 0;
}
void showmenu()
{
    std::cout << "Введите один из следующих вариантов:\n";
    std::cout << "c) плотоядное животное\n";
    std::cout << "t) дерево\n";
    std::cout << "p) пианист\n";
    std::cout << "g) игра\n";
}


Упражнение 4
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
Когда вы вступите в благотворительный Орден Программистов (БОП), к вам могут обращаться на заседания БОП по вашему реальному имени, по должности либо секретному имени БОП.
Напишите программу, которая может выводить списки членов по реальным именам, должностям, секретным именам либо по предпочтению самого члена. В основу положите следующую структуру:
 
// Структура имен Благотворительного Ордена Программистов (БОП)
struct bop
{
char fullname[strsize]; // реальное имя
char title[strsize]; // должность
char bopname[strsize]; // секретное имя БОП
int preference; // 0 = полное имя, 1 = титул, 2 = имя БОП
};
 
В этой программе создайте небольшой массив таких структур и инициализируйте его соответствующими значениями. Пусть программа запустит цикл,  который даст возможность
пользователю выбирать разные альтернативы:
 
a.Отображение по имени
b.Отображение по названию
c.Отображение по имени bop
d.Отображать по предпочтению
q.выход
 
Обратите внимание, что "Отображать по предпочтению" не означает, что нужно отобразить член preference; это значит, что необходимо отобразить член структуры, который соответствует
значению preference. Например, если preference равно 1, то выбор d должен вызвать отображение должности данного программиста. Пример запуска этой программы может выглядеть следующим
образом:
 
Отчет о доброжелательном статусе программистов
a.Отображение по имени
b.Отображение по названию
c.Отображение по имени bop
d.Отображать по предпочтению
q.выход
Введите свой выбор: a
Wimp Macho
Raki Rhodes
Celia Laiter
Hoppy Hipman
Pat Hand
Следующий выбор: d
Wimp Macho
Младший программист
чокнутый
Следующий выбор: q
Bye!
*/
#include <iostream>
void showmanu();
const int strsize = 40;
struct bop
{
    char fullname[strsize]; // реальное имя
    char title[strsize]; // должность
    char bopname[strsize]; // секретное имя БОП
    int preference; // 0 = полное имя, 1 = титул, 2 = имя БОП
};
int main()
{
    setlocale(LC_ALL, "Russian");
    showmanu();
    char ch;
    std::cout << "Введите свой выбор: ";
    std::cin >> ch;
    bop Mass[5] = {
        { "Wimp Macho\n", "Младший программист\n", "чокнутый\n" },
        { "Raki Rhodes\n", "AAAAAA\n", "Бешеный\n" },
        { "Celia Later\n", "BBBBBB\n", "Красавица\n" },
        { "Happy Hipman\n", "EEEEE\n", "Санта\n" },
        { "Pet Hend\n", "CCCCCCCC\n", "Шапка\n" }
    };
    while (ch != 'q')
    {
        switch (ch)
        {
        case 'a':
            for (int i = 0; i < 5; i++)
            {
                std::cout << Mass[i].fullname;
            }
            break;
        case 'b': 
            for (int i = 0; i < 5; i++)
            {
                std::cout << Mass[i].title;
            }
            break;
        case 'c':
            for (int i = 0; i < 5; i++)
            {
                std::cout << Mass[i].bopname;
            }
            break;
        case 'd':
            for (int i = 0; i < 5; i++)
            {
                if (Mass[i].preference)
                {
                    std::cout << Mass[i].fullname;
                    break;
                }   
                else if (Mass[i].preference == 1)
                {
                    std::cout << Mass[i].title;
                    break;
                }
                else if (Mass[i].preference == 2)
                {
                    std::cout << Mass[i].bopname;
                    break;
                }
                else
                {
                    std::cout << Mass[i].fullname
                        << Mass[i].title
                        << Mass[i].bopname;
                    break;
                }
            }
        }
        std::cout << "Следующий выбор: ";
        std::cin >> ch;
    }
    std::cout << "Пока\n";
}
void showmanu()
{
    std::cout << "Отчет о доброжелательном статусе программистов\n";
    std::cout << "a.Отображение по имени\n";
    std::cout << "b.Отображение по названию\n";
    std::cout << "c.Отображение по имени bop\n";
    std::cout << "d.Отображать по предпочтению\n";
    std::cout << "q.выход\n";
}


Упражнение 5
Кликните здесь для просмотра всего текста

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
/*
Королевство Нейтрония, где денежной единицей служит тварп, использует следующую шкалу налогооблажения:
первые 5000 тварпов - налог 0%
следующие 10 000 тварпов - налог 10%
следующие 20 000 тварпов - налог 15%
свыше 35 000 тварпов - налог 20%
 
Например, если некто зарабатывает 38 000 тварпов, то он должен заплатить налогов 5000 х 0,00 + 10000 х 0,10 + 20000 х 0,15 + 3000 х 0,20, или 4 600 тварпов.
Напишите программу, которая использует цикл для запроса доходов и выдачи подлежащего к выплате налога. Цикл должен завершаться, когда пользователь вводит
отрицательное или нечисловое значение.
*/
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    long long tvarp;
    std::cout << "Какой ваш доход? ";
    while ((std::cin >> tvarp) && tvarp > 0)
    {
        if (tvarp >= 1 && tvarp < 10000)
        {
            std::cout << "Вы ничего не должны налоговой\n";
        }
        else if (tvarp >= 10000 && tvarp < 20000)
        {
            int temp = (tvarp - 10000) * 0.10;
            std::cout << "Вы должны выплатить налоговой " << temp << std::endl;
        }
        else if (tvarp >= 20000 && tvarp < 35000)
        {
            int temp = 10000 * 0.10 + (tvarp - 20000) * 0.15;
            std::cout << "Вы должны выплатить налоговой " << temp << std::endl;
        }
        else
        {
            int temp = 10000 * 0.10 + 20000 * 0.15 + (tvarp - 35000) * 0.20;
            std::cout << "Вы должны выплатить налоговой " << temp << std::endl;
        }
    }
    std::cout << "Пока\n";
    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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
Постройте программу, которая отслеживает пожертвования в Общество Защиты Влиятельных Лиц. Она должна запрашивать у пользователя количество меценатов,
а затем приглашать вводить их имена и суммы пожертвований от каждого. Информация должна сохраняться в динамически выделяемом массиве структур.
Каждая структура должна иметь два члена: символьный массив (или объект string) для хранения имени и переменную-член типа double - для хранения суммы пожертвования.
После чтения всех данных программа должна отображать именна и суммы пожертвований тех, кто не пожалел $10 000 и более. Этот список должен быть озаглавлен меткой 
"Grand Patrons". После этого программа должна выдать список остальных жертвователей. Он должен быть озаглавлен "Patrons". Если в одной из двух категорий не окажется никого,
программа должна напечатать "none". Помимо отображения двух категорий, никакой другой сортировки делать не нужно.
*/
#include <iostream>
#include <string>
struct MembersDonations
{
    std::string name;
    double price;
};
int main()
{
    setlocale(LC_ALL, "Russian");
    int Donations;
    std::cout << "Сколько человек пожертвовало: ";
    (std::cin >> Donations).get();
    MembersDonations *pMass = new MembersDonations[Donations];
    if (Donations != 0)
    {
        for (int i = 0; i < Donations; i++)
        {
            std::cout << i + 1 << " человек\n";
            std::cout << "Введите имя: ";
            getline(std::cin, (pMass + i)->name);
            std::cout << "Введите сумму пожертвования: ";
            (std::cin >> (pMass + i)->price).get();
        }
        std::cout << "============[ "Grand Patrons" ]============\n";
        int GrandPatrons = 0;
        for (int i = 0; i < Donations; i++)
        {
            if ((pMass + i)->price >= 10000)
            {
                std::cout << "Имя: ";
                std::cout << (pMass + i)->name << std::endl;
                std::cout << "Сумма: ";
                std::cout << (pMass + i)->price << std::endl << std::endl;
                ++GrandPatrons;
            }
        }
        if (GrandPatrons == 0)
        {
            std::cout << "Никого нету!\n";
        }
        std::cout << "============[ "Patrons" ]============\n";
        int Patrons = 0;
        for (int j = 0; j < Donations; j++)
        {
            if ((pMass + j)->price < 10000)
            {
                std::cout << "Имя: ";
                std::cout << (pMass + j)->name << std::endl;
                std::cout << "Сумма: ";
                std::cout << (pMass + j)->price << std::endl << std::endl;
                ++Patrons;
            }
        }
        if (Patrons == 0)
        {
            std::cout << "Никого нету!\n";
        }
    }
    else
        std::cout << ""Нету"\n";
    return 0;
}


Упражнение 7
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
/*
Напишите программу, которая читает слова по одному за раз, пока не будет введена отдельная буква q. После этого программа должна сообщить количество слов,
начинающихся с гласных, количество слов, начинающихся с согласных, а также количество слова, не попадающих ни в одну из этих категорий. Одним из возможных
подходов может быть применение isalpha() для различения слов, начинающихся с букв, и остальных, с последующим применением if или switch для идентификации тех слов,
прошедших проверку isalpha(), которые начинаются с гласных. Пример запуска может выглядеть так: 
 
Введите слова (q для выхода):
The 12 awesome oxen ambled quietly across 15 meters of lawn. q
5 слов, начинающихся с гласных
4 слов, начинающихся с согласных
2 другие
*/
#include <iostream>
#include <cctype>
#include <string>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int ArSize = 12;
    char MassVowels[ArSize] = { 'a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y' };
    std::string ch;
    std::cout << "Введите слова (q для выхода):\n";
    std::cin >> ch;
    int Consonants = 0; // гласные
    int Vowels = 0; // согласные
    int Other = 0; // другие
    while (ch != "q")
    {
        if (isalpha(ch[0]))
        {
            for (int i = 0; i < ArSize; i++)
            {
                if (ch[0] == MassVowels[i])
                {
                    Consonants++;
                }
            }
            Vowels++;
        }
        else
            Other++;
        std::cin >> ch;
    }
    Vowels = Vowels - Consonants;
    std::cout << Consonants << " слов, начинающихся с гласных\n";
    std::cout << Vowels << " слов, начинающихся с согласных\n";
    std::cout << Other << " другие\n";
    return 0;
}
0
Georgiy2017
2 / 2 / 4
Регистрация: 30.07.2017
Сообщений: 41
24.08.2017, 10:36 175
Упражнение 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
44
45
46
47
48
/*
Напишите программу, которая открывает текстовый файл, читает его символ за символом до самого конца и сообщает количество символов в файле.
*/
#include <iostream>
#include <fstream>
int main()
{
    setlocale(LC_ALL, "Russian");
    const int ArSize = 60;
    std::fstream inFile;
    char filename[ArSize];
    std::cout << "Введите имя файла: ";
    std::cin.getline(filename, ArSize);
    inFile.open(filename);
    if (!inFile.is_open())
    {
        std::cout << "Не могу найти файл " << filename << std::endl;
        exit(EXIT_FAILURE);
    }
    int Countch = 0;
    char ch;
    inFile >> ch;
    while (inFile.good())
    {
        Countch++;
        inFile >> ch;
    }
    if (inFile.eof())
    {
        std::cout << "Я достиг конца файла\n";
    }
    else if (inFile.fail())
    {
        std::cout << "Ввод прекращен из-за несоответствия типов\n";
    }
    else
    {
        std::cout << "Упс, ввод приостановлен по неизвестно ошибке\n";
    }
    if (Countch == 0)
        std::cout << "Данные в файле отсутствуют\n";
    else
    {
        std::cout << "Количество символов в файле " << Countch << std::endl;
    }
    inFile.close();
    return 0;
}


Упражнение 9
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
Выполните упражнение 6, но измените его так, чтобы данные можно было получать из файла. Первым элементом файла должно быть количество меценатов,
а остальная часть состоять из пар строк, в которых первая строка содержит имя, а вторая - сумму пожертвования. То есть файл должен выглядеть примерно так:
 
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000
*/
#include <iostream>
#include <string>
#include <fstream>
struct MembersDonations
{
    std::string name;
    double price;
};
int main()
{
    setlocale(LC_ALL, "Russian");
    const int ArSize = 20;
    std::ofstream outFile;
    char filename[ArSize];
    std::cout << "Введите имя файла: ";
    std::cin.getline(filename, ArSize);
    outFile.open(filename);
    if (!outFile.is_open())
    {
        std::cout << "Я не смог найти файл " << filename << std::endl;
        exit(EXIT_FAILURE);
    }
    int Donations;
    std::cout << "Сколько человек пожертвовало: ";
    (std::cin >> Donations).get();
    outFile << "Мецентов: " << Donations << std::endl;
    MembersDonations *pMass = new MembersDonations[Donations];
    if (Donations != 0)
    {
        for (int i = 0; i < Donations; i++)
        {
            std::cout << i + 1 << " человек\n";
            std::cout << "Введите имя: ";
            getline(std::cin, (pMass + i)->name);
            std::cout << "Введите сумму пожертвования: ";
            (std::cin >> (pMass + i)->price).get();
        }
        outFile << "============[ "Grand Patrons" ]============\n";
        int GrandPatrons = 0;
        for (int i = 0; i < Donations; i++)
        {
            if ((pMass + i)->price >= 10000)
            {
                outFile << "Имя: ";
                outFile << (pMass + i)->name << std::endl;
                outFile << "Сумма: ";
                outFile << (pMass + i)->price << std::endl << std::endl;
                ++GrandPatrons;
            }
        }
        if (GrandPatrons == 0)
        {
            outFile << "Никого нету!\n";
        }
        outFile << "============[ "Patrons" ]============\n";
        int Patrons = 0;
        for (int j = 0; j < Donations; j++)
        {
            if ((pMass + j)->price < 10000)
            {
                outFile << "Имя: ";
                outFile << (pMass + j)->name << std::endl;
                outFile << "Сумма: ";
                outFile << (pMass + j)->price << std::endl << std::endl;
                ++Patrons;
            }
        }
        if (Patrons == 0)
        {
            outFile << "Никого нету!\n";
        }
    }
    else
        outFile << ""Нету"\n";
    outFile.close();
    return 0;
}
0
TrueTerm
178 / 124 / 48
Регистрация: 25.12.2014
Сообщений: 406
21.10.2017, 10:21 176
С решением Упражнения 4 из "Главы 4 не согласен. В задании сказано "конструирует, сохраняет и отображает третью строку", но в предложенной программе третья строка нигде не сохраняется, в конструируется сразу при выводе на экран.
0
courteous_lion
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 19
04.03.2018, 08:19 177
gru74ik, спасибо за ответы.Помогли ПОНЯТЬ то что не понял в книге.Например вы сразу и создаете прототип и определяете функции?В задании 8.6 я столкнулсяс ошибками компилятора.Не мог создать специализацию для указателя на чар массив.
Вопрос-можно ли не заморачиваться с записью функциив трех местах,прототип-обьявление-определение?Сразу можно и прототип вместе определением?
Затем,если честно,ответы редактировали после стажа в программировании,или ответы были написанны при прочтении книги и больше не редактировались?
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
13.04.2018, 18:34 178
Цитата Сообщение от courteous_lion Посмотреть сообщение
спасибо за ответы
Пожалуйста.

Цитата Сообщение от courteous_lion Посмотреть сообщение
вы сразу и создаете прототип и определяете функции?
Когда как. Некоторые компиляторы ругаются, если совмещать объявление и определение функции (то есть, требуют, чтобы сперва шёл прототип, а уже потом реализация). А некоторые вполне себе нормально кушают подход два-в-одном.

Цитата Сообщение от courteous_lion Посмотреть сообщение
если честно,ответы редактировали после стажа в программировании,или ответы были написанны при прочтении книги и больше не редактировались?
Вроде, емнип, постил всё как есть. Перечитайте тему сначала. Там где были ошибки, недочёты или явное убожество - я это с готовностью признавал. Если сообщение редактировалось, то под ним есть примечание когда именно редактировалось.
0
rat0r
284 / 175 / 21
Регистрация: 16.02.2018
Сообщений: 666
13.04.2018, 19:02 179
Цитата Сообщение от gru74ik Посмотреть сообщение
Некоторые компиляторы ругаются, если совмещать объявление и определение функции (то есть, требуют, чтобы сперва шёл прототип, а уже потом реализация).
можно пример?
0
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
13.04.2018, 20:09 180
Цитата Сообщение от rat0r Посмотреть сообщение
можно пример?
Clang 3.4 по стандарту C++03 с флагом -pedantic:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int cube(int x)
{
    return x * x * x;
}
 
int main()
{    
    std::cout << cube(5);
}
https://wandbox.org/permlink/jp9jsyo377kCJbbT

Добавлено через 2 минуты
rat0r, хотя нет, там warning не про то...
0
13.04.2018, 20:09
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2018, 20:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вклады, простые и сложные проценты (вопрос из учебника С. Прата)
Изучаю книгу С. Прата. В главе 5 у него присутствует такая задача: Дафна сделала вклад на сумму...

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива all-для вывода суммы...

Объясните решение задачи из учебника
Книга &quot;Курс теории вероятностей&quot; Б.В. Гнеденко, серия &quot;Классический университетский учебник&quot;, 2005...

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле...
...а реализует функции в другом - в том котором создаёт и ползуется объектом. у меня вопросс: а не...


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

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

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