Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла





НазваниеУрокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла
страница3/7
Дата публикации20.08.2014
Размер0.64 Mb.
ТипУрок
100-bal.ru > Астрономия > Урок
1   2   3   4   5   6   7

ТЕМА №7: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ TURBO-PASCAL. ОСНОВНЫЕ ГРАФИЧЕСКИЕ ОПЕРАЦИИ ЯЗЫКА TURBO PASCAL. СОСТАВЛЕНИЕ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ГРАФИКИ.



ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.

ЦЕЛИ И ЗАДАЧИ: Знакомство с операторами графики языка Turbo-Pascal. Выработка навыков работы в Turbo-Pascal. Решение практических задач с использованием операторов графики.

ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:

Учащиеся должны знать:

  • Что такое графический режим;

  • Систему координат графического языка Turbo-Pascal;

  • Какие модули содержат графические процедуры (нестандартные операторы);

  • Основные операторы графики;

  • Как инициализировать и закрывать графический режим.

Учащиеся должны уметь:

  • Задавать координаты точек на экране монитора;

  • Грамотно инициализировать графический режим;

  • Правильно использовать операторы графики;

  • Составлять программы с использование операторов графики;




    ПЛАН-СОДЕРЖАНИЕ УРОКА

Модули Turbo Pascal. Модуль crt. Модуль graph.

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

  • Модуль crt, содержащий процедуры и функции, организующие связь с консолью компьютера. Консолью компьютера называется его монитор и клавиатура.

  • Модуль graph, в котором находятся процедуры и функции, организующие работу в графическом режиме.

Работа Turbo Pascal может быть организована в двух режимах (экранах).

  • Текстовой экран, в котором могут отображаться только символы (25 строк по 80 символов в каждой).

  • Графический экран, в котором изображение представляется в виде точек, именуемых пикселями. Размер этого экрана зависит от типа монитора, чаще всего 640х480 пикселов. Нулевая точка системы координат находится в верхнем левом углу экрана. Это связано с тем, что в процессе создания изображения на экране, электронный луч в кинескопе движется так же, как мы читаем текст – из верхнего левого угла слева направо, и сверху вниз. Координаты точек могут принимать только целые значения.

Инициализация графического режима.

Для инициализации графического режима необходимо подключение модуля graph, кроме того объявить две целочисленные переменные gd, gm, которы используются при инициализации режима. Собственно инициализация происходит при записи в первую из переменных номер драйвера, соответствующий автоматически определенному типу монитора (gd:=detect;). А так же при выполнении процедуры initgraph(gd,gm,'');. При этом в переменную gm записывается номер графического режима, а '' обозначает, что поиск графического драйвера надо проводить в текущем каталоге. Пример инициализации графического режима:

uses crt, graph; {подключение модулей}

var gd,gm:integer;

begin

clrscr;

gd:=detect; initgraph(gd,gm,'');

. . . . . . . . . . . . . . . . . .

При использовании графического режима, процедуры ввода/вывода текстового режима (write, writeln и read, readln) не работают. Перед их использование сначала производится закрытие графического режима с помощью процедуры closegraph.

Кроме того, для задания графического режима можно использовать технические характеристики, которые можно самим определить. Для определения типа вашего монитора (функция getdrivername), максимальных значений его координат по осям x (функция getmaxx) и y (функция getmaxy), а также максимального номера цвета (функция getmaxcolor) можно использовать следующую программу:

program monitor;

uses crt, graph; {подключение модулей}

var gd,gm,xmax,ymax,maxcolor:integer;

begin

clrscr;

gd:=detect; initgraph(gd,gm,'');

{автоматическое определение типа монитора и запись номера драйвера в переменную gd; переменной gm присваивается номер соответствующего графического режима, а два апострофа означают, что поиск графического драйвера надо производить в текущем каталоге}

xmax:=getmaxx; ymax:=getmaxy; maxcolor:=getmaxcolor;

closegraph; {Закрытие графического экрана}

writeln ('xmax=',xmax,' ymax=',ymax,' maxcolor=',maxcolor,' ',getdrivername);

repeat until keypressed; end.

Для монитора типа SVGA программа выдаст строку:

xmax=639 ymax=479 maxcolor=15 EGAVGA
Графические процедуры.

  • Процедура setcolor (c) производит установку текущего цвета, процедура setbkcolor (c) производит установку цвета фона. c – номер или наименование цвета.

0 – black

4 – red

8 – darkgray

12 – lightred

1 – blue

5 – magenta

9 – lightblue

13 – lightmagenta

2 – green

6 – brown

10 – lightgreen

14 – yellow

3 – cyan

7 – lightgray

11 – lightcyan

15 – white

  • Процедура setfillstyle (n, c) устанавливает тип заливки для замкнутой фигуры. n – номер или наименование шаблона заполнения, c – цвет заполнения.

  • Процедура floodfill (x, y, c) после установления типа заливки производит заполнение замкнутой фигуры. x, y – координаты какой-либо точки внутри этой фигуры, c – цвет границы заполняемой фигуры.

0

emptyfill

сплошная заливка текущим цветом фона

1

solidfill

сплошная заливка текущим цветом вывода

2

linefill

штриховка горизонтальными линиями --------

3

ltslashfill

штриховка линиями вида ////

4

slashfill

штриховка утолщёнными линиями вида ////

5

bkslashfill

штриховка линиями вида \\\\

6

ltbkslashfill

штриховка утолщёнными линиями вида \\\\

7

hatchfill

заливка узором вида ++++++

8

xhatchfill

заливка узором вида ххххххх

9

interleavefill

частые пересекающиеся штрихи

10

widedotfill

заливка узором – редкие точки

11

closedotfill

заливка узором – частые точки

12

userfill

шаблон пользователя

  • Процедура setlinestyle (s, p, t) позволяет изменить стиль линии. S – номер или наименование стиля, p – задаёт шаблон линии только в том случае, если параметр s=4, в остальных случаях p=0, t – задаёт толщину линии и может иметь следующие значения: normwidth=1 (нормальная толщина – установлена по умолчанию); thickwidth=3 (утолщённая линия).

0

solidln

сплошная линия – установлена по умолчанию

1

dottedln

точечная линия

2

centerln

штрих-пунктирная линия

3

dashedln

пунктирная линия

4

userbitln

Линия, заданная пользователем

  • Процедура line (x1, y1, x2,y2) проводит текущим цветом отрезок прямой между точками с координатами x1, y1 и x2, y2.

  • Процедура putpixel (x, y, c) рисует точку (пиксель) с координатами x, y цвета c.

  • Процедура getpixel (x, y) позволяет определить цвет точки с координатами x, y.

  • Процедура circle (x, y, r) рисует текущим цветом окружность с центром в точке имеющей координаты x, y и радиусом r.

  • Процедура arc (x, y, nangl, kangl, r) рисует дугу окружности с радиусом r, с центром в точке имеющей координаты x, y, начальный угол дуги nangl, заданный в градусах, конечный угол дуги kangl, заданный в градусах (с отсчётом против часовой стрелки!!!).

  • Процедура pieslice (x, y, nangl, kangl, r) используя те же параметры, что и процедура arc рисует текущим цветом сектор круга, закрашенный в текущем стиле. Чувствительна к масштабированию по осям.

  • Процедура ellipse (x, y, nangl, kangl, rx, ry) рисует текущим цветом дугу эллипса, с центром в точке имеющей координаты x, y. Начальный угол дуги - nangl, заданный в градусах, конечный угол дуги - kangl, заданный в градусах, rx радиус эллипса по оси x, ry радиус - по оси y (если nangl=0, а kangl=360, рисуется эллипс).

  • Процедура sector (x, y, nangl, kangl, rx, ry) используя те же параметры, что и процедура ellipse рисует текущим цветом сектор эллипса, закрашенный в текущем стиле.

  • Процедура rectangle (x1, y1, x2, y2) рисует текущим цветом прямоугольник с координатами верхнего левого угла x1, y1 и координатами правого нижнего угла x2, y2, при этом x1<=x2 и y1<=y2.

  • Процедура bar (x1, y1, x2, y2) рисует текущим цветом прямоугольник, закрашенным в текущем стиле.

  • Процедура bar3d (x1, y1, x2, y2, d, v) рисует текущим цветом параллелепипед, закрашенный в текущем стиле. Координаты задают левый верхний и правый нижний углы передней грани. Ширина боковой d грани исчисляется числом пикселей по горизонтали. Если задают выражение v=true, верхняя грань «видна», иначе она не вычерчивается (случай, когда параллелепипед «накрыт» другим изображением).

  • Процедура lineto (x, y) проводит текущим цветом линию из текущей позиции в точку с заданными координатами, перемещая в неё и текущую позицию.

  • Процедура moveto (x, y) устанавливает новые координаты текущей позиции.

  • Процедуры getx и gety выдают текущее положение курсора по координатам x и y соответственно.

  • Процедура linerel (dx, dy) изменяя на величину dx и dy координату x и y текущей позиции, проводит текущим цветом линию между старой и новой позицией.

  • Процедура moverel (dx, dy) изменяет координаты x и y текущей позиции на величину dx и dy соответственно.

  • Процедура outtextxy (x, y, ‘text’) для вывода текста в графическом режиме, процедура перемещает текущую позицию в точку с координатами x, y и выводит строку text, кроме того, можно вместо текстовойконстанты использовать строковую переменную.

  • Процедура settextstyle (sh, n, r) позволяет манипулировать стилем текста. Sh (шрифт) - имеет значения 0..4 (0 – матричный шрифт; 1 – триплекс; 2 – мелкий; 3 – прямой; 4 – готический, 1 – 4 для кириллицы не поставляются!!!). N (направление) - имеет значение 0 – текст идёт слева направо и 1 – текст идёт снизу вверх, по вертикали, символы «положены на бок». R (размер шрифта) - коэффициент увеличения 1..10.

  • Задержка изображения на экране на доли секунды delay(5000);

  • Очистка графического экрана Cleardevice;

Примеры операторов графики:

  • Линия - line(200,200,400,400);

  • Круг - circle(500,300,50);

  • Прямоугольник rectangle - (100,100,600,400)

  • Квадрат - bar(50,50,200,100);

  • Куб - bar3d(200,200,250,300,40,topon);

  • Эллипс - ellipse(500,100,0,360,10,30);

  • Изменение цвета фона - setbkcolor(0);

  • Изменение цвета переднего плана - setcolor(5);

  • Точка - putpixel(100,100,14);

  • Текст в графическом режиме - outtextxy(300,300,'ura');

  • Заливка замкнутого контура:

setfillstyle(1,14);

floodfill(500,300,15);


    Принципы организации движения графических фигур:

    Можно оживить изображение на экране, если воспользоваться принципами анимации: нарисовать, стереть (нарисовать цветом фона), нарисовать в новом месте и т.д.

Примеры программ:

  • Составить программу Абстракция, которая выводит на экран всевозможные графические фигуры.


program graphsb;

uses graph, crt;

var gd,gm,c:integer;

begin

gd:=detect;

initgraph (gd,gm,'');

setbkcolor (1); {Устанавливает цвет фона (1 - blue)}

setcolor (14); {Устанавливает текущий цвет (14 - yellow)}

circle (100,120,50); {Рисует окружность}

putpixel (100,120,14); {Рисует точку}

c:=getpixel (100,120); {Узнаёт цвет пикселя, в указанной координате}

setcolor (14);

line (100,150,200,200); {Рисует отрезок}

setcolor (1);

rectangle (250,100,350,70); {Рисует прямоугольник}

setfillstyle (5,14); floodfill (270,75,1); {Заливка прямоугольника по шаблону}

bar (400,400,500,350); {Рисует прямоугольник, закрашенный в текущем стиле}

setcolor (10); setlinestyle (0,0,3);

bar3d (100,300,200,250,15,true); {Рисует параллелепипед, закрашенный в текущем стиле}

setcolor (10); setlinestyle (1,0,3);

line (150,100,320,170); {Рисует утолщённую точечную линию}

setcolor (10); setlinestyle (0,0,3);

arc (300,350,0,175,70); {Рисует дугу окружности. Линия утолщённая.}

setcolor (9); setlinestyle (0,0,0);

ellipse (490,200,0,360,50,100); {Рисует эллипс. Нормальная толщина линии}

setfillstyle (7,14); floodfill (490,200,9);{Заливка эллипса по шаблону}

setcolor (12); setlinestyle (0,0,3);

ellipse (380,200,25,150,50,100); {Рисует дугу эллипса. Линия утолщённая}

sector (330,190,220,340,100,30); {Рисует закрашенный сектор эллипса}

setcolor (9);

pieslice (300,450,30,170,50); {Рисует круговой сектор}

setfillstyle (3,14); floodfill (300,445,9); {Заливка сектора}

setcolor (10);

lineto (550,450); {Проводит отрезок из текущей позиции в точку с координатами 550,450}

moveto (120,400); {Устанавливает курсор в точку с координатами 120,400}

setcolor (12);

lineto (350,250);

setcolor (14); settextstyle (4,0,4); {Стиль текста}

outtextxy (250,25,'Abstraction'); {Вывод текста}

repeat until keypressed;

closegraph; {Закрытие графического экрана}

clrscr; window (5,5,70,100); {Создание текстового окна}

textbackground (9); textcolor (15);

clrscr; writeln ('Цвет пикселя -',c);

writeln ('До свидания! Для завершения работы нажмите Enter.');

readln; end.

  • Составить программу, позволяющую текст, набранный обычным шрифтом, спроецировать в центр экрана и заменить каждый пиксель кругом

program graphtext;

uses crt,graph;

var gd,gm,i,j:integer;

begin

gd:=detect;

initgraph (gd,gm,''); {Инициализирует графическую систему}

outtextxy (1,1,'Mama'); {Выводит строку с позиции, имеющей координаты 1,1}

for i:=1 to 100 do

for j:=1 to 100 do

begin

if getpixel (i,j)=15 then

begin

setcolor (10);

circle (100+i*12,100+j*12,5);

setfillstyle (9,9); floodfill (100+i*12,100+j*12,10);

delay (700);

end;

end;

repeat until keypressed;

closegraph; {Закрытие графического экрана}

end.
Дополнительная информация.
Вывод на экран ломаной линии или закрашенного контура

DrawPoly(<количество точек>,<массив координат точек>); - выводит не экран в графическом режиме ломаную, соединяющую заданные координатами точки.

FillPoly(<количество точек>,<массив координат точек>); - выводит на экран закрашенный многоугольник, координаты вершин которого задаются в массиве.

Массив координат точек – одномерный массив типа Integer, где нечетные элементы содержат горизонтальные элементы (Х), а четные – вертикальные (У).

Количество точек определяет, сколько пар элементов массива необходимо использовать при выводе ломаной линии (многоугольника).
Чтобы оператором DrawPoly вывести многоугольник требуется за точку начала и конца ломаной линии принять определенную точку, координаты которой повторить в начале и конце массива. При этом количество точек должно равняться количеству вершин многоугольника плюс один.
Пример использования операторов:

Uses crt,graph;

const a:array[1..6]of integer=(100,100,300,200,400,400);{задание координат массива как констант}

var gd,gm,i:integer;{описание переменных для объявления графического режима и параметра цикла}

begin

gd:=detect; {объявления графического режима }

initgraph(gd,gm,'');

setcolor(5); {задание цвета линий}

setfillstyle(1,2);

fillpoly(3,a);{рисование закрашенного треугольника}

for i:=1 to 6 do{цикл для изменения массива с координатами точек}

if i mod 2 =0 then a[i]:=a[i]-80 else a[i]:=a[i]+100;

drawpoly(3,a);{рисование угла}

repeat until keypressed;

end.



ТЕМА №8: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ TURBO-PASCAL. МАССИВЫ, ОДНОМЕРНЫЕ И ВДУХМЕРНЫЕ. СОСТАВЛЕНИЕ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МАССИВОВ.



ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.

ЦЕЛИ И ЗАДАЧИ: Знакомство с понятием массив и способами их обработки. Познакомиться с базовыми алгоритмами работы с массивами. Выработка навыков составления программ с использованием массивов.

ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:

Учащиеся должны знать:

  • Что такое массив;

  • Какие бывают массивы;

  • Чем отличаются одномерные и двухмерные массивы;

  • Как описываются массивы в программе;

  • Как обратиться к заданному элементу массива;

  • Алгоритм нахождения максимума или минимума среди элементов массива;

  • Простейший алгоритм сортировки элементов одномерного массива.

Учащиеся должны уметь:

  • Заполнять массивы с клавиатуры или случайными числами, произвольным или заданным образом;

  • Распечатывать одномерные массивы в виде строки;

  • Распечатывать двухмерные массивы в виде таблиц;

  • Находить заданные элементы массива;

  • Заменять заданные элементы массива или производить с ними арифметические операции;

  • Менять местами элементы массива;

  • Находить сумму, произведение или экстремальные элементы в массиве;

  • Сортировать одномерные массивы;

  • Составлять программы с использованием массивов.




    ПЛАН-СОДЕРЖАНИЕ УРОКА


Основные понятия

В Паскале, кроме простых типов данных (integer, real, char и т.д.), имеются и сложные типы. К ним относятся массивы.

Массив (array, от французского – сплошной) – это область памяти, в которой размещается совокупность конечного числа данных одного типа с одним именем. Каждый элемент такой совокупности обозначается именем массива с индексом (номером элемента в массиве).

Элемент массива – отдельная переменная, входящая в массив;

Индекс (index) – это числовая константа или целочисленное арифметическое выражение (частный случай - целочисленная переменная), которым снабжаются элементы массива, чтобы отличать их друг от друга.

Индекс элемента массива – номер элемента в массиве.

Особенность массивов заключается в том, что все элементы массива являются данными одного типа (возможно и структурированного). При назначении массиву имени соблюдаются те же требования, какие предъявляются к именам переменных простых типов.


a11

a12



a1n

a21

a22



a2n









am1

am2



amn
В зависимости от количества используемых индексов, массивы могут быть одномерные (строка), двухмерные (таблица), трехмерные и т.д.




Двухмерный массив


В одномерном массиве для указания местоположения элемента достаточно одного индекса,

В двухмерном массиве – два индекса, для строк и граф.

Размерность массива определяется количеством индексов.

Размер массива – диапазон изменения индексов массива.

Размер одномерного массива – количество элементов, которое содержит массив.

Размер двухмерного массива - количество элементов в сроках и графах таблицы и т.д.

Описание массивов:
Тип массива

Описание массива

1 способ

2 способ

одномерный:

Type t=array[1..n] of тип;

Var a:t;

Var a: array[1..n] of тип;

двухмерный

Type р=array[1..n,1..m] of тип; Var a:р;

Var а=array[1..n,1..m] of тип;

трехмерный

Type р=array[1..n,1..m,1..k] of тип; Var a:р;

Var a=array[1..n,1..m,1..k] of

Пример описания одномерного массива размерностью 20:

type mas=array[1..20] of integer;

var a : mas;

mas – имя типа,

a – имя переменной типа массив.

Границы изменения индексов - от 1 до 20, т.к. размерность 20 элементов

const mas : array [1..7]

of byte=(31,–7,4,3,25,–3,2);

Массив, объявленный как константа, т.е. совмещается объявление массива и занесение в него констант.

Следует помнить, что значением переменной a является весь массив!

Элемент массива обозначается указанием имени массива, за которым в квадратных скобках следует индекс массива. Например, a[1] – первый элемент одномерного массива; с[5] – пятый элемент одномерного массива; a[i] – i-тый элемент одномерного массива или для двухмерных массивов: с[1,5] – пятый элемент первой строки массива; a[i,j] – j-тый элемент i-й строки двухмерного массива.

В двухмерном массиве первый индекс - номер строки, второй - номер столбца.

Двухмерные массивы иногда называют матрицами. Двухмерные массивы могут быть прямоугольными (количество строк и столбцов разное) или квадратными (одинаковое количество строк и столбцов). В двухмерных массивах элементы, у которых номер строки совпадает с номером столбца, называются диагональными или элементами главной диагонали. Главная диагональ начинается с первой с роки первого столбца и заканчивается на последней строке последней графы. Кроме главной диагонали существует побочная диагональ - с последней графе первой строки до первой графы последней строки.
Базовые алгоритмы работы с одномерными массивами
Будем считать, что объявили массив из 10 элементов, тип элементов в данном случае значение не имеет:

  1. заполнение одномерного массива:

    • заполнение с клавиатуры:

for i:=1 to 10 do

begin

writeln (‘Введите значение элемента’);

readln(a[i]);

end;

  • заполнение случайным образом:

for i:=1 to 10 do

a[i]:=random(n); {n должно быть задано заранее}

  • заполнение натуральными числами:

for i:=1 to 10 do

a[i]:=i;

  • поменять местами два заданных элемента массива:

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

  • заполнение по формуле (например, ai=sin i):

for i:=1 to 10 do

a[i]:=sin(i);

  1. вывод массива на экран:

for i:=1 to 10 do

writeln (‘элемент ’, i, ‘ массива ’,a[i]);

  1. нахождение суммы элементов одномерного массива:

s:=0;

for i:=1 to 10 do

s:=s+a[i];

  1. подсчёт количества элементов, удовлетворяющих заданному условию (например, положительных элементов):

k:=0;

for i:=1 to 10 do

if a[i]>0 then k:=k+1;

  1. поиск максимального элемента одномерного массива и его номера:

max:=a[1];

n:=1;

for i:=2 to 10 do

if a[i]>max then begin max:=a[i]; n:=i; end;

Задача MaxMin. Программа для поиска максимального и минимального элемента массива, с указанием их номеров (maxmin.pas).


program maxmin;

uses crt;

var a: array[1..5] of integer; i,max,nmax,min,nmin:integer;

begin

clrscr;

for i:=1 to 5 do { ввод данных }

begin writeln ('Введите значение элемента');

readln (a[i]);

end;

for i:=1 to 5 do { выдача массива на экран } writeln (a[i]:7);

nmax:=1; { задание начальных значений }

max:=a[1];

nmin:=1;

min:=a[1];

for i:=1 to 5 do{ нахождение минимума и максимума}

if a[i]>max then begin max:=a[i]; nmax:=i; end;

if a[i]
end;

writeln ('Максимальный элемент=',max);

writeln ('Номер максимального элемента=',nmax);

writeln ('Минимальный элемент=',min);

writeln ('Номер минимального элемента=',nmin);

repeat until keypressed; end.

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



Сортировка массива – это упорядочение по возрастанию/убыванию значений его элементов.

Сортировка методом «пузырька»


Сущность метода: Начиная с 1-го или последнего элемента, производится попарное сравнение элементов и, если предыдущий больше последнего, то они меняются местами. Фрагмент.

for i:=1 to n-1 do

for j:=i+1 to n do

if f[j]
begin

a:=f[i];

f[i]:=f[j];

f[j]:=a;

end;

Сортировка методом выбора


Сущность метода: Находится минимальный элемент, затем 1-ый и минимальный меняются местами, затем ищется минимальный со 2-го по последний и 2-ой с минимальным меняются местами и т.д.

Задача: Сдвинуть элементы массива влево на одну позицию.

uses crt;

const n=10;

var a: array[1..n] of integer;i, c:integer;

begin

for i:=1 to n do { заполнение массива и его вы вод на экран}

begin

a[i]:=random(50); write (a[i]:5);

end;

c:=a[1];

for i:=1 to n-1 do a[i]:=a[i+1];

a[n]:=c; writeln;

for i:=1 to n do write(a[i]:5);

repeat until keypressed; end.

Поиск элемента в упорядоченном массиве


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

Поиск ведется методом дихотомии.

Алгоритм:

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

  2. Вводится искомая величина (m) и сравнивается со средним элементом. Если a[i]>m, то заданный элемент – в левой половине и поэтому индекс k правой границы устанавливается =i, иначе искомый элемент в правой половине и сдвигается начальный индекс p и p:=i.

  3. Процесс повторяется пока (k-p)<=1, т.е. пока p и k не сдвинутся вплотную. При этом величина искомого индекса =p.


Примеры программ:

Задача. Из массива a составить массив b, который содержит только чётные элементы массива a.

program massiv1;

uses crt;

type mas=array[1..5] of integer;

var a,b:mas; i,k,nmin:integer; min:integer;

begin

clrscr;

textcolor (15);

for i:=1 to 5 do {Блок заполнения массива}

begin

writeln ('Введите значение элемента');

readln (a[i]);

end;

k:=0;

for i:=1 to 5 do if a[i] mod 2=0 then {Поиск чётного элемента}

begin k:=k+1; b[k]:=a[i]; end; {Формирование нового массива}

if k=0 then

begin textcolor (12); writeln ('Чётных элементов нет.'); writeln ('Формирование нового массива невозможно!');

end

else begin nmin:=1; min:=b[1]; {Поиск минимального в новом массиве}

for k:=1 to k do if b[k]
begin min:=b[k]; nmin:=k; end;

for i:=1 to 5 do {Вывод элементов массива а}

begin textcolor (14); writeln ('Элемент ',i, ' массива a ',a[i]);

end;

for i:=1 to k do {Вывод элементов массива b}

begin

textcolor (9); writeln ('Элемент ',i, ' массива b ',b[i]);

end;

textcolor (10);

writeln ('Минимальный элемент среди чётных элементов массива=',min);

writeln ('Номер этого элемента=',nmin);

end;

repeat until keypressed; end.
Базовые алгоритмы работы с двухмерными массивами
Перемещение по массиву:

Про матрицу, имеющую m строк и n столбцов, говорят, что она имеет размер m*n

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

Перемещение по строке:

for i:=1 to m do {внешний цикл, изменяется номер строки}



for j:=1 to n do {внутренний цикл, изменяется номер столбца}

Перемещение по столбцу:

for j:=1 to n do {внешний цикл, изменяется номер столбца}



for i:=1 to m do {внутренний цикл, изменяется номер строки}
Заполнение массива

  • Случайными числами в заданном промежутке (n,m) с заданным интервалом k

for i:=1 to 10 do

for j:=1 to 10 do

a[i,j]:=random((n-m+1)/k)*k+n; {n,m k должны быть задано заранее}

  • Все строки заполнить одинаково, натуральными числами начиная с 1.

for i:=1 to 10 do

for j:=1 to 10 do

a[i,j]:=j;

  • Все графы заполнить одинаково, натуральными числами начиная с 1.

for j:=1 to 10 do

for i:=1 to 10 do

a[i,j]:=1;

  • По строкам, змейкой. Например, первая строка - 1 2 3 4 5, вторая -10 9 8 7 6, третья - 11 12 13 14 15 и т.д.

K:=1

for i:=1 to 10 do begin

for j:=1 to 10 do begin

a[i,j]:=k; k:=k+1; end;

i:=i+1;

for j:=10 downto 1 do begin

a[i,j]:=k; k:=k+1; end;

end;
Поиск в массиве

  • Найти максимальный (минимальный) элемент

max:=a[1];

n:=1;m:=1;

for i:=1 to 10 do

for j:=1 to 10 do

if a[I,j]>max then begin max:=a[I,j]; n:=i;m:=j; end;

  • Найти максимум главной диагонали

max:=a[1];

n:=1;

for i:=1 to 10 do

if a[i,i]>max then begin max:= a[i,i];n:=i; end;

  • Найти минимум побочной диагонали (размерность массива 10Х 10)

min:=a[1];

n:=1;

for i:=1 to 10 do

if a[i,11-i]>min then begin min:= a[i,11-i];n:=i; end;
Преобразование массивов

Заменить все элементы, отвечающие данному условию (>a), на заданную величину (c).

for i:=1 to 10 do

for j:=1 to 10 do

if a[i,j]>a then begin a[I,j]:=c; end;

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

program mas4;

uses crt;

const n=4; m=4;

type t=array[1..n,1..m] of integer; w=array[1..4] of integer;

var a:t;i,j,b,s,d:integer; c:w;

begin

clrscr;

for i:=1 to n do

begin

writeln ('Введите строку элементов матрицы (4 элемента)');

for j:=1 to m do read(a[i,j]);

writeln;

end;

for i:=1 to n do

begin for j:=1 to m do begin textcolor (14); write(a[i,j]:3); end;

writeln;

end;

writeln; {Расчёт суммы}

for i:=1 to n do

begin s:=0; for j:=1 to m do

begin s:=s+ a[i,j]; end;

c[i]:=s;

textcolor (10);

write(c[i]:6);

end;

repeat until keypressed;

end.

  • Выполнить транспонирование матрицы. Транспонированная матрица это матрица, получающаяся из данной (прямоугольной или квадратной) матрицы после замены строк соответствующими столбцами.

program mas2;

uses crt;

const n=8; m=8;

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

var a:t;

i,j:integer;

begin

clrscr;

textcolor (9);

for i:=1 to n do begin

for j:=1 to m do begin a[i,j]:=random (10); write (a[i,j]:3); end;

writeln;

end;

writeln;

textcolor (14);

for i:=1 to n do begin

for j:=1 to m do begin write (a[j,i]:3); end;

writeln;

end;

repeat until keypressed; end.


  • Рисование многоугольников Двумерные массивы в графике.

  • Процедура drawpoly (<число вершин> + 1, <двумерный массив координат вершин>) прямое назначение процедуры – вычерчивание ломаной!!! Поэтому отправную вершину надо ещё раз указать в последней строке массива.

  • Процедура fillpoly позволяет рисовать закрашенные многоугольники.

program graphsb;

uses graph, crt;

const t:array [1..5, 1..2] {Массив с координатами вершин пятиугольника}

of integer = ((50,50),(125,25),(200,50),(150,150),(50,200));

f:array [1..4, 1..2] {Массив с координатами вершин треугольника}

of integer=((250,50),(350,25),(400,150),(250,50));

var gd,gm,c:integer;

begin

gd:=detect;

initgraph (gd,gm,'');

setcolor (14); setbkcolor (1);

setfillstyle (8,10); {Тип заливки}

fillpoly (5,t); {Закрашенный пятиугольник}

drawpoly (4,f); {Контурный треугольник}

repeat until keypressed;

end.
Примеры программ:

  • Дана матрица b, состоящая из целых. Получить матрицу r, значения которой равны удвоенным значениям матрицы b

program mas5;

uses crt;

const n=4; m=4;

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

var r,b:t;i,j:integer;

begin

clrscr;

textcolor (15);

for i:=1 to n do

begin

writeln ('Введите строку матрицы (4 элемента)');

for j:=1 to m do

begin

read (b[i,j]);

end; writeln;

end;

for i:=1 to n do

for j:=1 to m do

r[i,j]:=b[i,j]*2;

writeln;

for i:=1 to n do

begin

for j:=1 to m do

begin

textcolor (10);

write (r[i,j]:3);

end;

writeln;

end;

repeat until keypressed;

end.

  • Одномерный массив из 10 элементов заполнить произвольными числами от 0 до 9 и выдать его на экран.

program pt1;

uses crt;

type t=array[1..10] of integer;

var a:t;i:integer;

begin

clrscr;

randomize;

for i:=1 to 10 do

begin

a[i]:=trunc(random(10));

write(a[i]:4);

end;

readln;

end._

  • Двумерный массив размерностью 4 х 5 заполнить целыми двузначными числами и выдать его на экран.

program pt2;

uses crt;

type t=array[1..4,1..5] of integer;

var a:t;i,j:integer;

begin

clrscr;

randomize;

for i:=1 to 4 do


begin

for j:=1 to 5 do

begin

a[i,j]:=trunc(random(90))+10;

write(a[i,j]:4);

end;

writeln;

end;

readln;

end._

  • Двумерный массив размерностью 4 х 5 заполнить целыми числами в интервале от –10 до 20 с шагом 5 и выдать его на экран.

program pt3;

uses crt;

type t=array[1..4,1..5] of integer;

var a:t;i,j:integer;

begin

clrscr;

randomize;

for i:=1 to 4 do


begin

for j:=1 to 5 do

begin

a[i,j]:=trunc((random(7))*5)-10;

write(a[i,j]:4);

end;

writeln;

end;

readln;

end._

  • Двумерный массив размерностью 4 х 5 заполнить целыми числами в интервале от –10 до 20 с шагом 5 и выдать его на экран. Найти максимальный элемент массива и его координаты.


program pt4;

uses crt;

type t=array[1..4,1..5] of integer;

var a:t;i,j,j1,i1,ms:integer;

begin

clrscr;

randomize;

ms:=-10;

for i:=1 to 4 do

begin


for j:=1 to 5 do

begin

a[i,j]:=trunc((random(7))*5)-10;

write(a[i,j]:4);

if ms
end;

writeln;

end;

writeln('MS=',ms:4,i1:4,j1:4);

readln;

end._

  • Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми числами от –30 до 39 и выдать на экран. Все отрицательные элементы массива заменить на 0 и выдать массив на экран. Поменять местами 2-й и предпоследний элемент массива, выдать массив на экран.

program pt5;

uses crt;

const n=100;

type t=array[1..n] of integer;

var a:t;i,r,m:integer;

begin

clrscr;

randomize;

writeln('vvedite N');

readln(m);

for i:=1 to m do

begin

a[i]:=trunc(random(70))-30;


write(a[i]:4);

if a[i]<0 then a[i]:=0;

end;

writeln;

for i:=1 to m do

begin

write(a[i]:4);

end;

r:=a[2]; a[2]:=a[m-1];a[m-1]:=r;

writeln;

for i:=1 to m do

write(a[i]:4);

readln; end._

  • Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми числами от –30 до 39 и выдать на экран. Отсортировать массив по убыванию и выдать на экран.

program pt6;

uses crt;

const n=100;

type t=array[1..n] of integer;

var a:t;i,j,k,r,m:integer;

begin

clrscr;

randomize;

writeln('vvedite N');

readln(m);

for i:=1 to m do

begin

a[i]:=trunc(random(70))-30;

write(a[i]:4);

end;

writeln;

for i:=1 to m-1 do

begin

for j:=i to m do

begin

if a[i]
end;

end;

writeln;

for k:=1 to m do

write(a[k]:4);

readln; end._




1   2   3   4   5   6   7

Похожие:

Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconАнкета диагностика эффективности применения проектной деятельности,...
«Работа с графикой», «Программирование на языке «Turbo Pascal», «Графика языка Turbo Pascal», «Логические функции ms excel»
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconУсвоить понятие программы, структуры программы на языке Turbo Pascal,...
На прошлых уроках мы познакомились с понятием алгоритма и основами алгоритмизации. Давайте вспомним, что такое алгоритм, какими свойствами...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла icon«Разработка алгоритмов и программирование на языке Pascal»
Лабораторный практикум содержит методические указания к выполнению лабораторных работ по алгоритмизации и программированию на языке...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconРеферат по теме Понятие алгоритма, его свойства. Описание алгоритмов...
Понятие алгоритма, его свойства. Описание алгоритмов с помощью блок схем на языке Turbo Pascal
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconПояснительная записка Элективный курс «Основы программирования на языке Turbo Pascal»
Изучение курса позволяет учащимся более полно выявить свои способности в изучаемой области знаний, создать предпосылки по применению...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconАннотация в настоящем докладе обсуждаются возможные способы преобразования...
Динамическая эквивалентность как способ преодоления различий в национальных картинах мира
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconРабочая программа учебной дисциплины «Русский язык»
Спо 230401 Информационные системы (по отраслям) предусматривает изучение следующих учебных циклов: общеобразовательного; общего гуманитарного...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconКраткие рекомендации для педагога Полное название разработки Сборник...
Фундаментальные основы здоровья и профилактика заболеваний учащихся и преподавателей
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconПрограмма по формированию навыков безопасного поведения на дорогах...
Если учебная дисциплина сформирована за счет вариативной части циклов опоп, ее индекс и наименование не должны совпадать с индексом...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconУрока по информатике в 9 классе. Тема урока: Команды цикла, языка Паскаль
Задачи урока: ввести понятие циклических повторений в программе, установить связь между тремя видами циклов, создание алгоритмов...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconТема: разветвляющийся вычислительный процесс. Оператор выбора
Цель: Познакомить со структурой оператора выбора case и научить использовать его при составлении программ на языке Pascal
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconТема урока: «Составление линейных программ для решения задач на применение...
Повторить и обобщить знания о свойствах, типах, способах построения алгоритмов, этапах решения задач, о работе операторов input,...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconУгринович Н. Д. Информатика и икт. Профильный уровень: учебник для 10 класса
Егэ» увеличено количество часов за счет уменьшения количества часов на темы «Моделирование и формализация» и «Информационное общество»....
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла icon«Динамическое Web-Программирование»
Целью курса "Динамическое Web-Программирование" является изучение принципов разработки приложений, работающих в среде Интернет и...
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconРабочие учебные программы циклов тематического усовершенствования...
Рабочая программа составлена на основе образовательного стандарта послевузовской профессиональной подготовки специалистов
Урокам тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла iconПрограмма по формированию навыков безопасного поведения на дорогах...
Планирование составлено на основе авторской программы курса 8-го класса Информатика и икт «Алгоритмизация и программирование на языке...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск