- •Глава 3. Реализация алгоритмов ветвления
- •3.1. Условный оператор
- •Полная форма оператора
- •Краткая форма оператора.
- •3.2. Задачи к пройденной теме
- •3.3. Задачи для самостоятельного решения
- •Глава 4. Реализация циклических алгоритмов
- •4.1. Конструкция цикла со счетчиком
- •4.2. Базовые алгоритмы
- •4.3. Циклы с предварительной и последующей проверкой условия
- •Цикл с последующей проверкой условия.
- •4.4. Вложенные циклы
- •4.5 Решение задач
- •Задачи для самостоятельного решения
- •Глава 5. Пользовательские типы данных.
- •5.1. Общие понятия
- •5.2. Одномерные массивы
- •5.4. Задачи для самостоятельного решения.
- •Глава 6. Многомерные массивы
- •6.1. Двумерные массивы
- •1. Заполнение двумерного массива по строке.
- •2. Заполнение двумерного массива по столбцу.
- •3. Печать содержимого двумерного массива в виде таблицы.
- •4. Вычисление суммы элементов каждой строки (столбца).
- •6. Задача поиска максимального (минимального) элемента и его индексов (считая, что элемент единственный).
- •Алгоритм поиска минимального элемента и его индексов для всего массива.
- •6.2. Квадратные матрицы.
- •Введем некоторые понятия:
- •6.3. Задачи
- •Глава 7. Типы данных Char и String
- •7.1. Символьные данные
- •7.2. Кодирование
- •7.3. Операции над данными типа char.
- •7.4. Строки
Задачи для самостоятельного решения
Вычислить сумму ряда:
(Ответ: при n=7,
S=2,5929)
(Ответ: при n=7,
S=1,1932)
(Ответ: при n=7,
S=0,20249)
(Ответ: при n=7,
S=6,8478)
Вычислить:
Вычислить:
Вычислить произведение ряда:
;
;
.
Дано целое число
.
Проверить, что сумма ряда
не превышает дробь
.
Вывести соответствующее сообщение.Дано натуральное число x. Вычислить значение функции:
на отрезке [2,3] с
шагом 0.1.
Даны натуральные числа m и n. Вычислить:
.
Проверить, что данное произведение
больше
.Вычислить бесконечную сумму с заданной точностью
.
Считать, что требуемая точность
достигнута, если вычислена сумма
нескольких первых слагаемых и очередное
слагаемое оказалось по модулю меньше,
чем
.
Это и все последующие слагаемые не
учитывать.
.Иррациональное число
можно разложить в цепную дробь следующим
образом:
.
Дано положительное число
.
Выполнять процесс суммирования до тех
пор, пока абсолютная величина разности
между значением
,
полученным с помощью функции SQR(x) и
суммой дробей не станет меньше заданного
.
Вывести на экран полученное приближенное
значение цепной дроби.
Глава 5. Пользовательские типы данных.
5.1. Общие понятия
Турбо Паскаль позволяет работать с более сложными по своей конструкции типами. Они называются типами данных пользователя и относятся к структурированным типам (от слова структура).
Отличаются они тем, что переменные структурного типа состоят не из одного элемента (как все стандартные типы — целые, вещественные, символьные и логические), а из группы элементов.
К структурированным типам относятся массивы, записи, множества и файлы.
Для того чтобы использовать пользовательский тип, его сначала нужно описать в разделе описания типов. Описание любого типа выглядит следующим образом:
TYPE
<имя типа> = <описание типа>;
Затем в разделе объявления переменных объявляется объект, относящийся к этому типу.
Синтаксис языка допускает одновременное описание типа и объявление объектов, относящихся к этому типу.
При назначении имени пользовательского типа соблюдаются те же требования, какие предъявляются к именам переменных простых типов.
5.2. Одномерные массивы
Массив — а) область машинной памяти, в которой могут размещаться совокупности значений одного и того же типа; англ. array, file; б) - это набор переменных, объединенных общим назначением и имеющих одно имя.
Элемент массива — отдельная переменная, входящая в массив. .
Индекс элемента массива — номер элемента в массиве.
Особенность массивов заключается в том, что все элементы массива являются данными одного типа (причём тип элемента массива может быть абослютно любой).
Каждый элемент одномерного массива однозначно определяется одним индексом. Значение индекса определяет позицию соответствующего элемента в массиве и используется для осуществления доступа к этому элементу. В качестве индексного типа можно использовать любой порядковый тип, кроме longint.
Описание одномерного массива.
Для описания массивов используется ключевое слово array.
TYPE
Massiv = array [1..N] of <тип элементов массива>;
{Massiv – идентификатор типа, а N – число элементов массива. Может быть заранее объявлено как константа, а может быть и обычным числом, например 10, или 99}
Важно: Massiv - это просто тип, а в программе мы используем переменные, следовательно необходимо не просто описать новый тип, но и объявить переменные этого типа.
Объявляются переменные пользовательских типов обычным образом:
VAR
a : Massiv;
ИЛИ (если не описывать идентификатор Massiv в разделе TYPE)
VAR
a : array [1..N] of <тип элементов массива>;
Доступ к элементам массива.
Для того чтобы получить доступ к элементу массива, необходимо рядом с именем переменой массива указать индекс нужного элемента в квадратных скобках.
Одномерный массив можно условно изобразить в виде прямоугольника с N делениями, каждое деление — это элемент массива, он имеет свой номер (индекс).
A[1] |
3 |
A[2] |
12 |
A[3] |
-2 |
|
… |
A[N-1] |
4 |
A[N] |
10 |
Рис 5.2 – одномерный массив
Пример A[1] — первый элемент массива; A[5] - пятый элемент массива; A[i] — i-тый элемент массива. Каждая переменная в Турбо Паскале должна быть объявлена, следовательно, и переменная, указывающая индекс (индексная переменная) тоже. Необходимо помнить, что значением переменной A является весь массив.
Массив может быть объявлен как константа. В качестве начального значения типизированной константы — массива используется список констант, отделенных друг от друга запятыми; список заключается в круглые скобки.
Например:
CONST
mas: array [1..5] of byte=(10, 20, 30, 40, 50);
5.3. Основные алгоритмы для работы с одномерными массивами
Потребность использовать массив возникает всякий раз, когда при решении задачи приходится иметь дело с большим, но конечным количеством однотипных данных, которые необходимо хранить в памяти.
Предположим, что ведётся наблюдение температуры воздуха в течение некоторого периода времени (например, месяца). Закончив наблюдения, приступаем к обработке полученных данных: поиску самого холодного или самого теплого дня, вычислению среднемесячной температуры и т.д.
Прежде чем приступить к решению задачи рассмотрим основные алгоритмы, которые используются при обработке данных, хранящихся в массиве.
В разделе описания переменных объявим тип массив, а затем отнесём переменную к данному типу. В памяти ЭВМ будет отведено место для размещения элементов массива. Следует особо отметить, что размерность (количество элементов) массива определяется при объявлении переменной массив, память под заданное количество элементов отводится во время компиляции и изменить количество элементов в сторону увеличения в процессе работы программы нельзя. Использовать меньшее количество элементов возможно.
Первое, что необходимо сделать - заполнить массив, т.е. каждому элементу дать свое значение, а затем уже обрабатывать по заданному алгоритму. Есть несколько основных алгоритмов, которые необходимо знать. Любую задачу по обработке одномерных массивов можно решить, используя эти основные алгоритмы (базовые).
Перечислим базовые алгоритмы:
заполнение одномерного массива значениями;
вывод на экран значений элементов одномерного массива;
нахождение суммы элементов одномерного массива;
подсчет количества элементов, удовлетворяющих заданному условию;
поиск максимального (минимального) элемента одномерного массива и его номера.
При этом надо помнить, что массивы нужны тогда, когда для решения задачи необходимо хранение последовательности значений.
Заполнение.
Заполнить элементы одномерного массива значениями возможно:
вводя значения с клавиатуры;
случайным образом;
по формуле.
Надо помнить, что во всех трех случаях необходимо организовать цикл, т.к. элементов массива n (n должно быть заранее задано), а мы должны обратиться к каждому элементу.
Будем считать, что объявили массив из 10 элементов, тип элементов в данном случае значения не имеет.
Чтение данных с клавиатуры.
FOR i:=1 to 10 do
begin
writeln(‘введите значение очередного элемента‘);
readln(a[i])
end;
Заполнение случайным образом. В этом случае подключаем датчик случайных чисел.
FOR i:=1 to 10 do
a[i]:=random(n);
{n должно быть заранее задано}
Заполнение по формуле. Каждый элемент массива должен быть рассчитан по формуле (наприме, ai =sin i – cos i).
FOR i=1 to 10 do
a[i]:=sin(i)-cos(i);
Вычисление суммы элементов.
S:=0;
FOR i:=1 to 10 do
S := S + a[i];
Поиск максимального (минимального) элемента массива.
Пусть одномерный массив заполнен следующими числами:
20, -2, 4, 10,7, 21, -12, 0, 4, 17.
Подумаем, какие операции выполняются, если требуется найти максимальный элемент? Естественно, операцию сравнения. Мы не задумываемся над тем, что сравниваем всегда пару, «пробегая» глазами все элементы массива. Алгоритм поиска максимального (минимального) элемента построим таким образом, чтобы сравнивать очередную пару чисел, повторяя действие сравнения нужное количество раз.
Итак, нам необходимо ответить на два вопроса:
какие числа входят в пару, составляющую операцию отношения
сколько раз необходимо повторить операцию сравнения.
Введем дополнительную переменную с именем max. Она и будет одним из чисел, второе число — это очередной элемент массива, для того, чтобы провести первую операцию сравнения необходимо переменной max присвоить некоторое начальное значение.
Здесь могут быть два варианта:
присвоить переменной max (min) первй элемент массива, тогда количество повторений операции сравнения равно n-1;
присвоить число заведомо меньшее (большее) всех элементов массива.
В этом случае, количество повторений операции сравнения n.
Рассмотрим несколько примеров:
для заданного одномерного массива найти максимальный элемент.
PROGRAM ARRAY_MAX;
USES CRT;
TYPE
mas = array[1..10] of integer;
VAR
a: mas;
i: byte;
max: integer;
BEGIN
clrscr;
{блок заполнения}
FOR i:=1 TO 10 DO
BEGIN
write('Введите элемент массива: ');
readln(a[i])
END;
{поиск максимального элемента}
max:=a[1];
FOR i:=2 TO 10 DO
IF a[i]>max THEN
max:=a[i];
writeln('максимальный элемент массива = ', max);
writeln('нажмите любую клавишу...');
readln;
END.
массив содержит сведения о количестве студентов каждой группы I курса. Определить группу с максимальным количеством студентов, считая, что номер группы соответствует порядковому номеру числа в массиве (считаем, что такая группа единственная). Итак, делаем вывод: требуется найти номер максимального элемена.
PROGRAM ARRAY_MAX_NUM;
USES CRT;
TYPE
mas = array[1..10] of byte;
VAR
a: mas;
i, num: byte;
BEGIN
clrscr;
{блок заполнения}
FOR i:=1 TO 7 DO
BEGIN
write('Введите количество студентов в группе ', i, ' : ');
readln(a[i])
END;
{поиск номера максимального элемента}
num := 1;
FOR i:=1 TO 7 DO
IF a[i] > a[num] THEN
num:=i;
writeln('максимальное число студентов = ', a[num]);
writeln('номер группы = ', num);
writeln('нажмите любую клавишу...');
readln;
END.
найти минимальный элемент среди четных элементов массива.
Пояснение: переменной min присвоить певый элемент массива нельзя, т.к. он может быть нечетным. Следовательно, нужно выбрать какое-то очень большое число для данного типа переменных.
Если мы объявим элементы массива integer, то таким числом будет +32767.
PROGRAM ARRAY_MIN_EVEN;
USES CRT;
TYPE
mas = array[1..10] of integer;
VAR
a:mas;
i: integer;
min: integer;
BEGIN
clrscr;
FOR i:=1 TO 10 DO
BEGIN
writeln('введите очередной элемент массива ');
readln(a[i])
END;
min:=32767;
FOR i:=1 TO 10 DO
IF (a[i]<min) and (a[i] mod 2 = 0) THEN
min:=a[i];
IF min=32767 THEN
writeln ('в массиве нет четных элементов')
ELSE
writeln ('минимальный элемент среди четных элементов массива = ',min);
writeln('нажмите любую клавишу');
readln;
END.
Обратите внимание: необходимо проверить, изменилось ли значение переменной min, т.к. четных элементов могло и не быть.
