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

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

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

> рекурсия- расстановка знаков
Екатерина7
сообщение 22.11.2009 21:10
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


помогите, пожалуйста, разобраться с задачей

Для заданного набора целых чисел без знака расставить между ними арифметические знаки сложения, деления, и умножения так, чтобы результат вычисления полученного арифметического выражения был минимальным. Число знаков умножения в этом выражении должно быть равным или на 2 больше, чем знаков сложения, а знаков сложения- равно или на 1 больше, чем знаков деления. В наборе должно быть не менее четырех чисел, а в полученном выражении должны присутствовать все три арифметических знака.

(умножение и деление имеют приоритет перед операциями сложения и вычитания, деление производится с остатком)



Сообщение отредактировано: Екатерина7 - 23.11.2009 18:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 25.11.2009 2:31
Сообщение #2


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

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

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


Да. Достаточно было указать на три вызова процедуры Count, которые производятся изнутри самой процедуры. Видишь их? один для +, второй для *, третий для /. Смысл слова "рекурсия" именно в этом и состоит. Как "ре-монт" - это "повторный монтаж", так и "ре-курсия" - это "повторный заход".

Дальше, сам отвечу на свой вопрос. Массив Oper (вместе с OperMin) служит одной-единственной цели: распечатать расставленные знаки в конце. Для самой функциональности, то есть для отыскания нужной комбинации знаков, он не нужен. Это я хотел от тебя услышать.

Похоже, что интереса к задаче у тебя так и не появилось. Мне начинает надоедать вытягивать из тебя по слову. Похоже, что мне это нужно больше тебя.. Когда уже в России научатся (и захотят) учиться?..

Лови решение этой задачи.
const
m=10; {размер цепочки чисел}

type
tNum= LongInt;

var
n,Ad,Mu,Di: integer;
Arg: array[1..m]of tNum;
Oper,MinOper: array[2..m]of char;
Sum,Res,Min: tNum;
Start: boolean;

procedure Count;
var
a,Sum0,Res0: tNum;
begin
if n=m then begin
if (Di>0) and ((Mu=Ad)or(Mu-Ad=2)) and ((Ad=Di)or(Ad-Di=1)) then begin
Sum:=Sum+Res;
if Start or(Sum<Min) then begin
Min:=Sum;
MinOper:=Oper;
Start:=false
end
end
end
else begin
Sum0:=Sum;
Res0:=Res;
Inc(n);
a:=Arg[n];

Oper[n]:='+';
Inc(Ad);
Sum:=Sum+Res;
Res:=a;
Count;
Sum:=Sum0;
Dec(Ad);

Oper[n]:='*';
Inc(Mu);
Res:=Res0*a;
Count;
Dec(Mu);

Oper[n]:='/';
Inc(Di);
Res:=Res0 div a;
Count;
Dec(Di);

Dec(n);
end
end;

var
i: integer;

begin
Randomize;
for i:=1 to m do Arg[i]:=Random(m)+1;
Start:=true;
Res:=Arg[1];
Sum:=0;
Ad:=0;
Mu:=0;
Di:=0;
n:=1;
Count;
Write(Min:10,' = ');
for i:=1 to m do begin
if i>1 then Write(' ',MinOper[i],' ');
Write(Arg[i]);
end;
WriteLn;
ReadLn
end.

На TP не проверял, только на FPC.
Разбирайся. Спрашивай.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 25.11.2009 14:44
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


спасибо большое!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 7.12.2009 21:21
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


несовсем пойму, как она выполняется..точнее вообще не пойму.. непонятно, как выражения считаются. проверяю вручную, не получается..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.12.2009 22:41
Сообщение #5


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

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

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


Цитата(Екатерина7 @ 7.12.2009 21:21) *
несовсем пойму, как она выполняется..точнее вообще не пойму..
Кать, ты меня, наконец, снова радуешь smile.gif. Кроме шуток. Твои предыдущие слова "я разберусь" - расстраивали, а вот теперь чувствуется, что ты уже не витаешь в облаках и находишь силы это признать good.gif

Цитата
непонятно, как выражения считаются. проверяю вручную, не получается..
Покажи, пожалуйста, твои проверки. Что значит "не получается"? Я, например, вручную просто не смогу в большинстве случаев быть уверенным, что я правильно нашел минимум. Или ты хочешь сказать, что вручную тебе удается найти лучший минимум, чем находит программа? Тогда покажи, плз, такой случай. Как только разберемся с этим, я объясню, какой принцип работы проги.
O'kay?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 8.12.2009 10:09
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


смотри,
например 319155=8+2+1+8*10*10*7/9/4/5
вот этого я не понимаю.. как считает.. должно же в результате получиться это число? 319155?

или вот например
46016=1+5+7+5*7*9*1/8/10/8
просто попробовала там посчитать действия и не такой результат..
может я чего-то не допонимаю..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.12.2009 18:28
Сообщение #7


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

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

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


Гм.. И мне тоже непонятно. Кать, откуда ты берешь эти равенства?
Цитата(Екатерина7 @ 8.12.2009 10:09) *
например 319155=8+2+1+8*10*10*7/9/4/5
... или вот например
46016=1+5+7+5*7*9*1/8/10/8

Ты что-то изменила в программе? Покажи, пожалуйста, свой текущий вариант проги.

У меня, например, при запуске получаются такие:
 3 =   1 + 1 / 10 * 9 * 7 * 6 + 2 + 8 / 9 / 3

7 = 10 * 2 / 4 / 7 * 9 * 2 + 4 + 3 + 5 / 7

5 = 4 + 6 / 10 + 6 / 10 * 5 * 2 * 6 + 9 / 5

4 = 7 * 3 / 8 + 2 + 5 * 1 / 7 + 2 * 1 / 8

- на этот раз в BP прогонял для пущей уверенности.
Что я делаю не так? (С)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 8.12.2009 22:58
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


хм... все, нашла ошибку! спасибо! вес правильно получается
good.gif

Добавлено через 3 мин.
blush.gif извиняюсь..

Сообщение отредактировано: Екатерина7 - 8.12.2009 22:59
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.12.2009 23:36
Сообщение #9


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

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

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


Цитата(Екатерина7 @ 8.12.2009 22:58) *
хм... все, нашла ошибку
Извини - ошибку в чем? Вроде бы как ошибки-то и не было... ?

Так что, уже понятно, как оно работает? не нужно объяснять?


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


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


да, ошибка была не у тебя.. все нормально. если не трудно, сможешь объяснить, пожалуйста blush.gif

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


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

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

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


Цитата(Екатерина7 @ 9.12.2009 7:36) *
если не трудно, сможешь объяснить, пожалуйста blush.gif
Нет проблем. Давай, говори, какое место ты не поняла в процессе разбора. Я постараюсь объяснить.
Точнее, даже так: скажи, что ты поняла. На этой основе продолжим.


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

Сообщений в этой теме
Екатерина7   рекурсия- расстановка знаков   22.11.2009 21:10
мисс_граффити   Екатерина, перенести тему в "Задачи на заказ...   22.11.2009 22:33
Екатерина7   Екатерина, перенести тему в "Задачи на заказ...   22.11.2009 22:54
Lapp   Согласия на перенос, как я понял, не поступало... ...   23.11.2009 5:09
Гость   соображений никаких нет.. с рекурсией не работала....   23.11.2009 12:43
Гость   соображений никаких нет.. с рекурсией не работала....   23.11.2009 13:00
Lapp   Остается открытым вопрос про приоритеты операций. ...   23.11.2009 18:51
Екатерина7   я же вроде там в скобочках дописала.. (умножение ...   23.11.2009 19:02
Lapp   я же вроде там в скобочках дописала.. Извиняюсь, н...   23.11.2009 19:31
Екатерина7   спасибо огромное тебе!!!! подумаю ...   23.11.2009 19:42
Гость   а что такое Start? например, Start:=false   23.11.2009 22:09
Lapp   а что такое Start? например, Start:=falseStart ...   24.11.2009 6:50
Гость   массив Oper- массив знаков. так?   24.11.2009 9:35
Гость   рекурсия используется в самом конце программы? че...   24.11.2009 10:00
Unconnected   Присваивание логической переменной значения false....   23.11.2009 22:16
Lapp   массив Oper- массив знаков. так?Так. Вопрос был, ...   24.11.2009 11:31
Екатерина7   нет, спасибо, не нужно восстанавливать.. Добавлен...   24.11.2009 23:02
Unconnected   Ну как бы да, применяется здесь... Т.е. процедура ...   24.11.2009 23:18
Lapp   Да. Достаточно было указать на три вызова процеду...   25.11.2009 2:31
Екатерина7   спасибо большое!!!   25.11.2009 14:44
Екатерина7   несовсем пойму, как она выполняется..точнее вообще...   7.12.2009 21:21
Lapp   несовсем пойму, как она выполняется..точнее вообще...   7.12.2009 22:41
Екатерина7   смотри, например 319155=8+2+1+8*10*10*7/9/4/5 во...   8.12.2009 10:09
Lapp   Гм.. И мне тоже непонятно. Кать, откуда ты береш...   8.12.2009 18:28
Екатерина7   хм... все, нашла ошибку! спасибо! вес прав...   8.12.2009 22:58
Lapp   хм... все, нашла ошибкуИзвини - ошибку в чем? Вро...   8.12.2009 23:36
Екатерина7   да, ошибка была не у тебя.. все нормально. если ...   9.12.2009 7:36
Lapp   если не трудно, сможешь объяснить, пожалуйста :bl...   9.12.2009 7:55
volvo   Я тоже кое чего не понимаю... Например, откуда ты ...   8.12.2009 10:29


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

 



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