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

Оптимизируйте программы ниже, так что бы они выполнялись за меньшее количество операций. 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.

Показать ответ
Ответ:
geklaoycd9v
geklaoycd9v
26.12.2023 18:19
Добро пожаловать в класс! Давайте посмотрим на ваши программы и оптимизируем их для выполнения за меньшее количество операций.

Программа 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.

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