Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/1010: Рейтинг темы: голосов - 1010, средняя оценка - 4.92
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 92

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

23.03.2015, 12:20. Показов 217333. Ответов 271
Метки нет (Все метки)

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

Глава 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, решенные sourcerer
9
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2015, 12:20
Ответы с готовыми решениями:

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

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

Неожиданный консольный вывод (упражнения 3 к главе 6 книги Стивена Праты)
:-| Вообщем имеется код (решение 3 упражнения к главе 6 книги Прата): #include &lt;iostream&gt; #include&lt;cstdlib&gt; ...

271
9 / 2 / 0
Регистрация: 14.08.2018
Сообщений: 17
26.09.2018, 14:23
Студворк — интернет-сервис помощи студентам
Глава 12. Упражнение 4. Выложу только класс и реализацию методов. Программу поленился писать адекватную, у себя проверил примитивно.
Stack.h
Кликните здесь для просмотра всего текста
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
#pragma once
#ifndef STACK_H_
#define STACK_H_
 
typedef unsigned long Item;
 
class Stack
{
private:
    //enum { MAX = 10 }; 
    Item * pitems;      
    int size;
    int top;            
public:
    Stack(int n = 10);
    Stack(const Stack & st);
    ~Stack();
    bool isempty() const;
    bool isfull() const;
    bool push(const Item & item);   
    bool pop(Item & item);          
    Stack & operator=(const Stack & st);
};
#endif

Stack.cpp
Кликните здесь для просмотра всего текста
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
#include "Stack.h"
 
Stack::Stack(int n)
{
    top = 0;
    size = n;
    pitems = new Item[size];
}
 
Stack::Stack(const Stack & st)
{
    size = st.size;
    top = st.top;
    pitems = new Item[size];
    for (int i = 0; i < size; i++)
        pitems[i] = st.pitems[i];
}
 
bool Stack::isempty() const
{
    return top == 0;
}
 
bool Stack::isfull() const
{
    return top == size;
}
 
bool Stack::push(const Item & item)
{   
    if (top < size)
    {
        pitems[top++] = item;
        return true;
    }
    else
        return false;
}   
 
bool Stack::pop(Item & item)
{
    if (top > 0)
    {
        item = pitems[--top];
        return true;
    }
    else
        return false;
}
 
Stack & Stack::operator=(const Stack & st)
{
    if (this == &st)
        return *this;
    delete[] pitems;
    size = st.size;
    top = st.top;
    pitems = new Item[size];
    for (int i = 0; i < size; i++)
        pitems[i] = st.pitems[i];
}
 
Stack::~Stack()
{
    delete[] pitems;
}
1
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 22
20.10.2018, 21:00
Всем привет , только начал учиться на С++ столкнулся с 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
// Напишите  программу , которая выдает запрос на ввод значений часов и минут. Функция main() должна передать эти два значения  функции имеющей тип void , которая отобразит эти два значения в след. виде :
 
Enter the number of hours : 9
Enter the number of minutes: 28
Time: 9 : 28
 
 Выдает ошибку :
1>ConsoleApplication7.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl t_function(int)" (?t_function@@YAXH@Z) в функции _main
1>D:\C++\#1\ConsoleApplication7\Debug\ConsoleApplication7.exe : fatal error LNK1120:неразрешенных внешних элементов:1
 
Вот что написал :
 
#include "pch.h"
#include <iostream>
using namespace std;
void t_function(int);
 
int main()
{
    cout << "Enter the number of hours: ";
    int h;
    int m;
    cin >> h;
    cout << "Enter the number of minutes: ";
    cin >> m;
    t_function(h);
    t_function(m);
    t_function(1);
    return 0;
        
}
void t_function(int*d , int s)
{
    
    cout << "Time: " << d << ":" << s << endl;
 
}
Можете объяснить как ввести несколько аргументов в функцию и потом выловить их там и оперировать ими в ней что бы например реализовать данную задачу ?

Добавлено через 44 минуты
Уже , сам разобрался )).
0
0 / 0 / 0
Регистрация: 04.02.2018
Сообщений: 3
30.12.2018, 17:31
Глава 18, упражнение 4

"Переделайте программу в листинге 16.5 для использования лямбда-выражений. В частности, замените функцию out int () именованным лямбда-выражением, а два случая использования функтора — двумя анонимными лямбда-выражениями."

Но в листинге 16.5 нет функции outint(). Это опечатка? О каком листинге идёт речь?

Листинг 16.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
#include <iostream>
#include <string>
#include <memory>
 
using namespace std;
 
class Report
{
private:
    string str;
public:
    Report(const string s) : str(s) { cout << "Object created!\n"; }
    ~Report() { cout << "Object deleted!\n"; }
    void comment() const { cout << str << endl; }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    {
        auto_ptr<Report> ps(new Report("using auto_ptr"));
        ps->comment();
    }
    {
        shared_ptr<Report> ps(new Report("using shared_ptr"));
        ps->comment();
    }
    {
        unique_ptr<Report> ps(new Report("using unique_ptr"));
        ps->comment();
    }
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 19.01.2019
Сообщений: 1
19.01.2019, 18:07
Прежде всего, низкий Вам поклон sourcerer за ваши примеры решенных заданий! Некоторые моменты очень помогли, когда руки совсем опускались от безысходности. Вы проделали серьезную работу и она важна для начинающих.

Один момент хотел уточнить по поводу задания 11.7
В условиях задачи отображена формула, по которой применяется вычесление умножения для complex number
Multiplication:a × c = (A × C - B×D, (A×D + B×C)i)

в файле описания методов ComplexNumber.cpp вы используете следующую строчку(№32):
ComplexNumber mult(c1.m_real * c2.m_real, c1.m_imag * c2.m_imag);
которая, на мой взгляд, не соответствует условию, а похожа на обычную операцию умножения. Может я что-то упустил, но на выходе у вас результат соответствует оригинальному варианту? Объясните, пожалуйста, если так.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 22
30.01.2019, 15:43
Всем привет , так и не нашел тут решение 12 главы 5 упражнение , может кто делал или у кого остался исходник киньте если не трудно , задачу и понимаю и не понимаю оновременно .
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
30.01.2019, 23:32
Цитата Сообщение от Afobazol Посмотреть сообщение
которая, на мой взгляд, не соответствует условию, а похожа на обычную операцию умножения. Может я что-то упустил, но на выходе у вас результат соответствует оригинальному варианту? Объясните, пожалуйста, если так.
Afobazol, да, Вы правы:
C++
1
2
3
4
5
6
7
8
9
10
// умножение двух комплексных чисел происходит по правилу
// (a + bi) * (c + di) = (ac – bd) + (ad + bc)i
// (здесь как раз используется, что i2 = –1)
ComplexNumber operator*(const ComplexNumber & c1, const ComplexNumber & c2)
{
    ComplexNumber mult(
        c1.m_real * c2.m_real - c1.m_imag * c2.m_imag,
        c1.m_real * c2.m_imag + c1.m_imag * c2.m_real);
    return mult;
}
0
 Аватар для DanKor1498
8 / 8 / 4
Регистрация: 15.04.2018
Сообщений: 45
22.09.2019, 19:08
Давно хотел выложить, здесь решение всех задач з учебника 6 - го издания(последнего), с 2 главы и по 18. В каждой папке есть текстовый документ з заданием + решение.
Вложения
Тип файла: rar Решение задач, главы 2 - 18.rar (182.6 Кб, 132 просмотров)
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
05.02.2020, 22:10
Цитата Сообщение от sourcerer Посмотреть сообщение
/*
Дафна инвестировала $100 под простые 10%. Другими словами, ежегодно
инвестиция должна приносить 10% инвестированной суммы, т.е. $10 каждый год:
прибыль = 0,10 х исходный баланс
В то же время Клео инвестировала $100 под сложные 5%. Это значит, что прибыль
составит 5% от текущего баланса, включая предыдущую накопленную прибыль:
прибыль = 0,05 х текущий баланс
Клео зарабатывает 5% от $100 в первый год, что дает ей $105. На следующий
год она зарабатывает 5% от $105, что составляет $5.25, и т.д. Напишите
программу, которая вычислит, сколько лет понадобится для того, чтобы сумма
баланса Клео превысила сумму баланса Дафны, с отображением значений обоих
балансов за каждый год.
*/
Я по-другому решил, но, как уже обсуждалась причина, незачем спешить делиться целиком кодом, но мне приятно было решить

Через функции сделал: поинтереснее функция Cleo_Complex cо static int i + функция daph_income,
получил те же 27 лет
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
06.02.2020, 18:50
Кликните здесь для просмотра всего текста
Цитата Сообщение от sourcerer Посмотреть сообщение
//  sp_Ch6_Pg300_Ex03
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 6, страница 300, упражнение 3.
/*
Напишите предшественник программы, управляемой меню. Она должна
отображать меню из четырех пунктов, каждый из них помечен буквой. Если
пользователь вводит букву, отличающуюся от четырех допустимых, программа
должна повторно приглашать его ввести правильное значение до тех пор, пока
он этого не сделает. Затем она должна выполнить некоторое простое действие
на основе пользовательского выбора. Работа программы должна выглядеть
примерно так:
Please enter one of the following choices:
c) carnivore p) pianist
t) tree g) game
f
Please enter a c, p, t, or g: q
Please enter a c, p, t, or g: t
A maple is a tree.


Закомментировал
Цитата Сообщение от sourcerer Посмотреть сообщение
cin.clear();
        while (cin.get() != '\n');
-- разница не обнаруживается. Всё-таки.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
06.02.2020, 19:26
Цитата Сообщение от number_118 Посмотреть сообщение
разница не обнаруживается. Всё-таки.
вы эту разницу обнаружите очень сразу,
как только попытаетесь запустить свою прогу за пределами своей IDE.
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
09.02.2020, 16:41
XLAT, дело не в этом, а в том, чтобы попробовать ввести текст.
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
11.02.2020, 17:29
Цитата Сообщение от sourcerer Посмотреть сообщение
Глава 7. Упражнение 2
Работает далеко от идеала (к слову сказать):

Миниатюры
Решение всех задач из учебника Стивена Праты  
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 2
27.04.2020, 14:22
Глава 10 задача 8. Вопрос
в условии сказано "можно посетить каждый элемент списка и выполнить над ним определенное действие" я так понимаю каждый в отдельности, например 2 и 4. И как это реализовать без индекса массива?
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
27.04.2020, 14:54
Цитата Сообщение от vadis Посмотреть сообщение
И как это реализовать без индекса массива?
0. Вам нужно получить указатель на N нод списка?
1. У вас есть указатель на первый нод списка node* p = head;.
2. Вы легко можете получить указатель на соседний нод: node* p = p->node;
3. В цикле for сделайте пункт 2 N раз.
4. Верните из функции указатель на N нод списка: return p;
5. Проверьте валидность полученного p, если он не равен NULL(об этом тоже надо вовремя позаботиться) то ОК.
6. Всё.
1
0 / 0 / 0
Регистрация: 29.04.2020
Сообщений: 2
03.05.2020, 20:47
Глава 16 задача 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
#include <iostream>
#include <cstdlib> // for rand() and srand()
#include <ctime>   // for time()
#include <queue>
using namespace std;
const int MIN_PER_HR = 60;
 
int ptime() { return rand() % 3 + 1; }
bool newcustomer(double x) { return (rand() * x / RAND_MAX < 1); }
int main() {
    // setting things up
    srand(time(0));    //  random initializing of rand()
 
    cout << "Case Study: Bank of Heather Automatic Teller\n";
    cout << "Enter maximum size of queue: ";
    int qs;
    cin >> qs;
    queue<int> line;         // line queue holds up to qs people
 
    cout << "Enter the number of simulation hours: ";
    int hours;              //  hours of simulation
    cin >> hours;
    // simulation will run 1 cycle per minute
    long cyclelimit = MIN_PER_HR * hours; // # of cycles
 
    cout << "Enter the average number of customers per hour: ";
    double perhour;         //  average # of arrival per hour
    cin >> perhour;
    double min_per_cust;    //  average time between arrivals
    min_per_cust = MIN_PER_HR / perhour;
   
    long turnaways = 0;     //  turned away by full queue
    long customers = 0;     //  joined the queue
    long served = 0;        //  served during the simulation
    long sum_line = 0;      //  cumulative line length
    int wait_time = 0;      //  time until autoteller is free
    long line_wait = 0;     //  cumulative time in line
    long arrive = 0;
// running the simulation
    for (int cycle = 0; cycle < cyclelimit; cycle++) {
        if (newcustomer(min_per_cust)) { // have newcomer        
            if (!line.empty())
                turnaways++;
            else {
                customers++;   
                arrive = cycle;
                line.push(qs);
            }// add newcomer to line
        }if (wait_time <= 0 && !line.empty()) {
            line.pop();      // attend next customer
            wait_time = ptime(); // for wait_time minutes
            line_wait += cycle - arrive;
            served++;
        }if (wait_time > 0)
            wait_time--;
        sum_line += line.size();
    }// reporting results
    if (customers > 0) {
        cout << "customers accepted: " << customers << endl;
        cout << "  customers served: " << served << endl;
        cout << "         turnaways: " << turnaways << endl;
        cout << "average queue size: ";
        cout.precision(2);
        cout.setf(ios_base::fixed, ios_base::floatfield);
        cout << (double)sum_line / cyclelimit << endl;
        cout << " average wait time: "
            << (double)line_wait / served << " minutes\n";
    }else
        cout << "No customers!\n";
    cout << "Done!\n";
    return 0; }
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 2
06.05.2020, 12:43
Мой вопрос был некорректный, я не дочитал условие задачи. Все равно спасибо.
0
0 / 0 / 0
Регистрация: 29.04.2020
Сообщений: 2
14.05.2020, 00:51
ГЛАВА 17 ЗАДАЧА 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
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream> 
#include <fstream>
#include <string>
#include <cstdlib>
 
using namespace std;
const int max = 10;                                                      // не более 10 объектов 
ofstream fout;
ifstream fin;
enum classkind { Employee = 1, Manager = 2, Fink = 3, Highfink = 4 };
 
class abstr_emp {
private:
    string fname;                                                        // имяabstr_emp 
    string lname;                                                        // фамилия abstr_emp 
    string job;
public:
    abstr_emp() :fname("none"), lname("none"), job("none") {}
    abstr_emp(const string& fn, const string& ln, const string& j) :fname(fn), lname(ln), job(j) {}
    virtual void writeall(ofstream& ofs) const;                          // выводит все данные с именами 
    virtual void getall(ifstream& ifs) { getline(ifs, fname); getline(ifs, lname); getline(ifs, job); }
    virtual void setall();                                               // запрашивает значения у пользователя 
    virtual void showall() const;                                        // выводит все данные с именами
    virtual ~abstr_emp() = 0 {}                                          // виртуальный базовый класс 
};class employee : public abstr_emp {
public:
    employee() :abstr_emp("none", "none", "none") {}
    employee(const string& fn, const string& ln, const string& j) :abstr_emp(fn, ln, j) {}
    virtual void writeall(ofstream& ofs) const { abstr_emp::writeall(ofs); }
    virtual void getall(ifstream& ifs) { abstr_emp::getall(ifs); showall(); }
    virtual void setall() { abstr_emp::setall(); }
    virtual void showall() const { abstr_emp::showall(); }
};class manager : virtual public employee {
private:
    int inchargeof;                                                      // количество управляемых abstr_emp 
protected:
    int InChargeOf() const { return inchargeof; }                        // вывод 
    int& InChargeOf() { return inchargeof; }                             // ввод 
public:
    manager() :employee("none", "none", "none"), inchargeof(0) {}
    manager(const string& fn, const string& ln, const string& j, int ico = 0) :employee(fn, ln, j), inchargeof(ico) {}
    manager(const employee& e, int ico) :employee(e), inchargeof(ico) {}
    manager(const manager& m) :employee(m) { inchargeof = m.inchargeof; }
    virtual void writeall(ofstream& ofs) const { employee::writeall(ofs); ofs << "\n   The number of managed: " << inchargeof; }
    virtual void getall(ifstream& ifs) { employee::getall(ifs); ifs >> inchargeof; }
    virtual void setall();
    virtual void showall() const { employee::showall(); cout << "\nThe number of managed: " << inchargeof; }
};class fink : virtual public employee {
private:
    string reportsto;                                                     // кому выводить отчеты 
protected:
    const string ReportsTo() const { return reportsto; }
    string& ReportsTo() { return reportsto; }
public:
    fink() :employee("none", "none", "none"), reportsto("none") {}
    fink(const string& fn, const string& ln, const string& j, const string& rpo) :employee(fn, ln, j), reportsto(rpo) {}
    fink(const employee& e, const string& rpo)  :employee(e), reportsto(rpo) {}
    fink(const fink& e) :employee(e) { reportsto = e.reportsto; }
    virtual void writeall(ofstream& ofs) const { employee::writeall(ofs); ofs << "\n   Report: " << reportsto; }
    virtual void getall(ifstream& ifs) { employee::getall(ifs); getline(ifs, reportsto); }
    virtual void setall();
    virtual void showall() const { employee::showall(); cout << "\nReport: " << reportsto; }
};class highfink : public manager, public fink {                          // надзор за управляющими 
public:
    highfink() :employee("none", "none", "none"), manager("none", "none", "none", 0), fink("none", "none", "none", "none") {}
    highfink(const string& fn, const string& ln, const string& j, const string& rpo, int ico) 
        :employee(fn, ln, j), fink(fn, ln, j, rpo), manager(fn, ln, j, ico) {}
    highfink(const employee& e, const string& rpo, int ico) :employee(e), fink(e, rpo), manager(e, ico) {}
    highfink(const fink& f, int ico) :employee(f), fink(f), manager(f, ico) {}
    highfink(const manager& m, const string& rpo) :employee(m), fink(m, rpo), manager(m) {}
    highfink(const highfink& h) :employee(h) {}
    virtual void writeall(ofstream& ofs) const;
    virtual void getall(ifstream& ifs) { employee::getall(ifs); ifs >> InChargeOf(); getline(ifs, ReportsTo()); }
    virtual void setall();
    virtual void showall() const { employee::showall(); cout << "\nThe number of managed: " << InChargeOf(); cout << "\nReport: " << ReportsTo();   }
 
};void abstr_emp::writeall(ofstream& ofs) const {
    ofs  << ": First name: "                    << fname;
    ofs  << "\n   Last name: "                  << lname;
    ofs  << "\n   Job: "                        << job;
}void abstr_emp::showall() const {
    cout << "\nFirst name: "                    << fname;
    cout << "\nLast name: "                     << lname;
    cout << "\nJob: "                           << job;
}void abstr_emp::setall() {
    cout << "Enter first name: ";           cin >> fname;
    cout << "Enter last name: ";            cin >> lname;
    cout << "Enter your work: ";            cin >> job;
    while(cin.get() != '\n') continue;
}void manager::setall() {                          employee::setall();
    cout << "Enter number of managed: ";    cin >> inchargeof;
    while(cin.get() != '\n') continue;
}void fink::setall() {                             employee::setall();
    cout << "Enter report: ";               cin >> reportsto;
    while(cin.get() != '\n') continue;
}void highfink::writeall(ofstream& ofs) const {    employee::writeall(ofs);
    ofs  << "\n   The number of managed: "      << InChargeOf();
    ofs  << "\n   Report: "                     << ReportsTo();
}void highfink::setall() {                         employee::setall();
    cout << "Enter number of managed: ";    cin >> InChargeOf();
    cout << "Enter report: ";               cin >> ReportsTo();
    while (cin.get() != '\n') continue;
 
}int main(int vvitch, char* magician[]) {
    if(vvitch == 1) {                                                    // выход при отсутствии аргументов     
        cerr << "Usage: " << magician[0] << " filename[s]\n";
        exit(EXIT_FAILURE);
    }for(int file = 1; file < vvitch; file++) { fin.open(magician[file]);
        if(!fin.is_open()) { cerr << "Could not open " << magician[file] << endl;
            fin.clear();
            continue;
        }char chartype;
        int ccltype;
        employee* elf[max];
        if (fin.get(chartype))  while (fin.get(chartype)) cout << chartype;
        fout.open(magician[file], ios_base::out | ios_base::app);
        for(int i = 0; i < max; i++) {          
            cout << "\nPlease enter 1, 2, 3, 4, or 5:"
                    "\n1) Employee   2) Manager"
                    "\n3) Fink       4) Highfink"
                    "\n5) Quit:   \b";
            while(cin >> ccltype) {
                switch(ccltype) {
                case Employee:     elf[i] = new employee;       break;
                case Manager:      elf[i] = new manager;        break;
                case Fink:         elf[i] = new fink;           break;
                case Highfink:     elf[i] = new highfink;       break;
                default: cout << "Done. \n";                    break;
                }break;
            }if(ccltype <= 4) { fout << endl << ccltype;
                elf[i]->setall();                                        // вызывает функцию, соответствующую типу объекта 
                elf[i]->writeall(fout);                                  // объект fout типа ofstream подключен к выходному файлу
            }while((fin >> ccltype).get(chartype)) {                     // символ новой строки отделяет целое число от данных 
                switch(ccltype) {
                case Employee:     elf[i] = new employee;       break;
                case Manager:      elf[i] = new manager;        break;
                case Fink:         elf[i] = new fink;           break;
                case Highfink:     elf[i] = new highfink;       break;              
                }break;             
            }if (ccltype <= 4) { cout << "\nData from a file: \n";
                elf[i++]->getall(fin);                                    // считывание информации
            }if(ccltype >= 5)
                exit(EXIT_FAILURE);         
        }fin.clear();
        fin.close();
        fout.clear();
        fout.close();
    }return 0; }
Добавлено через 5 минут
ГЛАВА 16 ЗАДАЧА 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
#include <iostream>
#include <cstdlib> // for rand() and srand()
#include <ctime>   // for time()
#include <queue>
using namespace std;
const int MIN_PER_HR = 60;
 
int ptime() { return rand() % 3 + 1; }
bool newcustomer(double x) { return (rand() * x / RAND_MAX < 1); }
int main() {
    // setting things up
    srand(time(0));    //  random initializing of rand()
 
    cout << "Case Study: Bank of Heather Automatic Teller\n";
    cout << "Enter maximum size of queue: ";
    int qs;
    cin >> qs;
    queue<int> line;         // line queue holds up to qs people
 
    cout << "Enter the number of simulation hours: ";
    int hours;              //  hours of simulation
    cin >> hours;
    // simulation will run 1 cycle per minute
    long cyclelimit = MIN_PER_HR * hours; // # of cycles
 
    cout << "Enter the average number of customers per hour: ";
    double perhour;         //  average # of arrival per hour
    cin >> perhour;
    double min_per_cust;    //  average time between arrivals
    min_per_cust = MIN_PER_HR / perhour;
   
    long turnaways = 0;     //  turned away by full queue
    long customers = 0;     //  joined the queue
    long served = 0;        //  served during the simulation
    long sum_line = 0;      //  cumulative line length
    int wait_time = 0;      //  time until autoteller is free
    long line_wait = 0;     //  cumulative time in line
    long arrive = 0;
// running the simulation
    for (int cycle = 0; cycle < cyclelimit; cycle++) {
        if (newcustomer(min_per_cust)) { // have newcomer        
            if (!line.empty())
                turnaways++;
            else {
                customers++;   
                arrive = cycle;
                line.push(qs);
            }// add newcomer to line
        }if (wait_time <= 0 && !line.empty()) {
            line.pop();      // attend next customer
            wait_time = ptime(); // for wait_time minutes
            line_wait += cycle - arrive;
            served++;
        }if (wait_time > 0)
            wait_time--;
        sum_line += line.size();
    }// reporting results
    if (customers > 0) {
        cout << "customers accepted: " << customers << endl;
        cout << "  customers served: " << served << endl;
        cout << "         turnaways: " << turnaways << endl;
        cout << "average queue size: ";
        cout.precision(2);
        cout.setf(ios_base::fixed, ios_base::floatfield);
        cout << (double)sum_line / cyclelimit << endl;
        cout << " average wait time: "
            << (double)line_wait / served << " minutes\n";
    }else
        cout << "No customers!\n";
    cout << "Done!\n";
    return 0; }
0
1 / 1 / 0
Регистрация: 28.11.2019
Сообщений: 16
23.06.2020, 23:30
а почему в диструкторе создаётся массив с одним элементом?
0
1 / 1 / 0
Регистрация: 24.11.2020
Сообщений: 13
24.11.2020, 21:12
Цитата Сообщение от UselessMouth Посмотреть сообщение
Но в листинге 16.5 нет функции outint(). Это опечатка? О каком листинге идёт речь?
Думаю речь идёт о листинге 16.15 - в нём есть всё что упоминается в задаче.

Вообще я нашёл, на мой взгляд, несколько неточностей в этой книге. И предлагаю свои варианты исправлений. Если где то не прав - поправьте:

Стр. 1219. Ответы на вопросы для самоконтроля из главы 7.
“pt* = value;” - почему тут написано pt* а не *pt. Ведь операция разименования * помещается перед указателем

Стр. 422
"Фаза 2. Если выражение является вызовом функции, тогда ѵаг имеет тип возвращаемого значения этой функции:
long indeed(int);
decltype (indeed (3)) m; // m имеет тип int"
Почему? Ведь m имеет значение long!

Стр. 531
“static const LIMIT = 25; ” - тут пропущено указания типа int

Стр. 549
“long totalminutes = t.hours * mult * 60 +t. minutes * mult;” - вместо mult должно быть m

Стр. 786
“Мы уже видели, что шаблоны могут иметь параметры типа, такие как typename Т,
и нетипизированные параметры вроде int n.”. По моему вот эти части предложения должны быть поменяны местами: “параметры типа, такие как” и “нетипизированные параметры вроде”, что бы получилось так:
“Мы уже видели, что шаблоны могут иметь нетипизированные параметры вроде typename Т,
и параметры типа, такие как int n.”

Стр. 786
“int where = snakel.last_first_of("hark") ;“-мне кажется тут должно быть “int where = snakel.find_last_of("hark") ;”

Стр. 882
“str = ps;” - тут должно быть “str = *ps;“

Стр. 926
“// вычитание второго списка из третьего “ - тут должно быть “вычитание всех двоек из третьего списка”

Стр. 1046
“данные должны быть представлены в виде массива указателей на тип employee.” - вместо employee должно быть abstr_emp, т.к. он является абстрактным и с него всё начинается. Массиву указателей на employee не получится присвоить указатель на любой класс кроме employee - появится ошибка

Стр. 1048
“Конструктор Store должен указывать объект ifstream,” - вместо ifstream должно быть ofstream

Стр. 1103
“Переделайте программу в листинге 16.5” - вместо 16.5 должно быть 16.15
0
1 / 1 / 0
Регистрация: 28.11.2020
Сообщений: 31
01.12.2020, 09:07
Дамы и господа, ПОМОГИТЕ ПОЖАЛУЙСТА. Не могу уехать, украли билет
Вот читаю Гелберта , решил Прата попробовать, но в интернете везде она лежит в формате Язык программирования С++. Лекции и упражнения.djvu, пробовал формат менять в пдф, толку 0. Текст нельзя копировать и разбирать примеры! Из за этого тяжело читать.
Может у кого есть вся книга в каком нить формате или скачать знаете где?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2020, 09:07

Найти причины и способы исправления ошибок в коде (упражнения по книге Стивена Праты)
В общем так . Пробую учить плюсы по книжке Прата . Пробую недавно , и потому полный нуб. От того и нумбский вопрос . В книжке написано что...

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

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

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

Запишите в файл 2 название команды, количество решенных задач и общее времени, потраченное на решение всех задач
Подскажите как доделать задачу. В файле 1 хранятся данные о названиях команды, номере решенной задачи, времени, потраченном на решение....


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

Или воспользуйтесь поиском по форуму:
220
Ответ Создать тему
Новые блоги и статьи
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru