Помощь - Поиск - Пользователи - Календарь
Полная версия: Нерекурсивные процедуры и функции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
MiH@N
помогите решить с кратким объяснением(если можно).(пробовал сам но не удаётся 'Реузультат должен быть несократимой дробью"-выполнить это условие wacko.gif .)
14. Даны две дроби A/B и C/D (A,B,C,D-натуральные числа). Составить программу для вычитания из первой дроби второй. Реузультат должен быть несократимой дробью.
compiler
дублировать темы это не хорошо Задачи по теме «Подпрограммы»
тем более Оzzя тебе уже все решил...
MiH@N
не совсем понял как решил...
compiler
Цитата(MiH@N @ 13.01.2008 21:00) *
не совсем понял как решил...
на каком этапе остановился?
1)читаешь две дроби(четыре целых числа)
2)считаешь числитель и знаменатель для результирующей дроби
3)сокращаешь дробь
3а) поиск НОД-а
3б) деление числителя и знаменателя на НОД
4)вывод результата
MiH@N
так прафильно будет?
undefinedprogram program zadanie 3;
uses crt;
function nod(a,b:integer):integer;
begin
while a<>b do if a>b then a:=a-b else b:=b-a;
nod:=a;
end;

function nok(a,b:integer):integer;
begin
nok:=round((a*b)/nod(a,b));
end;

procedure minus(a,b,c,d:integer;var x,y:integer);
var m:integer;
begin
x:=a*(nok(b,d) div b)-c*(nok(b,d) div d);
y:=nok(b,d);
m:=nod(abs(x),y);
x:=x div m;
y:=y div m;
end;

var n1,n2,m1,m2,x,y:integer;
begin
clrscr;
write('Введите числитель первой дроби: ');readln(n1);
repeat
write('Введите знаменатель первой дроби: ');readln(n2);
until n2>0;
write('Введите числитель второй дроби: ');readln(m1);
repeat
write('Введите знаменатель второй дроби: ');readln(m2);
until m2>0;
minus(n1,n2,m1,m2,x,y);
clrscr;
if m1>=0 then writeln(n1,'/',n2,'-',m1,'/',m2,'=',x,'/',y) else
writeln(n1,'/',n2,'-(',m1,'/',m2,')=',x,'/',y);
readkey;
end.
compiler
замечательно!
только следует добавить одно условие
        if x<>0 then begin
m:=nod(abs(x),y);
x:=x div m;
y:=y div m; end;
MiH@N
а такое условие не нужно :
If b<0 or d<0 then...


Добавлено через 10 мин.
Цитата(compiler @ 13.01.2008 21:30) *
замечательно!
только следует добавить одно условие
а можно поточнее-куда добавить??
compiler
Цитата(MiH@N @ 13.01.2008 21:52) *
а такое условие не нужно
ты ж вроде это при чтении проверяешь
Цитата(MiH@N @ 13.01.2008 21:52) *
а можно поточнее-куда добавить??
в процедуру minus, противном случае если отнять два равных числа получим глюк)
MiH@N
а в блок-схеме как это намалевать?
compiler
Цитата(MiH@N @ 13.01.2008 22:13) *
а в блок-схеме как это намалевать?
по поиску можешь найти программы которые это сделают...
MiH@N
Цитата(compiler @ 13.01.2008 22:26) *

по поиску можешь найти программы которые это сделают...

а пару ссылок на наиболее грамотные подкинуть не можешь?.. ато скачал несколько...одна с треском и шумом но всёж коряво работает а другая вообще pas.-ы не грузит(хотя должна).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.