М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
123qwerty0
123qwerty0
18.09.2021 13:54 •  Информатика

Какая задача решается в результате выполнения фрагмента программы на языке Паскаль? S: =0; a:=0;
While a < > 5 do
Begin
Read (a);
S:=S+a
WriteIn (' сумма S=', S);
End;

👇
Ответ:
nastya09042
nastya09042
18.09.2021
Пройдёмся отдельно по каждой строчке:

S: =0; a:=0; //задали две переменные, обе равны 0

While a < > 5 do //создали цикл, тело которого будет выполняться до тех пор, пока значение переменной "а" не равно 5

Begin //ниже выполнится тело цикла

Read (a); //считали значение переменной "а" (ввод с клавиатуры)

S:=S+a //увеличили значение переменной "s" на переменную "а", то есть нашли сумму двух переменных

WriteIn (' сумма S=', S); //вывели сумму, которая хранится в переменной "S", на экран

End; //конец тела цикла

Проведя анализ программы, выяснили, что в результате выполнения данного фрагмента кода, в переменную "s" записывается сумма всех переменных "a", введённых с клавиатуры. Программа завершает свое действие, когда пользователь вводит с клавиатуры цифру "5", т.к. цикл действует до той поры, пока переменная "а" не равна 5. Таким образом, мы получили на выводе сумму всех введённых нами с клавиатуры чисел.

4,6(48 оценок)
Открыть все ответы
Ответ:
sayferbil
sayferbil
18.09.2021

Будем рассматривать каждое введённое число как правый элемент возможной пары (первые 8 чисел не могут быть такими элементами). Для получения максимальной суммы нужно сложить это число с максимальным из всех элементов, расположенных от начала последовательности до элемента, расположенного на 8 позиций раньше текущего. Будем хранить этот максимум и корректировать его при вводе каждого нового элемента. Для этого понадобится хранить последние 8 элементов. Остальные элементы последовательности можно не хранить, это обеспечивает эффективность по памяти. Для хранения 8 элементов можно использовать циклический массив, как показано в следующем решении.

 

Решение 1. Правильная и эффективная программы на языке Паскаль (использован циклический массив):

 

const s=8; {требуемое расстояние между элементами}

var

   N: integer; {количество чисел}

   x: integer; {очередное число}

   a: array[0..s-1] of integer;

   m: integer; {максимальное число}

   sm: integer; {максимальная сумма пары}

   i: integer; {счётчик для ввода}

   ia: integer; {текущий индекс в массиве a}

begin

   readln(N);

   {ввод первых s чисел}

   for i:=0 to s − 1 do readln(a[i]);

   {ввод и обработка остальных значений}

   m:=0; sm:=0; ia:=0;

   for i:=s to N − 1 do begin

       readln(x);

       if a[ia] > m then m := a[ia];

       if m+x > sm then sm := m+x;

       a[ia] := x;

       ia := (ia+1) mod s

   end;

   writeln(sm)

end.

 

Вместо циклического массива можно использовать сдвиги. В этом случае для вычисления максимума всегда используется первый элемент массива, а новое число записывается в последний. Хотя этот алгоритм работает медленнее, чем алгоритм с циклическим массивом (для каждого элемента требуется 7 дополнительных присваиваний при сдвигах), основное требование эффективности здесь выполнено: при увеличении размера массива в k раз количество действий растёт не более чем в k раз. Ниже приводится пример такой программы.

 

Решение 2. Правильная и эффективная программы на языке Паскаль (использован сдвиг массива)

 

const s=8; {требуемое расстояние между элементами}

var

   N: integer; {количество чисел}

   x: integer; {очередное число}

   a: array[1..s] of integer;

   m: integer; {максимальное число}

   sm: integer; {максимальная сумма пары}

   i: integer; {счётчик для ввода}

   ia: integer; {счётчик для сдвига}

begin

   readln(N);

   {ввод первых s чисел}

   for i:=1 to s do readln(a[i]);

   {ввод и обработка остальных значений}

   m:=0; sm:=0;

   for i:=s+1 to N do begin

       readln(x);

       if a[1] > m then m := a[1];

       if m+x > sm then sm := m+x;

       for ia:=1 to s − 1 do a[ia]:=a[ia+1];

       a[s] := x

   end;

   writeln(sm)

end.

 

Возможно также «лобовое» решение: запишем в се и сходные числа в массив, переберём все возможные пары и выберем из них требуемую. Такое решение не является эффективным ни по памяти (требуемая память зависит от размера исходных данных), ни по времени (количество возможных пар, а значит, количество действий и время счёта с ростом количества исходных элементов растёт квадратично). Такая программа оценивается не выше двух .

Ниже приведена реализующая описанный выше алгоритм программа на языке Паскаль (использована версия PascalABC).

 

Решение 3. Правильная, но неэффективная программы на языке Паскаль:

 

const s=8; {требуемое расстояние между элементами}

var

   N: integer; {количество чисел}

   a: array [1..1000] of integer; {исходные данные}

   sm: integer; {максимальная сумма пары}

   i,j: integer;

begin

   readln(N);

   for i:=1 to N do readln(a[i]);

   sm :=0;

   for i := 1 to N − s do begin

       for j := i+s to N do begin

           if a[i]+a[j] > sm

               then sm := a[i]+a[j]

       end;

   end;

   writeln(sm)

end.

Надеюсь

4,6(10 оценок)
Ответ:
ирок511
ирок511
18.09.2021
//Раз на первый вопрос господина Alviko Вы не ответили, буду считать что количество столбцов и строк уже задано.
//Pascal ABC.NET v3.1 сборка 1172

Const
n=3; //количество строк
m=4; //количество столбцов

Var
 f:text;
 ma:array[1..n,1..m] of integer;
 i,j,s:integer;
begin
 assign(f,'matrix.txt');
 reset(f);
 for i:=1 to n do
 begin
  for j:=1 to m do
   begin
   read(f,ma[i,j]);
   s:=s+ma[i,j];
   end;
 end;
 close(f);
 for i:=1 to n do
 begin
  writeln;
  for j:=1 to m do
   write(ma[i,j]:4);
 end;
 writeln;
 write(s);
end.

matrix.txt:
1 2 3 4
4 5 6 4
7 8 9 4
Вывод программы:

   1   2   3   4
   4   5   6   4
   7   8   9   4
57
4,4(29 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ