- •Основы алгоритмизации и программирования
- •Введение
- •1.1. Структура программы
- •1.2. Типы данных
- •1.2.1. Целый тип данных
- •1.2.2. Логические типы данных – Boolean
- •1.2.3. Данные символьного типа
- •1.3. Операторы языка программирования Турбо Паскаль
- •1.3.1. Операции в Турбо Паскаль
- •1.3.2. Правила вычисления выражений
- •1.3.3. Встроенные функции в Турбо Паскаль
- •1.3.4. Описание констант и переменных
- •1.3.5. Операторы в Турбо Паскаль
- •Вопросы для самопроверки
- •Лабораторная работа №1 Организация программ линейных структур
- •Варианты заданий
- •2. Организация форматного вывода данных на языке Паскаль
- •Вопросы для самопроверки
- •Лабораторная работа №2 Организация ввода-вывода данных на языке Паскаль
- •Методические указания
- •Варианты задания
- •3. Организация программ разветвляющихся структур
- •3.1. Полная форма условного оператора
- •3.2. Краткая форма условного оператора
- •Вопросы для самопроверки
- •Лабораторная работа №3 Организация программ разветвляющихся структур
- •Варианты заданий
- •4. Организация циклических процессов
- •Лабораторная работа №4 Составление циклических программ
- •Варианты заданий
- •Методические указания
- •Варианты заданий
- •5. Программирование структур с вложенными циклами
- •Вопросы для самопроверки
- •Лабораторная работа №5 программирование структур с вложенными циклами. Вычисление суммы ряда
- •Методические указания
- •Варианты заданий
- •6. Перечислимые и ограниченные типы данных
- •6.1 Перечислимый тип данных
- •6.2. Ограниченный тип данных
- •6.3. Оператор выбора (варианта)
- •Вопросы для самопроверки
- •Лабораторная работа №6 Перечислимые и ограниченные типы данных
- •Варианты заданий.
- •7. Регулярные типы данных
- •7.1. Одномерные массивы
- •7.1.1. Краткая форма объявления одномерного массива
- •7.1.2. Полная форма объявления одномерного массива
- •7.1.3. Доступ к элементам массива
- •Вопросы для самопроверки
- •Лабораторная работа №7_1 регулярные типы данных. Массивы
- •Варианты заданий
- •7.2. Двумерные массивы
- •Полная форма описания матрицы:
- •Формирование элементов случайным образом:
- •Формирование элементов матрицы при вводе с клавиатуры:
- •Фрагменты программ по обработке 2-х мерных массивов
- •Вопросы для самопроверки
- •Лабораторная работа №7_2 регулярные типы данных. МАтрицы
- •Варианты заданий
- •7.3. Сортировка элементов массива
- •7.3.1. Сортировка методом «пузырька»
- •7.3.2. Сортировка вставками
- •7.3.3. Сортировка посредством выбора
- •7.3.4. Быстрая сортировка
- •8. Составление программ с использованием подпрограмм
- •8.1. Область видимости идентификатора переменной
- •8.2. Подпрограммы - процедуры (procedure)
- •8.2.1. Формальные и фактические параметры
- •Вопросы для самопроверки
- •Лабораторная работа №8_1 составление программ с использованием подпрограмм - процедур
- •Методические указания
- •Варианты заданий
- •8.3. Подпрограммы-функции (function)
- •Вопросы для самопроверки
- •Лабораторная работа №8_2 составление программ с использованием подпрограмм - функций
- •Варианты заданий
- •8.4. Рекурсия
- •8.4.1. Вычисление факториала
- •8.4.2. Формы рекурсивных процедур
- •8.4.3. Числа Фибоначчи
- •Вопросы для самопроверки
- •9. Модули
- •Структура модуля
- •Interface
- •Implementation
- •Вопросы для самопроверки
- •10.2. Стандартные процедуры и функции для строк
- •10.3. Хранение строк
- •Вопросы для самопроверки
- •Лабораторная работа №10 обработка символьной информации
- •Варианты заданий
- •11. Комбинированные типы. Записи (Record)
- •11.1 Записи с фиксированными частями
- •11.2. Оператор with…do
- •11.3. Вариантные записи
- •Вопросы для самопроверки
- •Лабораторная работа №11 Комбинированные типы. Записи
- •Варианты заданий
- •12. Файлы
- •12.1. Классификация файлов
- •12.1.1. Чтение файла
- •12.1.2. Запись файла
- •Вопросы для самопроверки
- •13.1. Объявление множества
- •13.2. Операции над множествами
- •13.3. Сравнение множеств
- •Include (s, I);
- •13.4. Старшинство множественных операций
- •Вопросы для самопроверки
- •Лабораторная работа №13 множества
- •Варианты заданий
- •Горячие клавиши
- •Библиографический список
- •Оглавление Введение 3
- •1. Программирование на языке Паскаль 5
- •1.1. Структура программы 5
- •2. Организация форматного вывода данных на языке Паскаль 17
- •Лабораторная работа №7_1.
- •Лабораторная работа №7_2.
- •Лабораторная работа №8_2.
7.2. Двумерные массивы
Размерность массива определяется количеством символов. Двумерный массив или матрица представляет собой таблицу значений, состоящих из строк и столбцов.
Местоположение элементов матрицы определяется двумя номерами-индексами: номером строки (i) и номером столбца (j).
Н
Главная
диагональ
A [i, j] или A [i][j], nm
-
A11
A12
A13
A14
A21
A22
A23
A
Строки i
24A31
A32
A33
A34
A41
A32
A43
A
Побочная диагональ
44
Столбцы j
Элементы, оба индекса которых равны, образуют главную диагональ матрицы: i=j;
Если i < j, элементы матрицы расположены над главной диагональю матрицы;
Если j < i, элементы расположены под главной диагональю матрицы;
Элементы, сумма индексов которых на единицу больше числа строк, образуют побочную диагональ матрицы: (i + j) = n + 1;
Матрица называется симметричной, если элементы, расположенные симметрично относительно главной диагонали, равны: A[i, j]=A[j, i], где A[i,j] – элементы матрицы A.
Краткое описание матрицы:
Var
A : array [1..5, 1..5] of integer;
i, j : integer;
Полная форма описания матрицы:
Type
Matrix = array [1..5, 1..5] of integer;
Var
A : Matrix;
Формирование элементов случайным образом:
…
ForI:= 1to5do
For j := 1 to 5 do
A[i, j] := random (11);
…
Формирование элементов матрицы при вводе с клавиатуры:
…
For I := 1 to 5 do
For j := 1 to 5 do
Readln (A[i, j]);
…
Ввод элементов матрицы:
For I := 1 to 5 do
For j := 1 to 5 do
Writeln (A[i, j]);
Фрагменты программ по обработке 2-х мерных массивов
Определение наименьшего элемента каждой строки матрицы:
…
FOR I := 1 TO 5 DO
BEGIN
MIN := A[I,1];
FOR J := 2 TO 5 DO
IF A[I,J] < MIN THEN MIN := A[I,J];
C[I] := MIN;
END;
FOR I := 1 TO 5 DO WRITELN (‘В ’,I, ‘ строке наименьший элемент равен ’, C[I]:2);
…
Определение наибольшего элемента каждого столбца матрицы:
…
FOR J := 1 TO 5 DO
BEGIN
MAX := A[1,J];
FOR I := 2 TO 5 DO
IF A[I,J] > MAX THEN MAX := A[I,J];
Z[I] := MAX;
END;
FOR J := 1 TO 5 DO WRITELN (‘В ’,J, ‘ строке наименьший элемент равен ’, Z[J]:2);
…
Сумма элементов побочной диагонали:
…
S:= 0;
J := 5;
FOR I := 1 TO 5 DO
BEGIN
S := S + A[I,J];
J := J–1; {или DEC(J);}
END;
…
Вывод элементов главной диагонали:
…
WRITELN(‘Элементы главной диагонали: ’);
FOR I := 1 TO 5 DO
BEGIN
FOR J := 1 TO 5 DO
IF I = J THEN WRITE (A[I,J]:3,’’:2);
WRITELN;
END;
…
Вывод элементов побочной диагонали:
…
WRITELN(‘Элементы побочной диагонали: ’);
J := 1;
FOR I := 1 TO 5 DO
BEGIN
B[J] := A[I, 5+1-i];
INC (J);
END;
FOR J := 1 TO 5 DO WRITELN (B[J]:3); …
Элементы побочной диагонали расположить по возрастанию:
FOR K := 1 TO 5-1 DO
FOR J := K +1 TO 5 DO
BEGIN
IF B[K] > B[J] THEN
BEGIN
M := B[K];
B[K] := B[J];
B[J] :=M;
END;
END;
WRITELN(‘Элементы побочной диагонали, расположенные по возрастанию: ’);
FOR J :=1 TO 5 DO WRITELN (B[J]:3);
Задача 7.5. Сформировать квадратную матрицу размерностью 55. Вывести матрицу в общем виде и посчитать сумму элементов, расположенных на главной диагонали.
Блок-схема алгоритма:
Листинг программы
PROGRAMTASK1;
USES CRT;
VAR
A : ARRAY [1..5, 1..5] OF INTEGER;
I, J, S : INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO 5 DO
FOR J :=1 TO 5 DO
A[I,J] :=RANDOM(51);
{вывод элементов матрицы. на экран}
FOR I := 1 TO 5 DO
BEGIN
FOR J :=1 TO 5 DO
WRITELN (A[I,J]);
WRITELN;
END;
{вычисление суммы элементов,
расположенных на главной диагонали}
S := 0;
FOR I := 1 TO 5 DO
FOR J :=1 TO 5 DO
IF I = J THEN
S := S + A [I, J];
WRITELN (‘’, S:4);
END.
Задача 7.6. Дана квадратная матрица. Определить количество отрицательных элементов каждой строки матрицы.
Блок-схема алгоритма:
Листинг программы:
PROGRAM TASK2;
USES CRT;
CONST L=5;
VAR
A : ARRAY[1..L, 1..L] OF INTEGER;
I, J, K : INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO L DO
FOR J :=1 TO L DO
A[I,J] :=RANDOM(51);
{вывод элементов матрицы. на экран}
FOR I := 1 TO L DO
BEGIN
FOR J :=1 TO L DO
WRITELN (A[I,J]);
WRITELN;
END;
FOR I:=1 TO L DO
BEGIN
K:=0;
FOR J:=1 TO L DO
IF A[I, J] <0 THEN K := K+1;
WRITELN(‘Количество элементов <0 в ‘,I, ‘строке равно ‘, K);
END;
READLN;
END.
Задача 7.7. Вычислить сумму положительных элементов каждого столбца матрицы (см. Задача 2).
Блок-схема алгоритма:
Листинг программы:
PROGRAM TASK2;
USES CRT;
CONST L=5;
VAR
A : ARRAY[1..L, 1..L] OF INTEGER;
I, J, S : INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO L DO
FOR J :=1 TO L DO
A[I,J] :=RANDOM(51);
{вывод элементов матрицы на экран}
FOR I := 1 TO L DO
BEGIN
FOR J :=1 TO L DO
WRITELN (A[I,J]);
WRITELN;
END;
FOR J:=1 TO L DO
BEGIN
S:=0;
FOR I:=1 TO L DO
IF A[I, J] >0 THEN S := S+A[I,J];
WRITELN(‘Сумма элементов >0 в ‘, J, ‘столбце равна ‘, S);
END;
READLN;
END.
Задача 7.8. Вычислить сумму элементов каждой строки матрицы A, определить наименьшее значение этих сумм и номер соответствующей строки нового сформированного массива B.
Блок-схема алгоритма:
Листинг программы:
PROGRAM TASK2;
USES CRT;
CONST L=5;
VAR
B : ARRAY[1..L] OF INTEGER;
A : ARRAY[1..L, 1..L] OF INTEGER;
I, J, MIN, INDEX: INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;
{формирование матрицы случайным образом}
FOR I := 1 TO L DO
FOR J :=1 TO L DO
A[I,J] :=RANDOM(51);
{вывод элементов матрицы на экран}
FOR I := 1 TO L DO
BEGIN
FOR J :=1 TO L DO
WRITELN (A[I,J]);
WRITELN;
END;
FOR I:=1 TO L DO
BEGIN
B[I]:=0;
FOR J:=1 TO L DO B[I] := B[I]+A[I,J];
END;
FOR I:=1 TO L DO
WRITELN(‘Сумма элементов ‘,I, ‘строки равно ‘,B[I]);
MIN:= B[1];
INDEX := 1;
FOR I:=2 TO L DO
IF B[I] < MIN THEN
BEGIN
MIN := B[I];
INDEX := I;
END;
WRITELN(‘Наименьшее значение сумм каждой строки равно - ’,MIN);
WRITELN(‘Номер соответствующей строки равен - ’,INDEX);
READLN;
END.
Задача 7.9. Вычислить количество точек, попавших в круг с радиусом R, с центом в начале координат (0,0).
Блок-схема алгоритма:
Листинг программы
PROGRAMTASK;
USES CRT;
CONST
N=80;
TYPE
VECTOR=ARRAY[1..N] OF REAL;
VAR
X, Y, R1 : VECTOR;
I, K, KXR, KYR: INTEGER;
R: REAL;
BEGIN
CLRSCR;
RANDOMIZE;
WRITELN(‘Введите длину радиусаR’);
READLN (R);
KXR:= 0;
KYR:= 0;
FOR I:=1 TO N DO
BEGIN
X[I]:=RANDOM(11)/2;
Y[I]:=RANDOM(11)/2;
END;
FOR I:=1 TO N DO
WRITELN (X[I], Y[I]);
FOR I:=1 TO N DO
BEGIN
R[I]:=SQRT(SQR(X[I]-KXR)+SQR(Y[I]-KYR));
WRITELN(R[I]);
END;
K := 0;
FOR I:=1 TO N DO
IF R[I]<R THEN K:= K+1;
WRITELN(K);
READLN;
END.