Задача 1: В компьютер с клавиатуры вводятся числа. Компьютер после ввода каждого числа должен печатать, сколько среди них уже введено положительных.
Фрагмент, решающий задачу:
c:=0; {Обнуляем счетчик}
m: ReadLn(a); {Вводим очередное число}
if a>0 then c:=c+1;
WriteLn('Из них положительных - ' ,c);
goto m
Пояснения: В 6.6 мы придумали переменную i, которую назвали счетчиком циклов. Здесь мы тоже придумали переменную c. Она у нас выполняет роль счетчика положительных чисел. Сердце счетчика - оператор c:=c+1. Именно он в нужный момент увеличивает счетчик на 1. Но и без if a>0 then тоже никак нельзя. Если бы его не было, то c подсчитывал бы все числа без разбору, то есть был бы обыкновенным счетчиком циклов. В нашем же фрагменте увеличение с на 1 выполняется не всегда, а лишь при положительном а.
Пусть мы вводим числа 8, -2, 10 . . . В этом случае порядок выполнения операторов будет такой:
Оператор |
а |
с |
Печать |
c:=0 |
? |
0 |
|
ReadLn(a) |
8 |
0 |
|
if a>0 then c:=c+1 |
8 |
1 |
|
WriteLn('Из них положительных - ' ,c) |
8 |
1 |
Из них положительных 1 |
goto m |
8 |
1 |
|
ReadLn(a) |
-2 |
1 |
|
if a>0 then c:=c+1 |
-2 |
1 |
|
WriteLn('Из них положительных - ' ,c) |
-2 |
1 |
Из них положительных 1 |
goto m |
-2 |
1 |
|
ReadLn(a) |
10 |
1 |
|
if a>0 then c:=c+1 |
10 |
2 |
|
WriteLn('Из них положительных - ' ,c) |
10 |
2 |
Из них положительных 2 |
goto m |
10 |
2 |
|
Не забывайте обнулять счетчик перед входом в цикл, а не то он начнет считать вам не с нуля, а бог знает с чего. Как бы вам понравилось, если бы таксист в начале поездки не обнулил счетчик?
В нашем фрагменте значения счетчика печатаются при каждом выполнении цикла. Изменим задачу.
Задача 2: В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных.
Программа:
VAR c,i :Integer;
a :Real;
BEGIN
c:=0; {Обнуляем счетчик}
for i:=1 to 200 do begin
ReadLn(a);
if a>0 then c:=c+1
end {for};
WriteLn('Из них положительных - ' ,c)
END.
Пояснения: Путь рассуждений здесь тот же, что и в первой задаче. В результате применения оператора for фрагмент ReadLn(a);if a>0 then c:=c+1 выполняется ровно 200 раз, благодаря чему счетчик с накапливает нужное значение. Оператор WriteLn выполняется только один раз и печатает это значение.
Совет: Если вы запускаете эту программу в компьютере, то с числом 200 возиться крайне долго. Поменяйте его на 3 или 4. Смысл программы от этого не изменится.
Задание 46: Что будет, если
1) Вместо c:=0 написать c:=10.
2) Вместо c:=c+1 написать c:=c+2.
3) Строки end {for} и WriteLn поменять местами.
4) Строки c:=0 и for поменять местами.
5) Строки for и ReadLn поменять местами.
Задача 3: В компьютер один за другим вводятся произвольные символы. Ввод заканчивается символом "/". Подсчитать, какой процент от общего числа введенных символов составляют символ "W" и символ ":" по отдельности.
Здесь мы организуем три счетчика одновременно: сW и сDv - для подсчета букв W и двоеточий соответственно, а также i - счетчик циклов, то есть общего числа введенных символов.
Программа:
VAR i,cW,cDv, procent_W, procent_Dv : Integer;
simvol :Char;
begin
i:=0; cW:=0; cDv:=0; {Обнуляем все три счетчика}
repeat {Повторяй цикл}
ReadLn (simvol); {Введи символ}
i:=i+1; {«Посчитай» его}
case simvol of
'W' :cW:=cW+1; {Если это W, увеличь счетчик символов W}
':' :cDv:=cDv+1 {Если это :, увеличь счетчик символов :}
end
until simvol = '/'; {пока не наткнешься на символ /}
procent_W :=Round(100*cW/i); {Вычисляй процент символов W}
procent_Dv :=Round(100*cDv/i); {Вычисляй процент символов :}
WriteLn(procent_W,' ',procent_Dv)
end.
Задание 47: В компьютер вводится N чисел. Подсчитать по отдельности количество отрицательных, положительных и тех, что превышают число 10.
Задание 48: В компьютер вводятся пары целых чисел. Подсчитать, сколько среди них пар, дающих в сумме число 13. Подсчет закончить после ввода пары нулей.
Напомню, что пару чисел можно ввести оператором ReadLn(a,b).
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.