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

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

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

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


Новичок
*

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

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


посмотрите пожалуйста....у меня не выводятся Х и У, программу сам писал....
Вот задание:...Для заданных натуральных чисел А и В найти такие целые числа Х и У, что А*Х+В*У=С, где С равно наибольшему общему делителю чисел А и В.

Program LR_2;   Uses Crt;
var A, B, X, Y, C, r : Longint;

Function NOD (Var a, b : longint) : longint;
Var X, Y, C : integer;
Begin

if (a = 0) or (b = 0)then
if a = 0 then
nod := b else
nod := a
else
If a >= b then begin
a := a mod b;
nod := nod (a,b);
end
else
Begin
b := b mod a;
nod := nod(a, b);
end;
end;

Begin Clrscr;
Writeln ('Vvedite dva celih shisla');
Readln (a); Readln (b);
Writeln ('C = ', nod(a, b));
r := nod(a,b);
readln;
end.




Добавлено через 4 мин.
на иконку внимания не общайте

Сообщение отредактировано: Lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

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

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


А ты ведь не задал что будишь с Х и У делать и они просто напросто равны нулю. Ты только считаешь NOD наибольший общий делитель А и В. Вот и все а другие нечего не использовал.
вот смотри
Program LR_2;
var A, B: Longint;

Function NOD (Var a, b : longint) : longint;
Begin

if (a = 0) or (b = 0)then
if a = 0 then
nod := b else
nod := a
else
If a >= b then begin
a := a mod b;
nod := nod (a,b);
end
else
Begin
b := b mod a;
nod := nod(a, b);
end;
end;

Begin
Writeln ('Vvedite dva celih shisla');
Readln (a); Readln (b);
Writeln ('C = ', nod(a, b));
readln;
end.



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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


maksimla меня опередил, я хотел сказать то же самое (хотя уточню: x и y не равны нулю; они вообще ничему не равны - их просто нет..). И еще, я сомневаюсь вот в этом:
Цитата(serega204 @ 16.10.2009 14:14) *
программу сам писал....
Если действительно хочешь помощи - не настраивай против себя враньем.. Функция NOD, вроде, правильно работает (я проверил на паре примеров). И если ты сам ее написал - то мог бы хотя бы заметить то, о чем сказал maksimla..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Я.
****

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

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


Цитата(Lapp @ 16.10.2009 15:07) *
x и y не равны нулю; они вообще ничему не равны - их просто нет..).
где-то читал, что начиная с 7й версии все переменные перед использованием обнуляются. в си - согласен, там мусор.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


огромнейшее спасибо за помощь

Добавлено через 2 мин.
там надо дописать где-то вывод Х и У....там ведь формула А*Х+В*У=С, и нужно чтобы выводились целые числа Х и У

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


Гость






Цитата
где-то читал, что начиная с 7й версии все переменные перед использованием обнуляются.
Во-первых, на это нельзя рассчитывать, лучше инициализировать самому. Во-вторых, у автора вопроса может быть и не 7-ая версия, а 6-ая, например. А в-третьих, после запуска программы в ЛОКАЛЬНЫХ (внутри функции) переменных X, Y будет-таки мусор, а ГЛОБАЛЬНЫХ не будет вообще, ибо оптимизатор вышвырнет неиспользуемые переменные.

Но это так, отступление, просто не мог пройти мимо smile.gif

Цитата
но когда х и у хочешь вывести ошибка переполнения стека возникает
Можно посмотреть, КАК ты пытаешься вывести X и Y? Полный текст программы, разумеется...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


вроде бы так, но если не так подправьте пожалуйста

Program LR_2;   Uses Crt;
var A, B, X, Y, C, r : Longint;

Function NOD (Var a, b : longint) : longint;
Var X, Y, C : integer;
Begin

if (a = 0) or (b = 0)then
if a = 0 then
nod := b else
nod := a
else
If a >= b then begin
a := a mod b;
nod := nod (a,b);
end;
c := Nod(a,b)
c := A*X+B*Y
else
Begin
b := b mod a;
nod := nod(a, b);
end;
c := Nod(a,b)
c := A*X+B*Y;
end;

Begin Clrscr;
Writeln ('Vvedite dva celih shisla');
Readln (a); Readln (b);
Writeln ('C = ', nod(a, b));
writeln (X, Y);
end.


М
ставь тэги, пожалуйста



Сообщение отредактировано: Lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
вроде бы так, но если не так
Ты компилировать этот код пробовал вообще? Сначала говоришь, что у тебя что-то там вылетает с переполнением стека, когда тебя просят привести код, который вылетает, ты пишешь НЕЧТО, что вообще не компилируется. Внимание, вопрос: если оно не компилируется, КАК ты это запускал??? Опять ни одного слова правды.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


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


Знаток
****

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

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


Цитата(serega204 @ 16.10.2009 23:26) *

это я просто наугод записал здесь....там ошибка переполнения стека вылетает...я не лгу честно


Что ты наугад написал? Если программу то некто наугад программы не пишет а копирует и выкладывает тут на форуме. Попытайся и ты также само сделать и выложить.


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


Знаток
****

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

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


c := Nod(a,b);
у тебя из за этого переполнение стека ты просто обращаешься к функции Nod заново а если хочещь значение Nod дать с то надо делать так
 c := Nod; 


а тут ведь ты не задал значение x и y и они нечему неравны тогда и c становится нечему неравной
c := A*X+B*Y; 


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


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


Новичок
*

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

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


мне преподаватель сказал чтобы я ещё написал вторую рекурсивную функцию для вывода Хи У используя перебор с возвратом...помогите если можете!!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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