Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_rab5_6.doc
Скачиваний:
8
Добавлен:
02.02.2015
Размер:
493.57 Кб
Скачать

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:=i­1;

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]