Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по TURBO PASCAL.doc
Скачиваний:
18
Добавлен:
04.11.2018
Размер:
1.13 Mб
Скачать
  1. Самостоятельные задания.

  • Переделайте процедуру так, чтобы она находила НОД трёх чисел.

  • Если в цикле перебирать числа не в возрастающем порядке, а в убывающем, то результатом будет первое найденное число (объясните почему). В этом случае процедура будет работать быстрее. Переделайте программу, чтобы она искала делители в убывающем порядке!

  1. Наименьшее общее кратное двух чисел

НОК двух чисел А и В – минимальное натуральное число, которое делится без остатка на А и на В. Исходя из определения можно искать это число следующим образом. Начиная с числа А (или с В) перебирать натуральные числа до тех пор, пока не найдем такое, которое будет без остатка делиться и на А, и на В. Здесь удобней будет использовать цикл While. Цикл For не подходит, потому что мы не знаем заранее, сколько чисел нам придётся перебрать, пока найдём НОК.

В заголовке цикла While надо записать такое условие, которое будет верно до тех пор, пока мы не найдём нужное число. То есть пока проверяемое число не будет делиться и на А, и на В без остатка.

Процедура поиска будет такой:

Procedure NOK (a, b : integer; var rez : integer);

Begin

rez := a;

While not ((rez mod a = 0) and (rez mod b = 0)) do

rez := rez + 1; { Увеличиваем i, пока оно не будет делится и на а, и на b }

rez := i

End;

  1. Самостоятельные задания.

  • Напишите программу для поиска НОД с использованием этой процедуры.

  • Как известно, НОК двух чисел всегда больше или равен большему из этих чисел. Переделайте процедуру так, чтобы она начинала искать с наибольшего числа.

  • Имеет место следующая формула: НОК (А, В) = (А*В) / НОД (А, В)

Составьте программу для нахождения НОК с использованием этой формулы и процедурой для нахождения НОД.

  1. Массивы

  1. Определение и примеры

Очень часто приходится иметь дело с большим объёмом однотипных данных. Например, изменения курсов валют за последние 3 года, или температура внутри холодильной установки, которая измеряется каждый час и т.п. Все эти данные надо уметь не только хранить, но и обрабатывать, например, проводить статистические исследования.

Рассмотрим такой пример: список учеников в группе. Это множество данных строчного типа. Их удобно записать в виде таблицы, например:

Имя

1

Катя

2

Инга

3

Оля

4

Илона

5

Антон

6

Владимир

Эта таблица состоит из 6 строк. В каждой строке указан номер строки и соответствующее этому номеру имя. То есть, по номеру строки можно однозначно найти конкретное имя. Например, номеру 4 соответствует имя Илона. Получается, что мы можем говорить об имени, не называя его конкретно, а только говоря, под каким номером оно записано.

Таблицы бывают одномерными, как только что представленная и многомерными. Основное их различие – количество чисел-координат для указания элемента. В только что приведённом примере для указания имени нужно назвать только номер строки (например, номеру 3 соответствует имя Оля). Если же мы допишем ещё один столбик, чтобы указать список учащихся из двух групп,

Группа Евгения

Группа Леонарда

1

Катя

Мантас

2

Инга

Марта

3

Оля

Александр

4

Илона

Олеся

5

Антон

Бригитта

6

Владимир

Михаил

то для доступа к какому-нибудь имени надо указать, во-первых, номер строки, а во-вторых, имя учителя. Это уже многомерная таблица, точнее двухмерная. Школьный журнал будет примером 3-мерной таблицы, так как там для указания оценки необходимо выбрать название предмета, дату и имя ученика – три координаты!

Может быть вы помните, как в начальных классах на природоведении вы вели дневник природы. Каждый день нужно было отмечать, какая была температура, облачность, были ли осадки, куда дул ветер. Таблица какого типа это была? Подумайте, прежде чем читать дальше! (Ответ найдете в конце главы).

Итак, таблицы используют для хранения каких-то однотипных данных, будь то список учеников, цены в магазине, каталог фирм или оценки по математике. Для хранения этих данных удобно использовать компьютер, так как он позволяет не только хранить данные, но и обрабатывать их с приличной скоростью. Таблицу в компьютерной реализации принято называть массивом. В этом случае все элементы массива должны содержать однотипные элементы.

Как уже говорилось, массивы могут быть многомерными. От размерности массива зависит количество координат, которые надо указывать для доступа к элементу. В информатике мы пока будем рассматривать только одномерные массивы.

Чтобы начать работу с массивом, необходимо его описать. Описание массива располагается там, где описываются все переменные в таком виде:

Var A : array [1..10] of integer;

Этой строкой мы описали массив (array) А, состоящий из 10 ([1..10]) элементов. Каждый элемент – это целое (integer) число. Можно сказать, что мы определили сразу 10 переменных целого типа. Чтобы определить массив из вещественных чисел, надо вместо integer написать real.

Для доступа к элементам массива используются квадратные скобки, в которых записывают номер необходимого элемента:

A[1], A[2], A[5], A[10]

Давайте составим простенькую программу для работы с массивом. Пусть это будет программа, которая задаёт массив из трех целых элементов и находит их сумму.

Program Summa_Elementov_Massiva;

Var A : array [1..3] of integer;

S : integer;

Begin

Writeln (’Введите элементы массива: ’);

Readln (A[1], A[2], A[3]);

S := A[1] + A[2] + A[3];

Writeln (’Сумма элементов массива = ’, S);

End.

Эта программа имеет недостаток. Если вдруг придётся работать не с 3 элементами, а с 10, то эту программу придется подвергнуть значительной модификации. Если же мы захотим ввести массив из N элементов, то общая схема решения вообще окажется непригодной.

Поэтому все программы, которые мы составляем, должны обладать свойством массовости, то есть работать с меняющимися данными. Поэтому должна существовать возможность обращения не к конкретному элементу, а к элементу, номер которого записан в виде переменной. Это делается очень просто: в скобках вместо числа-константы записывается имя переменной (или даже выражение). Например:

A[m], A[i], A[2*i+1], A[A[1]]

Для того, чтобы обрабатывать поочерёдно несколько элементов, надо использовать цикл. Вот как изменится программа:

Program Summa_Elementov_Massiva;

Var A : array [1..3] of integer;

S, i : integer;

Begin

Writeln (’Введите элементы массива: ’);

For i := 1 to 3 do

Readln (A[i]);

S := 0; { Обнуляем сумму }

For i := 1 to 3 do

S := S + A[i];

Writeln (’Сумма элементов массива = ’, S);

End.

Можно еще улучшить эту программу, объединив оба цикла в один, но мы этого делать не будем, так как тогда вообще отпадёт необходимость в использовании массива: сумму чисел можно подсчитать и так. Но дальше вы увидете, что использование массивов иногда облегчает решение задач, а чаще без них просто невозможно составить программу.

Ответ на задание: Это многомерная, точнее двумерная таблица. Но в ней хранятся неоднотипные данные, а в массивах (то есть в компьютерной реализации таблиц) могут храниться только данные одного типа. Как, например, вы запишите, что сегодня было облачно и шёл дождь, используя целые числа8?