ВУЗ: Пермский национальный исследовательский политехнический университет
Категория: Лекция
Дисциплина: Программирование
Добавлен: 19.10.2018
Просмотров: 5057
Скачиваний: 11
СОДЕРЖАНИЕ
1.2.Описание стандартных типов данных
Вычисление выражений с использованием стандартных функций
Вычисление выражений с использованием стандартных функций.
Описание используемых стандартных функций.
2.1. Составной и пустой операторы.
Решение уравнений и неравенств с использованием условного оператора.
Лабораторная работа № 2, вариант № 8.
Решение уравнений и неравенств с использованием условного оператора.
Лабораторная работа № 3, вариант № 8.
Организация циклов в программе.
Лабораторная работа № 4, вариант № 8.
Организация циклов в программе.
3.3. Метод половинного деления.
Лабораторная работа № 5, вариант № 3.
Решение нелинейных уравнений методом итераций.
Распечатка результатов работы программы в следующем виде:
Лабораторная работа № 5, вариант № 3.
Решение нелинейных уравнений методом Ньютона.
Распечатка результатов работы программы в следующем виде:
Лабораторная работа № 5, вариант № 3.
Решение нелинейных уравнений методом половинного деления.
Описание метода половинного деления:
Блок-схема метода половинного деления:
Распечатка результатов работы программы в следующем виде:
Метод Монте-Карло (метод статистических испытаний)
5.2.2. Классы задач по обработке массивов.
5.2.2.1. Однотипная обработка всех или указанных элементов массивов.
5.2.2.2. Задачи, в результате решения которых изменяется структура массива.
5.2.2.3. Обработка нескольких массивов одновременно.
5.2.2.4. Поисковые задачи для массивов.
5.2.2.5.1. Сортировка вставкой
5.2.2.5.3. Сортировка обменом («пузырьковая сортировка»)
5.2.2.5.4. Сортировка фон Неймана (слиянием)
5.3.1. Описание двумерных массивов.
5.3.2. Сортировка двумерных массивов
6.2. Процедуры обработки строк.
Лабораторная работа № 7, вариант № 8.
7. Комбинированные типы. Оператор присоединения
Работа с комбинированными типами данных.
Лабораторная работа № 8, вариант № 8.
Работа с комбинированными типами данных.
Работа с множественными типами данных.
Лабораторная работа № 9, вариант № 3.
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.
Работа с массивами чисел.
Цель задания:
-
Получение практических навыков при работе с массивами.
-
Знакомство с алгоритмами упорядочения.
Постановка задачи:
-
Написать программу, которая для введенного числа N формирует двумерный массив заданного в варианте вида. В задании дан массив для N = 4.
-
Выполнить конкретное задание. Программа должна работать с массивами для любого N.
Содержание отчета:
-
Постановка задачи для конкретного варианта.
-
Текст программы.
-
Результаты тестов.
-
Распечатка результатов работы программы.
Образец выполнения задания.
Лабораторная работа № 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.
Обработка строк.
Цель задания:
-
Получение практических навыков в работе со строками.
-
Знакомство с задачами, для решения которых используются строковые типы данных и, функции и процедуры по их обработке.
Постановка задачи:
-
Для решения конкретного варианта составить программу.
-
Вывести на печать результат выполнения программы.
Содержание отчета:
-
Постановка задачи для конкретного варианта.
-
Текст программы.
-
Результаты выполнения программы.
Образец выполнения задания.
Лабораторная работа № 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