лекция по теме &quot

advertisement
Структурные типы данных. Массивы.
Повсеместное использование компьютеров основано на их высокой скорости
обработки информации и большой памяти. Мы уже научились использовать скорость
работы ЭВМ: команды циклов позволяют составлять короткие алгоритмы, при
выполнении которых ЭВМ быстро совершает последовательность действий. До сих
пор, однако, во всех наших алгоритмах объём информации, хранимый в памяти ЭВМ в
процессе выполнения алгоритма, был невелик (до 10 переменных). А как быть, если
необходима работа с 1000 и более величин. Для работы с большим объёмом
информации (однотипных данных) используются массивы.
С понятием «массив» приходится сталкиваться при решении экономических и
научно-технических задач обработки совокупностей большого количества значений. В
общем случае массив – это структурированный тип данных, состоящий из
фиксированного числа элементов, имеющих один и тот же тип.
Рассмотренные ранее простые типы определяют различные множества
атомарных (неразделимых) значений. В отличие от них, структурные типы задают
множества сложных значений, каждое из которых образует организованную
совокупность нескольких значений другого типа. Типы данных, имеющие сложную
внутреннюю структуру, в информатике называют структурными. В структурных
типах выделяют регулярный тип (массивы).
Регулярные типы данных.
Название регулярный тип массивы получили за то, что в них объединены
однотипные (логически однородные) элементы, упорядоченные (урегулированные) по
индексам, определяющим положение каждого элемента в массиве.
Массив – это упорядоченный набор переменных одного типа,
обозначенных одним именем.
Переменные, которые мы использовали до сих пор при составлении программ
– простые переменные. Любая простая переменная характеризуется:
1.
Своим именем (обозначением);
2.
Типом (т.е. множеством значений и операций над ней);
3.
Значением.
Под любую переменную выделяется ячейка памяти, обращение к которой
осуществляется по имени.
Использование только простых переменных затруднительно или делает
невозможным решение многих важных задач.
Пусть в памяти ЭВМ каким-то образом получена (пусть введена)
последовательность из 10 чисел. И пусть требуется найти максимальное из введённых
чисел (а затем разделить каждый элемент последовательности на это максимальное
число).
Способ, который нам уже знаком – использование переменных. Чтобы
запомнить 10 различных чисел, надо 10 переменных. Пусть это будут переменные a, b,
c, d, e, f, g, h, i, j. Чтобы найти максимальное из этих значений, надо:
- вначале положить max = а и сравнивать max поочерёдно со всеми
остальными переменными и заменять max на новое значение, если значение
переменной больше максимального.
program ex1;
var a, b, c, d, e, f, g, h, i, j, max: real;
begin
1
read (a, b, c, d, e, f, g, h, i, j);
writeln (a, b, c, d, e, f, g, h, i, j);
max: = a;
if max < b then max: = b;
if max < с then max: = с;
if max < d then max: = d;
и так далее, пака не будут просмотрены все
переменные.
a: = a/max;
b: = b/max;
c: = c/max; …
writeln (‘максимальное число = ‘, max);
writeln (‘a =’, a ‘b =’, b, …);
end.
Первая часть этой программы состоит из повторяющихся операторов,
отличающихся только именем использованной в них переменной. Если бы мы имели
возможность указать какой-то способ перехода к ячейке памяти, в которой находятся
следующее значение переменной
a
b
j
………………………..
то в программе можно было бы написать один условный оператор в цикле.
Такую возможность и представляет использование массивов.
Массивом называется упорядоченная совокупность величин одинакового типа,
объединённых общим именем. Члены этой последовательности – это элементы
массива. Упорядоченность заключается в том, что элементы массива располагаются в
последовательных ячейках памяти. Каждый элемент массива определяется его
положением в массиве, т.е. значением его индекса.
Массив можно представить как несколько одинаковых ящиков, скреплённых
вместе. На всю конструкцию как целое повешен один ярлык с именем (А), все ящики
пронумерованы (т.е. каждый имеет свой индекс), например А:
А
1 2 5 8 9
- элементы массива
1
2
3
4
5
- индексы
Чтобы получить доступ к нужному элементу массива, необходимо указать имя
массива и индекс этого элемента. Элементы массива длины 20 могут иметь, например,
индексы 1, 2, …, 20 или 0, 1, 2, …, 19 и т.д.
Массив, как и любую другую структуру данных, сначала необходимо описать и
только затем использовать.
Способ индексации, тип элементов, длина массива – фиксируются в
описании того типа, к которому принадлежит массив.
Синтаксическая диаграмма описания типа массив.
Имя типа
=
array
[
Простой тип (Т1)
(тип индексов)
]
of
Тип элементов (Т2)
;
Массив описывается при помощи задания типа его компонентов (элементов) и
типа индексов.
mas = array [T1] of T2;
При задании типа индексов (Т1) фактически указывается число компонентов
массива, поэтому тип индексов может быть любым скалярным (кроме
вещественного) или ограниченным типом.
2
Тип элементов массива Т2 может быть любым простым или сложным.
Пример 1. Описать целочисленный массив b, состоящий из 10 элементов.
Возможны два способа задания массивов. Можно сначала определить
некоторый тип со структурой массива, например:
type mas = array [1 .. 10] of byte;
а затем описать переменную, как имеющую данный тип:
var b: mas;
Можно обойтись и без определения типа. Тогда в разделе описания
переменных указывается вся необходимая информация о типах индексов и
компонентов.
b: array [1 .. 10] of byte;
Пример 2. Имеется описание:
type t = array [1 … 20] of real;
Это описание типа, имя которого t. Объектами типа t будут упорядоченные
наборы по 20 элементов, имеющих тип real
Пусть переменная а описана в программе как переменная типа t:
var a: t;
тогда при выполнении программы значениями переменной а будет массив длины 20,
элементы которого имеют тип real. Чтобы получить доступ к нужному элементу
массива, необходимо указать имя массива и индекс этого элемента в квадратных
скобках. Для того, чтобы рассмотреть эти элементы по отдельности, для них
применяются обозначения а[1], а[2], …, a[20] – это переменные типа real.
Переменные a[1], a[2], … - могут использоваться в программе в операторах
наравне с другими переменными типа real.
Заключённый в квадратные скобки индекс – это не обязательно целое число. В
качестве индекса может быть любое выражение, имеющее тот же тип, что и индекс. В
нашем случае им может быть любое выражение со значением типа integer, например
a[i], a[2*i], a[2*i-1] и т.д.
Необходимо различать понятия размер массива и размерность массива.
Размер массива – количество элементов в нём. Размерность массива – число
индексов, определяющих положение элемента в массиве.
Массив, состоящий из одной строки (столбца) называется одномерный массив
(вектор). Массив, состоящий из нескольких строк, одинаковой длины, называется
двумерный (матрица)
В одномерных массивах (вектор) положение каждого элемента задаётся
(определяется) одним индексом. В двумерных массивах (матрица) – положение
каждого элемента определяется двумя индексами (например, номером строки и
номером столбца)
Примеры описания типов и переменных.
type mas1 = array [-5 .. 15] of real;
mas2 = array [1 .. 10,1 .. 10] of integer;
var a: mas1; b: mas2;
Переменная а – есть вектор (одномерный массив) с вещественными
компонентами, перенумерованными от –5 до 15.
Переменная b – есть квадратная матрица целых чисел, состоящая из 10 строк и
10 столбцов.
3
Примеры описания массивов.
Пример 1.
type M = array [1 .. 15] of real;
var mas: M;
или
var mas: array [1 .. 15] of real;
(описан массив mas из 15 вещественных чисел);
Пример 2.
work: array [(mon, tue, wed)] of integer;
или
type W = array [(mon, tue, wed)] of integer;
var work: W;
(описан массив из трёх целых чисел, индексы элементов массива имеют
перечислимый тип и принимают значения названий дней недели mon, tue, wed).
Пример 3.
type bool = array [‘a’ .. ‘z’] of boolean;
var b: bool;
или
b: array [‘а’ .. ‘z’] of boolean;
(описан массив элементов булевого типа b, тип индексов – ограниченный
символьный).
Пример 4.
type ch = array [1 .. 3, 1 .. 5] of real;
var c: ch;
или
c: array [1 .. 3, 1 .. 5] of real;
(описан двумерный массив с вещественных чисел, содержащий 3 строки и 5
столбцов).
Пример 5.
d: array [(black, white)] of 11 .. 20;
(описан массив d целых чисел с индексами black, white. Любой элемент
массива может принимать значения от 11 до 20).
Блок заданий 1.
Задание 1.
Описать регулярный тип, объединяющий в себе массивы, значениями элементов
которых являются целые числа, а индексы – логические компоненты.
type C = array [false .. true] of byte;
Задание 2.
Описать массив, состоящий из 9 элементов, значениями элементов которого
являются вещественные числа.
а) type
в) type
m = array [1 .. 9] of real;
m = array [0 .. 8] of real;
var
var
mas: m;
mas: m;
б) var mas: array [1 .. 9] of real;
г) var mas: array [0 .. 8] of real;
4
Задание 3.
Имеются описания:
type
a = array [0 .. 25] of integer;
b = 0 .. 4;
var
c, d: a;
e: array [b] of real;
1) Сколько массивов описано? (Назвать их имена)
Ответ: три: c, d, e
2) Для каждого массива указать:
а) сколько в нём элементов;
с
d
e
26
26
5
б) какие значения могут принимать его элементы?
Integer, integer, real
в) как указать первый и последний элементы каждого из массивов?
c [0] d[0] e[0]
c [25] d[25] e[4]
Задание 4.
Найти и объяснить ошибки в следующих описаниях:
а) const m = 100;
б) type
type
a = array [‘2’ .. ‘8’] of real;
M = array [0 .. n] of m;
var
var
a: mas;
a: m;
Задание 5.
Что можно сказать по следующему описанию:
type
mas = array [‘d’ .. ‘f’] of real;
mas1 = array [1 .. 7] of char;
var
a, b: mas;
c: mas1;
Классификация задач.
Объединим в группы задачи, обладающие одновременно схожими условиями и
принципами решения. В основу классификации положим признак, явно видимый из
условия задачи и существенно влияющий на её решение.
Ранее мы отмечали, что каждая величина в алгоритме имеет 4 основных
атрибута:
1. Имя величины.
2. Тип величины.
3. Значение величины.
4. Вид величины. Вид величины характеризует её использование в алгоритме,
т.е. отражает роль содержащейся в данной величине информации. По виду
все величины в алгоритмах делятся на входные (аргументы), выходные
(результаты) и промежуточные.
В качестве такого признака рассмотрим информационную роль массива в
алгоритме, т.е. вид массива.
5
Массив может быть:
- результатом алгоритма (заполнение);
- аргументом (обработка);
- аргументом-результатом (модификация).
Видим, что обработка включает слишком большой класс задач (задач
обработки), решаемых разными методами. Среди задач обработки можно выделить две
большие группы:
- задачи анализа;
- задачи поиска.
В задачах анализа требуется просмотреть весь массив и определить какие-то его
характеристики. В задачах поиска требуется найти в массиве элемент, обладающий
нужным свойством, причём просматривать весь массив для этого не обязательно.
Многие задачи модификации не требуют освоения специальных приёмов и сводятся к
комбинации задач анализа и задач заполнения (например, задача о корректировке –
элементы меньше 100 заменить на 100). Реальный интерес представляют задачи
перестановки, в которых необходимо переставить элементы заданного массива в
соответствии с какими-то требованиями.
Окончательно получили следующие группы:
1. Задачи заполнения (массив является результатом выполнения программы).
2. Задачи анализа (массив задан и надо найти какие-то его характеристики). В
задачах анализа просмотр ведётся во всём массиве, т.к. элементы,
обладающие нужным свойством могут находиться в любом месте массива
или вовсе отсутствовать.
3. Задачи поиска – основной вопрос поиска – где в массиве находится
элемент, обладающий нужным свойством. В задачах поиска критерий
должен быть абсолютным.
4. Задачи перестановки.
Важное замечание.
Существует различие между регулярными типами в языке Pascal и массивами в
некоторых других языках программирования, заключающееся в том, что в Pascal
количество элементов массива всегда должно быть фиксировано, т.е. определено при
трансляции программы. Это считается недостатком языка, т.к. не во всех программах
можно заранее предсказать необходимый размер массива. Поэтому в программах,
обрабатывающих массивы, помимо использования предварительно определённых
констант для определения размера массива,
const n = 150;
type a = array [1 .. n] of word;
var b: a;
иногда используют приём, позволяющий имитировать работу с массивами
переменной длины, который заключается в следующем: в разделе описания
предварительно определяют возможное максимальное значение размера массива, затем
в программе запрашивают текущее значение размера и используют это значение далее
при заполнении и обработки массива. Например:
type mas = array [1 .. 100] of word;
var a: mas; i, n: byte;
begin
witeln (‘введите количество элементов массива’);
readln (n);
……………….
6
Задачи заполнения.
1.
2.
3.
4.
5.
Выделим несколько способов заполнения массивов.
Задачи заполнения
«Ручное»
В диалоге с
Заполнение С использованием
При
заполнение пользователем по правилу
датчика
описании
случайных чисел
массива
«Ручное» заполнение с использованием оператора присваивания – самый
трудоёмкий, самый не оптимальный.
A [1]: = -8
A [2]: = 15
A [3]: = …
………….
Заполнение массива в диалоге с пользователем: в цикле используются операторы
(процедуры ввода и вывода Read и Writeln).
for i: = 1 to n do
begin
writeln (‘введите’, i, ‘элемент массива’);
readln (A [i]);
end;
Формирование массива, значения элементов которого подчинены какому-то
правилу.
Сформировать числовой массив, элементы которого равны значению индекса.
for i: = 1 to n do
A [i]: = i;
Заполнение массива с использованием датчика случайных чисел.
Сформировать числовой массив, элементы которого могут принимать значения из
диапазона от 0 до m.
for i: = 1 to n do
A [i]: = random (m);
Задание значений при описании (жёстко). Удобно использовать при отладке и
тестировании программы.
const
n = 8;
a: array [1 … n] of byte = (2, 2, 3, 4, 5, 2, 7, 6);
или
const
a: array [1 … 10] of byte = (3, 2, 15, 7, 4, 8, 12, 0, 9, 10);
Замечание.
На блок-схеме изображать цикл с параметром «for» можно двумя способами:
for i: = in to ik do оператор;
Способ 1. (Аналог цикла с предусловием while)
Способ 2.
i: = in
false
i  ik
true
оператор
i: = in, ik, 1
true
оператор
i: = i + 1
7
Блок заданий № 2.
Задание 1.
Имеются описания массивов:
const m = 52;
t = 1 .. m;
type mas = array [0 .. m] of real;
mas1 = array [t] of 0 .. 52;
var a: mas1;
b, c: mas;
d: array [-3 .. 3] of integer;
1) Сколько массивов описано? (Назвать имена).
2) Для каждого массива указать:
а) сколько в нём элементов;
б) какие значения могут принимать элементы;
в) как в программе обратиться к первому и последнему элементу.
Задание 2.
Указать ошибки в описаниях:
а) const m = 100;
type
vord = array [1 .. m] of byte;
var digit: array [0 .. 3] of;
a: vord;
б) type
ab: array [1 .. n] of
char;
var
ba = ab;
ac = array [10 .. 1002] of real;
Задание 3.
Описать регулярный тип, объединяющий в себе массивы, элементами которого
являются вещественные числа, а индексы – строчные буквы латинского алфавита.
Задание 4.
а) Описать массив ваших оценок за I полугодие.
б) Описать массив, элементами которого является среднесуточная температура
за декабрь 2002 года.
в) Описать массив, элементами которого является первый столбец кодовой
таблицы символов ASCII кодов
Задание 5.
Выбрать правильные операторы, если массив имеет следующее описание:
var
M: array [1 .. 4] of integer;
а) M [4]: = M [1]/5;
б) M: = M [1] + 3;
в) M2: = 2;
г) M [2]: = M [5] + 2;
8
Задание 6.
Описать массив, чтобы приведённые операторы были верными:
x: = 25;
A [3]: = sqrt (x);
For i: = 1 to 7 do
Writeln (A [i]);
Задание 7.
Какую из основных характеристик величин приняли в качестве признака
классификации при решении задач на массивы. Ответ обоснуйте.
Задание 8.
Приведите классификацию задач.
Задание 9.
Перечислите способы заполнения массивов.
Задание 10.
Изобразите двумя способами блок-схему для заполнения массива целыми
числами от 0 до 9 с использованием датчика сложных чисел.
Способ 1.
Способ 2.
i: = 1
false
i  in
true
i: = 1, n, 1
a[i]: = Random (10)
true
a[i]: = Random (10)
i: = i + 1
Задание 11.
Изобразите двумя способами блок-схему для заполнения массива по
следующему правилу: каждый нечётный элемент массива равен утроенному индексу, а
каждый чётный – индексу, увеличенному на 2.
Способ 1.
Способ 2.
i: = 1
false
i  in
false
true
odd(i)
a[i]: = i+2
false
true
a[i]: = 3*i
true
i: = 1, n, 1
false
a[i]: = i+2
odd(i)
true
a[i]: = 3*i
i: = i + 1
9
Задачи для самостоятельного выполнения на компьютере.
Задача 1.
Составьте
способами.
программу,
иллюстрирующую
заполнение
массивов
разными
Требования к оформлению программы:
1. Придумайте своё правило, по которому формируются значения элементов
массива, и реализуёте его.
2. Используя возможности текстового вывода модуля CRT, оформите
комментированный вывод всех сформированных массивов на экран
одновременно, организуя вывод элементов некоторых массивов в строку, а
некоторых – в столбец.
3. Предусмотрите повтор программы по желанию пользователя.
Задача 2.
Составьте программу, позволяющую сформировать массив по желанию
пользователя из двух предложенных способов:
1. в диалоге с пользователем;
2. с использованием датчика случайных чисел
и вывести его на экран.
Дополнительно: для тех, кто быстро справился с программой, предложить
модифицировать программу таким образом, чтобы реализовать заполнение массива как
положительными, так и отрицательными элементами с использованием датчика
случайных чисел.
Задача 3.
Составить программу формирования массива, элементы которого являются
числами последовательности Фибоначчи.
(последовательность чисел Фибоначчи составляется по следующему правилу:
f1=1,
f2=1,
fi=fi-1+fi-2, для i2.
Т.е. первые два числа равны 1, а далее, каждое последующее равно сумме двух
предыдущих чисел).
10
Задачи анализа.
В задачах анализа требуется просмотреть весь массив и определить какие-то его
характеристики (нахождение суммы элементов массива, нахождение произведения
элементов массива, определение количества элементов массива, обладающим заданным
свойством, определение максимального и минимального элементов массива и т.д.).
Алгоритм решения каждой задачи на компьютере можно представить в виде
следующей блок-схемы:
начало
конец
Таким образом, каждая задача при решении на компьютере должна содержать:
Ввод исходных данных
Обработка
Вывод результата
Задача 1.
Найти сумму элементов целочисленного массива.
Пусть имеем целочисленный массив из (количество элементов можно спросить у
учащихся и рассматривать для этого значения) 7 элементов. Имя массива а. Индекс
первого элемента возьмём 1.
1. Опишите этот массив
type mas = array [1 .. 7] of integer;
var a: mas;
2. Все значения массива располагаются в последовательных ячейках памяти.
Значит модель хранения информации в памяти компьютера можно
представить в виде:
1
2
3
4
5
6
7
3. Заполним ячейки памяти конкретными значениями.
4
16
8
-17
9
21
-3
1
2
3
4
5
6
7
4. Как вы будете находить сумму значений элементов данного массива без
использования компьютера?
4 + 16 = 20 – результата сложения двух первых элементов
20 + 8 = 28 – результата сложения трёх элементов
28 + (-17) = 11 – результата сложения четырёх элементов
11
11 + 9 = 20 – результата сложения пяти элементов
20 + 21 = 41 – результата сложения шести элементов
41 + (-3) = 38 – результата сложения семи элементов
На каждом шаге, начиная со второго, мы к предыдущему значению результата
добавляли (складывали) очередное следующее значение элемента и находили сумму.
Используя обозначения, что 4 – это значение первого элемента массива а[1], 16 – это
значение второго элемента массива a[2] и т.д., и обозначив результат (сумму)
идентификатором S, запишем эти действия в виде:
S = a[1] + a[2]
S = S + a[3]
S = S + a[4]
S = S + a[5]
S = S + a[6]
S = S + a[7]
Начиная со второй строки – все они имеют одинаковую структуру,
отличающуюся только индексом элемента. Как можно записать первую строку в таком
же виде?
S=0
S = a[1]
S = S + a[1]
S = S + a[2]
S = S + a[3]
…………..
S = S + a[n]
S: = 0
S: = S + a[1];
S: = 0;
for i: = 1 to n do
S: = S + a[i]
S: = S + a[2];
…………….
S: = S + a[n];
Задача 2.
Найти произведение отрицательных элементов массива.
Вопрос: Для нахождения произведения отрицательных элементов в массиве будем
просматривать весь массив? (Да).
Вопрос: Какая алгоритмическая конструкция позволит это реализовать? (Цикл).
for i: = 1 to n do
Вопрос: Прежде чем умножить очередной элемент, что необходимо сделать?
(Проверить, является ли он отрицательным).
Вопрос: Какая алгоритмическая конструкция позволяет это реализовать? (Ветвление).
Вопрос: Как она записывается по правилу языка Pascal?
if логическое выражение then оператор 1 else оператор 2;
Вопрос: В какой форме используется оператор if? (В краткой). Почему? (Находим
произведение только отрицательных элементов, если же элемент не отрицательный, то
переходим к следующему элементу).
Вопрос: Какое действие повторяется (Умножение).
12
Вопрос: Структура записи. P: = P*a[i].
Вопрос: Чему равно P предыдущее на первом шаге ? (P = 1).
P: = 1;
fоr i: = 1 to n do
if a[i]<0 then P: = P*a[i];
Задача 3.
Найти максимальный элемент массива
Вопрос: Чтобы найти максимальный элемент будем просматривать все элементы
массива? (Да).
Вопрос: Какая алгоритмическая конструкция позволит реализовать просмотр всех
элементов массива? (Цикл).
Вопрос: Какой из видов циклов предпочтительнее использовать в данной ситуации?
(Цикл с параметром, потому что все элементы массива упорядочены, а параметр цикла
увеличивается автоматически на единицу, позволяя переходить к следующему
элементу массива).
Вопрос: Как выглядит заголовок цикла?
for i: = 1 to n do оператор;
где n – количество элементов массива.
Вопрос: Как обозначим наибольший элемент? (Например max). Пусть (это наше
предположение) наибольшим является первый элемент массива.
Вопрос: Как можно, просматривая элементы массива, выделить наибольший?
(Выслушать ответы учеников. Они обязательно скажут, что необходимо сравнивать
элементы). Если учащиеся затрудняются, то можно предложить следующий подход.
Вопрос: Как записать это предположение?
max: = a[1];
И дальше сравниваем все оставшиеся элементы с наибольшим. Если значение
максимального элемента оказывается меньше очередного значения элемента массива,
то необходимо сделать наибольшим значением это очередное значение элемента
массива.
Вопрос: Как реализовать вышесказанное с использованием операторов языка Pascal?
max: = a[1];
for i: = 2 to n do
if max<a[i] then max: = a[i];
Задача 4.
Найти индекс максимального элемента массива. Решать на компьютере.
Требования к оформлению задачи:
1. Предусмотреть запрос у пользователя размера массива.
2. Предусмотреть возможность ввода массива по желанию пользователя: или в
диалоге, или формирование массива с использованием датчика случайных
чисел.
3. Предусмотреть вывод в строку исходного массива.
4. Организовать комментированный вывод результата.
5. Предусмотреть повторение программы по желанию пользователя.
program m2;
uses CRT;
type mas = array [1 .. 100] of integer;
13
var a: mas;
imax, m, n, i, max; integer;
c: char;
begin
repeat
clrscr;
Randomize;
writeln (‘Программа позволяет найти индекс наибольшего элемента’);
writeln (‘Введите количество элементов массива’);
readln (n);
writeln (‘Выберите способ ввода массива’);
writeln (‘1 – Ввод значений элементов массива в диалоге с пользователем’);
writeln (‘2 – Заполнение массива с использованием датчика сл. чисел’);
readln (m);
case m of
1: for i: = 1 to n do
begin
writeln (‘Введите значение’, i, ‘элемента массива’);
readln (a[i]);
end;
2: for i: = 1 to n do
a[i]: = Random (10);
end;
writeln (‘Исходный массив’);
for i: = 1 to n do
write (a[i]: 3);
writeln;
max: = a[1];
imax: = 1;
for i: = 2 to n do
if max  a[i] then
begin
max: = a[i];
imax: = i;
end;
writeln (‘Индекс наибольшего элемента = ’, imax);
writeln (‘Хотите повторить y/n?’);
readln (c);
until c = ‘n’;
end.
Для тех, кто закончил программу, задать дополнительные вопросы:
1. Если в массиве несколько элементов имеют наибольшее значение, то индекс
какого из них будет выведен?
2. Какие необходимо внести изменения, чтобы вывести в качестве результата
индекс последнего наибольшего элемента массива?
3. Модифицировать программу, чтобы на экран выводилось наибольшее значение,
а также индексы всех максимальных элементов.
14
Задача 5.
Найти количество элементов массива, больших х. Выполнить на компьютере.
Требования к оформлению задачи:
1. Предусмотреть запрос у пользователя размера массива.
2. Предусмотреть возможность ввода массива по желанию пользователя: или в
диалоге, или формирование массива с использованием датчика случайных
чисел.
3. Предусмотреть вывод в строку исходного массива.
4. Организовать комментированный вывод результата.
5. Предусмотреть повторение программы по желанию пользователя.
15
Задачи поиска.
Задачи поиска очень похожи на задачи анализа. В них массив тоже задан, т.е.
является аргументом алгоритма, и нужно найти, где в этом массиве находится нужный
элемент.
Существуют различные методы поиска, мы рассмотрим только самый простой
из них – метод последовательного перебора.
Задача 1.
Найти в массиве элемент, равный х.
Найти элемент, значит найти его индекс, т.е. такое j, что A[j] = x. Поскольку искомого
элемента может и не оказаться, будем считать, что в этом случае j = 0. Простейший
способ – перебрать все элементы массива и запомнить, где расположен нужный.
program poisk1;
const m = 100;
type mas = array [1 .. m] of real;
var x: real;
a: mas;
i, j: byte;
begin
readln (n); {размер массива}
readln (x); {значение, с которым сравниваем}
j: = 0;
fоr i: = 1 to n do
if A [i] = x then j: = i;
if j = 0 then write (‘нет такого элемента’)
else write (‘есть элемент; его индекс’, j)
end.
У этой программы два недостатка:
1. Если значение х встречается в массиве несколько раз, мы в результате получим
индекс последнего из этих элементов;
2. После того, как элемент уже найден, происходит ненужный просмотр массива до
конца.
Для устранения этих недостатков достаточно организовать просмотр так, чтобы
остановиться сразу же после первой встречи с элементом, равным х. Но, поскольку мы
не знаем, где находится такой элемент и есть ли он вообще, мы не можем заранее
определить количество повторений цикла, следовательно необходимо использовать
цикл while или repeat.
program poisk2;
const m = 100;
type mas = array [1…m] of real;
var x: real; a: mas; i, j: byte;
begin
read (n); read (x);
j: = 0;
i: = 1;
while (i  = n) and (j = 0) do
16
begin
if A[i] = x then j = i;
i: = i + 1;
end;
if j = 0 then writeln (‘нет такого элемента’);
else writeln (‘есть такой элемент, его индекс’, j);
end.
Блок заданий № 3.
Задание 1.
Какое значение примет переменная S в результате выполнения следующего
фрагмента, при n = 5. Зарисовать данный фрагмент в виде блок-схемы.
readln (n);
for i: = 1 to n do
a [i]: = i + 1;
S: = 0;
for i: = 1 to n do
begin
T: = A [i] mod i;
S: = S + T
end;
writeln (‘S = ’, S);
Задание 2.
Какое значение примет переменная S в результате выполнения следующего
фрагмента, при n = 10. Зарисовать данный фрагмент в виде блок-схемы.
readln (n);
a [1]: = 1;
a [2]: = 3;
for i: = 3 to n do
a [i]: = a [i-1] + a [i-2];
S: = a [1] + a [n];
writeln (‘S = ’, S);
Задание 3.
Какое значение примет переменная S в результате выполнения следующего
фрагмента, при n = 7. Значения элементов массива А равны соответственно: 1; 2; 0; 3;
4; 6; 3. Зарисовать данный фрагмент в виде блок-схемы.
for i: = 1 to n do
begin
t: = a [i];
a [i]: = a [n – i + 1];
a [n – i + 1]: = t;
end;
S: = a [2] + a [4];
writeln (‘S = ’, S);
17
Задание 4.
Какое значение примет переменная S в результате выполнения следующего
фрагмента, при n = 9. Значения элементов массива А равны соответственно: 5; -4; 3;
2; 1; -1; -1; 2; -4. Зарисовать данный фрагмент в виде блок-схемы.
S: = 0;
for i: = 2 to n – 1 do
if (a [i] * a [i + 1]  0) and (a [i] * a [i – 1]  0) then S: = S + 1;
writeln (‘S = ’, S);
Задание 5.
Записать данный фрагмент на языке Pascal и определить, какое значение будет
иметь переменная S в результате его выполнения при n = 4, если значения элементов
массива А равны: 4; 2; 1; 5.
S: = 0
P: = 1
i: = 1
false
true
i:  n
P: = P*i
S: = S + a[i]/P
i: = i + 1
S
Задание 6.
Записать данный фрагмент на языке Pascal и определить какое значение будет
иметь переменная Р в результате выполнения данного фрагмента при n = 6, если
элементы массива А равны соответственно: 1; 0; 11; 3; 2; 4.
P: = 1
i: = 1
false
i:  n-1
true
P: = P*(a[i]/3+1)
i: = i+2
P
18
Задание 7.
Чему будут равны значения элементов массива В после выполнения данного
фрагмента, если количество элементов целочисленного массива А равно n = 5;
значения элементов массива А равно: 5; -3; 0; -2; 1. Запишите данный фрагмент по
правилам языка Pascal.
k:=0
i:=1
false
i:  n
true
false
a[i]  0
true
k:=k+1
B[k]:=A[i]
i:=i+1
B
Задание 8.
Чему будут равны значения элементов массива В после выполнения данного
фрагмента, если количество элементов целочисленного массива А равно n = 4;
значения элементов массива А равно: 6; 6; 4; 8. Запишите данный фрагмент по
правилам языка Pascal.
S:=0
i:=1
false
in
true
S:=S+a[i]
i:=i+1
i:=1
false
in
true
B[i]:=(S-a[i]) / (n-1)
i:=i+1
B
19
Задачи для самостоятельного решения на компьютере.
Требования к оформлению задачи:
1. Предусмотреть запрос у пользователя размера массива.
2. Предусмотреть возможность ввода массива по желанию пользователя: или в
диалоге, или формирование массива с использованием датчика случайных
чисел.
3. Предусмотреть вывод в строку исходного массива.
4. Организовать комментированный вывод результата.
5. Предусмотреть повторение программы по желанию пользователя.
Задача 1.
Сформировать одномерный массив А, состоящий из N элементов. Элементам
массива А последовательно присвоить значения первых N чисел Фибоначчи.
Задача 2.
Сформировать одномерный массив А, состоящий из N элементов, элементы
которого А[i] равны значениям функции y = x2+2x+5 для x = 1.1; 1.2; … 1+0.1*N.
Задача 3.
Дан целочисленный одномерный массив А, состоящий из N элементов.
Составить программу вычисления S = A1+A1A2+ … +A1A2 … An.
Задача 4.
Даны два вектора a и b , состоящие из N элементов каждый. Составить
программу, позволяющую вычислить скалярное произведение этих векторов ( a * b).
Задача 5.
Дан одномерный целочисленный массив А, состоящий из N различных
элементов. Поменять местами наибольший и наименьший элементы массива.
Исходный и полученный массивы вывести на экран.
Задача 6.
Дан одномерный целочисленный массив А, состоящий из N различных
элементов. Составить программу, позволяющую определить, со скольких
отрицательных элементов он начинается.
20
Сортировка одномерного массива.
Сортировка – это такая перестановка элементов в массиве, после которой они
оказываются упорядоченными требуемым образом.
Сортировка методом "пузырька".
Этот метод очень прост, но работает очень медленно. Он основан на попарном
сравнении смежных элементов: если порядок следования элементов в очередной паре
неправильный, то эти элементы меняются местами. Для выполнения обмена требуется
дополнительная переменная, сохраняющая на время одно из значений обмена, т.е. эта
переменная используется в качестве рабочей ячейки.
Обсудим сортировку числовых значений в порядке убывания.
Массив А из четырёх элементов: А[1], А[2], А[3], А[4]. Пройдёмся по массиву от
первого элемента до последнего, выбирая по очереди пару смежных значений. Если
левое значение меньше правого, то выполняется обмен значениями. Это гарантирует
перемещение наименьшего значения в последний элемент массива, хотя остальные
значения могут и не быть пока упорядоченными. Дальше будем рассматривать
элементы от первого до предпоследнего и т.д.
Стадии пузырьковой сортировки массива из четырёх значений.
7
13
2
19
Пробегаемые значения
13
7
19
2
Пробегаемые значения
13
19
7
2
Пробегаемые значения
19
13
7
2
Начальное содержимое
После первого прохода
После второго прохода
После третьего заключительного прохода
Таким образом, при применении этого метода, каждый следующий проход
становится короче и значения занимают свои места по направлению от конца массива к
его началу.
Каждый проход обеспечивает перемещение наименьшего значения в конец
рассматриваемой порции массива, т.е. «подъём вверх» в правильную позицию.
Метод «Пузырька».
На первом шаге просматриваем все элементы массива (n). На следующем –
количество просматриваемых элементов уменьшилось, на 1, т.к. элемент, имеющий
наименьшее значение уже стоит в конце массива и его ещё раз просматривать не надо.
На последнем шаге мы просматриваем два элемента (первый и второй).
Как можно записать эти действия по правилу языка Pascal?
for i: = N downto 2 do.
На каждом из проходов мы сравниваем два соседних элемента и на первом шаге
сравнение идет всех элементов, на следующем шаге сравниваются n-1 элемент, на
следующем: n-2 элемент и т.д.
Как можно записать эту конструкцию?
for i: = n downto 2 do
for j: = 1 to i-1 do
if a[j]  a[j+1] then {обмен значениями}
21
Фрагмент программы пузырьковой сортировки (в порядке убывания).
for i: = n downto 2 do
for j = 1 to i – 1 do
if a[j]  a[j + 1]
then begin
t: = a[j];
a[j]: = a[j + 1];
a[j + 1]: = t;
end
Задание для работы на компьютере.
Составить программу, позволяющую отсортировать массив по возрастанию.
Для тех, кто быстро справился с заданием, дать дополнительно:
В отсортированный массив вставить в нужное место массива, не нарушая его
сортировку, какое-то значение, запрошенное у пользователя. Примечание:
дополнительный массив не использовать.
Сортировка выбором (в порядке возрастания).
Очевидно, что первое место в массиве должен занять наименьший элемент,
второе – наименьший из всех остальных элементов и т.д. тогда схема программы может
быть следующей:
program vybor;
{описания};
begin
{ввести массив х};
for i = 1 to n do
begin
{найти индекс k наименьшего элемента среди xi, xi+1, …, xn};
{переставить xi с xk};
{вывод очередного элемента массива};
end;
end
Будем детализировать схему.
ввод массива не вызывает затруднений
for i: = 1 to n do
read (x[i])
{поиск индекса k – наименьшего элемента среди x[i], … x[n]};
k: = i;
for j: = i + 1 to n do
if x[j]  x[k] then k: = j;
{для перестановки x[i] с x[k] используется переменная v}
v: = x[i]; x[i]: = x[k]; x[k]: = v;
Теперь напишем программу.
program vybor;
const n = 20;
type u = array [1 .. n] of real;
22
var x: u;
v: real;
i, j, k: integer;
begin
for i: = 1 to n do
read (x[i]);
for i: = 1 to n-1 do
begin
k: = i;
for j: = i + 1 to n do
if x[j]  x[k] then k: = j;
v: = x[i]; x[i]: = x[k]; x[k]: = v;
writeln (x[i]);
end
end.
Сортировка массива с использованием индекса.
a — массив исходных данных
b — массив индексов
program index;
uses crt;
type mas = array [1 .. 100] of integer;
var a, b: mas
i, j, t, n, k, it, i1, i2, l: integer;
c: char;
begin
repeat
writeln (‘Сортировка массива с использованием индекса’);
writeln (‘Введите количество элементов массива’);
readln (n);
for i: = 1 to n do a[i]: = random (100);
{задаём начальные значения элементов массиву индексов}
{перед началом сортировки массив индексов b[i] имеет значения }
{b[1] = 1, b[2] = 2, …, b[n] = n}
for i: = 1 to n do
b[i]: = i;
writeln (‘исходный массив’);
for i: = 1 to n do
write (a[i], ‘ ’); writeln;
{Вместо переупорядочения самих значений в процессе сортировки}
{ можно образовать массив индексов, в котором отмечаются правильные}
{ места значений массиве. Во время сортировки значения остаются}
{ на исходных местах, а изменяется индекс}
for i: = n downto 2 do
for j: = 1 to i – 1 do
{Для индексов должно выполняться соотношение :}
{b[исходная позиция] = новая позиция}
begin
i1: = b[j];
i2: = b[j + 1];
23
{При сортировке во время каждого прохода сравниваются}
{ значения из a, определённые по b[ ], }
{а переставляются значения индекса в b[ ]}
if a[i1]  a[i2] then
begin
b[j]: = i2;
b[j + 1]: = i1;
end;
end;
writeln (‘Отсортированный массив’);
for i: = 1 to n do
begin
i1: = b[i];
write (a[i1], ‘ ’);
end;
writeln;
writeln (‘y/Y’); readln (c);
until (c = ‘n’) or (c = ‘N’;)
end.
Задачи для самостоятельного решения на компьютере.
Требования к оформлению задачи:
1. Предусмотреть запрос у пользователя размера массива.
2. Предусмотреть возможность ввода массива по желанию пользователя: или в
диалоге, или формирование массива с использованием датчика случайных
чисел.
3. Предусмотреть вывод в строку исходного массива.
4. Организовать комментированный вывод результата.
5. Предусмотреть повторение программы по желанию пользователя.
Задача.
Дан одномерный целочисленный массив А, состоящий из 2N элементов (N –
заданное натуральное число). Получить новую последовательность
А1, А2n, A2, A2n-1, A3, A2n-2, …, An, An+1.
24
Проверочная работа № 1
По теме «Одномерные массивы».
Задание 1.
Имеются описания массивов:
Const d=21; S=1..d;
Type M=array[0..d] of byte;
m1=array[s] of char;
Var A:m1; b,c:m
f:array[-1..10] of integer;
1.
2.
Сколько массивов описано? (Назвать имена).
Для каждого массива указать:
a) Сколько в нем элементов?
b) Какие значения могут принимать элементы?
c)
Как в программе можно обратиться к первому и последнему элементам?
Задание 2.
Указать ошибки в следующих описаниях массивов:
Const n=100;
Type Liter=array[1..m] of word;
simbol=array[0..n] of char;
mas=array[1..n-1] of real
Var
mas:mas1;
mas2:array[1.2..9] of;
f:Liter;
ff:simboly;
Задание 3.
а) Описать регулярный тип, объединяющий в себе массивы, значениями
элементов в которых являются вещественные числа, а индексами - натуральные
числа.
б) Описать регулярный тип, объединяющий в себе массивы, значениями
элементов в которых является температура воздуха в вашей местности в марте
месяце.
Задание 4.
а) Описать массив среднемесячной заработный платы работников бюджетной
сферы.
б) Описать массив, значениями элементов которого является число жителей
подъезда на лестничной клетке вашего дома.
Задание 5.
Выбрать правильные операторы, если массив имеет следующее описание:
Type M1=array[0..4] of integer;
Var A:m1;
a) A[4]:=A[2]/2;
c) A2:=4;
b) A:=A[3]+3;
d) A[2]:=A[5]+2;
Задание 6.
Описать массив, чтобы приведенные операторы были верными:
A:=16;
M[4]:=abs(a)/4;
For i:=1 to 16 do
Writeln(M[i]);
25
Контрольная работа
по теме: «Одномерные массивы».
Теоретическая часть.
Вариант 1.
1. Описать регулярный тип, объединяющий в себе массивы, элементами которых
является заработная плата работников, в организации, где работают ваши родители.
2. Записать массив значений, получаемый в результате выполнения следующих
операторов, поставив в соответствие каждому элементу его индекс, и привести
точное описание массива, учитывая, что в данном фрагменте отражены все
элементы массива:
….
R:=5;
К:=4;
Repeat
М[k]:=(R+k) mod 3;
If M[k] < k then
k:=k+1
until k=R*2;
….
3. Составить фрагмент программы, формирующий массив из 10 элементов, значения
которых таковы:
-1; 2; -3; 4; -5; 6; -7; 8; -9; 10
4. Выбрать массив, который мог быть получен с помощью такой последовательности
операторов:
(Ответ обосновать).
….
d:=3;
While d < 7 do
begin
а) 1; 125; 1; 1
c[d]:=Random(25);
б) 27; 0; 1000; 8
c1:=1;
в) 1; -125; 1; 1
For k:=1 to 3 do
г) 1; 1; 1; 1; 1
c1:=c1*c[d];
д) 1.1; 125; 125; 125
c[d]:=c1;
d:=d+1;
end;
….
5. Указать правильно записанные операторы, обосновав свое решение, если массив
имеет следующее описание:
Var Mas1: array [1..7] of Integer;
….
а)
б)
в)
г)
MAS1:=MAS1+1;
Mas[1]:=-5;
Mas1[3]:=Mas1[5]+ Mas1[7];
Mas1[5]:= Mas1[2]/2;
д) For n:=1 to к do
For m:=7 downto 1 do
mas1[n]:=mas1[m];
26
Контрольная работа
по теме: «Одномерные массивы».
Теоретическая часть.
Вариант 2.
1. Описать регулярный тип, объединяющий в себе массивы, элементами которых
являются данные в баллах, полученные абитуриентами на вступительных экзаменах
в ВУЗ.
2. Записать массив значений, получаемый в результате выполнения следующих
операторов, поставив в соответствие каждому элементу его индекс, и привести
точное описание массива, учитывая, что в данном фрагменте отражены все
элементы массива:
….
H:=2;
a:=12;
b:= 4.3;
n:= a div (Round (b));
While H+n < 8 do
Begin
M[n]:= (n*SQR(h)) – 10;
If (M[n] div 2=M[n] div 2 + M[n] mod 2) and (M[n] < 5)
Then M[n]:= 0;
n:= n+1;
end;
….
3. Составить фрагмент программы, формирующий массив из 10 элементов, значения
которых таковы:
2; 4; -6; 8; 10; -12; 14; 16; -18; 20.
4. Выбрать массив, который мог быть получен с помощью такой последовательности
операторов:
(Ответ обосновать).
…. I:=1;
Repeat
а) 1.5; 1.5; 10
k[i]:= Random(10);
б) 0; 0.5; 3
if k[i] < 5 Then begin k[i]:= k[i]/2; i:=i+1; end; в) 1; 15; 3; 5; 10
until k[i]=10;
г) 1; 2; 3; 1.5; 10
….
д) 1.5; 3; 10
5. Указать правильно записанные операторы, обосновав свое решение, если массив
имеет следующее описание:
Var Mas2: array [1..5] of Real;
….
а) MAS[2]:=MAS[2]+1;
д) for i:=1 to 5 do
б) Mas2[1]:=-Mas2[5];
begin
в) Mas2[3]:=Mas2[3]*Mas2[7];
if mas2[i] < mas2[i+1];
г) Mas2[5]:= Mas2[0]/10;
then mas2[i]:=0;
end;
27
КОНТРОЛЬНАЯ РАБОТА.
По теме: «ОДНОМЕРНЫЕ МАССИВЫ».
Практическая часть.
Примечание
Решение задачи под номером 1 оценивается на "хорошо".
Решение задачи под номером 2 оценивается на "отлично".
Вариант № 1.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N—
заданное натуральное число. Найти сумму всех элементов массива, если среди них
есть хотя бы один, больший единицы, и произведение — в противном случае.
2. Дан целочисленный одномерный массив А. Составить программу подсчета
наибольшего числа идущих подряд одинаковых элементов.
Вариант № 2.
1. Дан одномерный массив А, состоящий из N элементов, N — заданное натуральное
число. Найти сумму всех элементов массива, номера которых больше номера
элемента, имеющего максимальное значение.
2. Дан одномерный массив Y. Сформировать массив Х, каждый элемент которого
формируется по правилу: Х[i] = min(Y[1], Y[2],…, Y[i]).
Вариант № 3.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Поменять местами значения первого и последнего
элементов массива, второго и предпоследнего и т.д.
2. Дан одномерный массив. Упорядочить все элементы массива по возрастанию и
поместить переменную В в соответствующее место массива. (Повторно сортировку
не использовать).
Вариант № 4.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Найти индексы минимальных элементов массива.
2. Дан целочисленный одномерный массив, состоящий из N элементов, N — заданное
натуральное число. Подсчитать количество различных чисел, встречающихся в этом
массиве. Повторяющиеся числа учитывать один раз.
28
Вариант № 5.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Определить, является ли данный массив
«перевертышем».
2. Дан одномерный целочисленный массив. Найти, сколько раз в нем повторяется
самое частое число.
Вариант № 6.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Написать программу, в результате выполнения
которой элементы массива заменяются на сумму предыдущего и последующего
значений.
2. Дан целочисленный одномерный массив А, состоящий из N элементов, N —
заданное натуральное число. Найти наименьшее число элементов, которые нужно
удалить из последовательности А[1], А[2], А[3],…,А[N], чтобы осталась
возрастающая последовательность.
Вариант № 7.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Составить программу нахождения числа нечетных
элементов, имеющих нечетные индексы.
2. Даны три целочисленных одномерных массива. Существуют целые числа,
встречающиеся во всех трех массивах. Найти одно из них.
Вариант № 8.
1. Дан одномерный целочисленный массив А, состоящий из N различных элементов,
N — заданное натуральное число. Найти разность между максимальным и
минимальным значениями элементов массива.
2. Даны два целочисленных одномерных массива А и В, элементы которых
упорядочены по возрастанию. Составить массив С, содержащий все элементы
массивов А и В, в котором все элементы тоже должны быть упорядочены по
возрастанию. (Не использовать сортировку массива С).
Вариант № 9.
1. Дан одномерный целочисленный массив, состоящий из N элементов, N — заданное
натуральное число. Найти количество элементов, начиная со второго, значение
29
которых превосходит сумму всех индексов элементов, стоящих перед ним. Если
таких элементов нет, то выдать соответствующее текстовое сообщение.
2. Дан одномерный целочисленный массив, состоящий из N элементов, N — заданное
натуральное число. Если имеется хотя бы одна пара совпадающих элементов, то
упорядочить элементы этого массива по неубыванию, иначе записать элементы
этого массива в обратном порядке.
Вариант № 10.
1. Дан одномерный массив, состоящий из N элементов, N — заданное натуральное
число. Сжать этот массив, удалив из него элементы, значения которых принадлежат
сегментам [1,10] [20,30], и сохранив взаимное расположение остальных элементов в
массиве. Если таких элементов нет, то выдать соответствующее текстовое
сообщение.
2. Дан одномерный массив, состоящий из N элементов, N — заданное натуральное
число. Присвоить переменной F=1, если элементы массива составляют строго
возрастающую арифметическую прогрессию, и F= 2, если строго убывающую
арифметическую прогрессию.
Вариант № 11.
1. Дан одномерный массив, состоящий из N элементов, N — заданное натуральное
число. Сформировать новый одномерный массив В из положительных элементов
исходного массива, индекс которых кратен 3. Если таких элементов нет, то выдать
соответствующее текстовое сообщение.
2. Дан одномерный массив, состоящий из N элементов, N — заданное натуральное
число. Сколько значений элементов встречается в массиве по 3 раза?
Вариант № 12.
1. Дан одномерный целочисленный массив Т, состоящий из N элементов, N —
заданное натуральное число. Вычислить (Т1 + ТN)*(T2 + TN-1)*…*(TN + T1).
2. Дан одномерный целочисленный массив Х, состоящий из N элементов, где N —
заданное натуральное число. Все четные положительные элементы массива Х
перенести в его начало, а все остальные в конец, сохраняя взаимное расположение
как среди четных положительных элементов, так и среди остальных.
Вариант № 13.
1. Дан одномерный массив А, состоящий из N элементов, N — заданное натуральное
число. Вычислить S=A1 A2 A3 + A2 A3 A4 + … + AN-2 AN-1 AN
30
2. Дан одномерный массив А, состоящий из N элементов, N — заданное натуральное
число. Упорядочить массив А по неубыванию, используя следующий алгоритм
сортировки. Отыскивается максимальный элемент и переносится в конец. Затем
этот алгоритм применяется ко всем элементам, кроме последнего и т.д.
Вариант № 14.
1. Дан одномерный массив А, состоящий из N различных элементов, N — заданное
натуральное число. Элемент Аi (i = 1,2,3,…,N) называется особым, если модуль
разности i - го элемента и среднего арифметического значения всех элементов
меньше 3. Найти количество особых элементов.
2. Даны два целочисленных одномерных массива А и В, состоящие из N элементов
каждый, N— заданное натуральное число. Сформировать массив С, элементы
которого являются объединением указанных массивов, и расположить его элементы
по неубыванию. Одинаковые значения заносить только один раз.
Вариант № 15.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Присвоить переменной F значение 1, если элементы
массива составляют строго возрастающую последовательность, F = 3, если строго
убывающую, F = 2, если элементы массива составляют знакочередующуюся
последовательность, и F = 0, если она не является строго монотонной или
знакочередующейся.
2. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Найти произведение элементов массива А, которые
являются числами Фибоначчи и принадлежат сегменту [В;С].
Вариант № 16.
1. Дан одномерный целочисленный массив А, состоящий из N элементов, N —
заданное натуральное число. Элемент Аi (i = 1,2,3, … ,N) назовем особыми, если он
больше суммы остальных элементов. Составить одномерный массив В из особых
элементов массива А, оканчивающихся на 5. Если таких элементов нет, то выдать
соответствующее текстовое сообщение.
2. Дан одномерный массив А, состоящий из N элементов, N — заданное натуральное
число. Сколько значений элементов в массиве А встречается более одного раза.
31
СПИСОК ЛИТЕРАТУРЫ:
1.
2.
3.
4.
5.
6.
7.
Златопольский Д.М. Программирование: типовые задачи,
алгоритмы, методы. – М.: БИНОМ. 2007.
Окулов С.М., Ашихмина Н.А. Задачи по программированию.
Под редакцией С.М. Окулова. – М.: БИНОМ. 2006.
Окулов С.М. Основы программирования.– М.: БИНОМ. 2006.
Обработка
массивов.
Методическое
пособие.
Составители:
Власенко
О.Ф.,
Беляева
И.В.
Ульяновск.УГТУ,2000.
А.И. Гусева. Учимся программировать: PASCAL 7.0 Задачи и
методы их решения. Учебное пособие. – М.: ДИАЛОГ-МИФИ.
2001.
В.Б. Попов. TURBO PASCAL для школьников. Учебное
пособие.– М.: Финансы и статистика, 1999.
Фаронов
В.В.Turbo
Pascal
7.0.Начальный
курс.–
М.:«Нолидж», 1999.
ЭЛЕКТРОННЫЕ ИСТОЧНИКИ:
http://kpolyakov.narod.ru/index.htm - Сайт учителя информатики
Полякова К.Ю. Методические материалы и программное обеспечение
для школьников и учителей
http://www.school.edu.ru/default.asp - Российский
общеобразовательный портал
http://www.pascal-c.com/ - задачи на TURBO PASCAL
http://pas1.ru/ - сайт для учащихся средних и старших классов,
изучающих алгоритмику и программирование, с использованием
Pascal
http://www.videouroki.net/ - Видеоуроки по программированию на
языке PascalABC
http://www.rusedu.ru/ - Архив учебных программ и презентаций
http://hosting.ulstu.ru/ip/index.html - Интерактивный учебник
по программированию
http://tpxexe.narod.ru/index.html - Задачи по программированию
с решениями
http://it.kgsu.ru/Pascal/oglav.html
Информатика
и
программирование шаг за шагом
http://www.pascaler.ru/ - Курс обучения языку программирования
Turbo Pascal
http://pasadvice.narod.ru/index.htm
Примеры программ
на
языке программирования Pascal
http://school-collection.edu.ru/ - Единая коллекция ЦОРов
http://www.problems.ru/inf/ - Задачи по информатике
http://www.vzmakh.ru/info/algo/ - учебные материалы и тесты по
алгоритмике и программированию
http://marklv.narod.ru/inf/links.htm - Информатика в школе.
Ссылки по информатике
http://www.fiz.21308s01.edusite.ru/p1aa1.html - Сайт учителя
физики и информатики Егорова Алексея Галактионовича
32
Download