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

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

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

> рекурсивное деление, некак немогу сообразить как рекурсией
сообщение
Сообщение #1


Знаток
****

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

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


Придположим что купили компиютер,который невыполняет натуральных чисел деления операцию.
Задание. Напишите рекурсированную процедуру двух натуральных чисел деление остатка и (ой забыл слово) найти тоесть выполняющяя операцию div и mod.

Сделал я это все только нерекурсивно просто в процедуре написал
program Bevarde0;
var a,b,m,c:integer;
procedure del (a,b:integer);
begin
m:=0;
while a>=b do
begin
inc(m);
a:=a-b;
end;
c:=a;
end;
begin
WriteLn('iveskite du skaicius');
readln(a,b);
del(a,b);
writeln(a,' div ',b,' = ',m);
writeln(a,' mod ',b,' = ',c);
readln;
end.


Можете обьяснить как мне сделать рекурсией только невыкладываете решение то я сам хочю сделать рекурсией.

Добавлено через 16 мин.
Вот что получилось у меня рекурсивно
procedure del (a,b:integer);
begin
m:=-1;
if a>=b then del(a-b,b);
inc(m);
writeln('m= ',m);
if m=0 then c:=a;
end;

кажется что все нормально выводит но мне кажется что както можно лутшей может обьясните но только невыкладывайте решения


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

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

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


вот тут у меня происходит то самое деление

procedure del (a,b:integer);
begin
m:=-1;
if a>=b then del(a-b,b);
inc(m);
writeln('m= ',m);
if m=0 then c:=a;
end;


но мочему мне тут надо делать параметр m:=-1; и мне кажется что это if m=0 then c:=a; совсем лишнее
Цитата(volvo @ 8.11.2009 13:22) *

Hint: не работай через глобальные переменные, это нехорошо. Передавай все, что тебе нужно - через параметры, а чтобы вернуть результат - делай не процедуру деления, а функцию. Если одного результата мало (а его таки мало, надо вернуть И частное И остаток), то частное вернется, как результат функции, а остаток - через Var - параметр...

неочень понял но мне ведь написали что надо сделать процедурой

Добавлено через 7 мин.
вот я избавился от некоторых глобальных перемнных
program Bevarde0;
var a,b,m,c:integer;
procedure del (x,y:integer);
begin
m:=-1;
if x>y then del(x-y,y);
inc(m);
writeln('m= ',m);
if m=0 then c:=x;
end;
begin
WriteLn('iveskite du skaicius');
readln(a,b);
del(a,b);
writeln(a,' div ',b,' = ',m);
writeln(a,' mod ',b,' = ',c);
readln;
end.

вы имели в веду чтобы я в процедуре неупотреблял a,b ? и почему нехорошо пользоватся глобальными переменными

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


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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