Страница 1 из 7
Помогите решить задачу...
Добавлено: 13 апр 2007, 15:10
Anton_XXX
Помогите решить задачу...
Разработайте модуль для работы с обыкновенными дробями. Должны быть предусмотрены операции ввода, вывода дроби, в том числе в виде смешанной, с операцией сложения...
Если сможите, напишите плиззз алгоритм задачи... т.к - это только часть задачи... остальное я попробую решить сам...
И вот еще что: Целые числа представляются со знаменателем 0. Ноль представляется как 0/1.
Эта задача на Pascal'e...
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 16:18
Хыиуду
любое число представляется как неправильная дробь, или в виде целой части и правильной дроби?
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 16:56
somewhere
" писал(а):Целые числа представляются со знаменателем 0
Было бы логичнее, если со знаменателем 1. Т.е. в данном случае, например
5/0 = 5
0/1 * 5/0 = 0/0, какое это число? целое или ноль?
(5/0) / (0/1) = 5/0 * 1/0 = 5/0 = 5, т.е. делить на ноль можно?
Преподаватели информатики все чаще вытворяют чудеса, придумывая задачи
"от балды". А бедные студенты потом ломаю башню, как ему угодить. Кто знает, может он будущий "Лобачевский"
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 18:19
Anton_XXX
Правильно...

Может это опечатка? Я тоже думаю, как это можно целые числа, напримар число 2, представить как 2/0...
Кароче вот код сложения дроби:
Код: Выделить всё
uses crt;
var s1,s,c1,z1,c,z:integer;
i:integer;
begin
clrscr;
writeln('Vvod drobi');
write('Vvod chislitelia: ');
readln(c);
write('Vvod znamenatelia: ');
readln(z);
writeln(c,'/',z);
readln;
clrscr;
write('Vvod 2 drobi');
write('Vvod chislitelia: ');
readln(c1);
write('Vvod znamenatelia: ');
readln(z1);
writeln(c1,'/',z1);
readln;
clrscr;
s:=z*z1;
c:=c*z1;
c1:=c1*z;
s1:=c1+c;
writeln('Otvet: ',s1,'/',s);
readln;
end.
Проверьте плиззз... Правильно ли я сделал...
У меня вопрос!
Еще раз цитирую:
"Должны быть предусмотрены операции ввода, вывода дроби, в том числе в виде смешанной"
Как представить число в виде смешанной, и как его посчитать...
Если можно, тоже алгоритм напишите плиззз!
Аааа, и вот еще что... Почему-то у меня Pascal перестал писать русскими буквами, т.е не работает правый CTRL+SHIFT, раньше писал...
Если знает где настроить русский пожалуйста подскажите....
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 18:59
Anton_XXX
Вот... маленько оформил...
Код: Выделить всё
uses crt;
var k1,k,s1,s,c1,z1,c,z:integer;
i:integer;
begin
clrscr;
writeln('Vvod drobi');
read(c);
write('-');
writeln;
read(z);
readln;
clrscr;
writeln('Vvod 2 drobi');
read(c1);
write('-');
writeln;
read(z1);
readln;
s:=z*z1;
k:=c*z1;
k1:=c1*z;
s1:=c1+c;
writeln(c,'/',z,'+',c1,'/',z1,'=',s1,'/',s);
readln;
end.
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 20:09
Колядин Максим
Anton XXX писал(а):Аааа, и вот еще что... Почему-то у меня Pascal перестал писать русскими буквами, т.е не работает правый CTRL+SHIFT, раньше писал...
Попробуй изменить раскладку на русский. Заходи в
DOS shell (File > DOS shell), здесь меняй раскладку - вводи
kb16 RU, далее
exit для выхода.
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 20:25
nimbus
uses crt;
var s1,s,buf,cs,c1,z1,c,z:integer;
b:boolean;
begin
clrscr; {vvod drobey}
writeln('Vvod drobi');
readln(c);
writeln('-');
readln(z);
clrscr;
writeln('Vvod 2 drobi');
readln(c1);
writeln('-');
readln(z1);
clrscr; {vybor operacii}
writeln ('vybor deystvia');
writeln ('1 - slogenie');
writeln ('2 - vychitanie');
writeln ('3 - umnogenie');
writeln ('4 - delenie');
readln(cs);
case cs of
1: begin
s:=z*z1;
s1:=s div z+s div z1;
end;
2: begin
s:=z*z1;
s1:=s div z-s div z1;
end;
3: begin
s:=z*z1;
s1:=c*c1;
end;
4: begin
buf:=c1;
c1:=z1;
z1:=buf;
s:=z*z1;
s1:=c*c1;
end;
end;
if (s1<0) and (s<0) then {znak minus}
begin
s1:=s1*(-1);
s:=s*(-1);
end
else
if s1<0 then begin
s1:=s1*(-1);
b:=true;
end;
if s<0 then begin
s:=s*(-1);
b:=true;
end;
clrscr; {otvet}
if b=true then
writeln('- ',s1,'/',s)
else
writeln(s1,'/',s);
readln;
end.
Подумай над сокращением дробей в ответе. Проверяй, если и чмслитель и знаменатель делятся на 2, дели на 2, если на 3 - дели на 3 и т.д. Сделай это в цикле.
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 20:29
nimbus
ты ввёл k и k1 но их не использовал - видимо забыл)))
а смешанные дроби, это насколько я понял, когда числитель и знаменатель с разным знаком?
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 20:46
nimbus
Решил подумать сам. Вот вариант с сокращением
uses crt;
var min,i,s1,s,buf,cs,c1,z1,c,z:integer;
b:boolean;
begin
clrscr; {vvod drobey}
writeln('Vvod drobi');
readln(c);
writeln('-');
readln(z);
clrscr;
writeln('Vvod 2 drobi');
readln(c1);
writeln('-');
readln(z1);
clrscr; {vybor operacii}
writeln ('vybor deystvia');
writeln ('1 - slogenie');
writeln ('2 - vychitanie');
writeln ('3 - umnogenie');
writeln ('4 - delenie');
readln(cs);
case cs of
1: begin
s:=z*z1;
s1:=s div z+s div z1;
end;
2: begin
s:=z*z1;
s1:=s div z-s div z1;
end;
3: begin
s:=z*z1;
s1:=c*c1;
end;
4: begin
buf:=c1;
c1:=z1;
z1:=buf;
s:=z*z1;
s1:=c*c1;
end;
end;
if s1<>s then
begin
if s1<s then min:=s1
else min:=s;
end
else min:=s;
for i:=min downto 1 do begin
if (S mod i=0) and (s1 mod i=0) then begin
s:=s div i;
s1:=s1 div i;
end;
end;
if (s1<0) and (s<0) then {znak minus}
begin
s1:=s1*(-1);
s:=s*(-1);
end
else
if s1<0 then begin
s1:=s1*(-1);
b:=true;
end;
if s<0 then begin
s:=s*(-1);
b:=true;
end;
clrscr; {otvet}
if b=true then
writeln('- ',s1,'/',s)
else
writeln(s1,'/',s);
readln;
end.
Re: Помогите решить задачу...
Добавлено: 13 апр 2007, 21:48
Anton_XXX
Спасибо Большое Вам...!!!
Если возникнут вопросы, обязательно обращусь к вам...