Главная страница

Паскаль лекции. Лекции Паскаль. Программа на языке машинных команд (ее называют объектной). Краткое знакомство


Скачать 1.24 Mb.
НазваниеПрограмма на языке машинных команд (ее называют объектной). Краткое знакомство
АнкорПаскаль лекции
Дата14.01.2020
Размер1.24 Mb.
Формат файлаpdf
Имя файлаЛекции Паскаль.pdf
ТипПрограмма
#104006
страница3 из 7
1   2   3   4   5   6   7
Перечислимый тип данных
Этот тип данных получил название перечисляемого, потому что он задается в виде перечисления некоторых значений. Эти значения образуют упорядоченное множество и являются константами. Для объявления переменной список возможных значений, разделенных запятой, указывается в круглых скобках.
Например,
Var month(january, february, march, april, may, june, july, august, september, october, november, december);
PDF created with pdfFactory Pro trial version www.pdffactory.com

37
Порядок элементов перечисляемого типа определяется порядком их следования в описании. Левый имеет минимальное значение.
В любом порядковом типе для каждого значения, кроме первого, существует предшествующее значение, и для каждого значения, кроме последнего, существует последующее значение. В языке Паскаль имеются стандартные функции, которые позволяют определять предшествующее и последующее значения для заданного значения: функция Pred(x) определяет значение, предшествующее х; функция Ord(x) возвращает порядковый номер величины х; функция Succ(x) определяет значение, следующее за х.
К переменным перечисляемого типа можно применять операции сравнения. Так, например, februaryЗадача 3.
Вычислить значения : а) Ord(august); б) Ord(succ(september)); в) Pred(Pred(december)).
Задача 4
Имеются описания : var x,y : (winter, spring, summer, autumn); t : (cold, warm); а) Допустимы ли присваивания :x:=spring; t:=warm: t:=hot; y:=x; y:=t; б) Вычислить значения выражений : springSucc(spring);
Pred(autumn);
Ord(spring); winter<=summer; spring<>warm;
Pred(spring);
Pred(cold);
Pred(autumn) + Ord(cold); в) Допустим ли оператор цикла с заголовком : For x:=spring To autumn Do
Задача 5.
Даны описания следующих переменных :
VAR m, m1: (january, february, march, april, may, june, july, august, september, october, november, december);
PDF created with pdfFactory Pro trial version www.pdffactory.com

38
k: 1..maxint; n: 1..12;
Присвоить переменной m1: а) название месяца, следующего за месяцем m; б) название k-го месяца после месяца n.
Задача 6.
Имеются описания :
VAR d: ‘0’..’9’; k: 0..9; n: integer; а) Какие значения может принимать переменная d ? Каков ее базовый тип? Допустимы ли присваивания : d:=’7’; d:=’a’; d:=7 ? б) Какие значения может принимать переменная k ? Каков ее базовый тип
?
Допустимы ли присваивания : k:=5; k:=10; k:=-0: k:=’5’ ? в) Есть ли ошибки в операторе : if k+n>7*k then k:=abs(n) mod 10 else d:=chr(k+Ord(‘0’) ?
§13.
Вложенные циклы
Для решения задачи достаточно часто требуется использовать две и более циклические конструкции, одна из которых расположена внутри другой (других). Такие конструкции называют вложенными циклами.
Какие именно циклы при этом используются, роли не играет, они могут быть организованы посредством любых рассмотренных ранее операторов (For, While, Repeat ... Until).
Задача : Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова - 5 рублей, теленок - полтинник (0,5 рубля), при условии, что на 100 рублей надо купить 100 голов скота.
Решение : Обозначим через b- количество быков, k - количество коров, t - количество телят. После этого можно записать два уравнения:
10b+5k+0,5t=100 и b+k+t=100
Преобразуем их :
20b+10k+t=200 и b+k+t=100
На 100 рублей можно купить :
 не более 10 быков, т.е. 0<=b<=10;
 не более 20 коров, т.е. 0<=k<=20;
 не более 200 телят, т.е. 0<=t<=200;
PDF created with pdfFactory Pro trial version www.pdffactory.com

39
Таким образом получаем :
Program skot;
Var b,k,t : integer;
Begin
For b:=0 to 10 do
For k:=0 to 20 do
For t:=0 to 200 do if (20*b+10*k+t=200) and (b+k+t=100) then writeln(‘
быков ‘,b,‘ коров ’,k,’ телят ’,t); end.
Условие будет проверятся 11*21*201=46431 раз. Но задачу можно сократить на один цикл если количество телят вычислять по формуле : t=100-(b+k)
§14.
Одномерные массивы
Работа с элементами
Одномерный массив - это фиксированное количество элементов одного типа, объединенных одним именем. Каждый элемент имеет свой номер- индекс. Обращение к элементам массива осуществляется с помощью указания имени массива и номера элементов.
Пусть для решения требуется массив из 30 целых чисел.
Var mas: array [1..30] of integer;
Способы задания значений элементов массива
1)
Оператор присваивания.
А[1]:=3;
А[2]:=4; или
B[1]:=’
Иванов’;
B[2]:=’
Петров’;
PDF created with pdfFactory Pro trial version www.pdffactory.com

40
Такой способ задания значений используется, если массив небольшой.
2)
Оператором ввода с клавиатуры.
For i:=1 to 10 do begin
Writeln(‘
введите ’,i,’-ый элемент массива’);
Readln(a[i]);
{
в качестве индекса используется параметр цикла } end;
Этот способ задания значений также используется для небольших массивов.
3)
Заполнение массива с использованием генератора случайных чисел.
RANDOMIZE;
For i:=1 to 10 do a[i]:=Random(x);
…....
{
массив заполнится целыми числами в диапазоне от 0 до Х}
4)
Заполнение по формуле.
Каждый элемент массива должен быть рассчитан по формуле
(
например a i
=sin i - cos i) for i:=1 to 10 do a[i]:=sin(i)-cos(i);
Вывод массива.
For i:=1 to 10 do writeln(a[i]);
Вывод пятого элемента массива записывается так : write(a[5]);
PDF created with pdfFactory Pro trial version www.pdffactory.com

41
Алгоритмы работы с массивами
1)
Сумма элементов массива.
Program symma; var a: array [1..10] of integer; i, s : integer; begin s:=0; for i:=1 to 10 do begin readln(a[i]); s:=s+a[i]; end; writeln (‘
Сумма= ’,s); еnd.
2)
Сумма положительных чисел.
Program symma2; var a: array [1..10] of integer; i, s : integer; begin s:=0; for i:=1 to 10 do begin readln(a[i]); if a[i]>0 then s:=s+a[i]; end; writeln (‘
Сумма положительных чисел = ’,s); еnd.
3)
Сумма и количество положительных чисел.
Program symma-kol; var a: array [1..10] of integer; i, s,k : integer; begin s:=0; k:=0;
PDF created with pdfFactory Pro trial version www.pdffactory.com

42
for i:=1 to 10 do if a[i]>0 then begin k:=k+1; s:=s+a[i]; end; writeln (‘
Сумма ’,s, ‘ количество’, k); еnd.
4)
Поиск заданного элемента в массиве.
Найти элементы массива большие числа 5.
Program elem; var a: array [1..10] of integer; i : integer; begin for i:=1 to 10 do if a[i]>5 then writeln(a[i]); еnd.
5)
Поиск наибольшего (наименьшего) элемента в массиве.
Program mm; var a: array [1..10] of integer; i, max, min : integer; begin for i:=1 to 10 do readln(a[i]); max:=a[1]; min:=a[1]; for i:=1 to 10 do begin if a[i]>max Then max:=a[i]; if a[i]6)
Упорядочение массива
Упорядочение (сортировка) - это расположение значений элементов массива в порядке возрастания или убывания их значений.
Сортировка простым выбором.
Рассмотрим идею этого метода на примере. Пусть исходный массив А состоит из 10 элементов : 5 13 7 9 1 8 16 4 10 2.
После сортировки массив : 1 2 4 5 7 8 9 10 13 16
PDF created with pdfFactory Pro trial version www.pdffactory.com

43
Максимальный элемент текущей части массива заключен в кружок, а элемент, с которым происходит обмен, в квадратик.
Скобкой помечена рассматриваемая часть массива.
1 шаг Рассмотрим весь массив и найдем в нем максимальный элемент - 16. Поменяем его местами с последним элементом - с числом 2.
2 шаг. Рассмотрим часть массива, исключая последний элемент. Максимальный элемент этой части - 13, он стоит на втором месте. Поменяем его местами с последним элементом этой части - с числом 10.
И т.д.
Фрагмент программы : for i:=n downto 2 do begin {
цикл по длине рассматриваемой части массива} maxi:=i; for j:=1 to i-1 do if a[j]>a[maxi] then maxi:=j; if maxi<>i then begin {
перестановка элементов} k:=a[i]; a[i]:=a[maxi]; a[maxi]:=k end; end;
«
Пузырьковый метод»
Массив просматривают слева направо. Каждый предыдущий элемент сравнивается с последующим. Если предыдущий элемент больше последующего, то предыдущий и последующий элементы меняются местами.
Program sort1; const n=10; label metka; var a: array [1..n] of integer; i, c, k : integer; begin for i:=1 to n do readln(a[i]);
5 13 7 9 1 8 16 4 10 2 5 13 7 9 1 8 2 4 10 16
PDF created with pdfFactory Pro trial version www.pdffactory.com

44
metka: k=0; {
счетчик перестанокок} for i:=1 to n-1 do if a[i]>a[i+1] then begin c:=a[i]; a[i]:=a[i+1]; a[i+1]:=c; k:=1; end; if k=1 then goto metka else writeln(‘
упорядочен‘); for i:=1 to n do writeln(a[i]); еnd.
Тоже самое, но с использованием вложенных циклов
Program sort2; const n=10; var a: array [1..n] of integer; i, k, c : integer; begin for i:=1 to n do readln(a[i]); for i:=1 to n-1 do for k:=1 to n-i do if a[k]>a[k+1] then begin c:=a[k]; a[k]:=a[k+1]; a[k+1]:=c; end; for i:=1 to n do writeln(a[i]); еnd.
Эксперименты с программой
Дана программа замены отрицательных элементов массива на их модули: program mass; const n=30; type mas=array[1..n] of integer;
PDF created with pdfFactory Pro trial version www.pdffactory.com

45 var a : mas; i : integer; begin for i:=1 to n do {
ввод массива} begin write(‘
введите ‘,i, ‘—ый элемент массива); readln(a[i]); end; for i:=1 to n do writeln(‘a[‘,i,’]=’,a[i]); {
вывод массива} for i:=1 to n do if a[i]<0 then a[i]:=abs(a[i]); for i:=1 to n do writeln(‘a[‘,i,’]=’,a[i]); {
вывод нового массива} end.
Измените программу так, чтобы она выполняла : а) прибавить к каждому элементу массива число 25; б) если элемент четный, то прибавить к нему первый, если нечетный - последний элемент массива. Первый и последний элементы не изменять. в) найти значение максимального по модулю элемента массива; г) найти среднее арифметическое значение четных элементов.
§15.
Обработка символьных массивов.
Данные символьного типа.
Данные типа CHAR и STRING позволяют представлять в программах тексты и производить над ними некоторые операции, например, исправлять орфографические ошибки, вставлять и удалять
PDF created with pdfFactory Pro trial version www.pdffactory.com

46
отдельные буквы и слова. Кроме того, они дают возможность обрабатывать различные ведомости, документы и т.д.
Значением строковой величины может быть любая цепочка символов.
Строка - это последовательность символов кодовой таблицы персонального компьютера.
Кол-во символов в строке (длина строки) может изменяться от 0 до
255.
Константа строкового типа - это любая цепочка символов языка
Паскаль, заключенная в апострофы.
Описание строковых переменных var <
идентификатор> : string
[
максимальная длина строки];
ПРИМЕР : const adres=’
ул.Королева, 5’; var s:string; d : char; st1, st2 : string [30]
Значения строковым переменным задаются либо оператором присваивания, либо оператором readln с клавиатуры.
Операции над строковыми переменными а) Сравнения (<>,<,>, >=,<=,=) d:=’
мама’; p:=’папа’ d>p б) конкатенация (сложение) s:=’
Д’+’Артаньян’; writeln(s);
Задание : определить правильность написания операторов : var A,B,C,D,G,Z : STRING; v : integer;
PDF created with pdfFactory Pro trial version www.pdffactory.com

47 begin
A:= «
Информатика»; ошибка
B:=
Формат; ошибка
С:=’’; пустая строка
D:=25 ; ошибка
G=’25’;
Z:=’
формат; ошибка
V:=’
пример’; ошибка в) функции обработки
1. Delete(str,poz,n) - удаление из строки str, начиная с позиции poz, n символов.
Пример : str:=’
оператор’;
Delete(str,2,2) результат ‘оратор’
2. Insert(str1,str2,poz) - вставка строки str1 в строку str2, начиная с позиции poz.
Пример : str1:=’
ка’; str2:=’
Тропинка’;
Insert(str1,str2,6) результат ‘Тропиканка’
3. Length(st) - вычисляет текущую длину(количество символов) строки.
Пример : str:=’
оператор’;
Length(str) результат 8 4. Copy(st,poz,n) - из строки st, начиная с позиции poz, берутся n символов;
Пример : str:=’
стройка’;
Copy(str,2,6)
PDF created with pdfFactory Pro trial version www.pdffactory.com

48
результат ‘тройка’
5. Pos(str1,str2) - поиск подстроки str2 в строке str1 и возвращает номер позиции, с которой начинается строка str2, если подстрока не найдена, то возвращается 0.
Пример : str1:=’
абракадабра’; str2:=’брак’; pos(str1,str2) результат 2 6. Str(v,s) - заданное число v преобразуется в строку s;
7. Val(s,v,c) - если строка s состоит из цифр, они преобразуются в некоторое числовое значение и передаются переменной v.
8. Concat(s1,s2,....,sn) - строки s1,s2,....,sn записываются одна за другой.
Задача 1 : Установить : какие типы должны иметь переменные в приведенном фрагменте программы и какие значения они примут после выполнения операций. s:=’
ситуация’; st:=’
уа’; a:=Length(s+’’+st); n:=Pos(st,s); insert(st,s,6); delete(s,4,2); st:=copy(s,1,3)+copy(s,7,1);
Задача 2. Написать программу, которая из двух строковых констант «КЛАССШКОЛА» и «АБВГД№0123456789» выводит на экран 2 строки, содержащие номер школы и литеру класса, определяет длину полученных строк.
НАПРИМЕР : ШКОЛА №7
КЛАСС 9Б program z2; const a=’
КЛАССШКОЛА’; b=’
АБВГД№0123456789’;
PDF created with pdfFactory Pro trial version www.pdffactory.com

49 var s1,s2 : string; begin s1:=copy(a,6,5)+’’+ copy(b,6,1)+ copy(b,14,1) s2:= copy(a,1,5)+’’+ copy(b,length(b),1)+ copy(b,2,1) writeln(s1,s2); end.
Символы имеют коды от 0 до 255.
ORD(w) - возвращает код символа w.
CHR(i) - определяет символ с кодом i.
Задача 1. Дана строка символов. Вывести символы строки в столбец.
Program xx; var st:string; i:integer; begin for i:=1 to length(st) do writeln(st[i]); end.
Задача 2. Вывести символы и соответствующие им коды.
Переменная k используется в качестве счетчика для организации последовательного вывода по 15 символов.
Program kod; var i, k : integer; begin writeln(‘
Вывод порядковых номеров (кодов) символов - значение переменной i и самих символов’); for i:=1 to 255 do begin write(i:4,’ символ’,chr(i)); inc(k); if k=15 then begin writeln; k:=0 end end; end.
Задача 3: Вывести символы в виде :
A
PDF created with pdfFactory Pro trial version www.pdffactory.com

50
BB
CCC
WWW...WWW (23 раза) program vv; var i:char; j:integer; begin for i:=’A’ to ‘W’ do begin for j:=1 to Ord(i)-Ord(‘A’)+1 do write(i); writeln; end; end.
Задача 4. Удалить среднюю букву строки при нечетной длине и две средние буквы при четной длине строки.
Program rr; var st:string; k:integer; begin k:=length(st); if k mod 2=1 then delete(st, k div 2+1,1) else delete(st, k div 2,2) end.
§16.
Двумерные массивы
Работа с элементами
В математике часто используют многомерные массивы
(
двумерные, трехмерные и т.д.). Мы рассмотрим двумерные массивы, иначе называемые матрицами.
Например : 5 4 3 6 2 8 1 7 4 3 9 5
Данная матрица имеет размер 3 на 4, т.е. она состоит из трех строк и четырех столбцов. Если всю матрицу обозначить одним именем,
PDF created with pdfFactory Pro trial version www.pdffactory.com

51 например А, то каждый элемент матрицы будет иметь два индекса -
А[i,j]
Здесь первый индекс i обозначает номер строки (i=1,2,3), второй индекс j - номер столбца (j=1,2,3,4).
Такую матрицу можно описать следующим образом :
1 способ :С использованием типа
Type T=array [1..3,1..4] of integer;
Var A: T;
2 способ :
Var A: array [1..3,1..4] of integer;
При решении задач с использованием двумерных массивов во всех случаях (кроме некоторых частных) организуются вложенный циклы.
Перемещение по строке : for i:=1 to m do {
внешний цикл, изменяется номер строки} for j:=1 to n do {
внутренний цикл, изменяется номер столбца}
Перемещение по столбцу : for j:=1 to n do {
внешний цикл, изменяется номер столбца} for i:=1 to m do {
внутренний цикл, изменяется номер строки}
Перечислим базовые алгоритмы и рассмотрим каждый из них.
1.
Заполнение двумерного массива : а) по строке; б) по столбцу
2.
Печать в виде таблицы.
3.
Вычисление суммы элементов каждой строки и каждого столбца.
4.
Поиск максимального (минимального) элементов каждой строки
(
столбца) и их индексов.
5.
Сумма элементов массива.
6.
Максимальный (минимальный) элемент массива.
Ввод (заполнение) элементов двумерного массива (матрицы)
For i:=1 to n do
PDF created with pdfFactory Pro trial version www.pdffactory.com

52
For j:=1 to m do
Readln(A[i,j]);
1.
Заполнение двумерного массива по строке.
Массив содержит 3 строки и 4 столбца, т.е. 3х4=12 элементов
For i:=1 to 3 do
For j:=1 to 4 do a[i,j]:=random(100)
;
2.
Заполнение двумерного массива по столбцу :
For j:=1 to 4 do
For i:=1 to 3 do a[i,j]:=random(100);
3.
Печать содержимого на экран :
For i:=1 to n do begin
For j:=1 to m do
Write (A[i,j]); {
Вывод элементов одной строки матрицы}
Writeln; { переход на следующую строку экрана} end; где
А - имя массива; i - индекс строки; j - индекс столбца; n - количество элементов в строке; m - количество элементов в столбце.
4.
Вычисление суммы элементов каждой строки, столбца.
Дана квадратная матрица NxN, содержащая вещественные числа.
Найти сумму элементов первого столбца.
Program pr2; а
11
а
12
а
13
а
14
а
21
а
11
а
12
а
21
а
31
PDF created with pdfFactory Pro trial version www.pdffactory.com

53
CONST N=3;
TYPE MAS=array [1..N,1..N] of real;
Var a: MAS; i: 1..3; j : 1..3; s:real;
1   2   3   4   5   6   7


написать администратору сайта