Помощь - Поиск - Пользователи - Календарь
Полная версия: Гири
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zigfried
Пусть имеется 10 гирь весом а1,а2,...,а10.Обозначим через Ск число способов,которыми можно составить вес к,
то есть Ск-это число решений уравнения а1х1+а2х2+...+а10х10=к,где Хi может принимать значения 0 или 1
(i=1,...,10).Получите с1,с2,...,с10.
Помогите написать пожалуйста))))
Lapp
При чем тут массивы???

Прочти Правила и измени название на ИНФОРМАТИВНОЕ.
Иначе закрою.

Добавлено через 12 мин.
Кошмар. Нет слов.
ладно, вижу, что ошибка была не в названии, а в генокоде. Изменяю название сам.
Все-таки прочти Правила, а?..
Zigfried
ладно ступил blush.gif
Главное помогите))
Lapp
Цитата(Zigfried @ 3.12.2009 20:41) *
Главное помогите))
А сам начинал делать?
Если да - покажи, что написал. Даже если мало и неправильно.
Zigfried
начинал но всё что накатал у меня на компе в универе. Как я понял тут точно нужен массив из весов гирь больше ничего я непонимаю как это делать полностью. Особенно мне итрересно как тут можно перебирать все варианты корней уравнения(т.к. они зависят от того какой будет хi).
Lapp
Цитата(Zigfried @ 3.12.2009 20:59) *
Особенно мне итрересно как тут можно перебирать все варианты корней уравнения(т.к. они зависят от того какой будет хi).
Проще всего тут это делать рекурсией. Вы ее проходили? Вообще, процедуры проходили?
Zigfried
нет я на 1 курсе учусь мы проходим массивы так что надо как то с их помощью решить...
Lapp
Цитата(Zigfried @ 3.12.2009 21:17) *
нет я на 1 курсе учусь мы проходим массивы так что надо как то с их помощью решить...
БЕЗ помощи массивов никто ничего делать не будет, это само собой. Я тебя спрашиваю что ЕЩЕ можно использовать.

Можешь просто ответить, процедуры проходили? Ответь ДА или НЕТ, плз.
Zigfried
нет процедуры не проходили
Lapp
Цитата(Zigfried @ 3.12.2009 21:58) *
нет процедуры нельзя

Ну а циклы? можно?

Я бы очень хотел посмотреть на твои попытки, которые у тебя в универе..
Zigfried
циклы можно разумеется оператором case можно пользоваться если он тут нужен но единственное нельзя через go to решать препод тогда пристрелит на месте)
Lapp
Цитата(Zigfried @ 3.12.2009 22:04) *
циклы можно разумеется
Хорошо, пусть будет с циклами. Вот тебе решение (см. ниже), но в нем я специально испортил кое-что - одно выражение заменил на другое (кстати, замена получилась значимая). Сумеешь исправить - хорошо, нет - приходи, попробуем разобраться..

Цитата
но единственное нельзя через go to решать препод тогда пристрелит на месте)
За кого ты меня принимаешь?? norespect.gif я еще подойду и контрольный в голову сделаю.. adm.gif

const
n= 10;
w: array[1..n]of word= (1,2,3,4,5,6,7,8,9,0);

var
c: array[1..n+1]of word;
i,s,w0: word;


begin
Write('Available weights are: ');
for i:=1 to n do if w[i]>0 then Write(w[i],' ');
Write('Type in the weight to meet: ');
for i:=1 to n+1 do c[i]:=0;
ReadLn(w0);

for i:=1 to n+1 do c[i]:=0;
repeat
Inc(c[1]);
for i:=1 to n do if c[i]=2 then begin
c[i]:=0;
Inc(c[i+1])
end;
s:=0;
for i:=1 to n do s:=s+c[i]*w[i];
if s=w0 then begin
for i:=1 to n do if (c[i]>0)and(w[i]>0) then Write(w[i],' ');
WriteLn
end
until false;
ReadLn
end.

Успехов! smile.gif
Zigfried
Спасибо за помощь всё испарвил и с успехом сдал задачу)))))))))
Lapp
Цитата(Zigfried @ 4.12.2009 21:24) *
Спасибо за помощь всё испарвил и с успехом сдал задачу)))))))))
Пожалуйста! smile.gif
Если тебя не затруднит, скажи, пожалуйста, тут, в теме, что нужно исправить и как, чтобы программа была правильной. Для потомков )).
Zigfried
Я исправил until c[i]=10, и поставил ещё 1 условие if w[i]>0 then перед for i:=1 to n do s:=s+c[i]*w[i]; ну и по мелочи вес гирь с константы на ввод исправил)))
Lapp
Цитата(Zigfried @ 6.12.2009 16:23) *
Я исправил until c[i]=10,
Нет, не так no1.gif .
Слушай внимательно: в этот момент у тебя переменая i вообще не определена! Никогда не надейся на то, что по выходе из цикла она будет равна максимальному значению. Всегда используй переменные, которые САМ определяешь.
Дальше - откуда взялась 10 ?? Это что ли n? Ну так так и пиши тогда.
И последнее: я сделал, как ты написал - не-а, не пашет! smile.gif
Но место правильное, да.
Еще одна попытка..? smile.gif
Можешь задавать вопросы (кроме "что там написать" smile.gif).

Цитата
и поставил ещё 1 условие if w[i]>0 then перед for i:=1 to n do s:=s+c[i]*w[i];
А разве вес гири может быть отрицательным? blink.gif Извини, но я рассчитывал на нашу старую добрую Вселенную с нашей старой доброй физикой.. smile.gif
Zigfried
Нет просто там при вводе нужно учесть всё и если пользователь ошибётся и введёт отрицательный вес гири он должен его отбросить а то там если ввести относительно небольшой вес он можен лишнего понабрать)))))))))
ну а по поводу until... хм... над подумать...
Lapp
Цитата(Zigfried @ 6.12.2009 20:21) *
Нет просто там при вводе нужно учесть всё и если пользователь ошибётся и введёт отрицательный вес гири он должен его отбросить
Просто нужно добавить проверку при вводе и заставлять перевводить, если отрицательное. Игнорировать отрицательные значения - это как-то странно выглядит.. Типа не ставить заплатки на штаны, а каждому встречному говорить: "здесь у меня дырка, вы туда не смотрите" smile.gif
Вячеслав Л.
Извиняюсь, за встревание, но мне нужна аналогичная проверка. Вот так возможно это сделать?:
...
repeat
writeln('vvedite neotrizatelnoe 4islo');
readln(i);
until i>=0;
...

Или, предполагалось как-то по другому?

Цитата
Типа не ставить заплатки на штаны, а каждому встречному говорить: "здесь у меня дырка, вы туда не смотрите"
lol.gif
Lapp
Цитата(Вячеслав Людской @ 7.12.2009 13:01) *
так возможно это сделать?:
...
repeat
writeln('vvedite neotrizatelnoe 4islo');
readln(i);
until i>=0;
...

Или, предполагалось как-то по другому?
Конечно. Можно еще добавить что-то типа вывода "недопустимое число; повторите ввод:".

А по-другому - это только если отказываться от ReadLn и делать посимвольный ввод. Тут это абсолютно лишнее.
Вячеслав Л.
Цитата
А по-другому - это только если отказываться от ReadLn и делать посимвольный ввод.
Покажите, пожалуйста, как это делается (просто на будущее).
Lapp
Цитата(Вячеслав Людской @ 8.12.2009 13:54) *
Покажите, пожалуйста, как это делается (просто на будущее).

Не в этой теме.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.