![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.01.2009
Сообщений: 144
|
![]()
В общем так: дали решить задачи, а я не могу понять, чего от меня хотят, т.е. не понимаю смысл задачи и не могу составить алгоритм решения. Решение задачи не нужно, напишу сама скорее всего, а вот что делать, зачем и почему, объясните пожалуйста:
1. Дано натуральное число. Составить программу, которая представляет данное число в виде суммы квадратов натуральных чисел, содержащей минимальное число слагаемых. Например 9=3^2 12=2^2+2^2+2^2 23=3^2+3^2+2^2+1^2 |
![]() |
![]() |
![]() |
#2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Ну вот какие мысли:
имхо решать нужно рекурсией. В функцию (которая будет рекурсивно вызываться) передаете текущую сумму квадратов (ту, что уже накопилась) и строку (вида 3^2+...и т.д). Если сумма превышает исходное число, то выходим (и возвращаем, например, false). Если сумма равна исходному числу, то выводим строку и возвращаем true. Если сумма меньше числа, то идем в цикле от квадратного корня числа до 1. Если счетчик в квадрате + накопившаяся сумма не больше исходного числа, то (в самой функции еще нужно объявить строку-буфер) в строку-буфер пишем переданную функции строку "+счетчик^2" и вызываем себя (функцию) с параметрами: текущая сумма (которая в аргументах функции) + счетчик в квадрате, строка-буфер. В общем, как-то так. Надеюсь, что-нибудь понятно. Решал подобные задачи.. Особо сложного там ничего нет.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 18.01.2009
Сообщений: 144
|
![]()
Sazary, э-э... Я что-то вообще запуталась Т_Т Не могли бы как-нить на примере хотя бы объяснить, т.е. что-то типа алгоритма сделать?
И что значит - "рекурсией"? Первый раз с такой задачкой столкнулась и в полном тупике сижу... |
![]() |
![]() |
![]() |
#4 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Sianessa, если вы не знакомы с рекурсией, то вам обязательно нужно с ней познакомиться.
Попробую на примере. Есть число N. Пусть это будет 10. Сразу определяем условие, при котором нужно закончить все действия - нашли нужные слагаемые. Итак. Идем в цикле от trunc(sqrt(N)) до 1. (надеюсь, понятно, почему нужно идти от большего к меньшему и почему именно от квадратного корня числа?) Квадратный корень из 10 (округленный) = 3. 3^2 = 9. Число меньше исходного. Берем его как первое слагаемое. Снова идем в цикле от trunc(sqrt(N)) до 1. 3^2 + 3^2 = 18 > 10. 3^2 + 2^2 = 13 > 10. 3^2 + 1^2 = 10 - то, что нужно! Как-то так.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 18.01.2009
Сообщений: 144
|
![]()
Sazary, с рекурсией не знакома никак.
Последую вашему совету непременно, ибо она мне тут нужна судя по всему. Про корень квадратный всё понятно. Картина уже яснее стала кажись ![]() Вы говорили что решали подобные задачи, а у вас случайно чего-то похожего не завалялось? Если да, то не могли бы поделиться? Мне важна даже больше сама наглядность и сам алгоритм, ибо у меня даже с алгоритмами больше проблем чем с решением, т.к. препод без алгоритмов задачи не принимает. |
![]() |
![]() |
![]() |
#6 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 18.01.2009
Сообщений: 144
|
![]()
Sazary, хм, быстро вы, однако
![]() Спасибо ![]() Только эмм, не понятно, что есть crt и clrscr ? Оно ругаецо у меня почему-то =__= Последний раз редактировалось Sianessa; 31.03.2009 в 21:20. |
![]() |
![]() |
![]() |
#8 | ||
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]() Цитата:
В данной программе из него используется только процедура очистки экрана clrscr; Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
||
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 18.01.2009
Сообщений: 144
|
![]()
Sazary, а где его взять, модуль этот?
Он пишет что файл crt.dcu не найден =___= и не хочет программу запускать Т_Т И по-моему это с паскаля, может его нет в делфи? Последний раз редактировалось Sianessa; 31.03.2009 в 21:42. |
![]() |
![]() |
![]() |
#10 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Sianessa, в принципе, вы просто можете удалить строки
Код:
Код:
upd Сейчас проверил - у меня тоже не находит ) ну значит просто удалите строчки.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] Последний раз редактировалось Sazary; 31.03.2009 в 21:42. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объясните delphi (inc) | Neymexa | Помощь студентам | 5 | 27.01.2009 16:30 |
Бд в Delphi,объясните плиз | RamireZ | БД в Delphi | 1 | 21.10.2008 23:58 |
Объясните, пожалуйста смысл строки - res=d.year > year ? -1: (d.year < year? 0:1) | Fynj | Помощь студентам | 2 | 17.12.2007 17:50 |