Домашние задания: Информатика

Информатика 10-11 класс Паскаль

Напишите программу, которая считывает с клавиатуры вещественное число x и отображает значение выражения 1/х. Очевидно, что значение х=0 недопустимо. Проведите проверку правильности ввода данных с клавиатуры с помощью оператора повторения с постусловием.
Что за идиотизм, а не задание? Нафига тут постусловие и повторение? Тут обычное условие нужно. Ибо что там повторять? Был ввод 1 числа, если оно не равно 0, то на него разделили, после чего вывели ответ. Что там надо повторять?

Вот нормальная программа:

Program P1;
uses crt;
var x, y: real;
begin
clrscr;
write ('Введите значение переменной x: x=');
readln (x);
if x=0 then write ('Нет решений') else begin
y:=1/x;
write ('Ответ: y=', y);
end;
readkey;
end.

А, вот так, что ли? - Но тоже не очень умно - лучше бы уж с метками сделать, но ладно:

Program P1;
uses crt;
var x, y: real;
begin
clrscr;
write ('Введите значение переменной x: x=');
readln (x);
if x=0 then begin
repeat
writeln ('x не может быть = 0. Попробуйте снова.');
write ('Введите значение переменной x: x=');
readln (x);
until x<>0;
end;
y:=1/x;
write ('Ответ: y=', y);
readkey;
end.
Сергей Волков
Сергей Волков
43 559
Лучший ответ
const
N1 = 100;
M1 = 100;

type
TRow = array[1..N1] of integer;
TTable = array[1..M1] of TRow;
procedure fill(var m: TTable;n,n2:longint);
var
i,j,ch:integer;
begin
for i:= 1 to n do
for j:= 1 to n2 do
read(m[i][j]);
end;

function output(const m: TTable;n,n2:longint):real;
var
i,j,s,col,min:integer;
otvet:real;
begin
s:=0;
col:=0;
for i:=1 to n2 do
begin
min:=m[1][i];
for j:=2 to n do
if m[j][i] < min then
min:=m[j][i];
inc(col);
inc(s,min);
end;
otvet:= s/col;
output:=otvet;
end;

var
a:ttable;
n,n2:longint;
begin
read(n,n2);
fill(a,n,n2);
writeln(output(a,n,n2):0:2);
end.
Елена Громова
Елена Громова
4 050