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

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

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

 
 Ответить  Открыть новую тему 
> Массивы, Please, help
сообщение
Сообщение #1


Новичок
*

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

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


Вводится массив. Найти минимум из сумм 3-х его последовательных элементов. Например, для массива

1 3 4 6 7
данные суммы равны 8, 13 и 17, минимум равен 8.

Помогите, умираю sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.


Не обращай внимания, что это Делфи, переписать я перепишу ;)
Спасибо, спас ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


Valkirie, respect !
не просто ждете готового решения, но и сами что-то делаете.
Все бы так !


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


GoodWind
Стараюсь сама, но не всегда получается...вот сейчас ещё с одной задачкой мучаюсь...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.


Но работать оно не желает =(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Нам такого не рассказывали про Longint и про break blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Valkirie
Когда-то же надо начинать rolleyes.gif
Тогда попробуй вот так:
Код

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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Не....всё не то...прога как находит чётную степень двойки так сразу останавливается, выводя её, не позволяя вводить последовательность дальше... =(
И ещё вот эта запись в теле цикла мну совсем не понятна...
Код
 (j <= 30) and (not stop) do
    if A=($0001 shl j) then


Зачем я вообще на это программирование учится пошла...

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


Гость






Valkirie
Ну вот только не надо говорить, что последняя программа это делает. Я все-таки программы тестирую перед тем, как запостить...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


Ай ладно...
последняя...позволяет...только выводить она их не так должна...
а так как показано в задании на выходе...=(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Valkirie
А я и не делал по заданию... Я просто показал тебе, как определяется четная степень двойки. Ты же все равно переделываешь это на Дельфи... Так вместо того, чтобы печатать число - добавляй его к массиву, а после того, как программа выйдет из Repeat, распечатывай все содержимое массива...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


т.е. вот это вот A=($0001 shl j) - чётная степень двойки...
Мне кстати эту задачу на Делфи перекатывать не нуно...она консольная должна быть...
Пойду повешусь...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

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

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


ладно - спасибо...
всё равно всё это не так решается... намного проще...
я на твой код смотри и в обморок падаю - впервые такие ужасы вижу...
Всё равно спасибо, завтра к однокурсникам за помощью пойду - я тупая походу...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

Вот этого от меня хотел сервер....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Valkirie
Цитата
Вот этого от меня хотел сервер....

Ты меня, конечно, извини, но эта программа тоже не делает того, что показано в условии...

Моя программа от 2.12.04 20:57 делает точно то же самое, что и твоя последняя (убрать символ ">" не проблема... ) А если тебе нужно намного проще, то об этом надо говорить сразу. Я не телепат.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


Не ругайся....
Я ведь в этом ничегошеньки не понимаю...сложно всё это мне... unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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