Необходимые сведения
Правила описания массивов, операции с массивами.
Варианты заданий:
Имеются описания:
Type day = (yesterday, today, tomorrow);
vector = Array [1..30] of Real;
Var A: vector;
B: Array [– 2..2] of Integer;
C: Array [‘0’..’9’] of vector;
d: Array [day] of 0..23;
для каждого из массивов указать:
сколько в нем элементов;
какие значения могут принимать его элементы;
как указать первый, последний элементы.
Написать фрагмент программы для вычисления выражения.
Пусть описание имеет вид
Const N=21;
Var X : Array [1..N] of Real;
Y : Real;


N
нечетное;

;
7)
.
Выполнить следующие задания:
Дан массив вещественных чисел x1,x2,…xN. Напечатать сначала все отрицательные, затем все положительные элементы массива.
Даны вектора (массивы)
.
Вычислить значения выражений:
Лабораторная работа №5
Тема:Программирование с использованием одномерных массивов.
Необходимые сведения
Отладка программ с использованием режима F4.
Текущий просмотр значений переменных с помощью команды CTRL-F4.
Пример задания:Составить программу для вычисления значений функции и вывода на печать положительных значений функции с использованием массивов:
приx= 0,0.5, 1.0, 1.5,…2.5
Вариант программы
ConstN= 6;
Var
K, L : Integer; X : Rael;
Y : Array[1..N] Of Real;
Begin
For L := 1 To N Do
Begin
X:= 0.5*(I –1); Y[L] =sin(PI * 0.25 X)+ cos(PI*0.25*X);
If Y[L] > 0 Then WriteLn(‘x=’, X:8:4, ‘y=’, Y:8:4)
End;
End.
Варианты заданий:
Для значений М=1, 2,…,Nвычислить число сочетаний из N по М и занести результаты в массив С=(С1,С2,…,СN), используя
Ci=n!/ (i!(n– 1)!). Отсортировать методом перестановок по
возрастанию. На печать вывести массив С до сортировки и после
нее. Здесь числа N> 0,M> 0,N>Mввести с клавиатуры.
Вычислить значение выражения при М =1,2,3,…, N
.
Значения напечатать и записать в массив В. Массив В отсортировать по убыванию через поиск минимального элемента и напечатать результат. Nввести с клавиатуры.
Сформировать S– массив вещественных чисел, отсортировать по возрастанию методом перестановок и напечатать:
![]()
число N> 0 ввести с клавиатуры.
Вычислить и записать в массив значения функции
при измененииxотxначдоxкон с шагомh.
Массив значений отсортировать по
убыванию методом перестановок и
напечатать.
a =2.14; b= –4.21; c= 3.25;
xнач = –4.5, xкон= –33.5, h= 0.5;
Сформировать массив чисел
![]()
и отсортировать по возрастанию через поиск максимального
элемента. Nввести с клавиатуры.
Сформировать массив значений функции
,
дляxначxxкон с шагомh.
A= – 1.14, B= – 0.21, C= 3.25; xнач = 0.5, xкон =2.5, h= 0.5.
Перед выводом на экран массив отсортировать методом перестановок по возрастанию.
Записать в вещественный массив числа
,
k= 1,2,…N. Отсортировать
по убыванию через поиск минимального элемента и напечатать.
Вычислить значения функции
в точках
,
гдеk=1,2,…,11 , h= (b – a)*0.1 , b
=13, N= 12.
Значения отсортировать по возрастанию методом перестановок и
напечатать.
Вывести на печать значения функции
,
предварительно сформировав из них массив чисел. Массив
отсортировать по убыванию через поиск максимального
элемента. А= 0.1 , В= –4 , С = 6, x1= 0.5 ,x2= 1.5 ,h= 0.1
10. Заполнить массив значениями
![]()
отсортировать по возрастанию методом перестановок и
напечатать результат.
Вывести на печать значение функции y(x1) до и после сортировки по убыванию методом перестановок
.
.
Значения xнач,xкон ,Nввести с клавиатуры.
Заполнить массив Qзначениями
и напечатать, отсортировав по возрастанию
через поиск максимального элемента.Nввести с клавиатуры.Вычислить значение функции, записать в массив, отсортировав по убыванию методом перестановок и напечатать:
.x= 1.2, y = 1.1. ЗначениеNввести с клавиатуры.Пусть a1= u , b1= v, ak=ak-1 +2bk-1, bk = 2ak-1+ bk-1, k= 2,3,4,…,N.
Найти
Занести в массив и отсортировать по
возрастанию через поиск максимального
элемента. Числаu, v, Nввести
с клавиатуры.
Сформировать массив чисел
.
Значениеxввести с
клавиатуры. Число М = 8. Напечататьp,
предварительно отсортировав по убыванию
методом перестановок.
Контрольные вопросы
Какие команды находятся в разделе DEBUGглавного меню системыTURBOPASCAL?
Может ли массив содержать один элемент? Ни одного?
Можно ли во время выполнения программы изменить размер массива?
Могут ли числа 1, 1ю41, 1.73, 2 быть элементами некоторого массива?
Практическое занятие №6
Тема:Программирование с использованием двумерных массивов.
Необходимый материал
Правила описания и использования переменных типа массив, типизированных констант типа массив.
Варианты заданий:
Написать фрагменты программ, позволяющие:
Найти сумму коэффициентов первой строки матрицы Аi,j,i,j=1,2,…,N.
Найти след матрицы

Найти сумму коэффициентов k– 20 столбца матрицы Аi,j,i,j= 1,2,…,N.
Вычислить вектор z, являющийся произведением вектора
и матрицы
![]()
Найти транспонированную к А матрицу (т.е. поменять местами строки и столбцы).
Вычислить максимальный элемент матрицы А.
Найти сумму элементов матрицы по второй (неглавной) диагонали.
Даны матрицы А и Bв размерностиNN. Найти С = АВ.
Выписать фрагмент программы для решения задачи: в матрице А поменять местами 1-ю и 2-ю строки, 3-ю и 4-ю строки, … , 19-ю и 20-ю строки. Матрица А имеет размерность 2020.
Написать программу, позволяющую определить, является ли матрица (целая квадратная, 10-го порядка) симметричной.
Определить, является ли целая квадратная матрица 9-го порядка магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы.
Лабораторная работа №6
Тема: Программирование с использованием двумерных массивов.
Необходимые сведения
Отладка программы с использованием точек останова (команда CTRL-F8).
Пример:Найти максимальный элемент матрицы размером 33:

Вариант программы
Const
N1=3;N2=3;
A : Array[1..N1, 1..N2] Of Real = ((2,1,3), (8,6, –1), (4,4,2));
Var
I, J : Integer; Q : Real;
Begin
Q:=A[1,1];
For I:=1 To N1 Do
For J:=1 To N2 Do
If A[I,J] > Q Then Q:=A[I,J];
WriteLn(‘максимальный элемент=’,Q:8:4)
End.
Варианты заданий
Задан двумерный массив (матрица) вещественных чисел. Найти наибольший и наименьший элементы k-й строки, 1kN,l-го столбца, 1kМ, гдеN– число строк, М – число столбцов. ЧислаNи М задать константами, массив описать как типизированную константу.
Задан двумерный массив вещественных чисел размерности 33. Найти номер строки и номер столбца, в которых находится наименьший элемент. Массив описать как типизированную константу.
Задан двумерный массив NNвещественных чисел. Необходимо каждый элемент соответствующей строки разделить на сумму элементов этой строки. Значения элементов массива ввести с клавиатуры,N=5.
Задан двумерный массив вещественных чисел. Заменить все отрицательные элементы нулями и подсчитать сумму положительных элементов в каждой строке. Размерность массива и значения элементов массива ввести с клавиатуры.
Заданы натуральные N> 0 и последовательность вещественных чиселb1,b2,…,bn. Сформировать массив А по правилу:
.
ЗначенияNи последовательность
чиселb1,b2,…,bnввести с клавиатуры.Определить, является ли заданная целая квадратная матрица 10-го порядка ортонормированной, т.е. такой, в которой скалярное произведение каждой пары различный строк равно 0, а скалярное произведение каждой строки на себя равно 1.
Задан двумерный массив В размерности 35. Получить новый массив с именем С путем удаления из В строки и столбца, в которых содержится максимальный элемент матрицы. Описать массив В как типизированную:

Задан двумерный массив А размерности MN. Дополнить его М+1-й строкой иN+1–Mстолбцом, в которые записать суммы элементов соответствующих строк или столбцов исходного массива А, В элемент аm+1,n+1поместите сумму элементов исходного массив. Элементы массива А необходимо ввести с клавиатуры. М=3, Т=3.
Задана матрица размерности МN. Необходимо, не используя другого вспомогательного массива, транспонировать матрицу (переставить местами столбцы строки). Исходные данные ввести с клавиатуры.
Заданы два одномерных массива А и В размерности N и М соответственно. Сформировать двумерный массив DразмерностиMNпо правилу
и
обнулить отрицательные элементыD.Задана вещественная квадратная матрица порядка 4. Из этой матрицы выбрать строку, сумму модулей коэффициентов которой наибольшая. Далее в этой строке найти наименьший элемент. Значения коэффициент матрицы ввести с клавиатуры.
Задана вещественная матрица размерности МN. В каждом столбце найти максимальный элемент, затем среди этих чисел найти минимальное. Указать индексы этого элемента.
Заданы целые положительные числа BN,Mи Р. Определить вектор
,
элементы которого вычисляются по
правилу
где
![]()
Исходные данные: N=3,M=4,P=46.
Задана вещественная матрица размерности МN. Построить матрицу В, где элемент bijравен разности суммы модулей коэффициентов столбца и суммы модулей коэффициентов строки содержащих данный элемент. Исходные данные ввести с клавиатуры.
Задана вещественная матрица размерности 77, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом.
Контрольные вопросы:
Какие вопросы отладчика системы TURBOPASCALвы знаете?
Как установить и удалить точки прерывания в программе?
Как вставить новые переменные и выражения в одно просмотра?
Как удалить переменные из окна просмотра?
Практическое занятие №7
Тема:Программирование с использованием процедур и функций.
Необходимые сведения
Правила описания и вызова процедур и функций, механизм передачи параметров, понятие локальных и глобальных переменных.
Варианты заданий
Описать функцию max(x,y),гдеx,y– вещественные числа.
Вычислить z=(sign x + sign y) sign (x+y), где

По заданному xвычислить
.
Примечание:
.Описать функцию «степень» (x, y) от вещественногоxи натурального n, вычисляющую (через умножение) величинуxи использовать ее для вычисленияb=2.7k+(a+ 1).
Даны три натуральных числа. Определить их наибольший общий делитель.
Type NAT = 1..maxint;
Var m, n : NAT;
Function NOD(m,n:NAT) : NAT;
Begin
Whille m < > n Do
If m > n Then m:= m – n Else n:=n – m;
NOD:=m
End;
Определить, что будет выдано на печать
m:=8; n:=6; write(NOD(m,n),m,n);
Объясните, почему при вычислении NOD(m,n) не меняется значение переменных m и n, хотя в теле функции оба эти параметра изменяют свое значение.
Описать функцию S= 1 + 2 + … +N,N– формальный параметр.
Описать процедуру S= 1 + 2 + …+N,S,N– формальные параметры.
Описать процедуру minmax(x,y), которая присваивает параметруxбольшее из вещественных чиселxиy, а параметруy – меньшее.
Использовать описанную в п.9 процедуру minmaxдля перераспределения значений вещественных переменныхa, b, cтак, чтобы сталоabc.
Перечислить локальные (в том числе и формальные) и глобальные имена, используемые в примере:
Procedure P(x: vec; var y : Integer);
Const z = ‘*’;
Var c : INDEX;
Begin e:= 0;
For c:= a To b Do
If x[c] > z Then y:=y+1
End;
Лабораторная работа №7
Тема:Программирование с использованием процедур и функций.
Необходимые сведения
Пошаговая отладка программ (команды F7 иF8).
Пример: Написать программу для
вычисления и вывода на экран биномиальных
коэффициентов по формулам
.
Вариант программы:
Var
Rab:Integer;
Procedure Sochet(K,L : Longint; Var Rez : Longint);
Var A, B, C : Longint;
Function fac(M : Longint) : Longint;
Begin If M=0 Then fac:=1 Else fac:=M*fac(M-1) End;
Begin A:=fac(K); B:=fac(L); C:+fac(K – L);
Rez:=Trunc(A/(B*C))
End;
(Головная программа. Раздел операторов)
Begin
WriteLn(‘Введите числа М <N’);ReadLn(M,N);
If M >=N then
Begin
WriteLn (‘M=’,M’>, N, ‘N=N!’); halt(0)
End
Else
Begin
Sochet(N,M,Rab); WriteLn (‘C=’, Rab);
End;
End.
Варианты заданий
Написать подпрограмму, которая выводит на печать элементы одномерного массива в порядке возрастания их значений. В головной программе вызвать эту подпрограмму для разных массивов.
Написать подпрограмму вычисления матрицы B=A3, где А – матрица размерностиNN.
Написать подпрограмму вычисления суммы
с точностью до 0.001, в качестве параметра
выбратьx.Написать подпрограмму, вычисляющую номера строк целочисленной матрицы размером NN, все элементы которых делятся на 3 без остатка.
Вычислить значения функции
с заданной точностью=0.001,
в качестве параметра задатьx.Составить подпрограмму вычисления суммы
,
приaxbс шагомh=
(b–a)*0.1.
Значенияa, b, Nпередать
в качестве параметров.Составить подпрограмму вычисления выражения:
,
гдеak=
0.1 *k+0.05,k=0.11,…,n.
ЗначенияNиxпередать в качестве параметров.Составить программу вычисления
с
точностью до 0.001, гдеxпередать в качестве параметра.Даны вещественные числа
.
Написать подпрограмму вычисления
следующего выражения:
,
гдеN, xи массивыaиbпередать в качестве параметров.Даны массивы
.
Определить функцию
Написать подпрограмму, которая сортирует одномерный массив в порядке убывания. В основной программе вызвать эту подпрограмму для сортировки двух разных массивов.
Составить программу:
,
гдеNиxпередать параметрами.Вычислить значения функции:
с точностьeps= 0.002, значениеXпередать параметром.Написать подпрограмму поиска максимального и минимального элементов одномерного массива. В основной программе вызвать этой программу для двух разных массивов.
Написать подпрограмму печати значений функции
, приxизменяющемся от
0,1 до 2,4 с шагом 0,05 по 5 значений в строке.
Практическое занятие №8
Тема:Работа с экраном в текстовом режиме.
Необходимый материал:
Процедуры и функции модуля Crt:
TextMode(Mode:Word) – процедура, очищает экран, устанавливает текстовый режим, соответствующий параметру «mode».
Таблица 8
|
Наименование константы |
Значение константы |
Количество строк |
Количество символов в строке |
Вид вывода |
|
BW40 |
0 |
25 |
40 |
Черно-белый |
|
CO40 |
1 |
25 |
40 |
Цветной |
|
BW80 |
2 |
25 |
80 |
Черно-белый |
|
CO80 |
3 |
25 |
80 |
Цветной |
|
Mono |
7 |
25 |
80 |
Черно-белый |
Пример: TextMode(CO80); - Активизация цветного текстового режима с экраном в 25 строк по 80 символов в строке.
По умолчанию устанавливает режим Mode= 2 (25 строк по 80 символов в строке):
(
1.80)
(26.80)
TextBackGround(Color:Byte) – процедура. Устанавливает цвет фона. ЗдесьColor– выражение целого типа в диапазоне от 0 до 7.
TextColor(Color:Byte) – процедура. Устанавливает цвет выводимых символов. ЗдесьColor– выражение целого типа в диапазоне от 0 до 15.
Window (X1, Y1, X2, Y2 : Byte) – процедура. Определяет новое текстовое окно. Окно – область экрана, выполняющая те же функции, что и полный экран.
ClrScr– процедура. Очищает активное окно и устанавливает курсов в левый верхний угол.
ClrEol– процедура. Очищает строку активного окна от текущей позиции курсора до конца строки.
CoToXY(X,Y:Byte) – процедура. Устанавливает курсов в позицию с координатамиX,Y.
WhereX:Integer– функция. ВозвращаетX-ю координату текущей позиции маркера.
WhereY:Integer– функция. ВозвращаетY-ю координату позиции маркер.
KeyPressed:Boolean– функция. ВозвращаетTRUE? если была нажата любая клавиша клавиатуры и возвращаетFALSEиначе.
ReadKey:Char– функция. Считывает код символа нажатой клавиши. Ниже дан пример использования функции для клавиши с кодом, хранящимся в одном байте (например, цифровые клавиши, клавиши алфавита):
VarCh:Char;
Begin
Writeln(‘Переключите клавиатуру на латинский алфавит’);
Writeln(‘Нажмите клавишу <G>’);Ch:=ReadKey;
Writeln(‘Вы нажали клавишу :’,Ch, ‘ ее код:’,Ord(Ch));
Writeln(‘Переключите клавиатуру на русский алфавит’);
Writeln(‘Нажмите ту же клавишу’);
Writeln(‘Вы нажали клавишу : ’ ,CH, ‘ ее код: ’ ,Ord(Ch));
End.
Пример использования функции для клавиши с кодом, хранящимся в двух байтах (клавиши ,home>, <end>, функциональные клавиши <F1>, <F2> и др.);
Var Ch : Char;
Begin
Ch:=ReadKey:
If Ch:= #0 Then Begin Ch:= ReadKey;
If CH= #79 Then Write(‘Нажата клавиша <End>’);
End.
Delay(Time:Word) – процедура. Вызывает задержку выполнения программы наtimeмиллисекунд (0.001 сек).
Sound(Hz:Word) – процедура. Включает внутренний звуковой генератор с частотой сигналаHzГерц. Звук отключается процедуройNoSound.
NoSound– процедура. Отключает звуковой генератор.
Лабораторная работа №8
Тема: Работа с экраном в текстовом режиме.
Пример:Реализовать простое меню из трех вариантов выбора.
Программа:
User Crt:
Type Str20 = String[20];
Menu = Array [1..3] Of Str[20];
Const MN : Menu=(‘ режим 1 ‘,
‘ режим 2 ‘,
‘ режим 3 ‘);
Var ch : Char: i,k : Byte;
Procedure Mysound(Hz : Integer: Time : Integer: Time : Integer);
Begin Sound(Hz); Delay(Time); Nosound End;
Function Readchar : Char;
Var c : Char;
Begin
c:= ReadKey: If c = #0 Then c:= ReadKey; Readchar:= c
End;
Function Case_K(ch : Char; k : Byte) : Byte;
Begin
Case ch Of
#72 : If k>1 Then k:= k – 1 Else k:= 3; {< >}
#80 : If k<3 Then k:= k + 1 Else k:= 1; {< >}
End;
Case_K:=k;
End;
Procedure ShowString(k : Byte; s : Str20; gr, cl : Byte);
Begin
TextBackGround(gr); TextColor(cl); GotoXY(1 k + 2);
Write(s);
End;
Begin
Clrscr; Window(31 11, 50, 16); { Инициализация окна }
TextBackGround(1) { Задание цвета фона }
TextColor(15); { Задание цвета символов }
k:=1; CoToXY(3.2); Write(‘Выберите режим: ‘);
Repeat
For i:=1 To 3 Do { Рисование строк меню }
ShowString(i,mm[i], i+ 1.i + 9);
ShowString(i, mm[i], i + 1.i + 9); { Рисование активной строки }
Mysound(1000 100); { Звуковой сигнал }
Ch:= ReadChar; { Считывание символа }
k:= Case_k(ch,k);
Until (Ch=#13) Or (Ch=#32);
Window(1,1,80,25); Clrscr; Write ( ‘Выбран режим –‘, K:1);
End.
Варианты заданий:
Разработать программу вывода на экран графика функции с помощью различных текстовых символов из заданного набора. Выбор символов реализовать с помощью меню.
варианты функций:
1)
2)![]()
3)
4)![]()
5)
6)![]()
7)
8)![]()
9)
10)![]()
11)
12)![]()
13)
14)![]()
15)
16)
.
где xпринадлежит интервалу ( – 3.14, 3,14 ).
Контрольные вопросы
Какие режимы для вывода на экран текстовой информации Вы знаете?
Какие процедуры и функции для работы в текстовом режиме Вы знаете?
Какие процедуры задают цвет выводимых на экран символов и цвет фона?
Какая процедура позволяет устанавливать курсор в заданное место экрана?
Какие процедуры управления звуковым генератором Вы знаете?
Практическое занятие №9
Тема:Работа с экраном в графическом режиме.
Необходимый материал:
Основные процедуры и функции модуля Graph.
I. Информационные процедуры и процедуры установки режимов работы
IniGraph( Var GraphDriver : Integer;
Var GraphMode : Integer;
PathToDriver : String);
Процедура инициирует графический режим работы монитора.
CloseGraph: - процедура, завершающая работу в графическом режиме.
GraphResult:Integer: - функция, позволяющая определить код ошибки при инициализации графического режима.
GraphErrorMsg(GraphResult:Integer) :String: - функция, которая выдает строку текста сообщения, поясняющего причину ошибки в инициализации графического режима.
SetGraphMode(Md:Integer): процедура, устанавливающая указанный в переменнойMdграфический режим.
SetGraphMode:Integer: - функция, с помощью которой можно получить значение установленного графического режима.
GetMaxX:Integer; - функция, возвращающая максимальное значение координаты экранаX.
GetMaxY:Integer; - функция, возвращающая максимальное значение координаты экранаY.
GetX:Integer; - функция, выдающая текущее значениеX.
GetY:Integer; - функция, выдающая текущее значениеY.
MoveTo(X,Y:Integer); - процедура, задающая новые текущие координатыXиY.
II. Процедуры для работы с геометрическими объектами
PutPixel(X,Y:Integer;Pixel:Word); - процедура, высвечивающая на экране цветом с номеромPixelточку с координатамиXY.
LineTo(X,Y:Integer); - процедура, проводящая линию из точки с текущими координатами в точку с координатамиX,Yтекущим цветом.
LineDel(Dx,Dy:Integer); - процедура, проводящая линию из точки с текущими координатами в точку с приращением координат от текущих наDxиDyустановленным цветом.
Line(X1,Y1,X2,Y2 :Integer); - процедура, проводящая линию из точки с координатамиX1,Y1 в точку с координатамиX2,Y2 текущим цветом.
Rectanle(X1,Y1,X2,Y2 :Integer); - процедура, рисующая прямоугольник с координатами диагонали (X1,Y1) (X2,Y2).
Bar(X1,Y1,X2,Y2 :Integer); - процедура, рисующая закрашенный прямоугольник с координатами диагонали (X1,Y1) (X2,Y2).
Arc(X,Y:IntegerAng1,Ang2,R:Word); - процедура, рисующая дугу с центром в точке (X,Y) радиусаR, начальным угломAng1 и конечным угломAng2.
Circle(X,Y:Integer:Radius:Word); - процедура, рисующая окружность с центром в точке (X,Y) радиусаR.
Ellipse(XY:Integer;Ang1Ang2:Word;Xr,Yr:Word); - процедура, рисующая дугу эллипса с центром в точке (X,Y) с полуосямиXrиYr, начальным угломAng1 и конечным угломAng2.
PieSlice(X,Y:Integer;Angle1,Angle2,R:Word); - процедура, рисующая закрашенный сектор круга с центром в точке (X,Y), радиусомR, начальным угломAng1 и конечным угломAng2.
FillEllipse(X,Y:Integer;Xr,Yr:Word); - процедура, рисующая закрашенный эллипс с полуосямиXrиYrцентром в точке (X,Y).
Sector(X,Y:Integer;Ang1,Ang2,Xr,Yr:Word); - процедура, рисующая закрашенный сектор эллипса с центром в точке (X,Y), полуосямиXr,Yrначальным и конечными угламиAng1 иAng2.
В указанных выше процедурах углы измеряются в градусах и отсчитываются против часовой стрелки от оси абсцисс.
SetLineStyle(LineStyle:Word;Pattern:Word;Thick:Word); - процедура, которая задает тип линии рисования.
Возможные значения параметра LineStyle: 0 – сплошная, 1 – точечная, 2 – прерывистая, штрихпунктирная, 3 – прерывистая штриховая, 4 – определяется пользователем.
Параметр Patternзадает тип линии приLineStyle= 4. Этот параметр игнорируется, еслиLineStyle<4.
Параметр Thickзадает толщину рисуемых линий: 1 – нормальная толщина, 3 – утроенная толщина.
III. Процедуры задания цвета:
SetColor(Color:Word); - процедура, задающая цвет рисуемого геометрического объекта. ПараметрColorпринимает значения в интервале 0..15.
GetColor:Word; - процедура, дающая значение текущего цвета рисунка.
SetBkColor(Color:Word); - процедура, задающая цвет фона.
GetBkColor(Color:Word); - процедура, определяющая цвет фона.
IY.Процедуры закрашивания геометрических фигур
SetFillStyle(Pattern:Word;Color:Word); - процедура, устанавливающая образец закраски фигуры. ПараметрPatternпринимает значения в интервале 0..11.
FloodFill(X,Y:Integer;Border): - процедура, закрашивающая замкнутую область, внутри которой лежит точка (X,Y).Border –параметр, определяющий цвет границы области.
Y. Процедура работы с текстом
OutText(TextString:String); - процедура вывода текста на экран, начиная с текущей позиции.
OutTextXY(X,Y:Integer;TextString:String); -процедура вывода текста на экран, начиная с позиции (X,Y).
SetUserCharSize(MX,DivX,MY,DivY:Word); - процедура, которая задает размеры символов шрифта.
SetTextStyle(Font,Direction,CharSize:Word); - процедура, с помощью которой устанавливается тип выводимого текста. ПараметрFontимеет следующие значения: 1 – утроенный шрифт, 2 – маленький шрифт, 3 – прямой шрифт, 4 – готический шрифт. ПараметрDirectionимеет следующие значения 0 – вывод текста слева направо, 1 – снизу вверх. ПараметрCharSizeпринимает значения в интервале 0..30.
Лабораторная работа №9
Тема:Работа с экраном в графическом режиме.
Пример:Построить спирали с начальной точкой (X0Y0), внешним радиусомR,Nвитками и начальными направлениями, образующими углыalfи –alfс осью абсцисс.
Программа:
User Graph;
Const n=30; alf=pi*0.25; deltaT=pi/22.5;
Var
t, r : Real;
i, j, k, l, m, gd, gm, xc, yc, x, y : Integer;
Procedure Spi(xc, yc, N : Integer; deltaT, Alf : Real);
Begin
MoveTo(xc, yc): t:=Alf;
For i:=1 To N Do
Begin
For j:=1 To 90 Do
Begin
t:= t+ deltaT; r:=0.75*t;
x:=Round(r*cos(t)+xc);
y:=Round(r*sin(t)+yc);
LineTo(x,y);
End;
End;
Circle(xc,yc,Round(r));
End;
Begin { Головная программа }
gd:=Detect;
InitGraph(gd, gm, ‘l:\tp6\bgi’);
If GraphResult < > 0 Then
Begin
Write(‘Ошибка установки граф. режима:’
‘GraphErrorMsg(GraphResult));
End;
xc:=GetMaxX div 2; yc:=GetMaxY div 2;
Spi(xc, yc, N, deltaT, alf);
Spi(xc, yc, N, – deltaT, – alf);
Readln;
CljseGraph;
End.
Варианты заданий:
Написать программу вывода на экран графика функции y=y(x) используя различные типы линии. В заданиях 1, 4, 7, 10, 13, 16 – сплошная линия; в заданиях 2, 5, 8, 11, 14 – прерывистая, точечная; в заданиях 3, 6, 9, 12, 16 – прерывистая, штриховая. Предварительно необходимо нарисовать оси координат.
Варианты функций:
1)
2)![]()
3)
4)![]()
5)
6)![]()
7)
8)![]()
9)
10)![]()
11)
12)![]()
13)
14)![]()
15)
16)
,
где xпринадлежит интервалу ( – 3,14 , 3,14).
Контрольные вопросы
Какая процедура инициирует графический режим?
Какие процедуры задают цвет выводимых на экран символов и цвет фона?
Какая процедура позволяет устанавливать курсор в заданное место экрана?
Перечислите процедуры рисования отрезков прямых и объясните смысл используемых параметров?
Каким образом задать тип рисуемой линии?
Какие процедуры рисования геометрических фигур Вы знаете?
Объясните процедуры вывода текста на экран и объясните смысл входящих в них параметров.
Практическое занятие №10
Тема: Программирование с использованием записей.
Необходимые ведения:Описание записей, оператор присоединения.
Варианты заданий:
Описать комбинированный тип для представления следующего понятия:
дата (число, месяц, год);
семинар (предмет, преподаватель, номер группы, день недели, часы занятий, аудитория);
Ответить на следующие вопросы:
Верно ли, что все поля записи должны быть разных типов?
Почему при описании записи ее поля могут перечисляться в любом порядке?
Верно ли, что названия полей записи могут совпадать с именами переменных, констант и других объектов программы, но не могут совпадать с названиями полей записей?
3. Type Address = Record
City, Street : String[40];
Home, Floor : 1..999
End;
Var Ad1, Ad2 : Address;
Присвоить переменной Ad1 значение «Новосибирск, Красный проспект, д.8, кв.12». ПеременнойAd2 присвоить то же значение, заменив в нем номер дома на 7 и номер квартиры на 21.
4. Type Decart = Record X, Y : Real End;
Polar = Record R, Fi : Real End;
Var D : Decart; P : Polar;
Описать процедуры Dc_Pl(D,P), преобразующую координаты точки на плоскости из декартовыхDв полярныеPиPl_Dc(P,D), выполняющую обратное преобразование.
5. Type
Time = Record Hour : 0..23; Min, Sec : 0..59 End;
Описать
а) логическую функцию Early(T1T2) для проверки, предшествует ли время Т1 времени Т2 (в пределах суток).
б) процедуру Interval(D,T1,T2), которая вычисляет времяD, прошедшее от времени Т1 до времени Т2 :d= Т2 –T1 (считать, что Т2 > Т1).
6. Type Citizen = Record
Sename, City : String;
Address : Record Street : String;
Home, Floor : 1..99 End;
End;
List = Array[1..15] of Citizen;
Описать процедуру Ирония_Судьбы(С), которая печатает фамилии двух (любых) жителей из списка С, живущих в разных городах по одинаковому адресу.
Лабораторная работа №10
Тема:Программирование с использованием записей.
Необходимые сведения:
Режимы работы отладчика, отметка точек останова программы и их удаление (Ctrl–F8).
Пример. Составить программу для решения следующей задачи. Пусть дана ведомость абитуриентов, сдавших вступительные экзамены в Институт (приведена часть данных):
Ф.И.О. Оценки
1. Алексеев Б.Ф. 5 3 4
2. Ануфриев А.А. 4 5 5
3. Банников Ю.И. 3 5 3
Необходимо определить количество абитуриентов, сдавших все экзамены на “отлично” и их список вывести на экран.
Вариант программы
Const M = 3;
Type Abitype = Record
Fio : String;
Marks : Array[1..M] Of Byte;
End;
Var List : Abitype; K, L, I, J, B : Integer;
Begin K: =0; Readln(L);
For I:=1 To L Do
Begin
Read(List.Fio);
For J:= 1 To M Do Read(List.Marks[J]);
Readln;
End;
For I:= 1 To L Do
Begin
B:= 0;
For J:= 1 To Do
If List.Marks[J]= 5 Then B:= B+1;
If B = M Then Writeln(Fio);
End;
End.
Варианты заданий
Дан список студентов первого курса, в котором содержатся следующие данные: ФИО, номер групп, оценки по результатам зимней экзаменационной сессии (информатика, высшая математика, физика), Написать программу, которая вводит эту информацию и печатает следующие данные:
Количество студентов, сдавших экзамены со средним алло не ниже 4 и их список.
Список студентов, сдавших все экзамены на «отлично».
Номера групп, в которых средний балл – наибольший, и название соответствующих экзаменов.
Количество студентов, сдавших экзамены с оценкой не ниже 4 по информатике и список этих студентов.
Фамилии ( в алфавитном порядке) студентов, имеющих задолженность хотя бы по одной дисциплине.
«Качество» успеваемости, т.е. процент студентов ( и их список), сдавших все экзамены на «хорошо» и «отлично».
Название предмета, который был сдан лучше всего, и список остальных предметов в порядке убывания средних экзаменационных оценок.
Номера группы и средний балл в порядке убывания средней успеваемости их студентов.
Контрольные вопросы:
Как описываются переменные типа «запись»?
В каких случаях целесообразно использовать переменные типа «запись»?
Каково назначение оператора With?
В чем отличие записей от массивов?
Практическое занятие №11
Тема: Программирование с использованием файлов.
Необходимые сведения
Список общих функций и процедур для работы с файлами:
Assign(Var F : File; Name : String) – оператор назначения;
Reset(VarF:File) – оператор открытия уже существующего файла;
Rewrite(VarF:File) – оператор создания нового файла. Если файл с таким именем уже существовал, то он будет стерт.
Read(varF:File;X1,X2, …,Xn) – чтение данных из файла;
Write(VarF:File;X1,X2, …,Xn) – запись данных в файл;
Close(VarF:File) – завершение раоты с фаломF(закрытие файлаF);
Erase(Var F: File) – уничтожение файла.
Rename(Var F : File; Newname : String) – переименование файла F.
Seek(VarF:File;N:Longint) – поиск элемента с номеромNв файлеFи установка маркера в эту позицию.
Filesize(VarF:File):Longint– определение количества записей (числа элементов) в файлеF.
Filepos(VarF:File) :Integer– определение текущего положения указателя файла.
Для работы с текстовыми файлами наряду с перечисленными выше (кроме подпрограмм Seek,Filesize,Filepos) используются следующие:
Eoln(VarF:Text) :Boolean–функция, принимает значениеTrue, если маркер достиг конца строки ( при чтении данных из текстового файла) и значенииFalseв противном случае.
Append(VarF:Text) – открытие уже существующего файла для добавления данных в конец файла.
Writeln(VarF:Text) – завершение текущей строки текстового файлаFпри его записи.
Readln(VarF:Text) – переход к началу следующей строк файла при его чтении.
Writeln(VarF:Text,X1X2, …,Xn) – запись в файлFданныхX1X2, …Xnс завершением текущей строки.
Readln(VarF:Text,X1,X2, …,Xn) – чтениеNсимволов файлаFс переходом к новой строке.
Варианты заданий
Пусть файл Fсодержит два элемента «4» и «2». Определить, какое значение будет иметь переменнаяYпосле выполнения операторов:
а) Reset(F); Read(F, Y);
If Not Eof)F0 Then Read(F, Y);
If Not Eof(F) Then Read(F,Y);
б) Reset(F); Y:=0; While Not Eof(F) Do Begin
Read(F, X); Y:=Y+ X End;
в) Reset(F); Y:=1; Repeat
Read(F, X); Y:= Y * X;
Until Eof(F);
В файле FFзаписаноNвещественных чисел. Написать функциюNmb(FF), которая должна относительно записанных в файлеFFчисел определить:
а) количество положительных чисел,
б) количество отрицательных чисел,
в) сумму всех чисел,
г) сумму положительных чисел,
д) сумму отрицательных чисел.
Type Time = Record
hour : 0..23; {Часы}
Min, Sec : 0..59; {Минуты, Секунды}
End;
FileofTime = File Of Time;
Var F1, F2 : Fo;eofTime;
Описать логическую функцию EQ(F1,F2), проверяющую на равенство файлыF1 иF2 типаFileofTime.
IY. Имеется внешний файлFirstтипаCourse, содержащий сведения
о студентах первого курса:
Type Exams = (Mathematics, Informatics, Physics);
Student = Record
Fio : String[40]; Group : 41..46;
Marrs : Array[Exams] Of 2..5;
End;
Course = File of Student;
Var First : Course;
Написать программу, которая переписывает в файл Secondсведения о студентах:
а) успешно сдавших все экзамены,
б) имеющих задолженность хотя бы по одному предмету,
в) сдавших экзамены на «хорошо» и «отлично»,
г) сдавших экзамены только на «отлично»,
д) сдавших экзамены со средним баллом больше 4.5,
е) имеющих задолженность по всем предметам.
Лабораторная работа №11
Тема:Программирование с использованием файлов.
Необходимые сведения
Процедуры и функции работы с файлами.
Пример. Работа с типизированным файлом на примере телефонного справочника.
Вариант программы
UserCrt;ConstM= 3;
Type Str10 = String[10];
Person = Record
Fio, Phone : Str10 End;
Var Bookfile : File of Person;
Work : Person : i : Byte;
Procedure Add_ Rec(ab : Person);
Begin
Writeln(‘Создаем справочник из ‘.M.’ записей.’);
With ab Do Begin
Write(‘ Наберите фамилию абонента:’); Readln(fio);
Write(‘ Наберите номер телефона:’);Readln(Phone);
End;
Write(Bookfile, ab);
End;
Procedure Output_Rec(ab : Person; k : Byte);
Begin
Seek (Bookfile, k); Read(Bookfile, ab);
With ab Do
Writeln(‘ФИО: ‘ , fio,’ Тел. : ‘ , phone);
End;
Begin { Головная программа }
Clrscr; Assign(Bookfile ‘Phone.dat’);
Rewrite(Bookfile):Write(‘Создаем телефонн. справочник ‘);
For i: = 1 To M Do Add_Rec(Work);
Write(‘ Набор данных завершен. Записаны данные о ‘ );
Writeln(Filesize(Bookfile), ‘ абонентах ‘);
i:=0; Seek(Bookfile, 0);
While Not Eof(Bookfile) Do Begin
Output_Rec(Work, i); i:= i+1;
End; Readln; Closse(BookFile);
End.
Варианты заданий
Используя текст примера в качестве основы, написать программу, которая:
выводит на экран список абонентов в алфавитном порядке,
выводит на экран список абонентов, в номерах телефонов которых заданы первые две цифры,
выводит на экран список абонентов по возрастанию телефонных номеров,
выводит на экран список абонентов, в номерах телефонов которых сумму цифр – нечетное число,
позволяет заменять информацию об абонентах,
позволяет находить номера тех абонентов, фамилии которых начинаются на заданную букву,
выводит на экран список абонентов, в номерах телефонов которых заданы последние две цифры,
выводит на экран список абонентов, в номерах телефонов которых сумма цифр – четное число,
список абонентов, телефонные номера которых являются «счастливыми», т.е. сумма первых трех цифр равна сумме последних трех цифр.
Контрольные вопросы:
С помощью какого оператора устанавливается соответствие между внешним именем файла и файловой переменной?
Каким образом создать файл?
Как подготовить уже существующий файл к считыванию данных?
Верно ли, что элементы файла должны быть одного типа и что файл отличается от массива только тем, что размер (количество элементов) файла произволен, а размер массива фиксирован?
Как записать данные в файл? Как считать данные из файла?
Как определить размер файла?
С помощью какой функции можно определить, есть ли еще в файле данные или уже достигнута метка конца файла?
Список рекомендуемой литературы:
Абрамов В.Г., Трофимов Н.П., Трофимова Г.Н./ Введение в язык Паскаль. – М. : Наука, 1988. – 320 с.
Инструментальные средства персональных ЭВМ. В 10 кн. Кн.4. Программирование в среде Турбо-Паскаль: Практ. пособие / Л.Е. Агабеков, С.В. Борисов, А.С. Ваулин и др.; По ред. .Г.Трусова. – М.: Высш.шк., 1993. –142 с.
Пильщиков В.Н.//Сборник упражнений по языку Паскаль; Учеб.пособие для вузов. – М.: Наука. Гл. ред. физ.-мат.лит., 1989 . – 160 с.
Программирование в среде TurboPascal6.0: Справ.пособие/ Ю.С. Климов, А.И. Касаткин, С.М.Мороз. – Мн.: Высш. шк., 1992. – 158 с.
Прайс Д. Программирование на языке Паскаль. Практическое руководство. – М.: Мир, 1987. – 232 с.
Зуев Е.А. Система программирования TurboPascal.// М.: Радио и связь, 1991. – 288 с.
