Постусловие необходимо тогда, когда мы не знаем количество итераций. <u>Например</u>: дано число, разбить его на цифры. Мы начинаем цикл, делим с остатком (число mod 10) на 10, получая последнюю цифру, затем делим это число на 10 и проверяем, не является ли это число 0 (в случае, когда мы прошлись по всем цифрам)
Предусловие необходимо тогда, когда мы уже точно знаем, сколько итераций цикла пройдёт программа. <u>Например</u>: посчитать сумму чисел от 0 до 10. Условие цикла - пока i (итератор) не будет меньше или равен 10. В цикле к переменной sum добавляется i, затем i увеличивается на единицу. Получится: 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.
//PascalABC.NET
//Версия 3.3, сборка 1611 (06.01.2018)
begin
var a:=ArrRandom(ReadInteger('Введите размер массива:'),-20,20); a.Println;
Println('В первой половине положительных:',a[:a.Length div 2].Println.Where(t->t>0).Count);
Println('Во второй половине отрицательных:',a[a.Length div 2:].Println.Where(t->t<0).Count);
end.
Пример:
Введите размер массива: 10
-6 8 -12 -5 -4 16 -1 -14 1 0
-6 8 -12 -5 -4
В первой половине положительных: 1
16 -1 -14 1 0
Во второй половине отрицательных: 2
Какой же ответ? Если ничего не написано?
Чтобы в двоичную перевести, нужно поделить на 2 и с конца остатка записать ответ; чтобы перевести в 10, нужно расставить разряды (начиная с нуля справа налево) и перемножать (как показано на картинке)
На всякий случай я ещё выложу правильное решение второй задачи( во вложении) либо код здесь:
const n=10;
var mas:array[1..n] of integer;
i,x:integer;
begin
x:=1;
for i:=1 to n do
begin
write('Input a[',i,']=');
readln(mas[i]);
x:=x*abs(mas[i]);
end;
writeln('the answer is:', x);readln;
<span>end.
Вариант из первого решения предложенного вам не скомпилируется, потому что не объявлена константа n. Кроме того в нем нет вывода ответа и непонятно, что за числа надо вводить с клавиатуры (в моем примере оно спросит input a[1] = </span>