![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
maksimla |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
Придположим что купили компиютер,который невыполняет натуральных чисел деления операцию.
Задание. Напишите рекурсированную процедуру двух натуральных чисел деление остатка и (ой забыл слово) найти тоесть выполняющяя операцию div и mod. Сделал я это все только нерекурсивно просто в процедуре написал program Bevarde0; Можете обьяснить как мне сделать рекурсией только невыкладываете решение то я сам хочю сделать рекурсией. Добавлено через 16 мин. Вот что получилось у меня рекурсивно procedure del (a,b:integer); кажется что все нормально выводит но мне кажется что както можно лутшей может обьясните но только невыкладывайте решения -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Можете обьяснить как мне сделать рекурсией Любую рекурсивную подпрограмму надо начинать писать с условия, которое ее прекратит. То есть, когда прекратятся рекурсивные вызовы, и начнется "раскрутка в обратную сторону". Иначе очень просто получить "Переполнение стека", запустив рекурсию бесконечную...В твоем случае этим условием может быть A < B, тогда сам процесс деления можно считать законченным, и надо будет просто "собрать" информацию, чему же равно частное. А вот если это условие не выполняется, то надо продолжать процесс деления, и вызывать опять del рекурсивно, уменьшая A... Hint: не работай через глобальные переменные, это нехорошо. Передавай все, что тебе нужно - через параметры, а чтобы вернуть результат - делай не процедуру деления, а функцию. Если одного результата мало (а его таки мало, надо вернуть И частное И остаток), то частное вернется, как результат функции, а остаток - через Var - параметр... |
maksimla |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
вот тут у меня происходит то самое деление
но мочему мне тут надо делать параметр m:=-1; и мне кажется что это if m=0 then c:=a; совсем лишнее Hint: не работай через глобальные переменные, это нехорошо. Передавай все, что тебе нужно - через параметры, а чтобы вернуть результат - делай не процедуру деления, а функцию. Если одного результата мало (а его таки мало, надо вернуть И частное И остаток), то частное вернется, как результат функции, а остаток - через Var - параметр... неочень понял но мне ведь написали что надо сделать процедурой Добавлено через 7 мин. вот я избавился от некоторых глобальных перемнных program Bevarde0; вы имели в веду чтобы я в процедуре неупотреблял a,b ? и почему нехорошо пользоватся глобальными переменными Сообщение отредактировано: maksimla - 8.11.2009 14:37 -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата но мочему мне тут надо делать параметр m:=-1; А кто тебе сказал, что оно действительно надо? Можно и без этого обойтись. Я ж тебе сказал, начинай делать с условия выхода, ты опять непонятно с чего начинаешь... Хочешь - покажу, как надо делать, а объяснять, почему сделано ТАК, когда сделано явно неправильно - я не буду...Цитата мне ведь написали что надо сделать процедурой Ну, значит, мучайся с процедурой. Когда можно сделать проще - обычно делают проще. Я тебе уже написал, откуда это идет, и опять убеждаюсь в сказанном. Тебя сейчас мучают "делай процедурами", а потом (на другом языке) милостиво разрешат использовать функции, и ты первый будешь всем рассказывать, какой отстой этот Паскаль. Я видел уже такой финт, не надо спорить. Это очень грязные приемы, но к сожалению, они используются в некоторых местах... |
maksimla |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
у меня чегото неполучается функцией
program Bevarde0; -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
Client |
![]()
Сообщение
#6
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Для заметки: с рекурсией я сам не дружу
![]() Цитата Любую рекурсивную подпрограмму надо начинать писать с условия, которое ее прекратит А ты что делаешь?У меня получилось так function del (x,y:Integer; var i:Integer):Integer;А в вызове 3-м параметром должна быть переменная со значением 0. Наверно можно и в рекурсии над ней поколдовать, чтоб не заботится о начальном значении переменной. Сообщение отредактировано: Client - 8.11.2009 16:42 |
TarasBer |
![]()
Сообщение
#7
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Кстати говоря, исходная задача - реализовать деление вручную - вовсе не так надумана, как кажется. Если посмотреть, как в дельфах реализовано деление двух чисел типа int64, то окажется, что там как раз всё делится "вручную". Но там, конечно, не вычитание делается, а двоичное деление в столбик. Это я к чему. Алгоритм есть куда оптимизировать.
-------------------- |
maksimla |
![]()
Сообщение
#8
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
Для заметки: с рекурсией я сам не дружу ![]() А я так мало с чем вообще дружу. А я нечего и не сделал только ерунду и все. А я думал когда рекурсивно доходит значение if x>y then del(x-y,y);x<y то тогда конец -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
maksimla |
![]()
Сообщение
#9
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
всем спасибо
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 16:08 |