Member
Статус: Не в сети Регистрация: 23.09.2008 Откуда: взять деньги?
Здравствуйте!Помогите пожалуйста и если можно по-быстрее! Условие-вводится произвольная последовательность целых чисел,заканчивающихся нулём.(С клавиатуры) 1)Найти наибольшее из всех,кратное 3. 2)Найти два наименьших числа. 3)Определить,сколько раз последовательность меняет знак. ЗЫ-это циклы Очень прошу - помогите пожалуйста!
_________________ i7 между ног? А i5 встал и смог!
Member
Статус: Не в сети Регистрация: 18.08.2008 Откуда: Саратов
Последовательность меняет знак - имеется ввиду, что числа меняют или их сумма? Тут надо алгоритм продумать... Думаю, мне в голову пришел не самый эффективный - надо разобрать 4 варианта: предыдущий член (или сумма) отрицателен, текущий положительный, предыдущий положительный, текущий положительный, предыдущий положительный, текущий отрицательный, предыдущий отрицательный, текущий отрицательный. Для двух из четырех случаев увеличиваем счетчик, в двух других не трогаем его
мм.. а для получения результата всё равно же по последовательности необходимо только один раз проходить... да и при том мы не знаем количество элементов а т.к. паскаль то прощай динамические массивы... выходы конечно ещё есть... но самое простое это обойтись вообще без массивов...(да и память не тратится) но кому как удобнее тот так и поступает...
3)Определить,сколько раз последовательность меняет знак.
Var dlina{количество элементов в последовательности}, s4et4ik: integer; massive: array[0..1000] of integer; begin s4et4ik:=0; for i:=0 to dlina-1 do if massive[i]*massive[i+1]=abs(massive[i]*massive[i+1]) then s4et4ik:=s4et4ik+1;
(1)player на сколько я понял из условия длина занее не известна... да и не жалко в пустую гонять массив из 1000 элементов?.. а к тому же вдруг элементов больше 1000?
если нет опечаток то так...
Код:
var flag:boolean; elt:integer; count:integer; begin count:=0; read(elt); if elt>0 then flag:=true else flag:=false; while elt<>0 do begin read(elt); if ((elt<>0) and ((elt>0) xor (flag))) then begin inc(count); flag=not flag; end; end; writeln(count); end;
ДуччЧ Так для этого и есть переменная dlina. А массив не динамический, поэтому задал макс длину массива от балды. И вот не понимаю, зачем усложнять задачу кодом? Логически помысля понимаем, что в произведении 2 числа с одним знаком будут давать абсолютное значение, а при разных знаках нет, поэтому пройдя по массиву легко найти количество переходов и задачка решается всего одной строкой
Цитата:
for i:=0 to dlina-1 do if massive[i]*massive[i+1]=abs(massive[i]*massive[i+1]) then s4et4ik:=s4et4ik+1;
ну я так думаю что проверка на условие ((elt<>0) and ((elt>0) xor (flag))) пройдет быстрее... не надо стараться свести задачу в минимуму кода путём введения более ресурсоёмких операций... я конечно понимаю что в данном случае разница по скорости выполнения не заметна, но это же только учёба
ДуччЧ Ну упрощать вычисления машине я бы не стал при такой простой и легкой для железа программе и при том, что код демонстрировать нужно учителю, поэтому и выбираю самое простое (наглядное) для человека решение... был печальный опыт во времена моей учебы, когда человек 3 недели мучал код на 10 листов, просто потому что не мог найти ошибку, а код можно было написать проще на 3 страницы (как я и сделал и за 3 дня все было проверено и перепроверено), пусть и ресурсоемко, но 100 Мбайтный массив сейчас ведь для железа не проблема, зато в оставшееся время я играл в КС
ладно... всё равно уже на оффтоп ушло.. этовсё равно учёба... я конечно не для конкретного примера говорю... и не для конкретного топикстартера, но лучше тут научиться писать код на 10 листов без ошибок и если всё же с ошибкой то быстро её искать... чем потом учиться делать это на работе...(имеется в виду если задумали дальше с этим работать)
HertZ Списки будет разумнее и красивее, но автор темы не может написать сам такую задачку, так что списки для него будут, скорее всего, жутко темным лесом...
ещё раз... раз уж решили не усложнять задачу... зачем вам вообще сдались эти списки и массивы... зачем хранить информацию о всей последовательности если в задаче об её дальнейшем применении не сказано...?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения