Задача. Дано 10 вещественных чисел. Найти величину наибольшего из них.
Program Maximum;
Uses
Crt;
Label
Metka1;
Var
Kolich : integer;
Max,
x : real;
Begin
ClrScr;
Kolich:=0;
Max:=-32768;
Metka1 : write (‘Введите число ‘);
readln (x);
if x>Max
then
Max:=x;
Kolich:=Kolich+1;
if Kolich<10
then
goto Metka1;
writeln (‘Наибольшее число равно ‘,x);
readln;
End.
Рассмотрим подробнее действие операторов. После очистки экрана (ClrScr) мы присвоим переменной Kolich, которая определена для подсчета введенных чисел, первоначальное значение равное нулю. Переменной Мах мы будем присваивать наибольшее значение из вводимых чисел. Так как переменная Мах типа integer, то присвоим ей первоначальное значение равное наименьшему из диапазона этого типа, т. е. числу -32768. Далее выделен целый блок. Он будет повторяться при запуске программы 10 раз, т. е. столько сколько чисел нам нужно запросить у пользователя и исследовать их. Просмотрим действие этого блока. Сначала мы запрашиваем у пользователя первое число и считываем его в переменную х. Затем идет анализ этого числа. Если введенное число х оказалось больше числа, находящегося в переменной Мах, то происходит пере присваивание: переменной Мах присваиваем значение х. Итак, считано одно число, поэтому счетчик введенных чисел (Kolich) увеличиваем на 1. Проверяем условным оператором, может быть уже достаточно введено и проанализировано чисел? Если Kolich меньше 10, то еще недостаточно, а значит надо вернуться для того чтобы снова запросить и проанализировать следующее число, что и выполнено с помощью оператора goto. Этот оператор не пропустит нас дальше выполнять программу пока не выполниться условие, при котором переменная Kolich будет равна 10. А такой момент обязательно наступит, потому что в результате выполнения блока переменная Kolich увеличивается на 1. В результате выделенный блок повториться 10 раз, будет запрошено 10 чисел и среди них постоянным сравнением с предыдущим числом будет выявлено наибольшее, которое будет содержаться в переменной Мах. После выхода из блока останется только вывести это число на экран.
Задание. Решите подобную задачу с использованием выше описанного метода.
1) Дано n вещественных чисел. Определить, сколько среди них отрицательных.
2) Дано n вещественных чисел. Определить, сколько среди них положительных чисел.
3) Дано n вещественных чисел. Найти их сумму.
4) Дано n вещественных чисел. Найти их среднее арифметическое.
5) Дано n вещественных чисел. Определить сумму чисел, стоящих на четных местах в этой последовательности.
6) Дано n вещественных чисел. Определить сумму положительных чисел.
7) Дано n вещественных чисел. Определить сумму отрицательных чисел.
8*) Дано целое k от 1 до 180. Определить, какая цифра находится в k-ой позиции последовательности
10111213...9899,
в которой выписаны подряд все двузначные числа.
9*) Дано натуральное k. Определить k-ую цифру в последовательности
110100100010000...,
в которой выписаны подряд степени 10.
10*) Вычислить с – наибольший общий делитель натуральных чисел а и b.
Приготовьте файлы и листинги с решенными задачами, а также проверьте, все ли задания выполнены в тетради.
Дополнительно
Выберите с учителем задачу для решения.
1) Написать программу для решения указанной задачи: для заданного числа а найти корень уравнения f(x)=0, где
f(x)=
2) Дано число х. Напечатать в порядке возрастания числа x, 1+|x| и (1+х2).
3) Даны числа a1, b1, c1, a2, b2, c2. Напечатать координаты точки пересечения прямых, описываемых уравнениями a1х+b1у=c1 и a2х+b2у=c2, либо сообщить, что прямые совпадают, не пересекаются или вовсе не существуют.
4) Даны числа a, b и с (а
). Найти вещественные корни уравнения ах
+bx
+c=0. Если корней нет, сообщить об этом.
5) Даны произвольные числа a, b и с. Если нельзя построить треугольник с такими длинами сторон, то напечатать 0, иначе напечатать соответствующее сообщение в зависимости от того, равносторонний это треугольник, равнобедренный или какой-либо иной.
Контрольные вопросы
1. Какой алгоритм называется разветвляющимся?
2. Что такое ветвь алгоритма?
3. Какое условие называется составным?
4. Верно ли, что в качестве метки можно использовать любое положительное целое число?
5. Обязательно ли описывать все метки, которыми помечены операторы программы?
6. Верно ли, что в разделе меток все описываемые метки должны быть перечислены по возрастанию?
7. Допустимы ли в Паскале следующие составные операторы?
а) begin end;
б) begin x:=0 end;
в) begin; end
8. Какое выражение называется булевым? Почему?
9. Какая форма условного оператора называется полной? Краткой?
10. Какие условные операторы называются вложенными? Как они применяются?
11. Как применяется оператор выбора? Когда он особенно необходим?
12. Для чего нужен оператор безусловного перехода? Почему он так называется?
Циклы
Занятие 1. Циклические алгоритмы. Цикл с предусловием.
Очень многие алгоритмы, выполнение которых поручается компьютеру, по своей природе являются циклическими. И это не случайно, потому что человек обычно поручает машине рутинную работу, где нужно много считать, и счет производится по некоторым одинаковым правилам.
Определение. Цикл – это последовательность операторов, которая может выполняться более одного раза.
Определение. Циклический алгоритм – это алгоритм, содержащий один или несколько циклов.
Возьмем для примера задачу: найти сумму некоторого количества чисел, задаваемых пользователем.
Исходными данными в этом случае являются переменная N - количество чисел и сами эти числа. Значение очередного числа обозначим переменной Х. Результатом работы алгоритма станет сумма этих чисел, которую обозначим переменной S.
S=x1+x2+x3+...+xn
Допустимые значения переменной N должны удовлетворять условию n>0, так как количество слагаемых не может быть числом отрицательным.
Как же мы должны решать эту задачу? Сначала нужно запросить, сколько чисел нужно будет сложить и считать это число в переменную N. Затем нужно так организовать операторы, чтобы программа запрашивала очередное число и каждый раз складывала его с предыдущими; и повторяла эту группу операторов N раз.
На предыдущих занятиях при изучении оператора безусловного перехода мы знакомились с решением подобных задач. Но в языке Паскаль существуют более удобные конструкции для организации циклов:
• цикл с предусловием;
• цикл с постусловием;
• цикл со счетчиком.
Познакомимся с первым из них – оператором цикла с предусловием while.
Циклы с предусловием используются тогда, когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.
При выполнении оператора while определенная группа операторов выполняется до тех пор, пока определенное в операторе while булево условие истинно. Если условие сразу ложно, то оператор не выполнится ни разу.
Общая форма записи следующая
while <булево выражение> do
begin
группа операторов
end;
На русском языке это звучит примерно так:
пока выполняется это условие делай
от начала
группа операторов
до конца;
Вполне понятно, что операторные скобки ставят, чтобы отделить от остальной программы ту группу операторов, которую нужно повторить в цикле. Если в цикле нужно выполнить только один оператор, то операторные скобки не ставят.
При использовании цикла с предусловием надо помнить следующее:
1) значение условия выполнения цикла должно быть определено до начала цикла;
2) если значение условия истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла;
3) хотя бы один из операторов, входящих в тело цикла, должен влиять на значение условия выполнения цикла, иначе цикл будет повторяться бесконечное число раз.
Вернемся к нашей задаче вычисления суммы чисел. При вычислении суммы используем следующий прием: вначале, когда еще не задано ни одно слагаемое, сумму полагают равной нулю (S:=0), а затем, получая очередное слагаемое, прибавляют его к сумме (S:=S+x) (см. программу ниже).
Очень важное значение в операторе цикла имеет так называемая переменная цикла. В нашей программе она называется i. С ее помощью мы обращаемся к пользователю за очередным числом (write (‘Введите ‘,i,’-ое число ’)) и считаем количество уже введенных чисел (i:=i+1), чтобы не запросить лишнее. Одновременно переменная цикла участвует в булевом выражении (i<=N).
Рассмотрите внимательно программу, решающую нашу задачу.
Program Summa;
Uses
Crt;
Var
i,
N : integer;
x, S : real;
Begin
ClrScr;
write (‘Сколько чисел для сложения? ‘);
readln (N);
S:=0;
i:=1;
while i<=N do
begin
write (‘Введите ‘,i,’-е число ’);
readln (x);
S:=S+x;
i:=i+1;
end;
write (‘Сумма введенных чисел равна ‘,s:5:2);
readln;
End.
Хотелось бы, чтобы Вы смогли представить работу этой программы. Давайте попробуем вместе.
Пусть нам требуется сложить следующие числа: 5, 7, -4, 0, 8, 20. Посчитаем, сколько их всего – шесть. Это число мы введем, когда программа задаст вопрос: Сколько чисел для сложения? Теперь наша программа запросит ввести 1-ое число, т. к. на первом шаге переменная i равна 1. Мы введем число 5. Программа считает его в переменную х. Теперь число 5 сложим с числом 0 и результат присвоим переменной S (оператор S:=S+x). В этот момент S становится равной 5. Чтобы перейти к следующему числу, увеличим значение переменной i на 1 (оператор i:=i+1). Выполнение операторов тела цикла закончено. Теперь программа переходит опять к анализу условия вхождения в цикл (i<=N). Переменная цикла i=2, переменная N=6, поэтому значение логического условия 2<=6 равно True. Значит снова выполняется тело цикла:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |


