
- •Программирование на языке Turbo Pascal Материалы к урокам
- •Тема №1: этапы решения задач на эвм. Алгоритмизация. Основные понятия. Блок-схемы.
- •Свойства алгоритма
- •Элементы блок-схемы
- •Тема №2: работа в среде turbo-pascal. Транслятор. Набор текста программы. Справочная система. Выполнение и отладка программы.
- •Основные понятия:
- •Встроенные стандартные математические функции, используемые в Turbo Pascal.
- •Переменные. Описание переменных.
- •Тип переменных указывается после списка переменных через двоеточие (: ). Числовые переменные можно описать по-разному, в зависимости от вида (целые, вещественные) и значности чисел:
- •Простейшие операторы работы в текстовом режиме.
- •Нестандартный оператор очистки экрана:
- •Операторы ввода данных в переменные с клавиатуры:
- •Оператор ожидания нажатия на клавишу.
- •Целочисленные арифметические операции:
- •Функции, преобразования числовых переменных:
- •Получение случайных чисел.
- •Тема №4: программирование на языке turbo-pascal. Прорядковые типы данных. Ветвление. Операторы условного и безусловного перехода. Составление программ с использование ветвления и переходов.
- •Порядковые типы переменных (дополнительные сведения)
- •Функции, используемые для работы с порядковыми переменными.
- •Условный оператор (выбор одного из двух направлений)
- •Оператор 1, оператор 2 – какой либо оператор, в том числе и составной оператор, т.Е. Несколько операторов, объединенных операторными скобками begin end.
- •Ветвление на несколько направлений (оператор – переключатель, или оператор выбора или оператор варианта):
- •Операторы безусловного перехода goto и halt:
- •Тема №5: программирование на языке turbo-pascal. Организация циклов. Операторы циклов. Составление программ с использование операторов цикла.
- •Оператор цикла с параметром.
- •Цикл с предварительным условием
- •Цикл с последующим условием
- •Особенности и отличия операторов цикла
- •Примеры программ
- •Ответить на вопросы
- •Тема №6: программирование на языке turbo-pascal. Процедуры. Функции. Составление программ с использование процедур и функций. Рекурсия.
- •Тема №7: программирование на языке turbo-pascal. Основные графические операции языка turbo pascal. Составление программ с использование операторов графики.
- •Примеры программ:
- •Составить программу Абстракция, которая выводит на экран всевозможные графические фигуры.
- •Тема №8: программирование на языке turbo-pascal. Массивы, одномерные и вдухмерные. Составление программ с использованием массивов.
- •Задача MaxMin. Программа для поиска максимального и минимального элемента массива, с указанием их номеров (maxmin.Pas).
- •Сортировка массивов
- •Сортировка методом «пузырька»
- •Сортировка методом выбора
- •Поиск элемента в упорядоченном массиве
- •Тема №9: данные типа strung.
- •Тема №8: файлы. Типизированные файлы. Текстовые файлы.
- •Пример записи в текстовый файл:
- •Приложение 1. Структура типов данных
- •Приложение 2. Таблица кодов ascii
- •Назначение некоторых кодов ascii
- •Приложение 3. Расширенные ascii –коды клавиш
- •Приложение 4. Кодировка символов по модифицированной альтернативной кодировке символов госта (десятичный код-символ)
- •Содердание
Задача 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]<min then begin min:=a[i]; nmin:=i; end;
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]<f[i] then
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.
Поиск элемента в упорядоченном массиве
Поиск – нахождение индекса элемента массива, равного заданной величине. Наиболее простой способ – это простой перебор (последовательно сравниваются элементы массива с образцом до тех пор, пока не будет найден нужный элемент).
Поиск ведется методом дихотомии.
Алгоритм:
Находится округлённое значение полусуммы начальных и конечных индексов массива, т.е. индекс среднего элемента.
Вводится искомая величина (m) и сравнивается со средним элементом. Если a[i]>m, то заданный элемент – в левой половине и поэтому индекс k правой границы устанавливается =i, иначе искомый элемент в правой половине и сдвигается начальный индекс p и p:=i.
Процесс повторяется пока (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]<min then
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<a[i,j] then begin; ms:=a[i,j]; i1:=i; j1:=j; end; 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]<a[j] then begin r:=a[i]; a[i]:=a[j];a[j]:=r; end; end; end; writeln; for k:=1 to m do write(a[k]:4); readln; end._
|