Если среди вас есть работники
образования, напишите свои отзывы о моих уроках,
только не забудьте полностью подписаться с
указанием места работы (город и страну тоже
укажите) и занимаемой должности. Мне это
необходимо для участия в конкурсе
педагогических разработок. Отзывы надо
отправить не позднее 5 октября. Заранее благодарю
всех, кто откликнется на мою просьбу.
С уважением, Ганилова Татьяна Евгеньевна.
Урок 17
Сегодняшний урок мы посвятим
проблеме правильного ввода данных, точнее,
контроля за вводом данных. Обычно в условии
задачи указывается диапазон допустимых входных
значений. И если данные введены некорректно, то
даже верная программа может выдать неправильный
ответ.
Например:
Составить программу, по которой компьютер
печатает последовательность вида:
10, 100, 1000, ..., 10^n (n<10)
Код программы:
var i,n,s:longint;
begin
write('Введите значение n<10');
readln(n);
s:=1;
for i:=1 to n do
begin
s:=s*10;{находим степень}
write(s,' ');
end;
readln;
end.
Если не сделать защиту, то при вводе числа
больше 9 программа выполнится, но ответ будет
абсурдным (так как пойдет переполнение
допустимого значения переменной S). Попробуйте! А
если сделать проверку входного данного, то
программа не будет выполняться, пока не будет
введено допустимое значение.
var i,n,s:longint;
begin
repeat {Цикл закончится если n<10}
write('Введите значение n<10');
readln(n);
until n<10;
s:=1;
for i:=1 to n do
begin
s:=s*10;{находим степень}
write(s,' ');
end;
readln;
end.
Существуют и другие методы контроля, но мы
пока остановимся на контроле диапазона входных
данных. Контроль за типом входных данных
выполняет компилятор. Например, в случае, если в
переменную целого типа вы попытаетесь ввести
вещественное число, он просто прервет выполнение
программы.
Тренировочные
задания.
Постарайтесь в программах сделать контроль на
допустимость вводимых данных.
1. Дано натуральное число N. Определить, является
ли оно палиндромом. Число палиндром можно читать
справа налево и слева направо: 4, 88, 121, 767767 и т.д.
2. Вводится последовательность из N целых чисел.
Найти наибольшее число.
3. Дано натуральное число. Найти:
a. Число, получаемое при прочтении его цифр
справа налево;
b. Число, получаемое в результате
приписывания по двойке в начало и конец записи
исходного числа;
c. Число, получаемое удалением из
исходного всех цифр А;
d. Число, получаемое из исходного
перестановкой его первой и последней цифр;
e. Число, образованное из исходного
приписыванием к нему такого же числа.
Разбор
тренировочных заданий урока 16.
3. Составить программу, которая читает
натуральное число N в десятичном представлении
(N<=10000), а на выходе выдает это же число в
десятичном представлении и на естественном
языке. Например: 7 - семь, 204 - двести четыре, 52 -
пятьдесят два.
var n,k:word;
begin
write('Введите число '); readln(n);
k:=n div 100;
n:=n mod 100;
case k of
9:write('девятьсот ');
8:write('восемьсот ');
7:write('семьсот ');
6:write('шестьсот ');
5:write('пятьсот ');
4:write('четыреста ');
3:write('триста ');
2:write('двести ');
1:write('сто ');
end;
k:=n div 10;
if k<>1 then n:=n mod 10;
case k of
9:write('девяносто ');
8:write('восемьдесят ');
7:write('семьдесят ');
6:write('шестьдесят ');
5:write('пятьдесят ');
4:write('сорок ');
3:write('тридцать ');
2:write('двадцать ');
end;
case n of
19:write('девятнадцать ');
18:write('восемнадцать ');
17:write('семнадцать ');
16:write('шестнадцать ');
15:write('пятнадцать ');
14:write('четырнадцать ');
13:write('тринадцать ');
12:write('двенадцать ');
11:write('одиннадцать ');
10:write('десять ');
9:write('девять ');
8:write('восемь ');
7:write('семь ');
6:write('шесть ');
5:write('пять ');
4:write('четыре ');
3:write('три ');
2:write('два ');
1:write('один ');
end;
readln;
end.
Задачи на
повторение:
4. Дано натуральное число. Определить, является ли
разность его максимальной и минимальной цифр
четным числом.
var k,n,m,max,min:word;
begin
write('Введите натуральное число '); readln(n);
max:= n mod 10;
min:=n mod 10;
n:=n div 10;
while n div 10<>0 do
begin
k:=n mod 10;
if k>max then max:=k;
if k<min then min:=k;
n:=n div 10;
end;
if k>max then max:=k;
if k<min then min:=k;
if (max-min) mod 2=0 then writeln('разница четное число ')
else writeln('разница не четное число ');
readln;
end.
5. Дано натуральное число. Определить, сколько
раз в нем встречается цифра, равная старшей.
var k,n,m,i:longint;
begin
write('Введите натуральное число '); readln(n);
m:=n;
while m div 10<>0 do m:=m div 10; {определяем цифру
старшего разряда}
i:=1; { один раз уже встретилась в старшем
разряде}
while n div 10<>0 do
begin
k:=n mod 10;
if k=m then i:=i+1;
n:=n div 10;
end;
writeln('старшая цифра встречается в числе ',i,'
раз');
readln;
end.
Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru
Гимназия №6, г. Междуреченск.