Помогите С++ для начинающих см. внутри
Подскажите как for'om сократить дробь, дробь дробь в виде (к примеру):
int a = 4; - числитель
int b = 16; - знаменатель
как правильно перебирать числа для деления, проверять на делимость.
чем можете, как говорится, помогите))))))))))))
for(int temp = 2; temp < b; temp++)
{
if(a % temp && b % temp)
{
a = a/temp;
b = b/temp;
temp = 1;
}
} - вот набросал, все ли правильно???
Все, разобрался сам. вот так работает, немного подправить нужно было:
int a = 0;
cout<<"\n\nНужно сократить дробь? жми 1, нет - другую кнопку: ";
cin>>a;
if(a == 1)
{
for(int temp = 2; temp < zn3; temp++)
{
if(ch3 % temp == 0 && zn3 % temp == 0)
{
ch3 = ch3/temp;
zn3 = zn3/temp;
temp=1;
}
}
}
cout<<"\n\t\t"<
Замечания по представленной версии:
0) проверка a==1 это, похоже, просто опечатка.. .
1) где в условии сказано, что дробь правильная (числитель меньше знаменателя) ?
С неправильной дробью эта программа не справится.. . (причем, по двум разным причинам! ) (например, 6/3)
2) Так, программа даже не входит в цикл (и, естественно не сокращает) , если дробь равна 2/2; да и вообще не сокращает дроби c числителем равным знаменателю.
3) Зачем вообще после сокращения начинать цикл "сначала", с двойки? ведь уже проверено, что на все числа до текущего temp дробь не сокращается!
4) и, как совершенно правильно отмечено Сыроежкой, менять переменную цикла очень "неприлично"...
По-моему, вообще самый простой способ — найти наибольший общий делитель числителя и знаменателя (алгоритм Евклида) , да и разделить на него:
int m = a, n = b;
while (m && n) // (m!=0 && n!=0)
if (m > n) m %= n;
else n %= m;
n |= m; // можно вместо этого: if (m) n = m;
// здесь n = НОД (a,b)
a /= n; b /= n;
———————————————————————
А уж если позарез нужно использовать for... :) напишите вместо
while( m && n ) ...хи-хи.. . for( ; m&&n; )