В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
santa34
santa34
25.02.2022 19:27 •  Информатика

Какое из приведенных утверждений не является логическим высказыванием?
русский писатель Денис Иванович Фонвизин родился в Москве;
который сейчас час;
Тихий океан больше Атлантического океана;
Рим – столица Франции

Показать ответ
Ответ:
ggggeorgiyggg
ggggeorgiyggg
22.05.2022 03:32

1. 1. бесконечное множество раз

2. 20

3. 11

Объяснение:

1.

M=5

Пока условие M>0 истинно выполнить M=M+5

M=5, т.е. сразу условие 5 > 0 истинно

Далее М только увеличивается (M=M+5), следовательно условие будет истинно постоянно и тело цикла выполнится бесконечное множество раз

2.

Для i от 5 до 1 выполнить

Для j от 7 до 10 выполнить

вывод строки на экран

В цикле Для переменная счётчик изменяется с шагом 1:

downto шаг -1 (минус 1)

to шаг +1 (плюс 1)

Первый цикл выполнится 5 раз (5 - 1 + 1 = 5)

Второй цикл за каждый раз выполнения первого цикла выполнится 4 раза (10 - 7 + 1 = 4)

Всего строка будет выведена на экран 20 раз (5 * 4 = 20)

3.

i=1

пока условие i<=10 истинно выполнить i=i+10 mod 3

10 mod 3 = 1 (10 - 3 * 3 = 10 - 9 = 1)

i=i+1

Т.е. за каждое выполнение цикла переменная i увеличивается на 1

Условие i<=10 будет истинно пока i изменяется от 1 до 10, как только i станет равной 11 условие будет ложным, следовательно значение i, которое выведет программа 11

mod - остаток от целочисленного деления

0,0(0 оценок)
Ответ:
Оля142768
Оля142768
26.09.2022 13:55
Программа работает неверно: даже на примере из условия вместо 2600 выводится 55*245 = 13475. В программе происходит что-то странное, например, сравниваются элементы последовательности и 8 (зачем?)



Подумаем, как можно было бы решать задачу.
- Наивный сохранить все числа в массив и пробежаться по нему в двойном цикле, в псевдокоде это выглядит примерно так:
max = 0
for i = 1 to n do
  for j = 1 to n do
    if |i - j| >= 8 and max < a[i] * a[j] then
      max = a[i] * a[j]
Это нехорошо и по времени (время выполнения порядка n^2), и по памяти (количество памяти растет с ростом n пропорционально n).
- Немного ускоряем: у нас пары i, j и j, i ничем не отличаются, так что будем считать, что j < i. Учитывая условие, что |i - j| >= 8, получаем, что j <= i - 8. Переписываем:
max = 0
for i = 9 to n do
  for j = 1 to i - 8 do
    if max < a[i] * a[j] then
      max = a[i] * a[j]
Это решение работает в 2 раза быстрее, но этого недостаточно. Памяти тоже слишком много.
- Продолжаем ускорять. Пусть i зафиксировано. Мы пытаемся сравнить a[i] * a[j] с max для всех j от 1 до i - 8. Очевидно, произведение будет максимально, если a[j] - максимум среди a[1], a[2], ..., a[i - 8]. Возможное решение: создадим массив из максимумов среди первых k чисел, и будем сравнивать уже с максимумом.
maximums[1..n]
maximums[1] = a[1]
for i = 2 to n do 
  maximums[i] = max(maximums[i - 1], a[i])
max = 0
for i = 9 to n do
  if max < a[i] * maximums[i - 8] then
    max = a[i] * maximums[i - 8]
Это решение уже работает быстро, но остались проблемы с большим расходом памяти.
- Последний рывок. Заметим, что для того, чтобы разобраться с числом под номером i, нам совсем не нужен массив a, а из массива maximums достаточно знать только maximums[i - 8], ..., maximums[i - 1] - 8 чисел. Так что большие массивы не нужны, их можно убрать. Тогда программа будет эффективна и по времени, и по памяти.

У меня максимумы хранятся в массиве maxs[0..7], все номера берутся по модулю 8. В вашей программе это может быть реализовано иначе.
Pascal:
var
  i, n, t, max: integer;
  maxs: array[0..7] of integer;
begin
  read(n);
  read(t);
  max := 0;
  maxs[1] := t;
  for i := 2 to n do
  begin
    read(t);
    if (i > 8) and (max < t * maxs[i mod 8]) then
      max := t * maxs[i mod 8];
    if t > maxs[(i + 7) mod 8] then
      maxs[i mod 8] := t
    else
      maxs[i mod 8] := maxs[(i + 7) mod 8];
  end;
  write(max);
end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота