Рефераты. Программирование на языке Турбо Паскаль p> Пример 1: пусть требуется найти число m=max(a,b). Этой задаче соответствует следующий фрагмент программы на Паскале: if a>b then m:=a else m:=b;

Пример 2: (без else) пусть дано целое число i. Требуется оставить его без изменения, если оно делится на 2, и вычесть из него 1, если это не так. var i: integer;

....... if i mod 2 = 1 then i:=i-1; {else - ничего не делать}

Примечание: в примере использована операция нахождения остатка от деления (mod), для нахождения неполного частного в Турбо-Паскале используется div.

Пример 3: (с использованием составного оператора). Пусть даны две переменные типа real. Требуется поменять местами значения этих переменных, если a1>a2. var a1,a2,buf :real;

......... if a1>a2 then begin buf:=a1; a1:=a2; a2:=buf; end;

Следующий пример использует вложенные операторы if.

Пример 4: Поиск корней квадратного уравнения. program SqEquation; var a,b,c,d: real; begin writeln; write('Введите коэффициенты a,b,c квадратного уравнения : '); readln(a,b,c); d:=sqr(b)-4*a*c; if d>=0 then if d=0 then writeln('Единственный корень: x=',-b/(2*a):8:3) else writeln('Два корня : x1=',(-b+sqrt(d))/(2*a):8:3,

', x2=',(-b-sqrt(d))/(2*a):8:3) else {d '); readln(n); write(n,' ученик'); if n1 then writeln('а'); end else writeln('ов'); readln; end.

В этом примере пришлось использовать составной оператор (begin ... end;) для того чтобы часть else относилась не к оператору if n>1, а к if n '); readln(n); write(n,' ученик'); case n of

2..4: write('а');

5..10: write('ов'); end; readln; end.

Можно также усовершенствовать программу для произвольного натурального n:

write(n,' ученик'); case n mod 100 of

11..19: write('ов'); else case n mod 10 of

2..4: write('а');

0,5..9: write('ов'); end; end;

Лекция 4. Операторы циклов в Паскале

В реальных задачах часто требуется выполнять одни и те же операторы несколько раз. Возможны различные варианты: выполнять фрагмент программы фиксированное число раз, выполнять, пока некоторое условие является истинным, и т. п. В связи с наличием вариантов в Паскале существует 3 типа циклов.

1. Цикл с постусловием (Repeat)

На Паскале записывается следующим образом: repeat until
. (По-русски: повторять что-то пока_не_выполнилось условие). Под обозначением здесь понимается либо одиночный, либо последовательность операторов, разделённых точкой с запятой. Цикл работает следующим образом: выполняется оператор, затем проверяется условие, если оно пока еще не выполнилось, то оператор выполняется вновь, затем проверяется условие, и т. д. Когда условие, наконец, станет истинным выполнение оператора, расположенного внутри цикла, прекратится, и далее будет выполняться следующий за циклом оператор. Под условием, вообще говоря, понимается выражение логического типа.

Пример (подсчет суммы натуральных чисел от 1 до 100): var i,sum: integer; begin sum:=0; i:=0; repeat i:=i+1; sum:=sum+i; until i=100; writeln('Сумма равна: ',sum); readln; end.

Важно заметить, что операторы стоящие внутри цикла repeat (иначе ( в теле цикла) выполняются хотя бы один раз (только после этого проверяется условие выхода).

2. Цикл с предусловием (While)

Этот цикл записывается так: while do . (Пока условие истинно, выполнять оператор). Суть в следующем: пока условие истинно, выполняется оператор (в этом случае оператор может не выполниться ни разу, т.к. условие проверяется до выполнения). Под оператором здесь понимается либо простой, либо составной оператор (т.е. несколько операторов, заключёных в begin ... end).

Рассмотрим тот же пример, выполненный с помощью while: var i,sum: integer; begin sum:=0; i:=0; while i',ch,' '); readln; end.

В этой программе в качестве счётчика цикла была использована символьная переменная, это разрешается, поскольку цикл for может использовать в качестве счётчика переменные любого типа, значения которого хранятся в виде целых чисел.

С использованием кодов работают ещё две функции, значения которых символьные:

1. succ (от succeedent — последующий), она выдаёт символ со следующим кодом.

2. pred (от predecessor — предшественник), выдаёт символ с предыдущим кодом.
Если попытаться в программе получить succ(#255) или pred(#0), то возникнет ошибка. Пользуясь этими функциями можно переписать предыдущую программу и по-другому:

... ch:=#32; while ch#255 do begin write(ord(ch),'—>',ch,' '); ch:=succ(ch); end;

...

Сравнение символов. Также как и числа, символы можно сравнивать на =,
, , =. В этом случае Паскаль сравнивает не сами символы, а их коды. Таблица ASCII составлена таким образом, что коды букв (латинских и большинства русских) возрастают при движении в алфавитном порядке, а коды цифр расположены по порядку: ord(‘0’)=48, ord(‘1’)=49, ... ord(‘9’)=57.
Сравнения символов можно использовать везде, где требуются логические выражения: в операторе if, в циклах и т.п.

2. Строковый тип

Для хранения строк (то есть последовательностей из символов) в Турбо-
Паскале имеется тип string. Значениями строковых переменных могут быть последовательности различной длины (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами: либо var s: string; (максимальная длина строки — 255 символов), либо var s: string[n]; (максимальная длина — n символов, n — константа или конкретное число).

Для того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами. В случае присваивания конкретной строки, это строка должна записываться в апострофах (s:='Hello, world!').
Приведём простейший пример со строками: программа спрашивает имя у пользователя, а затем приветствует его: program Hello; var s: string; begin write('Как Вас зовут: '); readln(s); write('Привет, ',s,'!'); readln; end.

Хранение строк. В памяти компьютера строка хранится в виде последовательности из символьных переменных, у них нет индивидуальных имён, но есть номера, начинающиеся с 1). Перед первым символом строки имеется ещё и нулевой, в котором хранится символ с кодом, равным длине строки. Нам абсолютно безразлично, какие символы хранятся в байтах, находящихся за пределами конца строки. Рассмотрим пример. Пусть строка s объявлена как string[9], тогда после присваивания s:=’Привет’; она будет хранится в следующем виде:
|Номер байта |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
|Содержимое |#6 |‘П’ |‘р’ |‘и’ |‘в’ |‘е’ |‘т’ |‘ю’ |‘s’ |‘%’ |

Для того чтобы в программе получить доступ к n-му символу строки используется запись s[n]. Если поменять значение s[0] то это отразится на длине строки. В следующем примере из строки 'Привет' мы сделаем 'Привет!': s[0]:=#7; s[7]:='!';.

Сравнение строк. Строки сравниваются последовательно, по символам.
Сравниваются первые символы строк, если они равны — то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры: 'ананас''свинина', '' '); readln(a[i]); end; max:=a[1]; for i:=2 to 10 do if a[i]>max then max:=a[i]; writeln('Максимум равен ',max); readln; end.

В качестве типа элементов массива можно использовать все типы, известные нам на данный момент (к ним относятся все числовые, символьный, строковый и логический типы).

Нумеровать элементы массивов можно не только от единицы, но и от любого целого числа. Вообще для индексов массивов подходит любой порядковый тип, то есть такой, который в памяти машины представляется целым числом.
Единственное ограничение состоит в том, что размер массива не должен превышать 64 Кб. Рассмотрим некоторые примеры объявления массивов. var Numbers: array [0..1000] of integer;

Names: array [1..10] of string;

Crit: array[shortint] of boolean;

CountAll: array[char] of integer;

Count: array['a'..'z'] of integer;

В следующем примере показано для чего может понадобиться последний тип.

Пример 2. Подсчет количества различных букв в строке.

program CountLetters; var s: string; count: array['a'..'z'] of byte; ch: char; i: byte; begin write('Введите строку > '); readln(s); for i:=1 to length(s) do if (s[i]>='a')and(s[i] '); readln(m); write('Число > '); readln(d); case CL[m,d] of

Mon: writeln('Понедельник');

Tue: writeln('Вторник');

Wed: writeln('Среда');

Thu: writeln('Четверг');

Fri: writeln('Пятница');

Sat: writeln('Суббота');

Sun: writeln('Воскресенье');

NoDay: writeln('Такого дня нет в календаре'); end; until false; end.

3. Сортировка и поиск

В прикладных программах широко распространены два типа операций, связанных с массивами:

1. Упорядочивание элементов массива по возрастанию или убыванию

(сортировка)

2. Поиск элемента в массиве.

Рассмотрим простейший вариант сортировки массива (сортировка выбором).
Пусть есть массив из n элементов; сначала найдём в нём самый маленький среди элементов с номерами 2,3,...n и поменяем местами с первым элементом, затем среди элементов с номерами 3,4,...n найдём наименьший и обменяем со вторым, и т. д. В результате наш массив окажется отсортированным по возрастанию.

program SelectSort; const n = 10; var a: array [1..n] of integer; i,j,jmin,buf: integer;

{jmin - номер наименьшего элемента, buf используется при обмене значений двух элементов} begin for i:=1 to 10 do begin write('Введите элемент номер ',i,' -> '); readln(a[i]); end;

for i:=1 to n-1 do begin jmin:=i; for j:=i+1 to n do if a[j]m then m:=c; writeln('Максимум = ',m); readln; end.

Перепишем его с использованием процедуры: program Max2; var a,b,c,m: integer; procedure FindMax; begin if a>b then m:=a else m:=b; if c>m then m:=c; end; begin write('Введите a: '); readln(a); write('Введите b: '); readln(b); write('Введите c: '); readln(c);

FindMax; writeln('Максимум = ',m); readln; end.

Этот вариант можно улучшить. Пока наша процедура может искать минимум только среди значений конкретных переменных a, b и c. Заставим её искать минимум среди любых трёх целых чисел и помещать результат в нужную нам переменную, а не всегда в m.

Чтобы была видна польза от такой процедуры, рассмотрим пример программы для поиска максимума среди чисел a+b, b+c и a+c: program Max3; var a,b,c,m: integer; procedure FindMax(n1,n2,n3: integer; var max: integer); begin if n1>n2 then max:=n1 else max:=n2; if n3>max then max:=n3; end; begin write('Введите a: '); readln(a); write('Введите b: '); readln(b); write('Введите c: '); readln(c);

FindMax(a+b,b+c,a+c,m); writeln('Максимум из сумм = ',m); readln; end.

В скобках после имени процедуры (в её описании) записаны так называемые параметры. Эта запись обозначает, что внутри процедуры можно использовать целые числа, обозначенные n1, n2 и n3, а также заносить значения в переменную типа integer, которая внутри процедуры называется max (а реально во время работы программы все действия производятся над переменной m).
Параметры, в которых хранятся числа (n1,n2,n3) называются параметрами- значениями; а те, которые обозначают переменные (max) ( параметрами- переменными, перед ними в описании ставится слово var. Параметры, на которые имеются ссылки внутри процедуры (n1, n2, n3, max), называются формальными, а те, которые реально используются при вызове (a+b, b+c, a+c, m) — фактическими.

Страницы: 1, 2, 3, 4, 5, 6



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.