Файл: Основы языка программирования turbo pascal. Базовый уровень 1Алфавит языка Паскаль.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 25
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
23
Формат цикла с предусловием While <условие> do <тело цикла>; Проверка условия осуществляется перед циклом, цикл выполняется, если условие принимает значение True (истина).
Пример
Посчитать сумму 10 произвольно введенных чисел. program example_summ; const limit=10;
{константа ограничения ввода чисел} var i: integer; sum, ch: real; begin i:=0;
{счетчик чисел} sum:=0;
{переменная накапливающая сумму чисел}
while i< limit do
begin i:=i+1; write(‘введите ’,i,’-е число: ’); readln(ch); sum:=sum+ch; end;
{конец цикла} writeln(‘Сумма равна ’,sum:5:2); {переменную sum вещественного типа выводим в
5 позиций с 2мя знаками в дробной части} end.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
24
Найти сумму цифр в записи 5-значного натурального числа можно следующим образом:
Program SUM;
Var a,b,s,k:Integer;
Begin
Readln(a); s:=0;
While a<>0 do
begin b:=b mod 10; s:=s+b; a:=trunc(a/10); { a := a div 10 }
end;
Writeln(s);
End.
Решите эту задачу, используя цикл другой вид цикла:
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
25
Цикл с постусловием
Repeat
<тело цикла>
Until <условие>;
Первоначально условие принимает значение False (ложь). Цикл выполняется до тех пор, пока условие не станет True (истина).
Пример: Подсчитать количество чисел, введенных до первого отрицательного. program rep_until; var ch: real; n: byte; begin writeln (‘Подсчитать количество чисел, введенных до первого отрицательного’); writeln;
{оформление подсказки}
repeat
write (‘Введите число ’); readln(ch); n:=n+1;
until ch<0; writeln(‘Количество не отрицательных чисел равно ‘,n); end.
Программа проверки введения клавиши ‘Y’.
Program keyp;
Var ch: char;
Begin
Repeat
Readln(ch);
Until (ch=’y’) or (ch=’Y’)
End.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
26
Найти сумму квадратов всех натуральных чисел от 1 до 100.
I. С использованием цикла "Пока".
Program Ex1;
Var
A : Integer;
S : Longint;
Begin
A:=1; S:=0;
While A<=100 Do
Begin
S:=S+A*A;
A:=A+1
End;
Writeln(S)
End.
II. С использованием цикла "До".
Program Ex2;
Var
A : Integer;
S : Longint;
Begin
A:=1; S:=0;
Repeat
S:=S+A*A;
A:=A+1
Until A>100;
Writeln(S)
End.
III. С использованием цикла "С параметром".
Program Ex3;
Var
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
27
A : Integer;
S : Longint;
Begin
S:=0;
For A:=1 To 100 Do S:=S+A*A;
Writeln(S)
End.
Вычислить
n
n
+
−
+
+
+
)
1
(
2 1
program primer; const n=3; var i:integer; s:real; begin s:=0; for i:=n downto 0 do s:=i+sqrt(s); writeln('s=',s) end.
Вычислить
= =
+
N
1
i
M
1
j j
i
2
N и M ввести с клавиатуры. program primer; var i,j,m,n:integer; p,s:real; begin write(‘n,m’);readln(n,m); s:=0; for i:=1 to n do begin p:=1; for j:=1 to m do p:=p*2/(i+j); s:=s+p; end; writeln(‘s=’,s); end.
Cоставить программу вычисления
=
+
+
−
3 2
3
)!
3
(
)
(
)
1
(
k
k
k
k
x
program primer; var p,f,k:integer; s,z,x,e:real;
Begin write('Введите x'); readln(x); write('Введите e
:');readln(e); k:=2;p:=1; z:=-sqr(sqr(sqr(x)))/125; s:=0; while abs(z)>e do begin s:=s+z; z:=-z*x*x*x/(k+3); k:=k+1; end; write('S=',s)
End.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
28
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
29
Напишите программы, вычисляющие значения следующих выражений:
А)
=
n
k
k
1 1
Б)
=
+
−
n
k
k
k
k
1
)
1 2
(
)
1
(
В)
=
+
+
100 2
2 1
i
i
i
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
30
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
31
Типы данных, определяемые пользователем
Язык Pascal имеет мощные возможности для конструирования пользователем собственных типов данных. Описание типов данных позволяет создавать такие структуры данных, которые позволяют решать задачи более оптимальными способами, делать решение более наглядным, установить соответствие между принятыми в теоретических исследованиях и реализуемыми в программировании структурами данных.
В языке программирования Pascal имеют место простые типы данных и сложные или структурированные. Сложные типы данных представляют собой набор компонентов, связанных общим именем и расположенных в смежной области памяти. Доступ к компонентам производится с использованием, так называемых, косвенной и индексной адресации, тогда как к простым типам данных применяется прямая адресация.
Основными типами структурных данных являются массивы (array) и записи
(record).
Новый тип перед первым его использованием должен быть описан в соответствующем разделе описаний. Его заголовок - служебное слово Type:
Type <Имя типа> = <Описание типа>;
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
32
Перечисляемый тип используется для повышения наглядности программ, позволяя записывать в переменные этого типа названия разнообразных объектов, исследуемых программой. Этот тип представляет собой набор идентификаторов, с которыми могут совпадать значения параметров.Формат описания следующий:
<Имя типа> = (<Ид.1>, <Ид.2>, …);
Далее можно определить любое число переменных уже описанного типа. Этим переменным можно присваивать только значения из списка, определенного при описании типа. Эти значения не являются ни числами, ни строковыми величинами, ни даже величинами логического типа, поэтому они не могут участвовать в арифметических, строковых, логических выражениях, а также не могут быть выведены на экран или принтер.
Величины перечисляемого типа можно сравнивать между собой, над их множеством в языке Паскаль определены несколько функций:
Ord(X) – порядковый номер значения переменной X в списке идентификаторов.
Нумерация среди значений идет, начиная от нуля.
Succ(X) – следующее значение для величины Х.
Pred(X) – предыдущее значение данного типа.
Приведите примеры задания перечисляемого типа:
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
33
Интересно, что переменная перечисляемого типа может быть счетчиком в цикле "с параметром".
Пример:
Program T1;
Type
Colors = (Black, Blue, Green, Cyan, Red, Magenta, Brown,
Yellow, White);
Var
C1,C2 : Colors;
Begin
C1:=Green;
C2:=Red;
Writeln(Ord(C1), Ord(Succ(C2)))
End.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
34
Тип-диапазон
Формат описания отрезочного типа:
Type <Имя типа>=<Нач.>..<Кон.>;
Примеры:
Type
Age=0..150;
{Целое число в интервале от 0 до 150}
Lat='A'.. 'Z';
{Заглавные буквы латинского алфавита}
Month=(January, February, March, April, May, June,
July, August, September, October, November, December);
Spring=March..May; {Весенние месяцы}
Приведите примеры задания типов-диапазонов:
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
35
Массивы
Массив – структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует номер
(индекс), определяющий его местонахождение в общей последовательности.
Формат записи массива через раздел описания типов имеет вид:
Type <имя типа>=array [тип индекса] of <тип компонента>;
Var <идентификатор,…>: <имя типа>;
Формат записи массива через раздал описания переменных:
Var <идентификатор,…>: array [тип индекса] of <тип компо-нента>;
Массивы различают по количеству индексов: одномермые (1 индекс), двумерные и N-мерные (N индексов).
Пример:
Type
Vector = array [1..25] of real; {одномерный массив}
Matrix = array [1..20, 1..30] of byte; {двумерный массив}
Опишите массивы, состоящие из 5-ти, 8 и 12 элементов:
Опишите двумерные массивы:
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
36
Рассмотрим работу с массивами на примере следующей задачи: Даны два массива целых чисел. Вычислить произведение максимального элемента первого массива на минимальный элемент второго массива. Удалить максимальный элемент из первого массива и добавить его во второй массив после минимального. program work_massive; type massiv=array [1..40] of integer; var a, b: massiv; i, n, k, p, j, min, Imin, max, Imax: integer; begin
{Ввод массива с клавиатуры} write('Введите размерность массива А n='); readln(n); writeln('Введите элементы массива А'); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end;
{Ввод массива случайным образом} write('Введите размерность массива В k='); readln(k); randomize;{подключение генератора случайный чисел} for i:=1 to k do b[i]:=random(16);
{заполнение массива случайными числами от 0 до 15}
{Вывод массива на экран}
Writeln('Массив В'); for i:=1 to k do write(b[i],' '); writeln; {пустой оператор вывода}
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
37
{Поиск максимального элемента} max:=a[1];
Imax:=1; for i:=2 to n do if a[i]>max then begin max:=a[i];
{максимальный элемент}
Imax:=i;
{индекс максимального элемента} end;
{Поиск минимального элемента} min:=b[1];
Imin:=1; for i:=2 to n do if b[i]
Imin:=i;
{индекс минимального элемента} end;
{вычисление произведения и его вывод на экран} p:=min*max; writeln('Произведение max и min равно ',p);
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
38
{Удаление элемента из массива с позиции Imax} for i:=Imax to n-1 do a[i]:=a[i+1]; n:=n-1;
{Уменьшение количества элементов массива на 1}
{Вставка элемента в массив после элемента равного min} i:=1; while i
{Увеличение количества элементов на один} b[i+1]:=max;
{Вставка элемента на позицию i+1} end; i:=i+1;
{Увеличение счетчика итераций} end;
{Вывод массивов А и В на экран в строку} writeln(‘Массив А: ‘); for i:=1 to n do write(a[i],' '); writeln; writeln(‘Массив В: ‘); for i:=1 to k do write(b[i],' '); end.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
39
Сортировка одномерных массивов
Рассмотрим массив целых или действительных чисел А
1
, ..., А
n
. Пусть требуется переставить элементы этого массива так, чтобы после перестановки они были упорядочены по не убыванию А
1
<=A
2
<=...<=A
n
. Эта задача называется задачей сортировки или упорядочения массива. Для решения этой задачи можно воспользоваться следующими алгоритмами:
I. Сортировка выбором
Найти элемент массива, имеющий наибольшее значение, переставить его с первым элементом, затем проделать то же самое, начав со второго элемента и т.д.
II. Сортировка обменами (метод пузырька)
Последовательным просмотром чисел А
1
, ..., А
n найти наименьшее i такое, что
А(i)>A(i+1). Поменять местами A(i) и A(i+1), возобновить просмотр с элемента
A(i+1) и т.д. Тем самым наибольшее число передвинется на последнее место.
Следующие просмотры начинать опять сначала, уменьшая на единицу количество просматриваемых элементов. Массив будет упорядочен после просмотра, в котором участвовали только первый и второй элементы.
III. Сортировка простыми вставками
Просматривать последовательно A2, ..., An и каждый новый элемент Ai вставлять на подходящее место в уже упорядоченную совокупность
A(1)...A(i-1). Это место определяется последовательным сравнением Ai с упорядоченными элементами A(1), ..., A(i-1).
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
40
Примеры решений задач
1. Сортировка отбором.
Var x:arr; dlina:integer;
mal: dano;
Min, k,j: integer;
Begin
For k:=1 to dlina-1 do
Begin
Mal:=x[k];
Min:=k;
For j:=k+1 to dlina do
If x[j]
Begin
Mal:=x[j];
Min:=j;
End;
X[min]:=x[k];
X[k]:=mal
End
End.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
41
2. Сортировка методом пузырька.
Var X:massiv; DLINA:integer;
A:dannoe;
J,R: integer;
ZAMENA: boolean;
Begin
Repeat
ZAMENA:=false;
For J:=2 to R do
If X[j-1]>X[J] then
Begin
A:=X[J-1];
X[J-1]:=X[J];
X[J]:=A;
ZAMENA:= true
End;
R:=R-1
Until not ZAMENA;
End.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
42
3. Сортировка методом простых вставок.
Var a:arr; j,j,k: word;
T: integer;
Begin
For i:=2 to n do
Begin
T:=a[i];
J:=1;
While (t>=a[j]) and (jdo inc(j);
If j<>i then
For k:=j-1 downto j do a[k+1]=a[k];
A[j]:=t
End;
End;
End.
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
43
Процедуры и функции
В языке Паскаль существует два вида подпрограмм:
□
Процедурой в Паскале называется именованная последовательность инструкций, реализующая некоторое действие.
□
Функция отличается от процедуры тем, что она должна обязательно выработать значение определенного типа.
Процедуры и функции, используемые в программе, должны быть соответствующим образом описаны до первого их упоминания. Вызов процедуры или функции производится по их имени.
Подпрограммы в языке Паскаль могут иметь параметры (значения, передаваемые в процедуру или функцию в качестве аргументов).
Формат описания процедуры:
Procedure <Имя процедуры>
(<Имя форм. параметра 1>:<Тип>;
< Имя форм. параметра 2>:<Тип>?);
<Раздел описаний>
Begin
<Тело процедуры>
End;
Формат описания функции:
Function <Имя функции>
(<Имя форм. параметра 1>:<Тип>;
< Имя форм. параметра 2>:<Тип>?):
<Тип результата>;
<Раздел описаний>
Begin
<Тело функции>
End;
В теле функции обязательно должна быть хотя бы команда присвоения такого вида: <Имя функции>:=<Выражение>;
ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ TURBO PASCAL. БАЗОВЫЙ УРОВЕНЬ
44
Приведем простейший пример использования подпрограммы.
Задача: "Найти максимальное из трех введенных чисел". Для решения воспользуемся описанием функции, принимающей значение максимального из двух чисел, которые передаются в нее в виде параметров.
Program Fn;
Var
A,B,C :Real;
Function Max(A,B:Real):Real; {Описываем функцию Max с формальными}
Begin {параметрами A и B, которая принимает }
If A>B
Then Max:=A {значение максимального из них }
Else Max:=B {Здесь A и B - локальные переменные }
End;
Begin
Writeln('Введите три числа');
Readln(A,B,C);
Writeln('Максимальным из всех является ', Max(Max(A,B),C))
End.
Обратите внимание на краткость тела основной программы и на прозрачность действий внутри функции. Формальные параметры A и B, используемые в подпрограмме, не имеют никакого отношения переменным A и B, описанным в основной программе.