Основы программирования на языке Паскаль

58,60,63 76,78,93,100: writeln('y=',sqr(x)-a*x+sqr(sin(a*x)-exp(x))

/(1-ln(sqr(x)-exp(х/2))));

elsewriteln('неправильно задано i'); end;

readln; END.

4. Селектор знакового типа:

Program Prim10; Var name:char;

BEGIN writeln('введите>шифр'); readln(name);

Casenameof

'S','s': writeln(' факультет самолето- и вертолетостроения');

'D','d': writeln(' факультет авиадвигателестороения');

'Y','y': writeln(' факультет систем управления');

'L','l': writeln(' факультет летательных аппаратов');

'R','r': writeln(' факультет радиотехнический ');

'M','m': writeln(' факультет инженерно - менеджерский'); 'Z','z': writeln(' факультет заочного обучения');

else writeln('введенный шифр не соответствует ни одному ',

'из факультетов ХАИ'); end; readln; END. 5. Селектор перечисляемого типа:

Program Prim11; Var season:(winter,spring,summer,autumn); rez:integer;BEGIN season:=spring; Writeln('результат ord(season)=',ord(season)); case season of winter: writeln('winter');

spring: writeln('spring');

summer: writeln('summer');

autumn: writeln('autumn');

end; readln;

END.

4. Циклические программы

Наиболее часто в практике программирования встречаются циклические программы. В циклических программах какой-либо алгоритм повторяется многократно, при этом один из параметров изменяется. Например, описанная в п. 3.3 программа Рrim 4 является классическим примером циклического алгоритма. Операторов цикла в Паскале три: for, repeat, while.

4.1. Оператор for

Оператор состоит из заголовка, в котором определяется порядок изменения переменной параметра цикла и тела цикла, являющегося многократно повторяющимся алгоритмом. Общий вид оператора:

for – параметр цикла: = начальное значение to, конечное значение do {заголовок}; оператор; {тело цикла}. Этот оператор применяется, если начальное значение < конечного значения;

for – параметр цикла:=начальное значение downto, конечное значение do; оператор; применяется, если начальное значение > конечного значения.

Пример: найти сумму квадратов целых чисел от 8 до 1.24.

Program Prim12; Var i,s:integer; BEGIN s:=0; for i:= 8 to 124 do s:=s+sqr(i); writeln('s=',s); readln;

END.

Работа программы. В разделе Var выделяется ячейка памяти с именем i и s для хранения величин. Поскольку в S мы должны накапливать сумму, то вначале занесем в S ноль. Затем заголовок цикла присваивает i=8. далее выполняется тело цикла: извлекается содержимое ячейки S (а там у нас 0) и к этому содержимому прибавляется sgr(i), т.е. i2=82. Результат присваивается ячейке S, т.е. в S теперь 82.

Проверяется, не стал ли параметр цикла больше конечного значения параметра 128. Это не произошло, поэтому i присваивается следующее значение равное 9 и вновь выполняется тело цикла, т.е. S:=82+92. Можно сказать так: S присвоить тому S, которое было раньше, + следующее i2. Так как цикл еще не закончился, то i станет равным 10, а S присвоится тому S, которое было раньше, т.е. 82+92, и к нему прибавится еще текущее i2, т.е. 102. Этот процесс повторяется до тех пор, пока параметр цикла не станет равным 124. Тогда в последний раз 1242 прибавляется к накапливаемой сумме.

Итак: выполнение цикла значения i значения S

1 8 82

2 9 82+92

3 10 82+92+102

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

116 117 82+92+102+…+1232

117 124 82+92+102+…+1232 +1242

При i=125 происходит выход из цикла и переход к оператору writeln ('S=' ,S);

Эта, казалось бы, правильно написанная программа дает результат S=-12250. Как может получиться отрицательный результат при суммировании квадратов – заведомо положительных чисел? Такой результат мы получаем путем суммирования и занесения результатов в ячейку S типа integer, а в integer могут быть помещены числа в диапазоне -32768 +32767, поэтому после переполнения ячейки памяти в знаковый разряд переносится 1, которая интерпретируется машиной как '-'. Чтобы этого избежать, можно описать S как longint. Тогда результат работы программы будет правильный и равен 643110.

ProgramPrim12a; Vari,s:longint;

BEGIN s:=0;

for i:= 8 to 124 do

s:=s+sqr(i);

writeln('s=',s);

readln; END.

Можно также описать S как real.Program Prim12b; Var i:integer; s:real;

BEGIN s:=0;

for i:= 8 to 124 do

s:=s+sqr(i);

writeln('s=',s);

readln;

END.

Результат работы этой программы будет равен 6.4311000000E+05, что то же самое, что и 643110, если считать, что запись 6.4311000000E+05 равносильна математической записи 6,4311*10+5.

Правила применения оператора цикла for

1.Тело цикла - всегда один оператор. Если нужно, чтобы тело цикла состояло из нескольких операторов, то их объединяют в один с помощью операторных скобок begin, end.

for i:=l to n do

Begin S:=S+sin(x)/cos(x);

x=x+0.01;

writeln('S=' ,S)

end.

Операторы, взятые в операторные скобки begin, end, считаются одним составным оператором.

2. Начальное и конечное значения параметра цикла в общем случае являются выражениями. Тип этих выражений и тип параметра цикла должны совпадать. Здесь допускается применение любых типов, которые упорядочены с каким-либо фиксированным шагом, это может быть любой скалярный тип, кроме вещественного, т.е. байтовый, целый, символьный, перечисляемый, интервальный, булевский. на практике чаще всего применяют целочисленный тип.

3. В теле цикла параметр цикла не должен изменяться.

4. Нельзя с помощью оператора перехода goto войти в тело цикла, минуя заголовок.

5. Выйти из тела цикла в программу можно по if goto, не дожидаясь полного перебора параметров цикла.

Пример: написать программу, выводящую буквы латинского алфавита в одну сторону, с пробелом между ними.

Применяем здесь в качестве параметра цикла символьную переменную, в качестве начального значения параметра – константу 'A', конечного – 'Z'.

Program Prim13;

Var

i:char;

BEGIN

for i:='a' to 'z' do

write(' ',i);

readln; END.

Пример: вычислить значение определенного интеграла на участке a,b для функции cos х, т.е. определить площадь, заштрихованную на рис. 4.1.

Страница:  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 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы