{1. Заполним весь календарь значениями "нет дня":}
for m:=1 to 12 do
for d:=1 to 31 do CL[m,d]:=NoDay;
{2. Строим массив-календарь:}
m:=1; d:=1;
wd:=Mon;
CL[m,d]:=wd;
case m of
4,6,9,11: if d=30 then begin m:=m+1; d:=1; end else d:=d+1;
1,3,5,7,8,10,12: if d=31 then begin m:=m+1; d:=1; end else d:=d+1;
2: if d=28 then begin m:=m+1; d:=1; end else d:=d+1;
end;
wd:=tWeekDay((ord(wd)+1) mod 7);
until m=13;
{Выводим на экран:}
write('Номер месяца > '); 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.
В прикладных программах широко распространены два типа операций, связанных с массивами:
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 используется при обмене значений двух элементов}
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]<jmin then jmin:=j;
buf:=a[i];
a[i]:=a[jmin];
a[jmin]:=buf;
end;
write('Результат: ');
for i:=1 to 10 do write(a[i],' ');
readln;
end.
Другой способ — пузырьковая сортировка, он работает чуть быстрее, чем предыдущий. На первом этапе двигаемся от n-го элемента до 2-го и для каждого из них проверяем, не меньше ли он предыдущего; если меньше, то меняем местами текущий и предыдущий. В итоге первый элемент будет наименьшим в массиве. На втором этапе также проходим элементы от n-го до 3-го, на третьем — от n-го до 4-го, и т. д. В итоге массив будет отсортирован по возрастанию.
program BubbleSort;
...
var i,j: integer;
buf: integer;
...
for i:=2 to n do
for j:=n downto i do
if a[j]<a[j-1] then begin
buf:=a[j];
a[j]:=a[j-1];
a[j-1]:=buf;
end;
end.
Тип запись, также как и массив, является структурированным типом данных, то есть таким, переменные которого составлены из нескольких частей. В Турбо-Паскале существует возможность объединить в одну переменную данные разных типов (тогда как в массиве все элементы имеют одинаковый тип). Приведём пример такого типа. Пусть в переменной требуется хранить сведения о некотором человеке: ФИО, пол, адрес, телефон. Тогда для хранения этих данных будет удобен такой тип:
type tPerson = record
Name,Surname,SecondName: string[30];
Male: boolean;
Address: string;
Phone: longint;
end;
Объявление переменной типа запись выполняется стандартно, с помощью var. Части записи (в нашем случае: Name, Surname, SecondName, Male, Address, Phone) называются полями. Обращение к полю записи в программе производится с помощью знака ‘.’ (точка). Пример обращения к полям: