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

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

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

> Процедуры и функции, Помогите полажуйста!!!
-Наташа-
сообщение 13.05.2008 20:26
Сообщение #1


Гость






Разработаите функцию, которая находит НОД двух целых чисел. Разработайте процедуру, вычисляющую сумму двух обыкновенных дробей. Напишите программу, которая находит сумму n заданных обыкновенных дробей.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 11)
mind abuse
сообщение 13.05.2008 20:39
Сообщение #2


Студент
*

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

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


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

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

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

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


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


Гость






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


поиск
****

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

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


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


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


Гость






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


Студент
*

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

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


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

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

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


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mind abuse
сообщение 13.05.2008 22:04
Сообщение #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 - 13.05.2008 22:06


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


Гость






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


Студент
*

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

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


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


--------------------
...Чего-то хотелось: не то конституции, не то севрюжины с хреном, не то кого-нибудь ободрать.
(М. Е. Салтыков-Щедрин)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mind abuse
сообщение 14.05.2008 2:54
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.05.2008 11:33
Сообщение #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.
 К началу страницы 
+ Ответить 
Гость
сообщение 14.05.2008 18:20
Сообщение #12


Гость






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

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

 



- Текстовая версия 20.07.2025 20:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"