- •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