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

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

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

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

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

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

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

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

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

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

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


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

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

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

Упражнение 9

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13214 / 7485 / 843
Регистрация: 27.09.2012
Сообщений: 18,401
Записей в блоге: 3
Завершенные тесты: 1
15.10.2013, 12:15 #91
Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
0
MA4ETE44
11 / 1 / 1
Регистрация: 06.08.2012
Сообщений: 17
15.10.2013, 19:50 #92
спс, увидел
0
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
27.10.2013, 04:36 #93
Глава 12

Задание 12.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
#include <fstream>      // для файловых потоков
#include <iostream>
#include <string>
#include <process.h>      // для exit()
using namespace std;
///////////////////////////////////////////////////////////
class employee            // класс person
  {
  protected:
  public:
    string name;       // имя человека
    string patronymic; //отчество 
    string surname;   //фамилия
    unsigned long No;     // его номер
  
    void getData()      // получить данные о человеке
      {
      cout << "\n  Введите имя: "; cin >> name;
      cout << "  Введите отчество: "; cin >> patronymic;
      cout << "  Введите фамилию: "; cin >> surname;
      cout << "  Введите номер: "; cin >> No;
      }
   // void showData()     // вывод данных о человеке
   //   {
   //   cout << "\n  Имя: "<<name;
      //cout << "\n  Отчество: "<<patronymic;
      //cout << "\n  Фамилия: "<<surname;
   //   cout << "\n  Номер: "<<No;
   //   }
  };
///////////////////////////////////////////////////////////
int main()
  {
  setlocale (LC_ALL, "russian");
  char ch;
  employee worker;          // создать объект person
  ofstream outfile ("workers.txt"); //создать объект ofstream
  do                    // данные от пользователя – в файл
    {
    cout << "Введите данные о работнике:";
    worker.getData();     // получить данные
                        // записать их в файл
    outfile << worker.name
            <<' '
            << worker.patronymic
            <<' '
            << worker.surname
            <<' '
            << worker.No
            <<endl;
    cout << "Файл записан.";
    cout << "Продолжить ввод (y/n)? ";
    cin >> ch;
    }
  while(ch=='y');       // выход по 'n'
  ifstream infile ;
  infile.open("workers.txt");
    if( !infile )           // проверить на наличие ошибок
    {
    cerr << "\nНевозможно открыть workers.txt";
    exit(-1);
    }
  while( infile.get(ch) != 0 ) // считать символ
    cout << ch;                // отобразить символ
 
  
  cout << endl;
  system("pause");
  return 0;
  }

Задание 12.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
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
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class time
{
  private:
    int hrs,mins,secs;
  public:
time():hrs(0),mins(0),secs(0) //конструктор без аргументов
  {}
time(int h,int m,int s):hrs(h),mins(m),secs(s)
  {}//конструктор с тремя аргументами
void get_time()
{
    while (true)
    {
        cout<<"\nчасы: ";
        cin.unsetf(ios::skipws);
        cin>>hrs;
        if (cin.good())
            {
            if(hrs<=23 && hrs>=0)
            {
                cin.ignore(10, '\n');
                break;
            }
            cin.clear();
            cout<<"Значение часов должно лежать между 0 и 23!"<<endl;
            cin.ignore(10, '\n');
            }
        else
            {
            cin.clear();
            cout<<"Неправильно введены часы."<<endl;
            cin.ignore(10, '\n');
            }
    }
    while (true)
    {
        cout<<"минуты: ";
        cin.unsetf(ios::skipws);
        cin>>mins;
        if (cin.good())
        {
            if(mins<=60 && mins>=0)
            {
                cin.ignore(10, '\n');
                break;
            }
            cin.clear();
            cout<<"Значение минут должно лежать между 0 и 60!"<<endl;
            cin.ignore(10, '\n');
        }
        else
        {
            cin.clear();
            cout<<"Неправильно введены минуты."<<endl;
            cin.ignore(10, '\n');
        }
    }
    while (true)
    {
        cout<<"секунды: ";
        cin.unsetf(ios::skipws);
        cin>>secs;
        if (cin.good())
        {
            if(secs<=60 && secs>=0)
            {
                cin.ignore(10, '\n');
                break;
            }
            cin.clear();
            cout<<"Значение ctreyl должно лежать между 0 и 60!"<<endl;
            cin.ignore(10, '\n');
        }
        else
        {
            cin.clear();
            cout<<"Неправильно введены секунды."<<endl;
            cin.ignore(10, '\n');
        }
    }
    }
void put_time()const           //формат 11:59:59
{
    cout <<hrs <<":";
    if (mins<10)
        cout<<"0"<<mins<<":";
    else
        cout<<mins<<":";
    if (secs<10)
        cout<<"0"<<secs;
    else
        cout<<secs;
    cout<<endl;
}
   
};
///////////////////////////////////////////////////////////
int main()
{
    setlocale (LC_ALL, "russian");
    time t1;
    char ch;
    do                    // данные от пользователя – в файл
    {
        cout<<"Введите время в формате 12:59:59 "<<endl;
        t1.get_time();     // получить данные
        t1.put_time();
        cout << "Продолжить ввод (y/n)? ";
        cin >> ch;
    }
    while(ch=='y');       // выход по 'n'
    cout <<endl;
    system("pause");
    return 0;
}

Задание 12.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
#include <fstream>      // для файловых потоков
#include <iostream>
#include <string>
#include <process.h>      // для exit()
//#include <stdio.h>
//#include <stdlib.h>
using namespace std;
const int IDN = 5;
///////////////////////////////////////////////////////////
class names            // класс person
  {
  protected:
    string name;       // имя человека
    string patronymic; //отчество 
    string surname;   //фамилия
    unsigned long No;     // его номер
 
  public:
      void getData()      // получить данные о человеке
      {
      cout << "\n  Введите имя: "; cin >> name;
      cout << "  Введите отчество: "; cin >> patronymic;
      cout << "  Введите фамилию: "; cin >> surname;
      cout << "  Введите номер: "; cin >> No;
      }
    void write()
    {
        ofstream outfile ("name.txt"); //создать объект ofstream
        outfile <<name
            <<' '
            <<patronymic
            <<' '
            <<surname
            <<' '
            <<No
            <<endl;
        outfile.close();
        cout << "Файл записан.";
    }
    void read(char* id)
    {
        const int MAX = 100;
        char buffer[MAX];
 
        //char ch;
        ifstream infile ;
        infile.open("workers.txt");
        if( !infile )           // проверить на наличие ошибок
        {
            cerr << "\nНевозможно открыть workers.txt";
            exit(-1);
        }
        //while( infile.get(ch) != 0 ) // считать символ
        //  cout << ch;                // отобразить символ
        while( !infile.eof())
        {
            infile.getline(buffer, MAX);
            for(int j=0; j<100; j++)
            {
                if(buffer[j]==id[0] && buffer[j+1]==id[1] &&
                   buffer[j+2]==id[2] && buffer[j+3]==id[3])
                {
                    cout<<buffer<<endl;
                    system("pause");
                    exit(1);
                }
                else if(buffer[j]=='\0')
                    break;
            }
            for(int j=0; j<100; j++)
                buffer[j]=0;
        }
        cout << "\n  Таких людей нет.";
 
    }
    void showData()     // вывод данных о человеке
    {
      cout << "\n  Имя: "<<name;
      cout << "\n  Отчество: "<<patronymic;
      cout << "\n  Фамилия: "<<surname;
      cout << "\n  Номер: "<<No;
    }
  };
///////////////////////////////////////////////////////////
int main()
  {
  setlocale (LC_ALL, "russian");
  char ch;
  char id[IDN];
  names worker;          // создать объект person
 
  do                    // данные от пользователя – в файл
    {
    cout << "Введите данные о работнике:";
    worker.getData();     // получить данные
    worker.write();         // записать их в файл
    
    cout << "Продолжить ввод (y/n)? ";
    cin >> ch;
    }
  while(ch=='y');       // выход по 'n'
  while (true)
    {
        cout<<"Введите номер сотрудника (1234): ";
        cin.unsetf(ios::skipws);
        cin.get(id,IDN);
        if (cin.good())
        {
            if(strlen(id)<=4 && strlen(id)>=0)
            {
                cin.ignore(10, '\n');
                break;
            }
            cin.clear();
            cout<<"Номер сотрудника должен быть четырехзначным!"<<endl;
            cin.ignore(10, '\n');
        }
        else
        {
            cin.clear();
            cout<<"Неправильно введен номер."<<endl;
            cin.ignore(10, '\n');
        }
    }
  worker.read(id);
 
  cout << endl;
  system("pause");
  return 0;
  }

Задание 12.7 (12.12)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
#include <fstream>      // для файловых потоков
#include <iostream>
#include <string>
#include <process.h>      // для exit()
//#include <stdio.h>
//#include <stdlib.h>
const int IDN = 5;
const int MAXEM = 100;  // максимальное число людей
using namespace std;
///////////////////////////////////////////////////////////
class names            // класс person
  {
  protected:
    string name;       // имя человека
    string patronymic; //отчество 
    string surname;   //фамилия
    static int n;    // текущее число людей
    static names* arrap[]; //массив указателей на
                              // класс работников
    unsigned long No;     // его номер
 
  public:
      void getData()      // получить данные о человеке
      {
          cout << "\n  Введите имя: "; cin >> name;
          cout << "  Введите отчество: "; cin >> patronymic;
          cout << "  Введите фамилию: "; cin >> surname;
          cout << "  Введите номер: "; cin >> No;
      }
      void showData()     // вывод данных о человеке
      {
          cout << "\n  Имя: "<<name;
          cout << "\n  Отчество: "<<patronymic;
          cout << "\n  Фамилия: "<<surname;
          cout << "\n  Номер (XXXX): "<<No;
      }
    void write_format()
    {
        ofstream outfile ("name.txt"); //создать объект ofstream
        outfile <<name
            <<' '
            <<patronymic
            <<' '
            <<surname
            <<' '
            <<No
            <<endl;
        outfile.close();
        cout << "Файл записан.";
    }
    static void read_specific();
    static void add();
    static void Display();
    static void write();
    static void read();
  };
//---------------------------------------------------------
void names::read_specific()
    {
    const int MAX = 100;
    char buffer[MAX];
    char id[IDN];
    while (true)
    {
        cout<<"Введите номер сотрудника (1234): ";
        cin.unsetf(ios::skipws);
        cin.get(id,IDN);
        if (cin.good())
        {
            if(strlen(id)<=4 && strlen(id)>=0)
            {
                cin.ignore(10, '\n');
                break;
            }
            cin.clear();
            cout<<"Номер сотрудника должен быть четырехзначным!"<<endl;
            cin.ignore(10, '\n');
        }
        else
        {
            cin.clear();
            cout<<"Неправильно введен номер."<<endl;
            cin.ignore(10, '\n');
        }
    }
    ifstream infile ;
    infile.open("names.txt");
    if( !infile )           // проверить на наличие ошибок
    {
        cerr << "\nНевозможно открыть workers.txt";
        exit(-1);
    }
    while( !infile.eof())
    {
        infile.getline(buffer, MAX);
        for(int j=0; j<100; j++)
        {
            if(buffer[j]==id[0] && buffer[j+1]==id[1] &&
               buffer[j+2]==id[2] && buffer[j+3]==id[3])
            {
                cout<<buffer<<endl;
                system("pause");
                exit(1);
            }
            else if(buffer[j]=='\0')
                break;
        }
        for(int j=0; j<100; j++)
            buffer[j]=0;
    }
    cout << "\n  Таких людей нет.";
}
//---------------------------------------------------------
//статические переменные
int names::n;                  // текущее число работников
names* names::arrap[MAXEM]; // массив указателей на
                                  // класс работников
//---------------------------------------------------------
//добавить человека  в список (хранится в ОП)
void names::add()
  { arrap[n] = new names; 
  arrap[n++]->getData();  //Получить данные от пользователя
  }
//---------------------------------------------------------
//Вывести данные обо всех людях
void names::Display()
  {
  for(int j=0; j<n; j++)
    {
    cout<<(j+1);                // вывести номер
    arrap[j]->showData();           // Вывод данных
    cout<<endl;
    }
  }
//---------------------------------------------------------
//Записать все объекты, хранящиеся в памяти, в файл
void names::write()
  {
 
  cout<<"Идет запись " << n << " работников.\n";
  ofstream ouf;           // открыть ofstream в двоичном виде
  ouf.open("names.txt");
  if(!ouf)
    { cout<<"\nНевозможно открыть файл\n"; return; }
  for(int j=0; j<n; j++)
  {
      ouf <<arrap[j]->name
            <<' '
            <<arrap[j]->patronymic
            <<' '
            <<arrap[j]->surname
            <<' '
            <<arrap[j]->No;
      if (j<n-1)         
          ouf<<endl;
  }
 
      //ouf.write(reinterpret_cast<char*>(&arrap[j]), sizeof(arrap[j]) );
      //ouf.write((char*)(arrap[j]), sizeof(arrap[j]) );
    if(!ouf)
      { cout<<"\nЗапись в файл невозможна\n"; return; }
    }
//---------------------------------------------------------
//чтение всех данных из файла в память
void names::read()
{
  ifstream inf;           // открыть ifstream в двоичном виде
  inf.open("names.txt");
  if(!inf)
    { cout << "\nНевозможно открыть файл\n"; return; }
  n = 0;                  // В памяти работников нет
  while(true)
  {
      if(inf.eof())
          break;
      if(!inf)              // ошибка чтения типа
      { cout << "\nНевозможно чтение типа\n"; return; }
      arrap[n] = new names;
      inf>>arrap[n]->name>>arrap[n]->patronymic>>arrap[n]->surname>>arrap[n]->No;
      
      if(!inf)              // ошибка, но не EOF
      { cout << "\nЧтение данных из файла невозможно\n"; return; }
      n++;                  // счетчик работников увеличить
  }
  cout << "Идет чтение " << n << " работников\n";
}
///////////////////////////////////////////////////////////
int main()
  {
  setlocale (LC_ALL, "russian");
  char ch;
  
  //names worker;          // создать объект person
 
   while(true)
    {
    cout << "'a' – добавление сведений о работнике"
          "\n'd' - вывести сведения обо всех работниках"
          "\n'w' – записать все данные в файл"
          "\n'r' – прочитать все данные из файла"
          "\n'f' – найти определенного работника"
          "\n'x' - выход"
          "\nВаш выбор: ";
    cin >> ch;
    switch(ch)
      {
      case 'a':           // добавить работника
        names::add(); break;
      case 'd':           // вывести все сведения
        names::Display(); break;
      case 'w':           // запись в файл
        names::write(); break;
      case 'r':           // чтение всех данных из файла
        names::read(); break;
      case 'f':           // чтение всех данных из файла
        names::read_specific(); break;
      case 'x': exit(0);  // выход
      default: cout << "\nНеизвестная команда";
      }  //end switch
    }  //end while
  
 
  cout << endl;
  system("pause");
  return 0;
  }

Задание 12.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
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
149
150
#include <iostream>
#include <fstream>      // для файловых потоков
using namespace std;
///////////////////////////////////////////////////////////
struct link   // один элемент списка
{
  int data;   // некоторые данные
  link* next; // указатель на следующую структуру
};
///////////////////////////////////////////////////////////
class linklist // список
{
  private:
    link* first;
    static int n;
  public:
    linklist ( )            // конструктор без параметров
      { first = NULL; n = 0; }     // первого элемента пока нет
    ~linklist();
    void additem ( ); // добавление элемента
    void display ( );       // показ данных
    void read ( );
    void write ( );
};
///////////////////////////////////////////////////////////
int linklist::n;  
///////////////////////////////////////////////////////////
void linklist::additem (  ) // добавление элемента
{
  int d;
  cout<<"Введите число ";
  cin>>d;
  link* newlink = new link;      // выделяем память
  newlink->data = d;             // запоминаем данные
  newlink->next = first;         // запоминаем значение first
  first = newlink;               // first теперь указывает на новый элемент
  n++;
}
///////////////////////////////////////////////////////////
void linklist::display ( )
{
  link* current = first;           // начинаем с первого элемента
  while( current )                 // пока есть данные
  {
    cout << current->data << endl; // печатаем данные
    current = current->next;       // двигаемся к следующему элементу
  }
}
///////////////////////////////////////////////////////////
void linklist::read ( )
{
 ifstream inf;           // открыть ifstream в двоичном виде
  inf.open("12.8.txt");
  if(!inf)
    { cout << "\nНевозможно открыть файл\n"; return; }
  n = 0; 
  first = NULL;
  while(true)
  {
      if(inf.eof())
          break;
      if(!inf)              // ошибка чтения типа
      { cout << "\nНевозможно чтение типа\n"; return; }
      link* newlink = new link;      // выделяем память
      inf>>newlink->data;             // запоминаем данные
      newlink->next = first;         // запоминаем значение first
      first = newlink;               // first теперь указывает на новый элемент
      //inf>>arrap[n]->name>>arrap[n]->patronymic>>arrap[n]->surname>>arrap[n]->No;
      
      if(!inf)              // ошибка, но не EOF
      { cout << "\nЧтение данных из файла невозможно\n"; return; }
      n++; 
  }
  cout << "Идет чтение "<<n<<" объектов"<<endl;
}
///////////////////////////////////////////////////////////
void linklist::write ( )
{
  cout<<"Идет запись "<<n<<" объектов"<<endl;
  ofstream ouf;           // открыть ofstream в двоичном виде
  ouf.open("12.8.txt");
  if(!ouf)
    { cout<<"\nНевозможно открыть файл\n"; return; }
  link* current = first;           // начинаем с первого элемента
  for(int j=0; j<n; j++)                // пока есть данные
  {
    ouf << current->data;          // печатаем данные
    if (j<n-1)       
          ouf<<endl;
    current = current->next;       // двигаемся к следующему элементу
  }
}
///////////////////////////////////////////////////////////
linklist::~linklist()
    {
        link*current =first;   //установить указатель на первый элемент
        while(current !=NULL ) //выход по достижении последнего элемента
        {
            link*temp =current;  //сохранить указатель на данный элемент
            current =current->next;  //получить ссылку на следующую ссылку
            delete temp;               //удалить эту ссылку
      }
    }
 
///////////////////////////////////////////////////////////
int main ( )
{
  setlocale (LC_ALL, "russian");
  linklist li, li2;       // создаем переменную-список
  char ch;
 
  while(true)
    {
    cout << "'a' – добавить ссылку в список"
          "\n's' - показать данные по всем ссылкам из списка"
          "\n'w' – записать в файл данные для всех ссылок"
          "\n'r' – считать все данные из файла и создать новый список"
          "\n'x' - выход"
          "\nВаш выбор: ";
    cin >> ch;
    switch(ch)
      {
      case 'a':           // добавить работника
        li.additem(); break;
      case 's':           // вывести все сведения
        li.display(); break;
      case 'w':           // запись в файл
        li.write(); break;
      case 'r':           // чтение всех данных из файла
        li.~linklist(); li.read(); break;
      case 'x': exit(0);  // выход
      default: cout << "\nНеизвестная команда";
      }  //end switch
   }  //end while
  cout << endl;
 
 
 
  //li.additem ( 25 ); // добавляем туда несколько чисел
  //li.additem ( 36 );
  //li.additem ( 49 );
  //li.additem ( 64 );
 
  //li.display ( );    // показываем список
 
 
 
  system("pause");
  return 0;
}

Задание 12.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
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
#include<iostream>
#include<cmath>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
class fraction
{
   private:
      int chis, znam;
   public:
      fraction(): chis(0), znam(0)
        {}
      fraction(int c, int z): chis(c), znam(z)
        {}
 
      fraction operator+ (fraction);
      fraction operator- (fraction);
      fraction operator/ (fraction);
      fraction operator* (fraction);
      bool operator== (fraction);
      bool operator!= (fraction);
      fraction lowterms (); 
      friend istream& operator >> (istream& s, fraction& f);
      friend ostream& operator << (ostream& s, fraction& f);
};
//------------------------------------------------------------------------------
fraction fraction::operator+ (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam+znam*f2.chis);
        f1.znam = (znam*f2.znam);  
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator- (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam-znam*f2.chis);
        f1.znam = (znam*f2.znam);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator* (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.chis);
        f1.znam = (znam*f2.znam);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator/ (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam);
        f1.znam = (znam*f2.chis);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
bool fraction::operator== (fraction f2)
    {
        return (chis == f2.chis && znam==f2.znam )? true : false;
    }
//------------------------------------------------------------------------------
bool fraction::operator!= (fraction f2)
    {
        return (chis != f2.chis && znam!=f2.znam )? true : false;
    }
//------------------------------------------------------------------------------
fraction fraction::lowterms ()
    {
        fraction f1;               
        long tchis, tznam, temp, gcd;
        tchis = labs(chis);
        tznam = labs(znam);
        if (tznam == 0)
            { cout<<"Недопустимый знаменатель!"; exit(1);}
        else if (tchis == 0)
            { chis = 0; znam = 1; return fraction (chis, znam);;}
        while(tchis !=0)
            {
                if(tchis < tznam)
                    {temp = tchis; tchis = tznam; tznam = temp;}
                tchis = tchis - tznam;
            }
        gcd = tznam;
        chis = chis/gcd;
        znam = znam/gcd;
        return fraction (chis, znam);
 
    }
////////////////////////////////////////////////////////////////////////////////
istream& operator >> (istream& s, fraction& f)
    {
    char drob; 
    cout<< "Введите значение дроби в формате x/y: "<<endl;
    s>>f.chis>>drob>>f.znam;
    return s;
    }
////////////////////////////////////////////////////////////////////////////////
ostream& operator << (ostream& s, fraction& f)
    {
    s<<f.chis<<"/"<<f.znam;
    return s;
    }
////////////////////////////////////////////////////////////////////////////////
int main()
{
setlocale (LC_ALL, "russian");
fraction d1, d2, d3, wrong1 (0, 1);  
 
char ch;  
do
    {
       char operacia; 
       cin>> d1;
       if (d1==wrong1)
       {
           cout << "Неверный формат дроби "<<endl; 
           break;
       }
       cout<< "Введите операцию: *,/,+,-."<<endl;
       cin>>operacia;
       cin>> d2;
       switch(operacia)
       {
            case '/': cout<<(d3=d1/d2);break;  
            case '*': cout<<(d3=d1*d2); break;                   
            case '+': cout<<(d3=d1+d2); break;      
            case '-': cout<<(d3=d1-d2); break;    
        }
       cout << "\n Еще раз?(y/n):  "; 
       cin>>ch;
    }        
while (ch != 'n');
system("pause");
return 0;
}

Задание 12.10
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
149
150
151
152
153
154
155
156
157
#include<iostream>
#include<cmath>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
class fraction
{
   private:
      int chis, znam;
   public:
      fraction(): chis(0), znam(0)
        {}
      fraction(int c, int z): chis(c), znam(z)
        {}
 
      fraction operator+ (fraction);
      fraction operator- (fraction);
      fraction operator/ (fraction);
      fraction operator* (fraction);
      bool operator== (fraction);
      bool operator!= (fraction);
      fraction lowterms (); 
      friend istream& operator >> (istream& s, fraction& f);
      friend ostream& operator << (ostream& s, fraction& f);
};
//------------------------------------------------------------------------------
fraction fraction::operator+ (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam+znam*f2.chis);
        f1.znam = (znam*f2.znam);  
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator- (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam-znam*f2.chis);
        f1.znam = (znam*f2.znam);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator* (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.chis);
        f1.znam = (znam*f2.znam);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator/ (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam);
        f1.znam = (znam*f2.chis);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
bool fraction::operator== (fraction f2)
    {
        return (chis == f2.chis && znam==f2.znam )? true : false;
    }
//------------------------------------------------------------------------------
bool fraction::operator!= (fraction f2)
    {
        return (chis != f2.chis && znam!=f2.znam )? true : false;
    }
//------------------------------------------------------------------------------
fraction fraction::lowterms ()
    {
        fraction f1;               
        long tchis, tznam, temp, gcd;
        tchis = labs(chis);
        tznam = labs(znam);
        if (tznam == 0)
            { cout<<"Недопустимый знаменатель!"; exit(1);}
        else if (tchis == 0)
            { chis = 0; znam = 1; return fraction (chis, znam);;}
        while(tchis !=0)
            {
                if(tchis < tznam)
                    {temp = tchis; tchis = tznam; tznam = temp;}
                tchis = tchis - tznam;
            }
        gcd = tznam;
        chis = chis/gcd;
        znam = znam/gcd;
        return fraction (chis, znam);
 
    }
////////////////////////////////////////////////////////////////////////////////
istream& operator >> (istream& s, fraction& f)
    {
    char drob; 
    cout<< "Введите значение дроби в формате x/y: "<<endl;
    //s.ignore(10, '\n');
    while (true)
    {
        s.unsetf(ios::skipws);
        s>>f.chis>>drob>>f.znam;
        if (s.good())
            {
            if(f.znam!=0)
            {
                s.ignore(10, '\n');
                break;
            }
            s.clear();
            cout<<"Знаменатель не может быть нулевым!"<<endl;
            cout<<"Введите дробь заново: ";
            s.ignore(10, '\n');
            }
        else
            {
            s.clear();
            cout<<"Ошибка ввода."<<endl;
            cout<<"Введите дробь заново: ";
            s.ignore(10, '\n');
            }
    }
    return s;
    }
////////////////////////////////////////////////////////////////////////////////
ostream& operator << (ostream& s, fraction& f)
    {
    s<<f.chis<<"/"<<f.znam;
    return s;
    }
////////////////////////////////////////////////////////////////////////////////
int main()
{
setlocale (LC_ALL, "russian");
fraction d1, d2, d3, wrong1 (0, 1);  
 
char ch;  
do
    {
       char operacia; 
       cin>> d1;
       cout<< "Введите операцию: *,/,+,-."<<endl;
       cin>>operacia;
       cin.ignore(10, '\n');
       cin>> d2;
       switch(operacia)
       {
            case '/': cout<<"Ответ ---------------"<<(d3=d1/d2); break;  
            case '*': cout<<"Ответ ---------------"<<(d3=d1*d2); break;                   
            case '+': cout<<"Ответ ---------------"<<(d3=d1+d2); break;      
            case '-': cout<<"Ответ ---------------"<<(d3=d1-d2); break;    
        }
       cout << "\n Еще раз?(y/n):  "; 
       cin>>ch;
       cin.ignore(10, '\n');
    }        
while (ch != 'n');
system("pause");
return 0;
}

Задание 12.11
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
149
150
151
152
153
154
155
156
157
#include<iostream>
#include<cmath>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
class fraction
{
   private:
      int chis, znam;
   public:
      fraction(): chis(0), znam(0)
        {}
      fraction(int c, int z): chis(c), znam(z)
        {}
 
      fraction operator+ (fraction);
      fraction operator- (fraction);
      fraction operator/ (fraction);
      fraction operator* (fraction);
      bool operator== (fraction);
      bool operator!= (fraction);
      fraction lowterms (); 
      friend istream& operator >> (istream& s, fraction& f);
      friend ostream& operator << (ostream& s, fraction& f);
};
//------------------------------------------------------------------------------
fraction fraction::operator+ (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam+znam*f2.chis);
        f1.znam = (znam*f2.znam);  
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator- (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam-znam*f2.chis);
        f1.znam = (znam*f2.znam);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator* (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.chis);
        f1.znam = (znam*f2.znam);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
fraction fraction::operator/ (fraction f2)
    {
        fraction f1;
        f1.chis = (chis*f2.znam);
        f1.znam = (znam*f2.chis);
        return f1.lowterms();
    }
//------------------------------------------------------------------------------
bool fraction::operator== (fraction f2)
    {
        return (chis == f2.chis && znam==f2.znam )? true : false;
    }
//------------------------------------------------------------------------------
bool fraction::operator!= (fraction f2)
    {
        return (chis != f2.chis && znam!=f2.znam )? true : false;
    }
//------------------------------------------------------------------------------
fraction fraction::lowterms ()
    {
        fraction f1;               
        long tchis, tznam, temp, gcd;
        tchis = labs(chis);
        tznam = labs(znam);
        if (tznam == 0)
            { cout<<"Недопустимый знаменатель!"; exit(1);}
        else if (tchis == 0)
            { chis = 0; znam = 1; return fraction (chis, znam);;}
        while(tchis !=0)
            {
                if(tchis < tznam)
                    {temp = tchis; tchis = tznam; tznam = temp;}
                tchis = tchis - tznam;
            }
        gcd = tznam;
        chis = chis/gcd;
        znam = znam/gcd;
        return fraction (chis, znam);
 
    }
////////////////////////////////////////////////////////////////////////////////
istream& operator >> (istream& s, fraction& f)
    {
    char drob; 
    cout<< "Введите значение дроби в формате x/y: "<<endl;
    //s.ignore(10, '\n');
    while (true)
    {
        s.unsetf(ios::skipws);
        s>>f.chis>>drob>>f.znam;
        if (s.good())
            {
            if(f.znam!=0)
            {
                s.ignore(10, '\n');
                break;
            }
            s.clear();
            cout<<"Знаменатель не может быть нулевым!"<<endl;
            cout<<"Введите дробь заново: ";
            s.ignore(10, '\n');
            }
        else
            {
            s.clear();
            cout<<"Ошибка ввода."<<endl;
            cout<<"Введите дробь заново: ";
            s.ignore(10, '\n');
            }
    }
    return s;
    }
////////////////////////////////////////////////////////////////////////////////
ostream& operator << (ostream& s, fraction& f)
    {
    s<<f.chis<<"/"<<f.znam;
    return s;
    }
////////////////////////////////////////////////////////////////////////////////
int main()
{
setlocale (LC_ALL, "russian");
fraction d1, d2, d3, wrong1 (0, 1);  
 
char ch;  
do
    {
       char operacia; 
       cin>> d1;
       cout<< "Введите операцию: *,/,+,-."<<endl;
       cin>>operacia;
       cin.ignore(10, '\n');
       cin>> d2;
       switch(operacia)
       {
            case '/': cout<<"Ответ ---------------"<<(d3=d1/d2); break;  
            case '*': cout<<"Ответ ---------------"<<(d3=d1*d2); break;                   
            case '+': cout<<"Ответ ---------------"<<(d3=d1+d2); break;      
            case '-': cout<<"Ответ ---------------"<<(d3=d1-d2); break;    
        }
       cout << "\n Еще раз?(y/n):  "; 
       cin>>ch;
       cin.ignore(10, '\n');
    }        
while (ch != 'n');
system("pause");
return 0;
}


ps Парни, выкладывайте пожалуйста свои задания. Интересно же, хочется посмотреть.
0
Scythian
58 / 58 / 8
Регистрация: 01.01.2010
Сообщений: 222
29.10.2013, 00:20 #94
ГЛАВА 7 ЗАДАЧА 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
#include<iostream>
#include<stdlib.h>
#include<string>
#include<iomanip>
using namespace std;
 
class money
{
private:
    long double denughka;
public:
    money(){};
    void mstold(string st)
    {
        string m="0123456789.";
        int pos=0,l=0;
        while(pos>=0)
        {
            pos=st.find_first_not_of(m);
            if(pos==-1)
                break;
            st.replace(pos,1,"");
        }
        denughka=atof(st.c_str());
    }
    void show()
    {
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<endl<<denughka<<endl;
    }
};
int main()
{
    money d;
    string s;
    char ch='Y';
    while(ch!='N')
    {
        cout<<"Enter the sum\t";
        cin>>s;
        d.mstold(s);
        d.show();
        cout<<"\nto continue?(Y/N)";
        cin>>ch;
    }
    system("pause");
    return 0;
}
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.10.2013, 10:43 #95
7.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
#include <iostream>
#include <sstream>
#include <iomanip>
#include <algorithm>
 
class money
{
public:
   money(const std::string& value) : amount_(convert(value))
   {
   }
   long double get() const
   {
      return amount_;
   }
   void set(const std::string& value)
   {
      amount_ = convert(value);
   }
private:
   long double convert(std::string value)
   {
      static auto finder = [] (const char c)
      {
         return (!isdigit(c) && c != '.');
      };
      value.erase(std::remove_if(value.begin(), value.end(), finder), value.end());
      long double amount = 0.;
      std::stringstream ss(value);
      ss >> amount;
      return amount;
   }
   long double amount_;
};
 
std::ostream& operator << (std::ostream& os, const money& m)
{
   return (os << std::fixed << std::setprecision(2) << m.get());
}
 
int main()
{
   money m("$1,234,567,890,123.99");
   std::cout << m << std::endl;
}
2
halmikar
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 3
01.11.2013, 06:06 #96
не нашел главы 6
Застрял на 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
#include <iostream>
 
using namespace std;
 
class count
{
private:
    static int temp;
    int number;
public:
    count() : number(1) 
    {}
    void Counter()
    {
        temp++;
        number+= temp;
    }
    void display()
    {
        cout << "№"<< number << endl;
    }
};
int main()
{
    count c1, c3, c2;
    c1.display();
    c2.display();
    c3.display();
    system("PAUSE");
    return 0;
}
Подскажите где неверно
0
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
01.11.2013, 17:43 #97
Шестая глава
1
MA4ETE44
11 / 1 / 1
Регистрация: 06.08.2012
Сообщений: 17
07.11.2013, 16:54 #98
уважаемые, у кого-нибудь были проблемы с примерами в 5 главе задачи circstrc.cpp? не могу скомпилить все это дело, добавил 2а файла что приложены в приложении Д, ничего хорошего...
0
Tiki-Tiki
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 3
07.11.2013, 23:49 #99
в 12.7 мне кажется криво работает метод read_specific.Или я не понимаю как он работает...

Добавлено через 3 минуты
Цитата Сообщение от MA4ETE44 Посмотреть сообщение
уважаемые, у кого-нибудь были проблемы с примерами в 5 главе задачи circstrc.cpp? не могу скомпилить все это дело, добавил 2а файла что приложены в приложении Д, ничего хорошего...
С какими конкретно задачами беда?
0
Sabbat
135 / 23 / 1
Регистрация: 19.10.2012
Сообщений: 43
08.11.2013, 00:09 #100
Цитата Сообщение от Kins Посмотреть сообщение
Глава 9 Упражнение №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
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
using namespace std;
 
////////////////////////////////////////////////////////////////
class String
{
protected:
    static const int SZ=18;//максимальный размер строки
    char str[SZ];//сама строка
public:
    String()//конструктор без параметров
    {str[0]='\x0';}
    String(char s[])//конструктор с одним параметром
    {strcpy_s(str, s);}
    void display()//показ строки
    {
        cout <<str <<endl;
    }
    //перевод строки к обычному типу
    operator char*()
    {return str;}
};
///////////////////////////////////////////////////////////////
class Pstring:public String
{
public:
    Pstring():String()
    {}
    Pstring(char s[])
    {
        if(strlen(s)<SZ){
            strcpy_s(str, s);}
        if(strlen(s)>=SZ){
            for(int j=0; j<SZ; j++){
                if(j==(SZ-1)){
                    str[j]='\0';
                    continue;
                }
                str[j]=s[j];                
            }
        }
    }
    void display()
    {String::display();}
};
///////////////////////////////////////////////////////////////
class Pstring2: public Pstring
{
private:
    int number;//номер символа
    char simbol;//символ строки
public:
    Pstring2():Pstring()
    {}
    Pstring2(char s[]):Pstring(s)
    {}
    Pstring2& left(Pstring p2, int number)//в строку s2 помещаются n самых левых символов строки s1
    {
        for(int j=0; j<=number; j++){
            str[j]=p2[j];
            if(j==number){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
    Pstring2& mid(Pstring p2, char sl, int n)//в строку s2 помещаются n символов строки s1 начиная с символа s
    {
        for(int j=0; j<strlen(p2); j++){
            if(p2[j]!=sl){
                continue;
            }else{
                for(int i=0; i<=n; i++){
                    str[i]=p2[j+i];
                    if(i==n){
                        str[i]='\0';
                        break;
                    }
                }
            }
        }
        return Pstring2(str);
    }
    Pstring2& right(Pstring p2, int n)//в строку s2 помещаются n самых правых символов строки s1
    {
        int t=strlen(p2)-n;
        for(int j=0; j<=strlen(p2); j++){
            str[j]=p2[j+t];
            if(j==strlen(p2)){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
///////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    Pstring s, s1;
    s="Шла саша по шоссе";  
    s.display();
    s1="Асталависта бэйби нау";
    s1.display();
    Pstring2 s2, s3, s4;
    s3.left(s1, 5);//пять символов слева
    s3.display();
    s2=s3.mid(s1, 'в', 7);//семь символов начиная с символа 'в'
    s2.display();
    s4.right(s1, 9);//девять крайних правых символов
    s4.display();
    cout <<endl;
    system("pause");
    return 0;
}
кстати в функции mid(), там же вроде с номера символа а не из самого значения символа, если я правильно понял?
у меня только в студии компилирует и больше ни в чем(CodeBlocks,Dev-C++)
ругается на return Pstring2(str);
Цитата Сообщение от CodeBlocks
C:\Program Files (x86)\CodeBlocks\work\work.cpp|64|error: invalid initialization of non-const reference of type 'Pstring2&' from an rvalue of type 'Pstring2'|
кто-то ещё делал?
0
Tiki-Tiki
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 3
08.11.2013, 01:05 #101
Цитата Сообщение от Sabbat Посмотреть сообщение
кстати в функции mid(), там же вроде с номера символа а не из самого значения символа, если я правильно понял?
у меня только в студии компилирует и больше ни в чем(CodeBlocks,Dev-C++)
ругается на return Pstring2(str);

кто-то ещё делал?
9.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
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
#include <iostream>
#include <iomanip>
#include <clocale>
#include <conio.h>
#include <cmath>
#include <string>
#include <stdlib.h>
#include <process.h>
using namespace std;
//static int SZ=30
static int j;
class String
{
protected:
    enum{SZ=30};
    char str[SZ];
public:
    String()
    {str[0]='\x0';}
    String(char s[])
    {strcpy(str,s);}
    void display()const
    {cout<<str<<endl;}
    operator char*()
    {return str;}
};
class Pstring:public String
{
public:
    Pstring():String()
    {}
    Pstring(char s[])
    {
        if(strlen(s)>SZ-1)
        {
            for(j=0;j<SZ-1;j++)
                str[j]=s[j];
                str[j]='\0';
        }
        else
            strcpy(str,s);      
    }
    void display()const
    {String::display();}
};
//////////////////////////////////////////////////////////////
class Pstring2:public Pstring
{
private:
    int n;
    int simbol;
public:
    Pstring2():Pstring()
    {}
    Pstring2(char s[]):Pstring(s)
    {}
    Pstring2& left(Pstring s1,int n)
    {
        for(j=0;j<=n;j++)
        {
            str[j]=s1[j];
            if(j==n){
                str[j]='\0';}
        }
        return Pstring2(str);       
    }
    Pstring2& mid(Pstring s1,int simbol,int n)
    {
        int t=simbol+n;
        for(j=simbol;j<=t;j++)
        {
            str[j]=s1[j];
            if(j==t){
                str[j]='\0';}
        }
            return Pstring2(str);
    }
    Pstring2& right(Pstring s1,int n)
    {
 
        int t=strlen(s1)-n;
        for(int j=0; j<=strlen(s1); j++){
            str[j]=s1[j+t];
            if(j==strlen(s1)){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
int main()
{
setlocale(LC_ALL, "");
//Pstring s1="Это ахренеть какая длинная строка и врядли она сможет влезть в это долбанный массив,который в край меня задолбал!";
//s1.display();
//Pstring s2="А это вероятно влезет";
//s2.display();
Pstring s1="Это ахренеть какая длинная строка";
Pstring2 s2,s3,s4;
s2.left(s1,5);
s2.display();
s3.mid(s1,4,10);
s3.display();
s4.right(s1,6);
s4.display();
return 0;
}

У меня так
0
MA4ETE44
11 / 1 / 1
Регистрация: 06.08.2012
Сообщений: 17
08.11.2013, 12:29 #102
Цитата Сообщение от Tiki-Tiki Посмотреть сообщение

С какими конкретно задачами беда?
Сам пример в пункте "Структура circle" задачка circstrc.cpp, при компиляции выдает следующее

Кликните здесь для просмотра всего текста
1. error C2664: CreateFileW: невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции

2. error C2065: j: необъявленный идентификатор


на п.2 я как бы вроде нашел нюанс с j , а вот на п.1 хз, я ничего в коде не менял, взял 3 исходника с книги.
0
Tiki-Tiki
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 3
08.11.2013, 12:49 #103
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
#include <iostream>
//#include <iomanip>
#include <clocale>
#include <conio.h>
//#include <cmath>
//#include <string>
#include <stdlib.h>
#include <process.h>
using namespace std;
//static int SZ=30
static int j;
class String
{
protected:
    enum{SZ=30};
    char str[SZ];
public:
    String()
    {str[0]='\x0';}
    String(char s[])
    {strcpy(str,s);}
    void display()const
    {cout<<str<<endl;}
    operator char*()
    {return str;}
};
class Pstring:public String
{
public:
    Pstring():String()
    {}
    Pstring(char s[])
    {
        if(strlen(s)>SZ-1)
        {
            for(j=0;j<SZ-1;j++)
                str[j]=s[j];
                str[j]='\0';
        }
        else
            strcpy(str,s);      
    }
    void display()const
    {String::display();}
};
//////////////////////////////////////////////////////////////
class Pstring2:public Pstring
{
private:
    int n;
    int simbol;
public:
    Pstring2():Pstring()
    {}
    Pstring2(char s[]):Pstring(s)
    {}
    Pstring2& left(Pstring s1,int n)
    {
        for(j=0;j<=n;j++)
        {
            str[j]=s1[j];
            if(j==n){
                str[j]='\0';}
        }
        return Pstring2(str);       
    }
    Pstring2& mid(Pstring s1,int simbol,int n)
    {
        int t=simbol+n;
        for(j=simbol;j<=t;j++)
        {
            str[j]=s1[j];
            if(j==t){
                str[j]='\0';}
        }
            return Pstring2(str);
    }
    Pstring2& right(Pstring s1,int n)
    {
 
        int t=strlen(s1)-n;
        for(int j=0; j<=strlen(s1); j++){
            str[j]=s1[j+t];
            if(j==strlen(s1)){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
int main()
{
setlocale(LC_ALL, "");
//Pstring s1="Это ахренеть какая длинная строка и врядли она сможет влезть в это долбанный массив,который в край меня задолбал!";
//s1.display();
//Pstring s2="А это вероятно влезет";
//s2.display();
Pstring s1="Это ахренеть какая длинная строка";
Pstring2 s2,s3,s4;
s2.left(s1,5);
s2.display();
s3.mid(s1,4,10);
s3.display();
s4.right(s1,6);
s4.display();
return 0;
}
у меня 9.8 такой
0
Sabbat
135 / 23 / 1
Регистрация: 19.10.2012
Сообщений: 43
08.11.2013, 20:54 #104
Цитата Сообщение от Tiki-Tiki Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <iostream>
//#include <iomanip>
#include <clocale>
#include <conio.h>
//#include <cmath>
//#include <string>
#include <stdlib.h>
#include <process.h>
using namespace std;
//static int SZ=30
static int j;
class String
{
protected:
    enum{SZ=30};
    char str[SZ];
public:
    String()
    {str[0]='\x0';}
    String(char s[])
    {strcpy(str,s);}
    void display()const
    {cout<<str<<endl;}
    operator char*()
    {return str;}
};
class Pstring:public String
{
public:
    Pstring():String()
    {}
    Pstring(char s[])
    {
        if(strlen(s)>SZ-1)
        {
            for(j=0;j<SZ-1;j++)
                str[j]=s[j];
                str[j]='\0';
        }
        else
            strcpy(str,s);      
    }
    void display()const
    {String::display();}
};
//////////////////////////////////////////////////////////////
class Pstring2:public Pstring
{
private:
    int n;
    int simbol;
public:
    Pstring2():Pstring()
    {}
    Pstring2(char s[]):Pstring(s)
    {}
    Pstring2& left(Pstring s1,int n)
    {
        for(j=0;j<=n;j++)
        {
            str[j]=s1[j];
            if(j==n){
                str[j]='\0';}
        }
        return Pstring2(str);       
    }
    Pstring2& mid(Pstring s1,int simbol,int n)
    {
        int t=simbol+n;
        for(j=simbol;j<=t;j++)
        {
            str[j]=s1[j];
            if(j==t){
                str[j]='\0';}
        }
            return Pstring2(str);
    }
    Pstring2& right(Pstring s1,int n)
    {
 
        int t=strlen(s1)-n;
        for(int j=0; j<=strlen(s1); j++){
            str[j]=s1[j+t];
            if(j==strlen(s1)){
                str[j]='\0';
            }
        }
        return Pstring2(str);
    }
};
int main()
{
setlocale(LC_ALL, "");
//Pstring s1="Это ахренеть какая длинная строка и врядли она сможет влезть в это долбанный массив,который в край меня задолбал!";
//s1.display();
//Pstring s2="А это вероятно влезет";
//s2.display();
Pstring s1="Это ахренеть какая длинная строка";
Pstring2 s2,s3,s4;
s2.left(s1,5);
s2.display();
s3.mid(s1,4,10);
s3.display();
s4.right(s1,6);
s4.display();
return 0;
}


у меня 9.8 такой
Всё равно только в студии компилирует, а так ошибка
D:\Other\Cpp_les_lafore\work.cpp In member function `Pstring2& Pstring2::left(Pstring, int)':
65 D:\Other\Cpp_les_lafore\work.cpp invalid initialization of non-const reference of type 'Pstring2&' from a temporary of type 'Pstring2'
D:\Other\Cpp_les_lafore\work.cpp In member function `Pstring2& Pstring2::mid(Pstring, int, int)':
76 D:\Other\Cpp_les_lafore\work.cpp invalid initialization of non-const reference of type 'Pstring2&' from a temporary of type 'Pstring2'
D:\Other\Cpp_les_lafore\work.cpp In member function `Pstring2& Pstring2::right(Pstring, int)':
88 D:\Other\Cpp_les_lafore\work.cpp invalid initialization of non-const reference of type 'Pstring2&' from a temporary of type 'Pstring2'
если в компиляторе проблема то ладно, но а если в самой реализации то как бы интересен вариант который будет работать не только в студии.
0
halmikar
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 3
13.11.2013, 11:53 #105
Подскажите пожалуйста. В примере strconv главы 8 используется перечисление. Если вместо перечисления использовать константу, то выдает ошибку. Не могу понять в этом примере перечисление обязательное условие или проблема в компиляторе. Использую VS 2010

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string.h>
#include <Windows.h>
 
using namespace std;
 
class String
{
private:
    const int SZ = 80;
    char str[SZ];
public:
    String()
    {str[0] = '\0';}
    String(char s[])
    {strcpy(str, s);}
 
    void display()const
    {
        cout << str;
    }
    operator char*()
    {
        return str;
    }
};
 
int main()
{
    SetConsoleOutputCP(1251);
    String s1;
 
    char xstr[] = "Ура товарищи!!!";
    s1 = xstr;
 
    s1.display();
    String s2 = "Мы победим";
    cout << static_cast<char*>(s2);
    cout << endl;
 
    system("PAUSE");
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 11:53
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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