Автор работы: Пользователь скрыл имя, 11 Октября 2013 в 07:27, контрольная работа
Первая версия языка Паскаль была разработана в 1968 году. Ее разработчиком является швейцарский ученый Никлаус Вирт. Свое название язык получил в честь создателя первой механической вычислительной машины француза Блеза Паскаля. На основе языка Паскаль в 1985 г. фирма Borland выпустила версию Turbo Pascal версии 3.0. С этого времени язык Паскаль используется во всем мире в учебных заведениях в качестве первого изучаемого языка программирования.
Система Pascal ABC основана на языке Delphi Pascal и призвана осуществить постепенный переход от простейших программ к объектно-ориентированному программированию.
Заполнить массивы можно с помощью оператора присваивания. Этот способ заполнения элементов массива удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой рекуррентным соотношением.
Пример. Заполнить одномерный массив элементами, отвечающими следующему соотношению:
a1=1; a2=1; ai=ai-2+ai-1 (i = 3, 4, ..., 20).
A[1]:= 1; A[2]:= 1;
For i := 3 to 20 do A[i] := A[i-1] + A[i-2];
Заполнить двумерный массив элементами таблицы умножения.
For i := 1 to 10 do
For j := 1 to 10 do A[i,j] := i*j;
Другой вариант присваивания значений элементам массива с помощью их ввода клавиатуры.
Пример. Заполнить одномерный массив 20 целыми числами, используя ввод их с клавиатуры, а затем распечатывает их в обратном порядке.
Program M1;
Var A : Array [1..20] Of Integer; i : Integer;
Begin
For i:=1 to 20 do Begin
Write('Введите A[', i, '] ');
Readln(A[i]); {значениям индексов и вводим A[i] с клавиатуры }
For i:=20 downto 1 do Write(A[i],' ') {Распечатываем массив в обратном порядке}
End.
Еще один вариант присваивания значений элементам массива - с помощью датчика случайных чисел. В языке Паскаль случайные числа формирует функция Random. Числа получаются дробными, равномерно расположенными в интервале от 0 до 1. Выражение, дающее целое случайное число в интервале [-n,n] будет выглядеть так: Trunc(Random*n+1)-n.
Пример. Заполнить и вывести на печать одномерный массив из 40 чисел с помощью датчика случайных чисел из интервала [-50,50].
Program M2;
Const n=40; {Константа n - количество элементов массива}
Var A : Array [1..n] of Integer; i : Integer;
Begin
For i:=1 to n do Begin A[i]:= Trunc(Random*101)-50;
{заполнение массива случайными числами из интервала [-50,50]}
Write(A[i],' ') { вывод элементов массива в строку через пробел}
End
End.
Пример. Заполнить и вывести на печать двумерный массив с помощью датчика случайных чисел из интервала [0,1].
Program M3;
Const max=5;
Var a: array [1..max, 1..max] of real; i,j:byte;
Begin
For i:=1 to max do
For j:=1 to max do Begin
a[i,j]:=Random;
Writeln(‘a[‘,i,’,’,j,’]=’,a[i,
End
End.
9. Реализация алгоритмов с массивами
Над элементами массивами чаще всего выполняются такие действия, как
поиск, подсчет, перестановка, вставка, удаление элементов в массиве, удовлетворяющих заданному условию, сортировка элементов в порядке возрастания или убывания;
Сумму элементов массива можно подсчитать по формуле s=s+a[i] первоначально задав s=0. Количество элементов массива можно подсчитать по формуле к=к+1, первоначально задав к=0. Произведение элементов массива можно подсчитать по формуле p=p*a[i], первоначально задав p=1. При работе с элементами массива часто приходится изменять значения некоторых элементов, а так же переставлять элементы в массиве. При перестановке необходимо вводить дополнительную переменную.
Рассмотрим фрагменты программ, реализующих поиск элементов с заданными свойствами:
For i:=1 to 10 do If a[i] mod 2=0 then write(a[i],' ');
For i:=1 to 10 do If i mod 2<>0 then write(a[i],' ');
k:=0; For i:=1 to 10 do If a[i]=0 then k:=k+1;
s:=0; i:=1;
While a[i]>=0 do Begin
s:=s+a[i]; i:=i+1;
End;
max :=a[1]; i_max:=1;
For i :=1 to 5 do
If a [i] > max then Begin
max :=a [i];
i_max :=i;
End;
Рассмотрим фрагменты программ, реализующих замену, перестановку, вставку, удаление элементов в массиве.
For i:=1 to n do If a[i]>0 then a[i]:=1 else if a[i]<0 then a[i]:=0;
k:=0;
For i:=n downto 1 do
If a[i]=0 then Вegin
For j:=n+k downto i+1 do
a[j+1]:=a[j];
a[i+1]:=x;
k:=к+1; Еnd;
k:=0;
For i:=n downto 1 do
If a[i]<0 then Вegin
For j:=i to n-1 do a[j]:=a[j+1];
a[n]:=0; k:=к+1;
Еnd;
max:=a[1]; {присвоение максимуму значения первого элемента}
i_max:=1; {присвоение номеру максимального элемента 1}
For i:=1 to n do сравнение всех элементов с максимумом}
If a[i]>max then Вegin
max:=a[i]; {запоминаем значение максимального элемента}
i_max:=i; {запоминаем номер максимального элемента}
Еnd;
min:=a[i]; i_min:=i;
For i:=1 to n do {поиск минимального элемента}
If a[i]<min then Вegin
min:=a[i];
i_min:=i;
Еnd; {конец поиска минимального элемента}
x:=a[i_max];{перестановка минимального и максимального элементов}
a[i_max]:=a[i_min];
a[i_min]:=x;
Сортировка массивов
При решении задачи сортировки обычно выдвигается требование минимального использования дополнительной памяти, из которого вытекает недопустимость применения дополнительных массивов. Для оценки быстродействия алгоритмов различных методов сортировки, как правило, используют два показателя: количество присваиваний, количество сравнений. Все методы сортировки можно разделить на две большие группы: прямые методы сортировки, улучшенные методы сортировки. Прямые методы сортировки в свою очередь разделяются на три подгруппы:
1) сортировка вставкой (включением);
2) сортировка выбором (выделением);
3) сортировка обменом (так называемая "пузырьковая" сортировка).
Улучшенные методы сортировки основываются на тех же принципах, что и прямые, но используют некоторые оригинальные идеи для ускорения процесса.
Сортировка простым включением: элементы массива просматриваются по одному, и каждый элемент вставляется в подходящее место, среди ранее упорядоченных.
Program Work_1;
Var a: array[1..10] of integer;
Var i,d,j:integer;
Begin
For i:=1 to 10 do Read(a[i]);
For j:=2 to 10 do
Begin
i:=j-1;
d:=a[j];
While (i>0) and (d<a[i]) do
Begin
a[i+1]:=a[i];
i:=i-1;
End;
a[i+1]:=d;
End;
For i:=1 to 12 do Write(a[i],' ');
End.
Сортировка простым выбором: Выбирается элемент с наименьшей величиной и меняется местами с первым. Затем эти операции повторяются с оставшимися элементами без первого пока не останется только один элемент - наибольший.
Program Work_2;
Var a: array[1..10] of integer;
Var i,k,x,j,n:integer;
Begin
For i:=1 to 10 do read(a[i]);
For i:=1 to 9 do Begin
k:=i; x:=a[I];
For j:=i+1 to 10 do
If x<a[j] then Begin
x:=a[j]; k:=j;
End;
a[k]:=a[i]; a[i]:=x
End;
For i:=1 to 10 do Write(a[i],' ');
End.
Сортировка простым обменом (метод “пузырька”): Если два элемента массива расположены не по порядку, то они меняются местами. Процесс повторяется до тех пор, пока элементы не будут упорядочены.
Program Work_3;
Var a: array[1..10] of integer;
Var i,k,x,j,n:integer;
Begin
For i:=1 to 10 do Read(a[i]);
For i:=2 to 10 do Begin
For j:=10 downto i do
If a[j-1]>a[j] then Begin
x:=a[j-1]; a[j-1]:=a[j];a[j]:=x;
End;
End;
For i:=1 to 10 do Write(a[i],' ');
End.
Задания для практической работы.
Составить программы на языке Pascal.
исходный массив - а[1],а[2],а[3],а[4],а[5]
итоговый - а[5],а[4],а[3],а[2],а[1]
10. Обработка символьной и строковой информации
Символьный тип Char - это тип данных, предназначенный для описания одного символа: буквы, цифры, знака или кода. В памяти компьютера переменная типа Char занимает 1 байт. Символьные переменные в языке Pascal задаются следующим образом: Var <идентификатор>:char;
Значения символьных переменных обычно заключаются в апострофы, например: ’A’,’+’, ’;’, ’W’. Однако они могут записываться с помощью знака решетки (#) и кода таблицы ASCII, например #67 соответствует символу ‘C’.
Пример.
Var Mv, kv, nv, cv:char;
rc:=’Q’; nv:=#0;{пустой символ}
При работе с переменными типа Char в языке Pascal используются следующие функции:
Chr(x:byte):char; - возвращает символ, соответствующий в ASCII-таблице коду числа х;
Ord(x:char):byte; - возвращает порядковый номер в ASCII-таблице символа х;
UpCase(x:char):char: - преобразует символы из строчных латинских букв в прописные;
Pred(x:char):char: - возвращает символ, который предшествует символу х в ASCII-таблице;
Succ(x:char):char: - возвращает символ, который следует за символом х в ASCII-таблице/
Пример.
Выражение |
Результат |
Chr(60) |
’ <’ |
Ord(’1’) |
48 |
Chr(55) |
’7’ |
Pred(’9’) |
’8’ |
Succ(’5’) |
’6’ |
Символьные переменные можно сравнивать друг с другом. Большим считается тот символ, код которого больше по таблице ASCII.
Cтроковый тип данных String – структурированный тип данных, предназначенный для обработки строк. Строка - это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными. Особенностью строки в языке Pascal является то, что с ней можно работать как с массивом символов, так и с единым объектом.
Строковая константа - последовательность символов, заключенная в апострофы. Строковая переменная описывается в разделе описания переменных следующим образом:
Var <идентификатор>
: string[<максимальная длина
Пример: Var Name : string[20].
Пустая строка изображается как ’’.
Тип string и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях. Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.