
- •1.1 Теоретические сведения
- •1.1.1 Структура программы в языке Паскаль
- •1.1.2 Основные типы данных
- •1.1.3 Оператор присваивания
- •1.1.4 Арифметические выражения
- •1.1.5 Логические выражения
- •1.1.6 Основные стандартные функции языка Паскаль
- •1.1.7 Основные функции ввода/вывода
- •1.1.8 Операторы цикла
- •1.1.9 Операторы перехода (безусловный и условные)
- •1.1.10 Работа с массивами
- •1.1.11 Процедуры и функции. Модули.
- •1.1.11.1 Модуль System
- •1.1.11.2 Модуль Crt
- •Порядок выполнения работ
- •Лабораторная работа №5. Работа с двумерными массивами
- •Лабораторная работа №6. Программирование с использованием подпрограмм
- •Содержание
- •1.1 Теоретические сведения 1
1.1.9 Операторы перехода (безусловный и условные)
Оператор безусловного перехода goto используется в тех случаях, когда необходимо изменить порядок выполнения программы, чтобы выполнялся не следующий оператор, а другой. Использование оператора перехода требует введение в программу меток. Метка может предшествовать любому оператору и отделяется от него двоеточием. Должна быть предварительно описана в разделе Label. Используется очень редко, только в случае, если надо передать управление впереди стоящему оператору. Необходимо учитывать, что при использовании оператора перехода, если он не является последним, также необходимо ставить метку на следующий за ним оператор.
В Turbo Pascal есть два условных оператора: if и case, но исторически сложилось, что оператор if называют условным, а оператор case – оператором выбора или варианта.
Условный оператор if используется в полной и неполной форме.
Неполная форма: if Условие then Оператор1;
полная форма: if Условие then Оператор1 else Оператор2;
Если условие верно (TRUE), то выполняется Оператор1, если условие ложно (FALSE), то в случае неполной формы выполняется следующий оператор, в случае полной формы – Оператор2.
Особенности: Выбирает только одно из двух возможных действий.
Нельзя ставить символ «;» ни перед then, ни перед else. Только внутри составных операторов (Оператор1 и Оператор2 могут быть как простыми, так и составными).
Оператор выбора case позволяет выполнить одно из нескольких действий в зависимости от значения переменной-переключателя.
case Переключатель of
Список1: Оператор1;
Список2: Оператор2;
…
СписокN: ОператорN
else ОператорEnd
end;
Порядок работы: Если переменная-переключатель принимает одно из значений Списка1, то выполняется Оператор1, а остальные пропускаются и т.д. ОператорEnd будет выполняться, если значение переключателя не совпало ни с одним из значений предыдущих списков.
Необходимо также учесть:
В неполном операторе case строка с «else» отсутствует.
Перед else символ «;» не ставится.
Переменные в списке могут разделяться запятой (например, 1,2,3,4,5) или вводиться интервалом (1..5).
Операторы могут быть составными.
Примеры использования
1. Ввести с экрана символ. Определить вид символа: цифра, буква и т.п.
Var MyChar: Char;
Begin
ReadLn(MyChar);
case MyChar of
‘0’..’9’: WriteLn(‘Это цифра’);
‘A’..’Z’: WriteLn(‘Это прописная буква’);
‘a’..’z’: WriteLn(‘Это строчная буква’)
else WriteLn(‘Это символ’)
end;
End.
2. Ввести номер месяца. Напечатать номер квартала.
Var MyNum: Integer;
Begin
ReadLn(MyNum);
case MyChar of
1..3: WriteLn(‘I’);
4..6: WriteLn(‘II’);
7..8: WriteLn(‘III’);
9..12: WriteLn(‘IV’)
else WriteLn(‘Номер месяца должен быть от 1 до 12!’)
end;
End.
1.1.10 Работа с массивами
Считывание (ввод) одномерного массива известной длины из файла
Var x: array [1..20] of real;
i: integer;
f: text;
Begin
Assign(f, ‘NameFile.dat’);
Reset(f);
for i:=1 to 20 do
Read(f, x[i]);
Close(f);
End.
Считывание одномерного массива неизвестной длины из файла, определение размера массива
Var x: array [1..100] of real;
i,N: integer;
f: text;
Begin
Assign(f, ‘NameFile.dat’);
Reset(f);
i:=0;
While not Eof(f) do
begin
i:=i+1;
Read(f, x[i]);
end;
N:=i1;
Close(f);
End.
Запись (вывод) одномерного массива в файл
Var x: array [1..20] of real;
i,N: integer;
f2: text;
Begin
Assign(f2, ‘NameFile.rez’);
ReWrite(f2);
for i:=1 to 20 do
Write(f2, x[i]:10:3);
Close(f2);
End.
При выводе массива числа записываются подряд, поэтому необходимо всегда делать форматный вывод (см. п.1.1.7).
Вычисление наибольшего элемента одномерного массива
Var x: array [1..100] of real;
max: real;
i,N, Nmax: integer;
Begin
max:=x[1];
for i:=2 to N do
if (x[i]>max) then
begin
max:=x[i];
Nmax:=i;
end;
End.
В результате работы программы вычисляется значение max, равное наибольшему элементу массива и Nmax – номер наибольшего элемента. Необходимо учесть, что эта программа не печатает значения. Для печати необходимо использовать оператор Write.
Для нахождения минимального (наименьшего) элемента программа аналогичная, только для удобства вводятся переменные min, Nmin и в условном операторе if изменяется условие: if (x[i]<min) then…
Нахождение массива, состоящего из определенных элементов исходного массива
j:=0;
n2:=0;
for i:=1 to n do
if (Условие) then
begin
j:=j+1;
b[j]:=a[i];
end;
n2:=j;
В результате получаем массив b, содержащий элементы исходного массива, удовлетворяющие «Условию» и число n2 – количество элементов полученного массива. Условие определяется в зависимости от поставленной задачи. Некоторые примеры условий представлены в таблице 1.8.
Таблица 1.8 Определение «Условия»
Условие задания |
«Условие» в программе |
Тип элементов массива |
Найти положительные элементы |
a[i] > 0 |
Для целых и действительных типов |
Найти отрицательные элементы |
a[i] < 0 | |
Найти неположительные элементы |
a[i] ≤ 0 | |
Найти неотрицательные элементы |
a[i] ≤ 0 | |
Найти четные элементы |
a[i] mod 2 = 0 или not odd(a[i]) |
Только для целых типов |
Найти нечетные элементы |
a[i] mod 2 <> 0 или odd(a[i]) | |
Найти все элементы, делящиеся на n |
a[i] mod п = 0 | |
Найти все элементы, не делящиеся на n |
a[i] mod п <> 0 |
Нахождение первого положительного элемента массива
Var
a: mass;
i, Num, firstPol: integer;
Begin
Num:=0;
firstPol:=0;
for i:=1 to n do
if a[i] > 0 then
begin
firstPol:= a[i];
Num:=i;
Break;
end;
if firstPol = 0 then
WriteLn(‘Net poloz. elementov’);
End.
Для нахождения первого отрицательного элемента, первого четного элемента и т.д. необходимо только изменить условие.
Нахождение последнего положительного элемента массива
Программа аналогична предыдущей, только перебор значений элементов массива необходимо проводить не с начала, а с конца:
for i:=n downto 1 do
и т.д.
Сортировка одномерного массива по возрастанию
for i:=1 to N–1 do
for j:=i+1 to N do
if a[i]>a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
В результате работы программы заданный массив пересортировывается в порядке возрастания. При этом начальный массив не сохраняется.
Для сортировки по убыванию необходимо изменить условие в операторе if.