Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация задач. Массивы (96

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
238.34 Кб
Скачать

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Московский государственный технический университет имени Н.Э. Баумана

В.И. Неземский, О.А. Орешкина

АЛГОРИТМИЗАЦИЯ ЗАДАЧ. МАССИВЫ

Методические указания к практикуму «Предметная коррекционная работа по дисциплине “Основы информатики”»

Под редакцией А.Г. Станевского

Москва Издательство МГТУ им. Н.Э. Баумана

2009

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

УДК 681.3 ББК 32.81 H443

Рецензент М.Ю. Барышникова

Неземский В.И., Орешкина О.А.

H443 Алгоритмизация задач. Массивы: Метод. указания / Под ред. А.Г. Станевского. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2009. – 24 с.: ил.

В методических указаниях представлены основные сведения о структурированных типах данных на примерах статических одномерных и двумерных массивов, о приемах (алгоритмах) программирования через их визуальную (графическую) интерпретацию и использовании их в программах применительно к массивам.

Для студентов ГУИМЦ, изучающих дисциплины «Основы информатики», «Алгоритмические языки программирования», «Информатика», а также естественно-научные и инженерные дисциплины в программах инклюзивного образования в условиях интегрированного обучения.

УДК 681.3 ББК 32.81

c МГТУ им. Н.Э. Баумана, 2009

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Каждая решенная мною задача становилась образом, который служил впоследствии для решения других задач.

Р. Декарт

Цели работы — выработать понимание основных приемов и алгоритмов программирования через их визуальную и вербальную интерпретацию; выработать представление о структурированных типах данных на примерах статических одномерных и двумерных массивов.

АЛГОРИТМИЗАЦИЯ ЗАДАЧ

Алгоритмизация — это реализация причинно-следственных связей и других закономерностей в виде направленного процесса обработки информации по формальным правилам. Рассмотрим эти правила.

Алгоритм накопления суммы

Дана сумма элементов а1 + а2+ . . . + аn. Для ее краткого обозначения используют запись:

 

n

 

X

 

ak,

где X

k=1

— заглавная греческая буква «сигма», обозначающая сумму

некоторой последовательности элементов;

k и n — нижний и верхний пределы суммирования (как правило, это целые числа);

ak — некоторое k-е слагаемое из заданной последовательности элементов а.

3

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

При n = 0 значение суммы считают равным нулю. Рассмотрим некоторые примеры из школьной математики. Последовательности. Рассмотрим ряд натуральных чисел:

1, 2, 3, . . . , n –1, n, . . .

Если заменить любое число в этой последовательности некоторым числом Kn, следуя некоторому закону, получим новый ряд чисел:

К1 = 1, К2 = 2, К3= 3, Кn−1 = . . . , Кn= . . .

Этот ряд называется числовой последовательностью. Число Кn

называется общим членом числовой последовательности. Приведем примеры некоторых числовых последовательностей. Арифметическая прогрессия — это числовая последователь-

ность, каждый член которой, начиная со второго, равен сумме предыдущего члена и некоторого постоянного для этой последовательности числа d, называемого разностью этой прогрессии. Например, для арифметической прогрессии 1, 2, 3, 4, . . . n d = 1.

По определению, любой член арифметической прогрессии можно вычислить по формуле

an = a1 + d (n – 1).

Пусть в арифметической прогрессии а1 = 3, d = 2. Необходимо записать арифметическую прогрессию из пяти членов:

n = 2 a2= 3 + 2(2 – 1) = 5; n = 3 a3= 3 + 2(3 – 1) = 7; n = 4 a4= 3 + 2(4 – 1) = 9; n = 5 a5= 3 + 2(5 – 1) = 11.

Арифметическая прогрессия будет иметь вид: 3, 5, 7, 11, . . .

Сумму членов арифметической прогрессии для n первых чисел можно найти по формуле

S = n/2(A1+An),

где n — число членов арифметической прогрессии; А1 — первый член арифметической прогрессии;

Аn — последний член арифметической прогрессии.

Пример. Арифметическая прогрессия имеет следующий вид: 5, 8, 11, 14, . . . Найти 8-й член арифметической прогрессии и сумму ее членов.

Поскольку А1 = 5 и d = 3, то А8 = 5 + 3(8 – 1) = 26 и S = 8/2(5 +

+ 26) = 124.

4

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Геометрическая прогрессия — это последовательность чисел, каждый член которой, начиная со второго, получается умножением предыдущего на некоторое постоянное число q, называемое знаменателем геометрической прогрессии, Например, для геометрической прогрессии 2, 8, 32, 128, . . . , q = 4.

Сумму членов геометрической прогрессии можно найти по формуле

S =A1( qn – 1)/(q – 1),

где А1 — первый член геометрической прогрессии; q — знаменатель геометрической прогрессии; n — количество членов прогресcии.

Пример. Геометрическая прогрессия имеет вид: 3, 9, 27, 81, 243, . . . Найти сумму ее членов:

А1= 3; q =(An+1 )/An = 9/3 = 3; n = 5. S = 3(35– 1)/(3 – 1) = 3(243 – 1)/2 = 363.

Пример. Найти сумму восьми монет достоинством 1, 2, 3, 5, 10, 15, 20, 50 коп.

Число монет n = 8, их сумма:

Xn

mk = 1 + 2 + 3 + 5 + 10 + 15 + 20 + 50 = 106 (коп.).

k=1

Составим алгоритм нахождения суммы монет.

В кошельке в первый момент пусто (сумма равна нулю). Обозначим Summa = 0:

1)заменяем Summa = Summa + mi=1: 0 +1 = 1;

2)заменяем сумму, полученную на этапе 1, на Summa + mi=2: 1 + 2 = 3; продолжаем суммировать;

3)и так далее, пока в кошелек не будет положена последняя монета.

Алгоритм решения можно записать следующим образом.

Принять Summa = 0. Цикл по k от 1 до n делай:

Заменить Summa на Summa + mk; Summa := Summa + mk;

Конец цикла.

Вывести значение суммы.

X8

В результате получим значение Summa, равное mk.

k=1

5

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Задание 1.1. Проделать суммирование в текстовом процессоре (Word, OpenOffice.org Writer) с использованием таблиц.

Задание 1.2. Написать на языке Паскаль программу, реализующую процесс суммирования.

Алгоритм накопления произведения

Произведение чисел а1, . . . , an записывают следующим обра-

зом:

n

P ak.

k=1

При n = 0 значение произведения принимают равным 1. Пример. Имеется последовательность чисел: 2, 3, 5. Найти их

произведение:

3

P ak = 2 3 5 = 30.

k=1

Алгоритм вычисления произведения выглядит следующим образом.

Принять начальное значение произведения равным единице (Р = 1);

Цикл по k от 1 до n делай: Заменить P на P ак ; P := P ак ;

Конец цикла.

Вывести значение произведения.

Задание 2.1. Графически показать процесс вычисления в текстовом процессоре.

Задание 2.2. Написать алгоритм получения произведения на языке Паскаль.

МАССИВЫ

Массивы — это структурированный тип данных, состоящий из фиксированного (заданного), упорядоченного и однородного набора (последовательного списка) элементов.

Под фиксированным набором понимают наличие в массиве конкретного числа элементов.

Все элементы массива упорядочены: имеются первый элемент, второй, третий и т. д., иными словами, к каждому элементу массива можно организовать прямой доступ.

6

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

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

кроме файлового.

Доступ к каждому элементу массива осуществляется путем индексирования элементов массива. Индекс (index — указатель) определяет позицию элемента в массиве, и по индексу осуществляется прямой доступ (direct access) к элементам массива.

Индексами могут быть выражения любого скалярного типа, кроме вещественного (real). Наименьший индекс массива называется нижней границей, а наибольший — верхней границей. Нижняя и верхняя границы определяются некоторым числовым диапазоном [5. . .10].

Число элементов в массиве называется размером массива. Объем оперативной памяти, выделяемой под массив, рассчи-

тывают по формуле

Vоп = LN,

где L — размер одного элемента в байтах; N — размер массива. Например, под одномерный массив из десяти целых (integer)

чисел в памяти выделяется 10 2 байта = 20 байт.

Необходимо помнить, что объем оперативной памяти, выделяемой под массив, рассчитанный по указанной формуле, не должен превышать значение 65 536 байт (64 1024 байта). Следовательно, при создании программы необходимо знать максимальное число элементов массива еще до ее выполнения.

Описание (объявление) массивов

Для описания массивов предназначено словосочетание array of (массив из), находящееся в разделе описаний программы по следующему синтаксису:

Type

<имя типа> = array [диапазон индексов] of < тип элементов (данных)>;

Var

<идентификатор, . . . > : <имя типа>;

Существует и вторая форма описания массива — без указания типа в разделе описания типов данных.

7

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Var

< идентификатор, . . . > : array [диапазон индексов] of < тип элементов (данных)>;

Если при описании массива задан один индекс, то массив называется одномерным, если заданы два индекса двумерным, если n индексов n-мерным.

Примеры описания массивов:

Const n=10; m=8;

Type

Tlimit = 1..10; T_List = (L1, L2,L3);

T_archar = array[1..255] of char; Tarint = array[Tlimit] of integer; Tmatrix = array[1..n,1..m] of byte;

MonthType = (January, February, March, April, May); FullType = Array[MonthType] of word;

Var

Odmas: T_archar; Vector: Tarint;

M: array[1..m] of T_List; Matr: Tmatrix;

Month: FullType;

Bukva: array[‘A’ .. ’Z’] of char; Flag: array[Boolean] of byte;

Имя массива является константой, никогда в программе не изменяется и рассматривается как адрес первого элемента массива (рис. 1).

Рис. 1

8

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Действия над массивами

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

Например, если массивы Vector1 и Vector2 описаны как

Var

Vector1,Vector2 : array[1..10] of byte;

то в результате операции присваивания Vector1 := Vector2 все значения элементов второго массива присваиваются соответствующим элементам первого массива.

Если массивы отличаются по описанию, но их элементы одного типа, нельзя выполнить присваивание всего массива полностью, но можно присвоить элементу одного массива значение элемента другого массива. Например,

Type

Tmas = array [1..10] of integer; Var

A:array[1..10] of integer; {стандартный тип}

B:tmas {тип пользователя}

В[3]:=А[2];

Массивы А и В различаются по типу описания, но для элементов массивов соблюдается равенство по присваиванию, т. е. элементам массива В можно присвоить значение элементов массива А и наоборот.

Действия над элементами массивов

Обращение (доступ) к элементам массива осуществляется через написание имени массива и индекса его элемента в квадратных скобках. Например, в записи X[i] X — имя массива, i — индекс (порядковый номер) элемента массива. В данном случае мы обращаемся к некоторому i-му элементу массива Х из допустимого множества его значений, определяемых границами массива. Это справедливо для массивов любой размерности — одномерных, двумерных, n-мерных.

9

Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»

Двумерный массив, часто называемый матрицей, является структурированным типом данных, который создается вложением одномерных массивов.

Доступ к элементам матрицы выполняется по индексам строк [i] и столбцов [ j] (рис. 2).

Рис. 2

Записи odmas[10] и matr[5,2] позволяют обращаться к десятому элементу одномерного массива odmas и второму элементу в пятой строке матрицы matr.

Инициализация массивов

Инициализация — это занесение (ввод) данных в массивы. Существует несколько способов инициализации массивов.

1. Если значения элементов массивов известны до начала работы программы, то используют способ занесения данных в мас-

сивы в разделе описания констант:

Const

Odmas : array[1..5] of integer = (7,-5,11,8,-2); {одномерный массив} Matrica: array[1..2,1..3] of real =((0.5,2,-4),(0.9,-0.8,3.2)); {матрица}

2. Занесение данных в массивы в процессе выполнения программы:

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]