лекция по программированию 6 (Лекции по ЭВМ)
Описание файла
Файл "лекция по программированию 6" внутри архива находится в следующих папках: Лекции по ЭВМ, 3. Документ из архива "Лекции по ЭВМ", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "лекция по программированию 6"
Текст из документа "лекция по программированию 6"
Лекция по программированию № 6
Кодирование алгоритмических конструкций на языке Pascal
Простейшая условная конструкция
Псевдокод
если <условие> то
<действия>
все
Pascal
If <условие> then
<оператор>
-
Оператор может быть простым, либо составным.
-
Если используется несколько условий, связанных логическими связками, то каждое из них заключается в круглые скобки.
-
Логические связки: не – not, или – or, и – and.Выполняются в указанном порядке.
<Оператор> выполняется только при истинном условии.
Расширенная условная конструкция
Псевдокод
если <условие> то
<действия 1>
иначе
<действия 2>
все
Pascal
If <условие> then
<оператор 1>
else
<оператор 2>
При истинном условии выполняется только <оператор 1 >, а при ложном - только <оператор 2>.
Например, рассмотрим программу решения линейного уравнения
Program solution;
Var a, b, c, d:real;
Begin
Write(‘Введите коэффициенты a, b,c:’);
Read(a,b,c);
If a=0 then
Writeln(‘ Линейное уравнение’)
Else
Begin
D:=sqr(b)-4*a*c;
If d<0 then
Writeln(‘нет действительных корней’)
Else
If d=0 then
Begin
X1:=-b/(2*a);
Writeln(‘один корень x=’,x1:10:5);
End
Else
Begin
X1:=(-b+sqrt(d))/(2*a);
X2:=(-b-sqrt(d))/(2*a);
Writeln(‘два корня x=’,x1:10:5, ‘ x2=’,x2:10:5);
End;
End;
End.
Как видно из примера, точка с запятой не ставится перед else, т. к. условный оператор при наличии ветви иначе заканчивается там, где кончается <оператор 2>.
Конструкция выбора
Псевдокод
выбор (n)
n=1:< действия 1>
n=2:< действия 2>
…
n=k:< действия k>
[иначе < действия k+1> ]
квыбор
Pascal
Case(n) of
1: <оператор 1>
2: <оператор 2>
…
k: <оператор k>
[else <оператор k+1>
end
, где n – значение переменной или выражение порядкового типа.
Оператор выбора выполняется следующим образом.
-
Вычисляется значение n.
-
Отыскивается константа, равная полученному значению и выполняется записанный за ней оператор. Оператор может быть как простым, так и составным.
-
Если соответствующее значение не найдено, то при наличии ветви иначе будет выполнен <оператор k+1>. Если ветвь иначе отсутствует, то никаких действий не выполняется.
Операторы в конструкции выбора можно пометить несколькими метками одновременно, например
Var I: integer;
…
case I of
0, 1,2: y:=x;
3,4: y:=z;
end;
Порядок следования меток-констант может быть произвольным, но все они должны быть различны, Например, недопустима конструкция
Case I of
1: x:=1;
3,2,1: x:=2;
end;
, т.к. константа 1 повторяется 2 раза.
Циклы
Цикл от… до (со счетчиком)
Псевдокод
цикл от i:=<н.з.> до <к.з.> [ шаг <приращение>]
<действия>
кц
Pascal
for i:=<н.з.> to | downto<к.з.>do
<оператор>
, где
i – переменная (счетчик) цикла должна обязательно иметь порядковый тип,
<н.з.> - начальное значение счетчика,
<к.з.> - конечное значение счетчика,
<приращение> - шаг, с которым изменяется значение счетчика.
Если действий в цикле несколько, необходимо использовать составной оператор. В языке Pascal для этого цикла можно использовать значение приращения только равное 1 (ключевое слово to), либо –1 (ключевое слово downto). При использовании других шагов необходимо использовать другой цикл, либо выражать значение переменной цикла через другие переменные. Например, рассмотрим фрагмент алгоритма
S:=0
Цикл от I:=1 до 5 шаг 0.5
S:=s+I2
кц
Этот фрагмент можно закодировать одним из следующих способов:
Вариант 1
I:=1; s:=0;
For k:=1 to 9 do
Begin
S:=s+sqr(i);
I:=I+0.5
End;
Вариант 2
I:=1; s:=0;
While I<=9 do
Begin
S:=s+sqr(i);
I:=I+0.5
End;
При выходе из этого цикла значение переменной цикла считается неопределенным.
Переменная цикла, а также ее конечное и начальное значение не должны изменяться в теле цикла.
Тип начального и конечного значения должен соответствовать типу переменной цикла.
В качестве примера использования цикла со счетчиком и конструкции выбора рассмотрим вычисление заданного количества чисел Фибоначчи.
Числа Фибоначчи вычисляются по формуле
F (1)=F(2)=1
F(k)=F(k-1)+F(k-2), при k>2.
Вычислим несколько первых чисел Фибоначчи: 1, 1, 2, 3, 5, 8 и т.д.
Для хранения этой последовательности использовать массив не обязательно. Достаточно трех переменных. Обозначим f1, f2 – два предыдущих числа Фибоначчи, f3 – текущее число. Изобразим несколько начальных шагов цикла. Стрелками показано перемещение значений переменных для следующего шага.
F1 | F2 | F3 |
1 | 1 | 2 |
1 | 2 | 3 |
2 | 3 | 5 |
Progran Fibonachi;
Var f1, f2, f3, n, I: integer;
{ f1, f2 – два предыдущих числа Фибоначчи, f3 – текущее число ,
n – количество чисел, i – номер текущего числа.}
begin
writeln(‘Числа Фибоначчи’);
writeln(‘Введите количество чисел’);
read(n);
if n<=0 then
wruteln(‘ Неверные данные’)
else
begin
f1:=1; f2:=1;
case n of
1:writeln(‘1’);
2: writeln(‘1 2’);
else begin
writeln(f1:3, f2:3);
for I:=3 to n do
begin
f3:=f1+f2;
f1:=f2;
f2:=f3;{для следующего шага перемещаем
числа в соответствующие ячейки }
writeln(f3:6);
end;{для цикла for}
end;{для else}
end;{для case}
end.{конец программы}
Цикл-пока (с предусловием)
Псевдокод
цикл-пока <условие>
<действия>
кц
Pascal
While <условие> do
<оператор>
Выполнение цикла продолжается пока условие истинно и завершается, когда условие станет ложным. То есть в заголовке цикла указывается условие его продолжения.
Цикл_до (с постусловием)
Псевдокод
цикл
<действия>
до <условие>
кц
Pascal
Repeat
<оператор>
until условие
Выполнение цикла продолжается пока условие ложно и завершается, когда условие станет истинным. То есть в конце цикла указывается условие его завершения.
Примеры использования двух последних циклов рассмотрим на следующей лекции.