Глава 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
|