
- •1.1. Основные этапы создания программы
- •1.2. Алгоритмы
- •2.1. Структура типов в Turbo Pascal
- •Стандартные скалярные типы. Типы целых чисел
- •2.3. Операции побитовой обработки
- •2.4. Представление вещественных чисел в эвм
- •2.5. Символьный тип
- •2.6. Булевский тип
- •2.7. Перечисленный тип
- •2.8. Интервальный тип (диапазон)
- •3.1. Структура программы на turbo pascal
- •3.2. Основные операторы языка
- •3.2.1. Простые операторы
- •3.2.2. Операторы ввода-вывода
- •3.2.3. Структурные операторы
- •3.2.4. Условные операторы
- •3.2.5. Операторы повтора (цикла)
- •4.1. Массивы
- •4.2. Строковый тип
- •4.3. Множества
- •5.1. Процедуры и функции
- •5.2. Процедуры и функции пользователя
- •5.3. Передача параметров по значению и по ссылке
- •5.4. Рекурсивные процедуры и функции
- •6.1. Структура модулей
- •6.2. Компиляция и использование модулей
- •7.1. Записи
- •7.2. Вложенные записи
- •7.3. Записи с вариантами (вариантные записи)
- •7.4. Файлы
- •7.5. Подпрограммы для работы с файлами
- •7.5.1. Процедуры
- •7.5.2. Функции
- •7.6. Примеры программ для обработки файлов
- •7.7. Текстовые файлы
- •8.1. Структура оперативной памяти для программ на Turbo Pascal
- •8.2. Динамические структуры данных
- •8.3. Основные процедуры и функции для работы с динамическими переменными
- •8.4. Динамика выделения памяти в куче
- •8.5. Линейные списки. Способы создания и обработки
- •8.6. Нелинейные списки. Способы создания и обработки
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
4.1. Массивы
Массив – это совокупность элементов, имеющих одинаковый физический смысл. Массив – гомогенная (однородная) структура, в которой все элементы определены на одном организационном уровне, то есть, между элементами ряда отсутствует отношение подчиненности (все элементы равноправны).
Каждый элемент массива характеризуется своим значением и индексом, который определяет положение элемента в оперативной памяти. Элементы массива упорядочены по индексам. Мощность индекса определяется количеством элементов массива по данному измерению. Тип индекса может быть любым порядковым типом данных, кроме типа longInt и интервального типа на основе longInt.
Если
в определении массива задан один индекс,
то массив называется одномерным, если
два индекса – двумерным, если
– индексов, то
-
мерным.
Форма объявления массива:
51
{Тип zk определяет одномерный целочисленный массив,}
{состоящий из 10 элементов}
type
zk = array[1..10] of integer;
{Определение перечисленного типа}
p = (p1, p2, p3, p4)
var
a: zk; {Переменной a присвоен тип zk}
{Описание массива из 10 элементов}
{логического типа}
b: array[1..10] of boolean;
{Описание символьного массива,}
{состоящего из 11 элементов}
c: array[-5..5] of char;
{Описание массива перечисленного типа }
d: array[1..12] of p;
{Описание массива вещественного типа}
{ с символьными индексами}
e: array[‘a’..’f’] of real;
{Описание двумерного массива}
{ символьного типа}
f: array[1..10,1..10] of char;
{Описание двумерного массива}
{через раннее описанный тип}
g: array[1..10] of zk;
Пример.
Дан одномерный целочисленный массив
размерности
и целое число
.
Переставить элементы массива с
по
в начало массива, а элементы с первого
по
в конец массива. Решить эту задачу, когда
дополнительный массив можно использовать,
и когда дополнительного массива
использовать нельзя.
{Программа, использующая дополнительный массив}
program per;
var a,b:array[1..20] of integer;
52
n,m,i,k,l:integer;
begin
n:= 10;
m:= 3;
for i:=1 to n do
begin
writeln('Введите элементы массива');
readln(b[i]);
end;
for i:=1 to n do
write(b[i],' ');
writeln;
k: = m+1; l: = 1;
for i:=1 to n do
begin
{Перезапись
элементов массива
,
начиная с
-
го элемента}
{в
начало массива
}
if i<=n-m then
begin
a[i]:=b[k];
k:=k+1;
end
else
{Перезапись
элементов массива
от
1-го до
-
го элемента}
begin
a[i]: = b[l]; l: = l+1;
end;
end;
for i:=1 to n do
write (a[i],' ');
writeln;
end.
53
Алгоритм
решения данной задачи без использования
дополнительного массива предусматривает
циклический сдвиг элементов массива
раз и состоит из двух шагов:
- запоминаем первый элемент массива;
- сдвигаем все элементы массива на один элемент
и помещаем в конец массива значение первого элемента;
этот
шаг повторяем
раз.
{Программа, не использующая дополнительного массива}
var
a,b:array[1..20] of integer;
n,m,i,k,l,c:integer;
begin
n:=10;
m:=3;
for i:=1 to n do
a[i]:=i;
for i:=1 to n do
writeln(a[i]);
{Цикл,
обеспечивающий
-
кратный сдвиг }
for k:=1 to m do
begin
{Запоминаем первый элемент массива}
c:=a[1];
for i:=1 to n-1 do
begin
{Циклически сдвигаем на один элемент}
a[i]:=a[i+1];
end;
{Помещаем в конец массива значение первого элемента}
a[n]:=c;
end;
54
for i:=1 to n do
writeln(a[i],' ');
writeln;
end.
Контрольные вопросы и упражнения
1. Дана последовательность из 100 различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами.
2. Дано два целочисленных массива, упорядоченных по возрастанию. Поместить элементы этих двух массивов в третий массив, сохранив упорядоченность по возрастанию.
3.
Дана последовательность из
вещественных чисел. Преобразовать ее
по следующему правилу: все отрицательные
элементы перенести в ее начало, а все
остальные в конец, сохраняя исходное
расположение, как среди отрицательных,
так и среди остальных элементов.
4.
Дана последовательность из
вещественных чисел. Если в результате
замены отрицательных элементов
последовательности их квадратами
элементы будут образовывать неубывающую
последовательность, то получить сумму
элементов исходной последовательности,
в противном случае получить их
произведение.
5. Дано целое десятичное число N(1<N<65535). Записываем это число в двоичном формате и циклически сдвигаем вправо, т.е. берем последнюю цифру числа и переносим ее в начало. Написать программу, которая для заданного числа N определяет максимальное значение числа, которое может получиться в результате раннее описанных сдвигов.
55
6.
Напечатать все цифры десятичной
записи числа
,
представив ”длинные” натуральные числа в виде массивов из цифр, и реализовать нужные операции над ними.
7.
Напечатать все цифры десятичной записи
числа
,
представив ”длинные” натуральные
числа в виде массивов из цифр, и реализовать
нужные операции над ними.
8. Дана последовательность целых чисел, состоящая только из нулей, единиц и двоек. Не используя нового массива, расположить элементы в следующем порядке: сначала единицы, потом нули, а затем двойки.
9.
В одномерном массиве, состоящем из
элементов, упорядочить по возрастанию
отдельно элементы, стоящие на четных
местах, и элементы, стоящие на нечетных
местах.
10. Одномерный массив заполнен нулями и единицами. Найти самую длинную подпоследовательность, состоящую только из нулей.
11.
Двумерный массив размерности
,
заполнен простыми числами. Найти номера
столбцов, содержащих одинаковые элементы.
Порядок следования элементов в столбце
не учитывать.
12.
Дан двумерный массив размерности
.
Осуществить циклический сдвиг всех
строк исходного массива вверх
раз. Дополнительного двумерного массива
не использовать.
13. Дан двумерный массив. Не используя дополнительного массива переставить первый столбец с последним, второй – с предпоследним и так далее.
14. Дан двумерный массив, заполненный целыми числами. Определить номера строк, элементы которых являются членами арифметической прогрессии.
15. Дана матрица, заполненная целыми числами,
размерностью
.
56
Проверить, равны ли элементы главной и побочной диагоналей.
16. Дана квадратная матрица, заполненная целыми числами. Найти сумму элементов, находящихся в верхнем и нижнем треугольниках, образованных пересечением главной и побочной диагоналей матрицы.
17. Дана квадратная матрица, заполненная целыми числами. Найти сумму элементов, находящихся в левом и правом треугольниках, образованных пересечением главной и побочной диагоналей матрицы.
18.
В двух массивах хранятся коэффициенты
многочленов степеней
и
соответственно. Сформировать третий
массив, который содержал бы коэффициенты
многочлена, являющегося произведением
исходных массивов.
19.
Дан вектор
,
содержащий
действительных чисел. Найти максимальную
сумму элементов среди всех непрерывных
подвекторов данного вектора. Например,
для вектора
31 -41 59 26 -53 58 97 -93 -23 84
таким подвектором будет: 59 26 -53 58 97, сумма элементов которого равна 167.
20. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце или, наоборот. Для заданной матрицы напечатать индексы всех ее седловых точек.
21. Дана вещественная матрица. Перестановкой ее строк и столбцов добиться, чтобы наибольший элемент оказался в верхнем левом углу.
22. Дана квадратная матрица. Получить вектор, элементами которого являются минимальные элементы всех диагоналей, параллельных главной (включая главную).
57