| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Алгоритм] I=A*K+B*L |
| Автор: KasMP 17.11.2007, 19:26 | ||||
| Здравствуйте, товарищи программисты! Проходим Паскаль, контрольная по теме "Функции". У меня проблема не в паскале, а в самом алгоритме. Задачка звучит так:
Взгляните, пожалуйста, на мой набросочек и скажите, какие мысли
Заранее благодарю уже за внимание! |
| Автор: KasMP 17.11.2007, 19:29 | ||||
| Здравствуйте, товарищи программисты! Проходим Паскаль, контрольная по теме "Функции". У меня проблема не в паскале, а в самом алгоритме. Задачка звучит так:
Взгляните, пожалуйста, на мой набросочек и скажите, какие мысли
Заранее благодарю уже за внимание! |
| Автор: esperant0 17.11.2007, 19:43 |
| Раздел по алгоритмам. А у вас вопрос по анализу кода? Ничего не понимаю |
| Автор: KasMP 17.11.2007, 19:59 | ||
| esperant0, возможно, моя низкая квалификация дала о себе знать... Не судите строго студента. Но вообще я имела в виду, что не могу составить часть алгоритма. В коде это место записано так:
А сам код приведен для того, чтобы вы могли оценить рациональность других частей алгоритма. Кстати, спасибо за попытку понять! |
| Автор: primax 18.11.2007, 20:20 | ||||
| Я не совсем понимаю условие задачи. Зачем искать I по числам А или B раздельно, когда у тебя одно из этих чисел больше N? Ведь если К, L>0, то при A, B>N (одно из них или два сразу, без разницы) I>N полюбому. Я в условии не заметил ничего что мне бы говорило о раздельном поиске, сказано четко: I=K*A+L*B Если нужно организовать проверку на то что меньше, то я бы делал так:
А дальше, как по мне, самый простой вариант, это 2 вложеных логических цикла (вайл, репит) с проверкой "не проскочили ли мы условие I<N" и поочередным инкрементом L,K. Т.е. фактически тебе нужно организовать полный перебор выражения I=K*A+L*B используя твои условия по переменым K,L и константам A,B (константы - переменые которые не меняются на данном этапе, а не переменые-константы Но тут еще нюанс есть: А,В тоже должны быть больше 0. Иначе там просто вариантов бесконечность вариантов. Реализовал как я понял.
Если я не так понял все в итоге) То уточни условие конкретнее. Кстати, часные случаи желательно писать в самом алгоритме, а не отдельно, но если это конечно не увеличит масивность программы или кол-ва вычислений лишних. П.С. 17 число :О День студента ж ведь, какие могут быть дела)) Извини если с объяснениями запутал. Добавлено через 2 минуты и 33 секунды Можно убрать 3 присваевания, если поставишь 10 строку под 11 добавив begin и end для IF. |
| Автор: KasMP 24.11.2007, 01:18 | ||
Пожалуйста, посмотрите на плод моих трудов, суть которого сводится к следующему:
Спасибо за внимание! Добавлено через 4 минуты и 43 секунды Вот только незадача: если A=3, B=4, N=21, то программа выводит и I=22... Как вовремя остановить цикл? |
| Автор: GIK 24.11.2007, 12:42 | ||
Вобщем то понятно, но пониманий складывается уж очень много... Где предел числе? и у A, B, N и у K c L ? Разьясни задачу подробнее и тебе помогут |
| Автор: mr.Anderson 24.11.2007, 15:48 | ||
Давайте попробую объяснить. 1. Предел чисел A и B - можно взять беззнаковое целое, скажем, Word (я по паскалю мыслю), плюс учитываем, что они не превышают N. 2. Насчет предела K и L. Поскольку в формуле используется умножение этих чисел на два данных, плюс известно, что они неотрицательные (скажем, тот же тип Word), то складывается следующая мысль: поскольку числа A, B не могут быть отрицательными и не могут быть нулевыми (нуль в натуральные не входит, напомню), то:
|
| Автор: GIK 24.11.2007, 16:16 |
| Спасибо конечно, но пропуская через цикл эти занчения, явно какой-то предел (100 или 100 000 например) должен существовать |
| Автор: mr.Anderson 24.11.2007, 18:32 | ||
Дык. А я о чем речь вел? Вот алг (не проверял, правда...):
|
| Автор: primax 25.11.2007, 02:47 | ||
Не заметил этого в условии изложеным тобой Хм. Задание реализовать программу используя подпрограммы (функции в даном случае)? или задание в том чтобы реализовать функции раздельного поиска (ну т.е. то что ты делала В принципе могу завтра, если будет время, твою задачку доделать используя твою логику (т.е. твою задумку для достижения результата). П.С. Кстати, там можно в 2 раза уменьшить сложно алгоритма (я про свой), если заметить что там после определеного момента идут симметричные результаты (вроде было так, не помню, неделю назад это заметил). |
| Автор: KasMP 26.11.2007, 16:57 | ||||
(неужели я вообще ничего не понимаю? Вобщем, предел(A)=предел(B)=предел(N)=100 Вновь благодарю за прочтение моего полуламерского опуса. |
| Автор: KasMP 26.11.2007, 17:49 |
| "... где K и L - целые неотрицательные числа."Первое.Нет, это моя задачка, она МОЯ, я хочу сама, не надо делать за меня, я просто прошу совет!!!!!!! |
| Автор: Akina 26.11.2007, 18:46 |
| ну и чего? берем и считаем: A A+B A+2B A+3B... ... A+mB 2A 2A+B 2A+2B 2A+3B... ... 2A+nB 3A 3A+B ... pA+qB ... НОК(A,B) строки отсечки, помеченные жирно - это те, после которых следующая строка выскочит за пределы N. Если НОК(A,B)<N, то в момент рассчета НОК(A,B) все бОльшие этого значения представимые числа уже выведены ранее. Добавлено @ 18:51 В частности, легко доказать, что любое число, превышающее НОК(A,B) и делащееся на НОД(A,B), представимо в виде K*A+L*B, и соответственно если они взаимно просты (НОД=1), то любое число, превышающее A*B, представимо в виде K*A+L*B. |
| Автор: primax 26.11.2007, 19:26 | ||||||
Ой, я говорил про А, В... ведь мы ищем представления I прежде задав A, B, а если А, В (ух блин) < 0 то представлений I будет просто уйма. По условию (фраза "не превосходящих") I<N, а если одно из тех чисел отризательно то это условие выполняется всегда. Например: A>0, B<0 ==> K=const, L стремится к бесконечности ==> I стремится к минус бесконечности. Хотя это не особо важно.
Извини, просто за последнее время много чего по этому поводу проскочило, кто-то просит решение, кто-то консультацию и прочее-прочее.... Совет по той части которая у тебя пропущена (поиск для А и В одновременно, моя предложеная реализация выше):
|
| Автор: KasMP 27.11.2007, 00:07 | ||||
| Взгляни(те), пожалуйста, вот на http://forum.vingrad.ru/forum/topic-182398.html тему ______________________________________________________
|
| Автор: Akina 27.11.2007, 00:45 | ||
Кто мешает в дополнение к числу выводить и то каким способом оно получено? это вообще не имеет отношения к алгоритму. Вообще за дубли положено давать по шее. Рекомендую обратиться к модератору с просьбой перенести и объединить. А сравнивать 2 темы и выискивать, что из одной переползло в другую, мне откровенно влом. К тому же возможный алгоритм мною рассказан, а его программная реализация - совсем другой вопрос. |
| Автор: KasMP 27.11.2007, 07:33 | ||||||||
(напротив, даже несколько раз видела как некоторые люди создавали одинаковые (или очень похожие) темы в разных разделах; подумала, что это нормально, правильно и хорошо).
|
| Автор: Akina 27.11.2007, 09:52 | ||
В привате я НЕ обсуждаю вопросов. Причина проста - то, что в привате, не видно остальным. А если оно кому-нибудь из тех, кто позже столкнется с подобным вопросом, понадобится? опять приват? нет, все в форуме. |
| Автор: maxim1000 27.11.2007, 11:01 |
| т.к. темы в разных разделах, то объединить у меня не получается так что переношу в Центр помощи, тогда модераторы оттуда смогут объединить |
| Автор: KasMP 27.11.2007, 14:23 | ||||
ОК, пусть будет так
Вобщем скоро темы объединят, Akina сможет увидеть то, что надо, и дальше что-то будет... |
| Автор: primax 27.11.2007, 17:14 | ||||
Пардон)
Все ясно. Такое очущение, что можно только на форуме что-то решать. Универ не в счет? Аболтусов которые покупают\просят помощи\еще что-то хотят - просто море. А если говорить уже по поводу кол-ва сообщений, то я не особо люблю убивать время форумами. В последние месяца понял, что его уже давно реально не хватает. Ну сделай "не просто" перебор. Большинство задач сводятся к нему, данная не исключение. Одно дело полный перебор, а другое дело нет. Это уже как постараешься. |
| Автор: KasMP 2.12.2007, 15:49 | ||
| Так, теперь единственный Почему ниже приведенная процедура один раз выводит число I, превышающее N? (долго-долго искала
|
| Автор: KasMP 9.12.2007, 10:45 |
| Ну помогите, пожалуйста!! |
| Автор: KasMP 15.12.2007, 16:14 | ||
тоже давно сдала (только проблемную процедуру из последнего сообщения немного видоизменила):
|