Массивы, Please, help |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Массивы, Please, help |
Valkirie |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Вводится массив. Найти минимум из сумм 3-х его последовательных элементов. Например, для массива
1 3 4 6 7 данные суммы равны 8, 13 и 17, минимум равен 8. Помогите, умираю |
volvo |
Сообщение
#2
|
Гость |
Valkirie
Не умирай ... Код const n = 5; a: array[1 .. n] of integer = (1, 3, 4, 6, 7); var i, j, s: integer; min: integer; begin min := maxInt; for i := 1 to n - 2 do begin s := 0; for j := i to i + 2 do s := s + a[j]; if min > s then min := s end; writeln('min = ', min) end. Только проверь, я не компилировал... P.S. Если массив A будет длиннее, можно сделать так: Код const n = 11; a: array[1 .. n] of integer = (1, 3, 4, 6, 7, 2, 1, 4, 3, 2, 1); var i, s: integer; min: integer; begin s := 0; for i := 1 to 3 do s := s + a[i]; min := s; for i := 4 to n do begin s := s - a[i-3]+a[i]; if min > s then min := s end; writeln('min = ', min) end. Сообщение отредактировано: volvo - |
Valkirie |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
volvo
Спасибо огромное, без твоих идей наверное не разобралась бы. Массив динамический, поэтому решение чуть-чуть другим вышло... Код var Mas1: array of integer; var i,min,s:integer; begin SetLength(Mas1,ListBox1.Items.Count); for i:=0 to ListBox1.Items.Count-1 do Mas1[i]:=StrToInt(ListBox1.Items[i]); min:=maxInt; for i:=1 to Length(Mas1)-1 do begin s:=Mas1[i]+Mas1[i-1]+Mas1[i+1]; if min>s then min:=s; end; Label1.Caption:=FloatToStr(min); end; end. Не обращай внимания, что это Делфи, переписать я перепишу ;) Спасибо, спас ;) |
GoodWind |
Сообщение
#4
|
Автооответчик Группа: Пользователи Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
Valkirie, respect !
не просто ждете готового решения, но и сами что-то делаете. Все бы так ! -------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Valkirie |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
GoodWind
Стараюсь сама, но не всегда получается...вот сейчас ещё с одной задачкой мучаюсь... |
Valkirie |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Всё-таки нужна будет помощь... :molitva:
Дана последовательность целых чисел ai. Построить новую последовательность, содержащую элементы исходной последовательности, равными двойке в четной степени. Вход В каждой строке входа дано по одному элементу исходной последовательности. Признак конца последовательности - 0. Выход В каждую строку выхода вывести по одному элементу результирующей последовательности. Заключительный нуль в результат не выводить. Пример Вход: 433 16 8 128 1024 654 0 Выход: 16 1024 Я вот тут насочиняла Код var A,X:integer; begin repeat Write(''); ReadLn(A); X:=0; if (A=Exp(X*Ln(2))) and (X mod 2=0) then WriteLn(A) else X:=X+1; until A=0; ReadLn; end. Но работать оно не желает =( |
volvo |
Сообщение
#7
|
Гость |
Valkirie
Если числа ограничены типом LongInt: Код var j, A:integer; begin repeat ReadLn(A); if a = 0 then break; j := 2; while j <= 30 do if (longint(A)=longint($0001 shl j)) then begin writeln('>', A); break end else inc(j, 2) until A=0; end. Сообщение отредактировано: volvo - |
Valkirie |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Нам такого не рассказывали про Longint и про break
|
volvo |
Сообщение
#9
|
Гость |
Valkirie
Когда-то же надо начинать Тогда попробуй вот так: Код var j, A:integer; stop: boolean; begin repeat ReadLn(A); if a <> 0 then begin j := 2; stop := false; while (j <= 30) and (not stop) do if A=($0001 shl j) then begin writeln('>', A); stop := true end else inc(j, 2) end until a = 0; end. |
Valkirie |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Не....всё не то...прога как находит чётную степень двойки так сразу останавливается, выводя её, не позволяя вводить последовательность дальше... =(
И ещё вот эта запись в теле цикла мну совсем не понятна... Код (j <= 30) and (not stop) do if A=($0001 shl j) then Зачем я вообще на это программирование учится пошла... Сообщение отредактировано: Valkirie - |
volvo |
Сообщение
#11
|
Гость |
Valkirie
Ну вот только не надо говорить, что последняя программа это делает. Я все-таки программы тестирую перед тем, как запостить... |
Valkirie |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Ай ладно...
последняя...позволяет...только выводить она их не так должна... а так как показано в задании на выходе...=( |
volvo |
Сообщение
#13
|
Гость |
Valkirie
А я и не делал по заданию... Я просто показал тебе, как определяется четная степень двойки. Ты же все равно переделываешь это на Дельфи... Так вместо того, чтобы печатать число - добавляй его к массиву, а после того, как программа выйдет из Repeat, распечатывай все содержимое массива... |
Valkirie |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
т.е. вот это вот A=($0001 shl j) - чётная степень двойки...
Мне кстати эту задачу на Делфи перекатывать не нуно...она консольная должна быть... Пойду повешусь... |
volvo |
Сообщение
#15
|
Гость |
Valkirie
Тогда другой вопрос - сколько чисел из введенных могут быть четной степенью двойки (в Паскале нет динамических массивов - так что нужно конкретное число)... Подставь его вместо 256 в maxPower. Код const maxPower = 256; var numbers: array[1 .. maxPower] of integer; {можешь изменить на longint если нужно работать с большими числами} j, A:integer; stop: boolean; counter: Integer; begin counter := 0; repeat ReadLn(A); if a <> 0 then begin j := 2; stop := false; while (j <= 30) and (not stop) do if A=($0001 shl j) then begin inc(counter); numbers[counter] := A; stop := true end else inc(j, 2) end until a = 0; writeln('results'); for j := 1 to counter do writeln(numbers[j]); end. |
Valkirie |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
ладно - спасибо...
всё равно всё это не так решается... намного проще... я на твой код смотри и в обморок падаю - впервые такие ужасы вижу... Всё равно спасибо, завтра к однокурсникам за помощью пойду - я тупая походу... |
Valkirie |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Код var k,S,n:integer; begin Repeat ReadLn(n); S:=1;k:=0; While S<n do Begin S:=S*2; Inc(K) end; if (k mod 2=0) and (S=n) then WriteLn(n); until n=0; end. Вот этого от меня хотел сервер.... |
volvo |
Сообщение
#18
|
Гость |
Valkirie
Цитата Вот этого от меня хотел сервер.... Ты меня, конечно, извини, но эта программа тоже не делает того, что показано в условии... Моя программа от 2.12.04 20:57 делает точно то же самое, что и твоя последняя (убрать символ ">" не проблема... ) А если тебе нужно намного проще, то об этом надо говорить сразу. Я не телепат. |
Valkirie |
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Женский Репутация: 0 |
Не ругайся....
Я ведь в этом ничегошеньки не понимаю...сложно всё это мне... |
Текстовая версия | 11.01.2025 22:42 |