1 / 1 / 0
Регистрация: 13.06.2015
Сообщений: 65
|
|
1
|
Зацикливание программы. В чем же ошибка? ( Упражнение 5 Глава 7 Лафоре ООП C++)
15.02.2017, 16:58. Показов 986. Ответов 2
Миллион раз пересмотрел, ну не вижу ошибку и все тут . Должна же остановка на вводе быть! Что туда передается.... Не понятно... Помогите пожалуйста разобраться.
fraction.h
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
| #pragma once
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
char ch = '/', zn;
class fraction
{
public:
//конструктор с двумя аргументами
fraction() :num(), den() {}
//Конструктор с передачей аргуменртов
fraction(int n,int d) :num(n), den(d) {}
//метод для ввода с передачей параметров
/*void entFract(int n, int d)
{
//cout << "enter fraction" << endl;
num = n; den = d;
}*/
//метод для ввода без передачи параметров
void entFract()
{
cout << "Введите дробь. формат(12/12): ";
cin >> num >> zn >> den;
}
void entDen(int d)
{
//cout << "enter denominator" << endl;
den = d; num = 1;
}
void entNum(int n)
{
den = 1; num = n;
}
//Метод для вывода хранящегося значения
void showFract()
{
cout << num << ch << den << endl;
}
//метод для вывода результата
void showResult()
{
lowterms();
cout /*<< "Rezylt: "*/ << " " << num << ch << den/* << endl*/;
}
/*=========================================================================================================*/
//методы для выполнения арифметических операций
//---------------сумма----------------------
void fadd(fraction q, fraction w)
{
num = q.num * w.den + q.den * w.num;
den = q.den * w.den;
}
//--------------разность-----------------------
void fsub(fraction q, fraction w)
{
num = q.num * w.den - q.den * w.num;
den = q.den * w.den;
}
//--------------”множение-----------------------
void fmul(fraction q, fraction w)
{
num = q.num * w.num;
den = q.den * w.den;
}
//--------------ƒеление-----------------------
void fdiv(fraction q, fraction w)
{
num = q.num * w.den;
den = q.den * w.num;
}
/*=========================================================================================================*/
//Метод для нахождения наибольшего общего делителя
void lowterms() //сокращение дроби
{
long tnum, tden, temp, gcd;
tnum = labs(num); //используем не отрицательные
tden = labs(den); // значения нужен(cmatch)
if (tden == 0) //проверка знаменателя на 0
{
cout << "Недопустимы знаменатель!";
exit(1);
}
else if (tnum == 0) //проверка числителя на )
{
num = 0;
den = 1;
return;
}
//нахождения наибольшего общего делителя
while (tnum != 0)
{
if (tnum < tden)
{
temp = tnum;
tnum = tden;
tden = temp;
}
tnum = tnum - tden;
}
gcd = tden;
num = num / gcd;
den = den / gcd;
}
private:
int num;
int den;
}; |
|
main.cpp
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| // (page_308)exersice_5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "fraction.h"
#include <iostream>
using namespace std;
//Прототип функции
fraction averageValue(fraction arr[], int size);
const unsigned int SIZE = 100;
int countI = 0;//счетчик итераций
int main()
{
setlocale(LC_ALL, "Russian");
fraction arr[SIZE];
fraction result(0,0);
const char esc = 'q'; //выход по esc
char usEnter; //ввод пользователем
do
{
arr[countI].entFract();
cout << "Дробь сохранена в ячейку #" << countI << endl;
countI++;
cout << "Нажмите q для выхода, Enter >> продолжить: ";
cin >> usEnter;
} while (usEnter != esc);
result = averageValue(arr, countI);
cout << "Среднее значение введенных драбей: "; result.showFract();
system("pause");
return 0;
}
//функция для вычесления среднего значения дробей
fraction averageValue(fraction arr[], int size)
{
fraction temp = arr[0];;
fraction temp1(size, 1);
//fraction res(1, 1);
//fraction tempRes(1, 0);
//Слаживаем все дроби из массива
for (int i = 1; i < size; i++)
{
temp.fadd(temp, arr[i]);
}
//Делим на имеющееся число дробей
temp.fdiv(temp, temp1);
return temp;
} |
|
0
|