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

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

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

> рекурсия- расстановка знаков
сообщение
Сообщение #1


Новичок
*

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

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


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

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

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



Сообщение отредактировано: Екатерина7 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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


Новичок
*

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

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


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

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


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

 





- Текстовая версия 29.03.2024 14:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name