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

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

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

 
 Ответить  Открыть новую тему 
> помогите пожалуйста, проблемы с рекурсией
serega204
сообщение 16.10.2009 13:14
Сообщение #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 - 16.10.2009 14:17
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
maksimla
сообщение 16.10.2009 14:41
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.10.2009 15:07
Сообщение #3


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

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

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


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


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


Я.
****

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

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


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


Новичок
*

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

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


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

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

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


Гость






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

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

Цитата
но когда х и у хочешь вывести ошибка переполнения стека возникает
Можно посмотреть, КАК ты пытаешься вывести X и Y? Полный текст программы, разумеется...
 К началу страницы 
+ Ответить 
serega204
сообщение 16.10.2009 21:58
Сообщение #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 - 17.10.2009 9:38
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.10.2009 23:04
Сообщение #8


Гость






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


Новичок
*

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

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


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


Знаток
****

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

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


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

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


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


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


Знаток
****

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

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


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


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


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


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


Новичок
*

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

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


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

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

 



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