Помогите решить задачу...

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Anton_XXX
Сообщения: 108
Зарегистрирован: 21 дек 2006, 17:15

Помогите решить задачу...

Разработайте модуль для работы с обыкновенными дробями. Должны быть предусмотрены операции ввода, вывода дроби, в том числе в виде смешанной, с операцией сложения...

Если сможите, напишите плиззз алгоритм задачи... т.к - это только часть задачи... остальное я попробую решить сам...


И вот еще что: Целые числа представляются со знаменателем 0. Ноль представляется как 0/1.

Эта задача на Pascal'e...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

любое число представляется как неправильная дробь, или в виде целой части и правильной дроби?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):Целые числа представляются со знаменателем 0
Было бы логичнее, если со знаменателем 1. Т.е. в данном случае, например
5/0 = 5
0/1 * 5/0 = 0/0, какое это число? целое или ноль?
(5/0) / (0/1) = 5/0 * 1/0 = 5/0 = 5, т.е. делить на ноль можно?
Преподаватели информатики все чаще вытворяют чудеса, придумывая задачи
"от балды". А бедные студенты потом ломаю башню, как ему угодить. Кто знает, может он будущий "Лобачевский"
It's a long way to the top if you wanna rock'n'roll
Anton_XXX
Сообщения: 108
Зарегистрирован: 21 дек 2006, 17:15

Правильно... :) Может это опечатка? Я тоже думаю, как это можно целые числа, напримар число 2, представить как 2/0... :p
Кароче вот код сложения дроби:

Код: Выделить всё

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, раньше писал...
Если знает где настроить русский пожалуйста подскажите....
Anton_XXX
Сообщения: 108
Зарегистрирован: 21 дек 2006, 17:15

Вот... маленько оформил...

Код: Выделить всё

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.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Anton XXX писал(а):Аааа, и вот еще что... Почему-то у меня Pascal перестал писать русскими буквами, т.е не работает правый CTRL+SHIFT, раньше писал...
Попробуй изменить раскладку на русский. Заходи в DOS shell (File > DOS shell), здесь меняй раскладку - вводи kb16 RU, далее exit для выхода.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
nimbus
Сообщения: 7
Зарегистрирован: 07 апр 2007, 15:42

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 и т.д. Сделай это в цикле.
nimbus
Сообщения: 7
Зарегистрирован: 07 апр 2007, 15:42

ты ввёл k и k1 но их не использовал - видимо забыл)))
а смешанные дроби, это насколько я понял, когда числитель и знаменатель с разным знаком?
nimbus
Сообщения: 7
Зарегистрирован: 07 апр 2007, 15:42

Решил подумать сам. Вот вариант с сокращением



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.
Anton_XXX
Сообщения: 108
Зарегистрирован: 21 дек 2006, 17:15

Спасибо Большое Вам...!!!
Если возникнут вопросы, обязательно обращусь к вам...
Ответить