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

Оптимизируйте программы ниже, так что бы они выполнялись за меньшее количество операций. 1)var n , m :integer;
k : real;
begin
readln(n);
m:=1;
while n>0 do begin
m:=m+n*n*n;
n:=n-1;
end;
k:=trunc(sqrt(m));

writeln(k);
end.

2) var n , m, i :integer;
begin
readln(n);
m:=2;
i:=0;
while m
if n mod m <> 0 then i:=i+1;
m:=m+1;
end;
if (i=n-2) or (n=1) then writeln(n);
end.

👇
Ответ:
3344227p06s57
3344227p06s57
22.06.2021
Добро пожаловать в класс! Давайте посмотрим на ваши программы и оптимизируем их для выполнения за меньшее количество операций.

Программа 1:
```pascal
var
n, m: integer;
k: real;

begin
readln(n);
m := 1;
while n > 0 do
begin
m := m + n * n * n;
n := n - 1;
end;
k := trunc(sqrt(m));
writeln(k);
end.
```

Прежде всего, давайте рассмотрим, что делает эта программа. Она считывает целое число `n` с клавиатуры и затем выполняет ряд операций с помощью цикла `while`. Она вычисляет значениe `m` на основе `n`, затем извлекает квадратный корень из `m` (с помощью функции `trunc(sqrt(m))`) и выводит результат на экран с помощью `writeln`.

Первая оптимизация, которую можно сделать, это удалить использование числа `m`. Мы можем сосредоточиться только на переменной `n`. Также, можно отказаться от использования вещественного числа `k`, поскольку квадрат корня всегда будет целым числом в данной задаче.

Вот оптимизированная программа 1:
```pascal
var
n, k: integer;
sum: integer;

begin
readln(n);
sum := 0;
while n > 0 do
begin
sum := sum + n * n * n;
n := n - 1;
end;
k := trunc(sqrt(sum));
writeln(k);
end.
```

Эта оптимизированная программа выполняет то же самое, но без использования лишних переменных и вещественных чисел.

Теперь перейдем ко второй программе:
```pascal
var
n, m, i: integer;

begin
readln(n);
m := 2;
i := 0;
while m < n do
begin
if n mod m <> 0 then
i := i + 1;
m := m + 1;
end;
if (i = n - 2) or (n = 1) then
writeln(n);
end.
```

Эта программа читает целое число `n` с клавиатуры и выполняет цикл `while`. Внутри цикла проверяется, делится ли `n` на `m` без остатка. Если нет, то переменная `i` увеличивается на единицу. Затем `m` увеличивается на один. После цикла проверяется условие, связанное с переменными `i` и `n`, и в зависимости от результата выводится число `n`.

Оптимизации, которые можно сделать в этой программе:
1. Уменьшите количество итераций цикла до `n / 2`, поскольку число не может делиться без остатка на число, большее, чем его половина.
2. Замените условие `(i = n - 2)` на `(i = n - 2) and (n <> 1)`, чтобы избежать лишней проверки в случае, когда `n` равно 1.

Вот оптимизированная программа 2:
```pascal
var
n, m, i: integer;

begin
readln(n);
m := 2;
i := 0;
while m < n / 2 do
begin
if n mod m <> 0 then
i := i + 1;
m := m + 1;
end;
if (i = n - 2) and (n <> 1) then
writeln(n);
end.
```

В этой оптимизированной программе мы проверяем только числа от 2 до `n / 2`, а также учитываем особый случай для числа 1.

Надеюсь, это помогло вам понять оптимизации и принципы их применения для улучшения производительности программ. Если у вас есть еще вопросы, не стесняйтесь задавать их!
4,8(75 оценок)
Проверить ответ в нейросети
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ