IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Процедуры и функции, Помогите полажуйста!!!
сообщение
Сообщение #1


Гость






Разработаите функцию, которая находит НОД двух целых чисел. Разработайте процедуру, вычисляющую сумму двух обыкновенных дробей. Напишите программу, которая находит сумму n заданных обыкновенных дробей.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Студент
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Владимир

Репутация: -  3  +


Цитата(-Наташа- @ 13.05.2008 21:26) *

Разработаите функцию, которая находит НОД двух целых чисел. Разработайте процедуру, вычисляющую сумму двух обыкновенных дробей. Напишите программу, которая находит сумму n заданных обыкновенных дробей.

Эмм, вы сговорились) Задача

Как должны вводиться обыкновенные дроби?


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






не знаю в задании не указаноsad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


можно наверное так 2/6 если что не забыл.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Мальчики ну помогите полажуйста
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Студент
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Владимир

Репутация: -  3  +


Цитата(Гость @ 13.05.2008 22:07) *

Мальчики ну помогите полажуйста

Подождите пожалуйста 15 минут


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Студент
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Владимир

Репутация: -  3  +


Код
Program t1;
uses
crt;
var
i:integer;

procedure ratio;
var
numerator,denominator: array [1..1000] of integer;
n,numsum,densum:integer;
begin
numsum:=0;
densum:=0;
writeln('input number of ratios');
write('n=');
readln(n);
writeln('input numerator of ratio, then press "Enter", then input denominator of ratio');
writeln('input ratios');

for i:=1 to n do
begin
write('ratio ',i,'=');
read(numerator[i]);
write('/');
read(denominator[i]);
end;

for i:=1 to n do
begin
numsum:=numsum+numerator[i];
densum:=densum+denominator[i];
end;
writeln('Sum is ',numsum,'/',densum);
end;

begin
clrscr;
ratio;
end.


Наверняка нерационально, +дробную черту на следующую строку не переносит + дробь не упрощает, но работает, а минусы исправимы.

Сообщение отредактировано: mind abuse -


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Наверняка нерационально
Мало того, что нерационально, так еще и неправильно... 2/3 + 3/4 не равно 5/7, как утверждает твоя программа... В задании совсем не просто так просят найти НОД двух чисел... rolleyes.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Студент
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Владимир

Репутация: -  3  +


Тьфууу((( Тяжёлый был день( Сейчас исправлю.


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Студент
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Владимир

Репутация: -  3  +


Код
Program t1;
uses
crt;
var
i:integer;

function NOD(a:integer; b:integer):integer;
begin
while(a<>0) and (b<>0) do if a>=b then a:=a mod b else b:=b mod a;
NOD:=a+b;
end;


procedure ratio;
var
numerator,denominator: array [1..1000] of integer;
n,numsum,densum,usednod:integer;
begin
numsum:=0;

writeln('input number of ratios');
write('n=');
readln(n);
writeln('input numerator of ratio, then press "Enter", then input denominator of ratio');
writeln('input ratios');

for i:=1 to n do
begin
write('ratio ',i,'=');
read(numerator[i]);
write('/');
read(denominator[i]);
densum:=denominator[1];
numsum:=0;
end;

for i:=2 to n do
begin
densum:=densum*denominator[i];
end;

for i:=1 to n do
begin
numsum:=numsum+(densum div denominator[i])*numerator[i];
end;

usednod:=NOD(numsum,densum);
numsum:=numsum div usednod;
densum:=densum div usednod;
writeln('Sum is ',numsum,'/',densum);
end;

begin
clrscr;
ratio;
end.


По-прежнему сильно корявое, но теперь хоть считает правильно и дробь сокращает. Жалко, что человека предыдущим вариантом подвёл(


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Вот еще вариант, с обработкой элементарных ошибок:
function NOD(A, B: longint): integer;
begin
while (a <> 0) and (b <> 0) do
if a >= b then
a := a mod b
else
b := b mod a;
NOD := a + b;
end;

function NOK(A, B: longint): integer;
begin
NOK := a * b div NOD (a, b)
end;

type
ratio = record
num, denom: longint;
end;

{ Процедура сокращения дробей (заодно корректируем знак) }
procedure div_ratio(var res: ratio);
var the_nod: longint;
begin
repeat
the_nod := NOD(abs(res.num), abs(res.denom));
if the_nod > 1 then begin
res.num := res.num div the_nod;
res.denom := res.denom div the_nod;
end;
until the_nod = 1;

if res.denom < 0 then begin
res.num := res.num * (-1);
res.denom := abs(res.denom);
end;
end;

{ Сложение дробей }
procedure add_ratio(var res: ratio; curr: ratio);
var new_denom: longint;
begin
div_ratio(curr);

new_denom := NOK(res.denom, curr.denom);
res.num :=
res.num * (new_denom div res.denom) +
curr.num * (new_denom div curr.denom);
res.denom := new_denom;

div_ratio(res);
end;

var
curr: ratio;
const
{ Изначально результат = 0, т.е. 0/1 }
res: ratio = (num:0; denom:1);

begin
writeln('Дроби (0 в числителе для окончания подсчета)');
repeat
write('Числитель: '); readln(curr.num);
if curr.num <> 0 then begin
write('Знаменатель: '); readln(curr.denom);
if curr.denom = 0 then
repeat
writeln('Деление на 0 недопустимо!');
write('Знаменатель: '); readln(curr.denom);
until curr.denom <> 0;

add_ratio(res, curr);
end;
until curr.num = 0;

writeln('Результат = ', res.num, '/', res.denom);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Спасибо вам огромноеsmile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.11.2020 0:22
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name