Файл: 1. Лекции Паскаль (Часть 1).doc

Добавлен: 19.10.2018

Просмотров: 4456

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Оглавление

1.Стандартные типы данных

1.1.Структура программы

1.2.Описание стандартных типов данных

Целый тип

Вещественный тип

Символьный тип

Булевский тип

Перечисляемый тип

1.3.Выражения

Лабораторная работа №1

Вычисление выражений с использованием стандартных функций

Лабораторная работа № 1.

Вычисление выражений с использованием стандартных функций.

Постановка задачи

Описание используемых стандартных функций.

Программы № 15.а

Программы № 15.б

Варианты заданий

2. Операторы языка.

2.1. Составной и пустой операторы.

2.2.Условный оператор.

2.3.Операторы повторений.

2.4.Оператор выбора

2.5.Практические задания.

Лабораторная работа № 2

Решение уравнений и неравенств с использованием условного оператора.

Лабораторная работа № 2, вариант № 8.

Решение уравнений и неравенств с использованием условного оператора.

Варианты заданий

Лабораторная работа № 3.

Построение таблиц функций.

Лабораторная работа № 3, вариант № 8.

Построение таблиц функций.

Варианты заданий

Лабораторная работа № 4.

Организация циклов в программе.

Лабораторная работа № 4, вариант № 8.

Организация циклов в программе.

Варианты заданий

3.Численные методы.

3.1.Метод итераций

3.2.Метод Ньютона

3.3. Метод половинного деления.

Лабораторная работа № 5

Решение нелинейных уравнений.

Лабораторная работа № 5, вариант № 3.

Решение нелинейных уравнений методом итераций.

Описание метода итераций:

Текст программы.

Распечатка результатов работы программы в следующем виде:

Лабораторная работа № 5, вариант № 3.

Решение нелинейных уравнений методом Ньютона.

Описание метода Ньютона:

Блок-схема метода Ньютона:

Текст программы.

Распечатка результатов работы программы в следующем виде:

Лабораторная работа № 5, вариант № 3.

Решение нелинейных уравнений методом половинного деления.

Описание метода половинного деления:

Блок-схема метода половинного деления:

Текст программы.

Распечатка результатов работы программы в следующем виде:

Метод Монте-Карло (метод статистических испытаний)

5. Массивы.

5.1. Процедуры и функции.

5.2. Одномерные массивы.

5.2.1. Описание массивов.

5.2.2. Классы задач по обработке массивов.

5.2.2.1. Однотипная обработка всех или указанных элементов массивов.

5.2.2.2. Задачи, в результате решения которых изменяется структура массива.

5.2.2.3. Обработка нескольких массивов одновременно.

5.2.2.4. Поисковые задачи для массивов.

5.2.2.5. Сортировка массивов.

5.2.2.5.1. Сортировка вставкой

5.2.2.5.2. Сортировка выбором

5.2.2.5.3. Сортировка обменом («пузырьковая сортировка»)

5.2.2.5.4. Сортировка фон Неймана (слиянием)

5.2.2.5.5. Шейкер-сортировка

5.3. Двумерные массивы.

5.3.1. Описание двумерных массивов.

5.3.2. Сортировка двумерных массивов

Лабораторная работа № 4.

Работа с массивами чисел.

Образец выполнения задания.

Лабораторная работа № 4.

Работа с массивами чисел.

Варианты заданий.

6. Обработка строк.

6.1. Функции обработки строк.

6.2. Процедуры обработки строк.

Лабораторная работа № 7.

Обработка строк.

Лабораторная работа № 7, вариант № 8.

Обработка строк.

7. Комбинированные типы. Оператор присоединения

7.1. Записи

7.2. Оператор присоединения

Лабораторная работа № 8.

Работа с комбинированными типами данных.

Лабораторная работа № 8, вариант № 8.

Работа с комбинированными типами данных.

8. Множественные типы данных.

8.1. Множества.

Лабораторная работа № 9.

Работа с множественными типами данных.

Лабораторная работа № 9, вариант № 3.

Работа с множественными типами данных.

Варианты заданий.

Лабораторная работа № 10.

Операции над множествами.

Лабораторная работа № 10.

Операции над множествами.

Варианты заданий.

uses crt;

const n=4;

var mas:array[1..n,1..n]of integer;

min,buf,l,l1,i,j,i1,j1,a,c:integer;

procedure print;

begin

for i:=1 to n do

begin

for j:=1 to n do

write(' ',mas[i,j],' ');

writeln;

end;

writeln;writeln('Ќ ¦¬ЁвҐ Enter ¤«п Їа®¤®«¦Ґ­Ёп !');

readln;

end;

begin

clrscr;

for i:=1 to n do

for j:=1 to n do

mas[i,j]:=round(random*9);

print;

a:=1;c:=1;i:=1;j:=1;

for l:=1 to (n*n) do

begin

min:=mas[a,c];i:=a;j:=c;i1:=a;j1:=c;

for l1:=1 to (n*n+1)-l do

begin

if min>mas[i1,j1] then begin min:=mas[i1,j1];i:=i1;j:=j1;end;

j1:=j1+1;if j1=(n+1) then begin j1:=1;i1:=i1+1;end;

end;

buf:=mas[i,j];

mas[i,j]:=mas[a,c];

mas[a,c]:=buf;

c:=c+1;if c=(n+1) then begin c:=1;a:=a+1;end;

end;

print;

end.

Результаты работы:

0 0 8 2

2 6 3 1

3 4 1 4

1 8 1 3


Нажмите Enter для продолжения !


0 0 1 1

1 1 2 2

3 3 3 4

4 6 8 8


Нажмите Enter для продолжения !




program sor4;

uses crt;

const n=4;

type mas=array[1..n,1..n]of integer;

var mas1,mas2:mas;

mas3:array[1..2*n,1..n]of integer;

buf,i,j,i1,j1,a,c:integer;

procedure next(t:integer);

begin

if t=1 then begin

j:=j+1;if j=n+1 then begin j:=1;i:=i+1;end;

end;

if t=2 then begin

j1:=j1+1;if j1=n+1 then begin j1:=1;i1:=i1+1;end;

end;

if t=3 then begin

c:=c+1;if c=n+1 then begin c:=1;a:=a+1;end;

end;

end;

procedure print(pr:mas);

begin

for a:=1 to n do

begin

for c:=1 to n do

write(' ',pr[a,c],' ');

writeln;

end;

writeln;writeln('Ќ ¦¬ЁвҐ Enter ¤«п Їа®¤®«¦Ґ­Ёп !');

readln;

end;

begin

clrscr;

buf:=10;

for a:=1 to n do

for c:=1 to n do

begin

mas1[a,c]:=buf;

buf:=buf+1;

mas2[a,c]:=buf;

buf:=buf+1;

end;

print(mas1);print(mas2);

a:=1;c:=1;i:=1;j:=1;i1:=1;j1:=1;

while (i<>n+1)and(i1<>n+1) do

begin

if mas1[i,j]<mas2[i1,j1] then begin mas3[a,c]:=mas1[i,j];next(1);end

else begin mas3[a,c]:=mas2[i1,j1];next(2);end;

next(3);

end;

if i=n+1 then while not(i1=n+1)do

begin

mas3[a,c]:=mas2[i1,j1];

next(3);next(2);

end;

if i1=n+1 then while not(i=n+1)do

begin

mas3[a,c]:=mas2[i,j];

next(3);next(1);

end;

for a:=1 to n*2 do

begin

for c:=1 to n do

write(' ',mas3[a,c],' ');

writeln;

end;

writeln;writeln('Ќ ¦¬ЁвҐ Enter ¤«п Їа®¤®«¦Ґ­Ёп !');

readln;

end.

Результаты работы:

10 12 14 16

18 20 22 24

26 28 30 32

34 36 38 40


Нажмите Enter для продолжения !


11 13 15 17

19 21 23 25

27 29 31 33

35 37 39 41


Нажмите Enter для продолжения !


10 11 12 13

14 15 16 17

18 19 20 21

22 23 24 25

26 27 28 29

30 31 32 33

34 35 36 37

38 39 40 41


Нажмите Enter для продолжения !


Лабораторная работа № 4.

Работа с массивами чисел.

Цель задания:
  1. Получение практических навыков при работе с массивами.

  2. Знакомство с алгоритмами упорядочения.

Постановка задачи:
  1. Написать программу, которая для введенного числа N формирует двумерный массив заданного в варианте вида. В задании дан массив для N = 4.

  2. Выполнить конкретное задание. Программа должна работать с массивами для любого N.

Содержание отчета:
  1. Постановка задачи для конкретного варианта.

  2. Текст программы.

  3. Результаты тестов.

  4. Распечатка результатов работы программы.

Образец выполнения задания.

Лабораторная работа № 4.

Работа с массивами чисел.

Постановка задачи:

Написать программу, которая для введенного числа N формирует двумерный массив заданного в варианте вида. В задании дан массив для N = 4.

Выполнить конкретное задание. Программа должна работать с массивами для любого N.

Вид массива:

Полученный массив напечатать.

Найти количество чисел, входящих в массив больше одного раза. Результат напечатать.


Печать и задание оформить в виде процедур.


Текст программы:

program 2D_Array;

uses crt;

label sle;

const n=4;

par=(n*4);

type matriz=array[1..n,1..n] of integer;

var i,j,i1,j1,kol,kolo,l,k:integer;

mas:matriz;

im:array[1..par] of integer;

procedure vvod(var vmas:matriz);

begin

clrscr;

writeln('Вводим элементы массива , размерность [',n,',',n,']');

for i:=1 to n do

for j:=1 to n do

begin

write('Введите элемент [',i,',',j,']=');

readln(vmas[i,j]);

end;

end;

procedure print(vmas:matriz);

begin

writeln('Ваш массив имеет вид.');

for i:=1 to n do

begin

for j:=1 to n do

begin

write(' ',vmas[i,j],' ');

end;

writeln;

end;

end;

begin

vvod(mas);

print(mas);

for i:=1 to par do im[i]:=0;

k:=1;

kolo:=0;

for i:=1 to n do

for j:=1 to n do

begin

for l:=1 to par do if im[l]=mas[i,j] then goto sle;

kol:=0;

for i1:=1 to n do for j1:=1 to n do if mas[i,j]=mas[i1,j1] then kol:=kol+1;

if kol>1 then

begin

kolo:=kolo+kol;

im[k]:=mas[i,j];

k:=k+1;

end;

sle:end;

writeln('Количество чисел, входящих в массив больше одного раза(без нулей) =',kolo);

writeln('Программа закончена , нажмите Enter.');

readln;

end.

Результаты работы:

Ваш массив имеет вид.

0 0 0 4

0 0 3 4

0 2 3 4

1 2 3 4

Количество чисел, входящих в массив больше одного раза (без нулей) =9

Программа закончена, нажмите Enter.



Варианты заданий.

1) Вид массива:

Полученный массив напечатать.

Найти суммы чисел в первом и последнем столбцах и сравнить их.

Вывести результаты на печать с соответствующим сообщением.

Задания и печать оформить в виде процедур (функций).

2) Вид массива:

Полученный массив напечатать.

Сравнить сумму произведений элементов строк и произведение сумм элементов столбцов и напечатать с соответствующими сообщениями.

Печать и задания оформить в виде процедур (функций).

3) Вид массива:

Полученный массив напечатать.

Найти максимальный элемент среди элементов, сумма индексов которых нечетна. Результат вывести на печать.

Задания и печать оформить в виде процедур или функций.

4) Вид массива:

Полученный массив напечатать.

Упорядочить массив по убыванию элементов в каждом столбце. Результат напечатать.

Печать и задания оформить в виде процедур.

5) Вид массива:

Полученный массив напечатать.

Упорядочить массив по возрастанию элементов в каждой строке.

Печать и задание оформить в виде процедур (функций).

6) Вид массива:

Полученный массив напечатать.

Найти произведение индексов элементов в первой строке, а затем в последней, и сравнить их. Результаты напечатать с соответствующими заголовками.

Печать и задание оформить в виде процедур.

7) Вид массива:

Полученный массив напечатать.

Найти количество чисел, входящих в массив только один раз. Результат напечатать.

Печать и задание оформить в виде процедур (функций).

8) Вид массива:

Полученный массив напечатать.

Найти сумму максимального и минимального элементов. Полученное значение увеличить на 10. Результат напечатать.

Печать и задание оформить в виде процедур.


9) Вид массива:

Полученный массив напечатать.

В каждой строке найти наибольший элемент, затем получить их сумму. Результат напечатать.

Печать и задание оформить в виде процедур.

10) Вид массива:

Полученный массив напечатать.

Выяснить, есть ли в массиве хотя бы одна пара совпадающих по величине чисел. Результат напечатать.

Печать и задание оформить в виде процедур.

11)Вид массива:

Полученный массив напечатать.

В каждом столбце найти наименьший элемент, затем найти их произведение. Результат напечатать.

Печать и задание оформить в виде процедур (функций).

12) Вид массива:

Полученный массив напечатать.

Переставить элементы массива так, чтобы все нули оказались в конце. Преобразованный массив напечатать.

Печать и задание оформить в виде процедур.

13) Вид массива:

Полученный массив напечатать.

Найти произведение последних элементов строк. Результат напечатать.

Печать и задание оформить в виде процедур (функций).

14) Вид массива:

Полученный массив напечатать.

Найти сумму элементов, расположенных ниже главной диагонали, и количество элементов, расположенных выше главной диагонали. Результаты напечатать.

Печать и задание оформить в виде процедур (функций).

15) Вид массива:

Полученный массив напечатать.

Перевернуть строку, содержащую максимальное число нулей, и столбец, содержащий минимальное число нулей. Преобразованный массив напечатать.

Печать и задание оформить в виде процедур.

16) Вид массива:

Полученный массив напечатать.

Найти сумму элементов, расположенных на главной диагонали в строках, начинающихся с нуля. Результат напечатать.

Печать и задание оформить в виде процедур.

17) Вид массива:

Полученный массив напечатать.

Упорядочить элементы, находящиеся выше главной диагонали, по убыванию. Преобразованный массив напечатать.

Печать и задание оформить в виде процедур.

18) Вид массива:

Полученный массив напечатать.

Перевернуть все четные строки массива. Преобразованный массив напечатать.

Печать и задание оформить в виде процедур.

19) Вид массива:

Полученный массив напечатать.

Переставить элементы массива так, чтобы нули в каждой строке стояли в конце. Преобразованный массив напечатать.

Печать и задание оформить в виде процедур.

20) Вид массива:

Полученный массив напечатать.

Перевернуть все нечетные столбцы массива. Преобразованный массив напечатать.

Печать и задание оформить в виде процедур.

21) Вид массива:

Полученный массив напечатать.

Найти строку, содержащую минимальный элемент, и упорядочить ее по убыванию элементов. Результат напечатать.

Печать и задание оформить в виде процедур.

22) Вид массива:

Полученный массив напечатать.

Найти третий по величине элемент массива. Результат напечатать.

Печать и задание оформить в виде процедур (функций).

23) Вид массива:


Полученный массив напечатать.

Поставить последнюю строку массива на первое место, не меняя порядок остальных. Результат напечатать.

Печать и задание оформить в виде процедур.

24) Вид массива:

Полученный массив напечатать.

Поставить последний столбец на первое место, не меняя порядок остальных. Результат напечатать.

Печать и задание оформить в виде процедур.


6. Обработка строк.

Для обработки текстовых данных используется строковой тип данных String. Строка –это последовательность символов из кодовой таблицы, заключённая в апострофы. Каждая строка характеризуется своей текущей длинною ( количеством символов, имеющихся в строке в данный момент), порядком расположения символов. По умолчанию для строк определена максимальная длинна, равная 255 символам, но её можно изменить, указав при описании: string [ число символов ]. Если строка длиннее максимальной длинны, то не поместившиеся символы отбрасываются

Символьным константам можно присваивать имена.

Const st=’строка’;

Символьные переменные описываются в разделе описания переменных с описателем String.

Var st1,st2:string[10];

st3:string;

begin

st1:=’строка’;

end.

К любому символу в строке можно обратится точно так же, как к элементу одномерного массива, т.е. указав имя строки и индекс символа в этой строке.

Например:st[3]=’р’. При этом для элемента строки разрешены те же операции и функции, что и для типа char.

Строки выводятся и вводятся с помощью операторов read, readln, write, writeln без организации циклов.

Над строками выполняется операция сцепления, которая позволяет соединить две или более строк в одну без разделителей.

Пример:st1:=’Кро’;

st2:=’ил’;

st3:=st1+’код’+st2;

Результат:st3=’Крокодил’;


Над строками выполняются операции сравнения:

= , < , > , <= , >= , <>. Строки сравниваются посимвольно слева направо до первого результата или до исчерпания символов строки.


Например: ’азбука’=’азбука’, т.к. все символы поэлементно совпадают.


Например: ’школа’<’школьник’. Результат сравнения (true) , т.к.


ш’=’ш’, ’к’=’к’, ’о’=’о’, ’л’=’л’, ’а’<’ь’ (символ ‘а’ расположен в кодовой таблице раньше символа ‘ь’).



6.1. Функции обработки строк.

Сцеплениеconcat(строка1, строка2,….), Аналогична операции сцепления.

Пример: Исходные данные: a=’код’, b=’ил’.

Оператор: s:=concat(‘кро’,a,b).

Результат: s=’крокодил’.


Копироватьcopy(строка, число1, число2). Из указанной строки выделяется подстрока, начиная с позиции, заданной числом1, длиной, заданной числом2.

Пример: Исходные данные: s=’крокодил’.

Оператор: b:=copy(s,2,3).

Результат: b=’рок’.


Позиция - Pos(строка1, строка2). Отыскивает первое вхождение строки1 в строке2 и возвращает номер начальной позиции вхождения или ноль, если строка1 не входит в строку2.

Пример: Исходные данные: s=’крокодил’.

Оператор: i:=pos(‘око’,s).

Результат: i=3.

Оператор: i:=pos(‘я’,’крокодил’).


Результат: i=0.


Длина - length(строка). Возвращает длину строки – аргумента.

Пример: Исходные данные: s=’крокодил’.

Оператор: j:=length(s).

Результат: j=8.

6.2. Процедуры обработки строк.

Вставитьinsert(строка1, строка2, число). Вставляет строку1 в строку2, начиная с позиции, заданной числом. Если в результате получается строка длины больше максимальной, то она усекается справа.

Пример: Исходные данные: S=’крокодил’.

Оператор: d:=copy(s,3,3).

Результат: d=’око’.

Оператор: insert(‘h’,d,3).

Результат: d=’окно’.


Удалитьdelete(строка, число1, число2). Удаляет из строки подстроку, начиная с позиции, заданной числом1, длиною, заданной числом2. Если число1 больше размера строки, то подстрока не удаляется. Если число2 больше имевшегося количества, то удаляются символы до конца строки.

Пример: Исходные данные: S=’крокодил’.

Оператор: delete(s,4,3).

Результат: =’кроил’.

Оператор: delete(s,1,1).

Результат: s=’роил’.


Преобразовать число в строкуstr(число[:M[:N]],строка). Преобразует число в строку. M задаёт общее количество символов, получаемых в строке, N – для вещественных чисел (типа real) задаёт количество цифр в дробной части.

Пример:

Оператор: str(123,s).

Результат: s=’123’.


Преобразовать строку в числоval(строка, число, код). Преобразует строку символов во внутреннее представления числа. Код указывает номер неправильного символа или равен 0 в случае успешного преобразования.

Пример:

Оператор: val(‘+12.3’,v,k).

Результат: v=12.3, k=0 {преобразование прошло успешно}

Оператор: val(‘23+5’,v,k).

Результат: v=неправильно, k=3 {ошибка при попытке преобразовать третий символ}



Лабораторная работа № 7.

Обработка строк.

Цель задания:
  1. Получение практических навыков в работе со строками.

  2. Знакомство с задачами, для решения которых используются строковые типы данных и, функции и процедуры по их обработке.

Постановка задачи:
  1. Для решения конкретного варианта составить программу.

  2. Вывести на печать результат выполнения программы.

Содержание отчета:
  1. Постановка задачи для конкретного варианта.

  2. Текст программы.

  3. Результаты выполнения программы.


Образец выполнения задания.

Лабораторная работа № 7, вариант № 8.

Обработка строк.

Постановка задачи для конкретного варианта:

Задана строка, состоящая из слов, разделённых одним или несколькими пробелами. Удалить повторные вхождения каждого слова.

Выделяем слова, переписываем их в первую строку двумерного массива, во вторую записываем ‘0’ для уникального слова и ‘1’- для повторяющегося слова. Затем формируем строку, состоящую из элементов первой строки массива, у которых во второй строке записано '0‘ и распечатываем строку.



Текст программы:


program lab7{вариант № 8};

const nn=10;

type mas=array [1..2,1..nn] of string;

var a:mas;

n:integer;

s,ss:string; {исходная и вспомогательная строки}

i, j, k:integer;

begin

write(‘Введите строку : ’);readln(s);

s:=s+’ ’;

j:=0; ss:=’ ’;

for i:=1 to length(s)-1 do