Методичка Паскаль
.pdfFor i := 1 to n do begin
For j:=1 to m do
Write ( A[i , j] : 3 ); {выводим все элементы i-ой строки массива в одну строку на экране}
{ переводим на экране курсор на следующую строку}
Примеры решаемых задач Пример 1. Составить программу, которая сформирует случайным об-
разом массив из 20 целых чисел и:
а) выведет его в одну строку на экране;
б) выведет элементы массива, стоящие на четных местах и вычислит их сумму;
в) вычислит количество нечетных элементов;
г) упорядочит элементы массива по убыванию.
Программа:
Program М1;
Uses Crt;
Type Numbers = Array [1..20 ] Of Integer; {}
Var A : Numbers;
I, J, S, K , P : Integer;
Begin
Clrscr;
Randomize; { инициализируем датчик случайных чисел }
For I := 1 To 20 Do { заполняем массив А случайными числами от 0
до 99} A [ I ] := Random (100);
{ Задача (а) }
51
Writeln ( ‘Получили массив:’ ); { выводим полученный массив на эк-
ран }
For I := 1 To 20 Do
Write ( A [ I ] : 3 );
Writeln; { переводим курсор в следующую строку экрана }
{ Задача (б) }
Writeln ( ‘Элементы на четных местах: ’ );
S := 0; { Обнулили сумму }
For I := 1 To 20 Do
If I mod 2 = 0 { Если у элемента четный НОМЕР }
Then Begin
Write ( A [ I ] : 3 ); { то выводим его }
S := S + A [ I ] { и накапливаем сумму }
End;
Writeln; { переводим курсор в следующую строку экрана } Writeln (‘ Их сумма ’, S ); { выводим значение суммы }
{ Задача (в) }
K := 0; { Обнулили счетчик нечетных элементов в массиве } For I := 1 To 20 Do
If A [ I ] mod 2 <> 0 { Если ЭЛЕМЕНТ нечетный }
Then K := K + 1; { то увеличиваем значение счетчика } Writeln (‘ Количество нечетных элементов ’, К );
{ выводим значение счетчика }
{Задача (г) }
{Сортируем массив А по убыванию } For I := 1 To 19 Do
For J := I + 1 To 20 Do
If A[ J ] > A[ I ] Then Begin
52
P := A[ I ]; {меняем местами i-ый и j-ый элементы мас-
сива А}
A[ I ] := A[ J ]; { для этого используем переменную p }
A[ J ] := P
End;
Writeln ( ‘Получили массив:’ ); {выводим упорядоченный массив на экран}
For I := 1 To 20 Do
Write ( A [ I ] : 3 );
Readln
End.
Пример 2. Составить программу, которая сформирует случайным об-
разом двумерный массив N x N целых чисел и:
а) выведет его на экран в виде матрицы;
б) выведет элементы массива, стоящие над главной диагональю;
в) вычислит суму элементов, стоящих на побочной диагонали;
г) вычислит суммы столбцов.
Пояснение:
Это главная диагональ
Это побочная диагональ
Если элемент M [i , j] двумерного массива M размера n x n расположен на главной диагонали, то i = j (номер строки равен номеру столбца).
Если элемент M [i , j] двумерного массива M размера n x n расположен на побочной диагонали, то i + j = n + 1 (сумма его индексов равна n + 1).
53
Программа:
Program М2;
Uses Crt;
Type Numbers = Array [1..20, 1..20 ] Of Integer;
{ Тип - двумерный массив 20 х 20 } Var A : Numbers;
N, I, J, S : Integer;
Begin
Clrscr;
Write (‘Введите количество строк и столбцов ’);
Readln( N );
Randomize; { инициализируем датчик случайных чисел } For I := 1 To N Do { Организуем цикл по строкам }
For J := 1 T N Do { Организуем цикл по столбцам }
A [ I,J] := Random (100); { заполняем массив А случайными числами }
{ Задача (а) }
Writeln ( ‘Получили массив:’ ); { выводим массив на экран } For I := 1 To N Do
Begin
For J := 1 To N Do
Write ( A [I , J] : 3 ); {выводим все элементы i-ой строки в од-
ну строку на экране}
Writeln { переводим на экране курсор на следующую строку} End;
{ Задача (б) }
Writeln ( ‘Элементы над главной диагональю:’ );
For I := 1 To N Do
Begin
For J := 1 To N Do
54
If J >= I { Eсли элемент на главной диагонали или над ней, }
Then Write ( A [I , J] : 3 ) { то выводим его}
Else Write(‘ ‘:3); { иначе выводим три пробела } Writeln { переводим на экране курсор на следующую строку}
End;
{ Задача (в) }
S := 0;
For I := 1 To N Do
For J := 1 To N Do
If J + I = N + 1 { Eсли элемент на побочной диагонали } Then S := S + A [I , J]; { то накапливаем сумму }
Writeln ( ‘Сумма элементов побочной диагонали ’, S );
{ Задача (г) }
For J := 1 To N Do { организуем цикл по столбцам }
Begin
S := 0; { обнуляем сумму для каждого столбца }
For I := 1 To N Do { цикл по строкам }
S := S + A [I , J]; { накапливаем сумму элементов столбца } Writeln (‘ Сумма элементов ’, J, ‘ столбца ’, S) { выводим на экран значение суммы }
End;
Readln
End.
Контрольные задания
9.1. Составить программу, которая формирует случайным образом одномерный массив из N элементов и:
a.) выводит те его элементы, которые встречаются только один раз;
55
b.) выводит повторяющиеся элементы (примечание: повторяющийся
элемент должен выводиться один раз независимо от того, сколь-
ко раз он встречается в массиве).
9.2.Составить программу, которая формирует случайным образом два одномерных массива из N элементов и:
a.) выводит элементы первого массива, которые не встречаются во втором;
b.) выводит элементы, встречающиеся как в первом, так и во втором массивах (примечание: элемент должен выводиться один раз не-
зависимо от того, сколько раз он встречается в массивах);
c.) формирует третий массив из элементов, которые встречаются только в одном из массивов.
9.3.Составить программу, которая вводит информацию о сотрудни-
ках (фамилия и стаж работы) и:
a.) выводит список сотрудников, фамилии которых начинаются на заданную букву;
b.) выводит список сотрудников с заданным стажем работы;
c.) выводит список сотрудников, имеющих стаж работы выше сред-
него;
d.) выводит список сотрудников в алфавитном порядке;
e.) выводит список сотрудников в порядке убывания стажа работы.
9.4.Составить программу, которая формирует случайным образом массив NxN целых чисел и:
a.) выводит его в виде матрицы;
b.) вычисляет сумму элементов каждой строки;
c.) находит максимальные элементы каждого столбца; d.) вывод элементы под главной диагональю;
e.) упорядочивает по возрастанию каждую строку массива.
9.5.«Студенты». Составить программу, которая вводит следующую информацию о результатах студенческой сессии:
56
-список студентов,
-список экзаменов,
-оценки студентов за каждый из экзаменов.
Программа должна вывести введенную информацию в виде ведомости. На-
пример:
|
|
Программирование |
Психология |
Педагогика |
Математика |
1 |
Иванов |
5 |
5 |
5 |
5 |
2 |
Петров |
2 |
3 |
3 |
2 |
3 |
Сидоров |
3 |
4 |
5 |
3 |
… |
… |
… |
… |
… |
… |
После этого программа должна обработать эту информацию следующим об-
разом:
a.) вывести список студентов, сдавших сессию на повышенные оценки;
b.) вывести список отличников;
c.) вывести список неуспевающих (а также названия предметов, по которым они имеют неудовлетворительные отметки);
d.) вычислить и вывести средний балл каждого студента; e.) вывести список в порядке убывания среднего балла;
f.) определить предмет, по которому студенты учатся хуже всего, и
предмет, по которому студенты учатся лучше всего.
57
Тема 10. Графика в языке Паскаль
Краткое изложение теоретического материала
Для работы в графическом режиме в языке Турбо Паскаль реализованы следующие возможности:
1. Подключение к программе модуля графической библиотеки:
Uses Graph;
2. Инициализация графики:
g1 := detect; { автоопределение типа графического адаптера } InitGraph (g1, g2, ’C:\tp70\BGI’); { инициализация графики }
Устанавливается графический режим с разрешением 640x480 точек.
Графика растровая (точечная). Точка - пиксел.
Переменные g1 и g2 имеют тип Integer. 3. Завершение графического режима:
CloseGraph;
4. Рисование точки с координатами (х, у) цветом с:
PutPixel (x, y, c):
5. Установить цвет фона с:
SetBkColor (c);
6. Установить цвет с для выводимого рисунка:
SetColor (c);
7. Рисование отрезка:
Line (x1, yl, x2, y2);
(xl, y1) и (х2, у2) - координаты концов отрезка.
8. Рисование окружности радиуса r с центром (х, у):
Circle (x, y, r);
9. Рисование прямоугольника со сторонами, параллельными сторонам экрана:
Rectangle (x1, у1, х2, у2);
(xl, y1) и (х2, у2) — координаты любой из диагоналей. 58
10. Закрашивание ограниченной области:
А) установка типа S и цвета С штриховки:
SetFillStyle (s, c);
где 0<=S<= 11 (0 - штриховка цветом фона, т.н. «пустая», 1 - сплошная за-
ливка, прочие значения – различные типы штриховки).
Б) закрашивание области с границей цвета b:
FloodFill (x, y, b);
b- цвет границы (до этого цвета будет "разливаться" краска (штриховка)).
11.Рисование закрашенного прямоугольника:
SetFillStyle (s, c); |
|
Ваг(х1, у1, х2, у2); |
. |
(xl, yl) и (х2, у2) - координаты любой из диагоналей.
12. Рисование параллелепипеда с закрашенной передней гранью:
SetFillStyle (s, c);
Bar3D (xl, yl, x2, y2, d, Top);
(xl, yl) и (х2, у2) - координаты любой диагонали передней грани, d-глубина,
Тор - логический параметр, указывающий, рисовать ли верхнюю грань па-
раллелепипеда: True – рисовать, False - нет. 13. Рисование эллипса или его дуги:
Ellipse (x, y, a1, a2, xr, yr);
(х, у) - координаты центра,
a1 - начальный угол (в градусах),
а2 - конечный угол (в градусах),
хr - радиус по оси X,
уr - радиус по оси Y.
14. Рисование закрашенного сектора эллипса:
SetFillStyle (s, c);
Sector (х, у, а1, a2, xr, yr);
(х, у) - координаты центра,
a1 - начальный угол (в градусах),
59
а2 - конечный угол (в градусах),
хr - радиус по оси X,
уr - радиус по оси Y.
15. Вывод текста на графический экран: A) Установка шрифта:
SetTextStyle (f, d, s);
f - номер шрифта (0 - матричный шрифт 8x8),
d - направление вывода символов (0 - горизонтально, слева направо), s - размер символов.
Б) вывод текста:
OutTextXY (x, y, s);
(х, у) - координаты левого верхнего угла выводимой строки, s – выводимая текстовая строка.
Контрольные задания
10.1.Составить программу, которая построит произвольный пейзаж.
10.2.Составить программу, которая нарисует на экране мишень из n колец.
10.3.Составить программу, которая нарисует на экране пирамидку из n
уменьшающихся прямоугольников.
10.4. Составить программу, которая нарисует на экране пирамидку из n уве-
личивающихся прямоугольников.
10.5.Составить программу, которая нарисует на экране многоэтажный дом.
10.6.Составить программу, изображающую лодку, плывущую по реке.
10.7.Составить программу, изображающую в центре экрана отрезок длины
L, вращающийся вокруг одного из своих концов.
10.8. Составить программу, изображающую на экране солнышко с n лучи-
ками длины l.
10.9. Составить программу, изображающую на экране снежинку с n лучика-
ми длины l.
10.10.Составить программу построения графика функции:
60