Используя команды повторения можно коротким алгоритмом описать большой объем действий, необходимых для решения поставленной задачи. Массивы играют аналогичную роль по отношению к данным и позволяют коротким алгоритмом описать действия с огромным объемом информации.
Применение массивов при описании алгоритмов решения практических задач позволяет:
1. записать коротким алгоритмом работу с большим объемом информации;
2. расширить область применимости алгоритма.
Необходимость в применении массивов для описания алгоритмов решения задач возникает, когда при решении задач приходится иметь дело с большим, конечным количеством однотипных упорядоченных по индексам объектов.
Массив– это упорядоченная по индексам, конечная совокупность однотипных объектов, образованных по одному и тому же правилу. Отношение порядка в массиве задается с помощью индексирования элементов массива. Если для индексирования массива используется один индекс, то массив называется одномерным, если два или больше, то многомерным. Для индексации элементов двумерного массива указываются два индекса, первый индекс, как правило, номер строки, второй – номер столбца. Одномерный массив часто называют вектором, двумерный – матрицей.
Практика 3 часть 1 Простые циклические алгоритмы для одномерных массивов
При работе с массивами, каждому массиву дается имя. Работа с массивом – это работа с элементами массива. Элементу массива дается имя, соответствующее имени массива, и указывается в квадратных или круглых скобках порядковый номер этого элемента в массиве.
Очевидно, чтобы задать массив (таблицу), необходимо:
1. указать, что однотипные объекты объединены в массив (таблицу);
2. указать имя массива (таблицы), начальный и конечный порядковые номера индексов его (её) элементов;
3. указать тип значений элементов массива (таблицы).
При описании массива после имени массива будем в круглых (квадратных) скобках указывать начальный и конечный номера каждого индекса элементов массива через двоеточие. Если массив многомерный, то описание начального и конечного номеров каждого индекса элементов массива разделим запятой. Например, А(1:50) – массив, элементы которого: А(1), А(2), … , А(50); В(1:2,1:3) – массив, элементы которого: .
Пример 1. Одномерный массив Осадки (1:365) – количество осадков в течение года.
Пример 2. Двумерный массив Расписание (1:4,1:2) – расписание уроков на 2 дня в 4 классе общеобразовательной школы.
Дни недели Номер урока | Понедельник | Вторник |
Математика | Русский язык | |
Русский язык | Математика | |
Природоведение | История | |
Физкультура | Рисование |
Массивы имеют размер и размерность. Размер массива – это количество элементов в данном массиве, размерность – количество индексов, необходимых для однозначного определения места фиксированного элемента массива. Массив примера 1 имеет размерность, равную 1 (одномерный), размер – 365. Массив примера 2 имеет размерность равную 2 (двумерный), размер 2∙4=8.
Блок-схемы
Элемент массива называется переменной с индексом, переменная без индекса – простой переменной. Над элементами массива можно производить те операции, которые допустимы для базового типа.
В качестве типов индексов элементов массива можно использовать целый тип. Индексы могут задаваться константами, переменными и выражениями. Значения переменных и выражений задают номер элемента массива, поэтому их значения должны быть определены при обращении к этому элементу. Элементами массива могут быть значения любого типа данной реализации языка.
Пример 3. Пусть массив A – одномерный массив, имеющий 4 элемента целого типа – integer: -12, 0, 41, -131.
направление изменения индекса
-12 | -131 |
Пример 4. Массив Q – двумерный массив, имеющий 3 строки и 4 столбца – 12 элементов вещественного типа – real:
направление изменения второго индекса
12,5 | -18,34 | |
-17 | 2,4 | 5,121 |
-45,41 | -28 |
Задача 21. Произведение элементов массива. Составьте блок-схему алгоритма нахождения произведения вещественных чисел
Решение. Смотри блок-схему алгоритма (задача 21), использована циклическая структура «while P do S».
Произведение можно находить так:
В блок-схеме вместо этой цепочки операторов запишем оператор П:=П×а(k), где k изменяется от 1 до n; k – параметр цикла. Чтобы значение первого произведения было равно a1, следует положить начальное значение П равным 1. Операторы 5-6 составляют тело цикла.
Задача 22. Произведение матриц. Составьте блок-схему нахождения произведения матрицы А на матрицу В:
Решение. Смотри блок-схемы 1-3 алгоритма (задача 22).
Смотри блок-схему 1 (задача 22). Произведение матрицы А на матрицу В есть матрица-столбец; обозначим ее С.
, где , i=1,2,…,m.
Функциональный блок, вычисляющий величину c(i), обозначим S1. Смотри блок-схему 2 (задача 22).
Получать элементы c(i) при фиксированном i можно так: c(i) = c(i)+a(i,j)∙b(j), где 1£j£n, а начальное значение c(i) равно 0.
Очевидно, что функциональный блок S1 будет содержать циклическую структуру, например, структуру «repeat S until P».
Подставив детализацию блока S1 (блок-схема 2 (задача 22)) в блок-схему 1 (задача 22), получим одну циклическую структуру внутри другой, вложенные циклы – блок-схема 3(задача 22).
Задача 23. Положительные числа. Дана числовая последовательность a1, a2, … , an. Определите, есть ли среди ai, 1£i£n положительные числа, если да, то переменной K присвойте значение 1, в противном случае – значение 0. Составьте блок-схему алгоритма решения поставленной задачи.
Решение. Смотри блок-схему алгоритма (задача 23).
Блок-схема алгоритма(задача 23): Блок-схема алгоритма (задача 24):
Поскольку положительный элемент может оказаться на i-ом месте, где i 0 – истинно, K получит значение 1. Проверка окончания организована так, что выход из цикла произойдёт или при i>n (положительного элемента нет), K = 0, или при i>n и K = 1 (этот элемент – последний в массиве), или при i n, где i – номер рассматриваемой буквы. Значение переменной K в этом случае равно 0. Если буква v входит в слово, выход из цикла может быть осуществлен раньше, чем i станет больше n, при K<> 0, где K – номер позиции первого вхождения буквы v в слово w.
Задача 25.Количество положительных элементов. Дана последовательность чисел a1, a2, … , an. Присвойте переменной m номер K-го положительного элемента этой последовательности. Если в последовательности положительных элементов меньше K, то переменной m присвойте значение 0. Составьте блок-схему алгоритма решения поставленной задачи.
Решение. Смотри блок-схему алгоритма (задача 25).
Подсчет количества положительных элементов массива организуем с помощью цикла с постусловием. Если положительных элементов нет или их меньше, чем K, выход из цикла осуществим при i>n, m присвоим значение 0. При l = K, где l – число положительных элементов, также реализуем выход из цикла. При этом i получит уже следующее значение. Значит, номер K-го положительного элемента на единицу меньше i.
Задача 26.Сдвиг в массиве. Переставьте вещественные элементы массива A(1:n) таким образом, чтобы они шли в следующем порядке: А(n), А(1), А(2), … , A(n-2), A(n-1), т.е. в массиве произведите сдвиг элементов на одну позицию вправо. Составьте блок-схему алгоритма решения поставленной задачи.
Решение. Смотри блок-схему алгоритма (задача 26).
Блок-схема алгоритма (задача 25): Блок-схема алгоритма (задача 26):
Задача 27.Максимальные элементы массива. Дана последовательность чисел a1, a2, … , an. Найдите количество максимальных элементов последовательности и их номера. Составьте блок-схему решения поставленной задачи.
Решение. Смотри блок-схемы 1-2 алгоритма (задача 27).
В блок-схеме1 алгоритма (задача 27) первый цикл организуем для определения максимального элемента, значение которого присваивается переменной b. Начальное значение b положим равным a1. Второй цикл считает K – количество одинаковых максимальных элементов. Переменная M(K) принимает значение индекса встретившегося максимального элемента. M(K) – числовая последовательность, членами которой являются эти индексы.
Блок-схема1 алгоритма (задача 27): Блок-схема2 алгоритма (задача 27):
Блок-схема2 алгоритма (задача 27) предполагает в одном цикле на i-ом шаге определение максимального элемента из i рассмотренных, подсчет количества таких элементов и фиксирование их номеров. Если на (i+1)-ом шаге встречается больший элемент, то операторы b:=ai, K:=1, mK:=i зададут новые начальные значения переменных b, K, mK, и все вычисления будут проведены относительно нового большего элемента.
Задача 28. Дружественные числа.Дружественными числами называются два натуральных числа, таких, что каждое из них равно сумме всех натуральных делителей другого, исключая само это другое число. Числа 220 и 284 являются дружественными числами, так как сумма делителей числа 220 – это 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284, а сумма делителей числа 284 – это 1 + 2 + 4 + 71 + 142 = 220. Составьте блок-схему алгоритма нахождения дружественных чисел на отрезке [2;n].
Решение. Смотри блок-схему алгоритма (задача 28).
Блок-схема алгоритма (задача 28):
Суммы делителей чисел от 2 до n организуем в виде массива Делитель(2:n), где Делитель(k) – текущая сумма делителей числа k. Вычислим суммы делителей всех чисел от 2 до n, затем попарно сравним эти суммы, если суммы делителей чисел k и s, принадлежащих [2;n], равны, то числа k и s – дружественные, их необходимо вывести.
Некоторые пары дружественных чисел:220 и 284, 1184 и 1210, 2620 и 2924, 5020 и 5564, 6232 и 6368 и т.д.
Задача 29.Группировка. Дан массив A(1:n), элементы которого отличны от нуля. Расположите их в таком порядке, чтобы первыми были все положительные элементы, а затем – все отрицательные, причем порядок следования как положительных, так и отрицательных элементов должен сохраняться. При решении задачи нельзя заводить новую таблицу. Составьте блок-схему алгоритма решения поставленной задачи.
Решение. Смотри блок-схемы 1-2 алгоритма (задача 29).
Для решения поставленной задачи будем перебирать элементы массива с первого по n-ый. Если A(i)>0, никаких изменений в массиве не производим, увеличиваем i на единицу и переходим к исследованию следующего элемента. Если же A(i)
Дата добавления: 2015-01-26 ; просмотров: 63453 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Источник: remnabor.net
Решение задач с одномерными массивами
Пусть необходимо сформировать массив А, содержащий 10 целых чисел, и вывести элементы массива на экран.
Для ввода и вывода элементов массива в программе используется цикл с заданным числом повторений, т.е. оператор For … next.
Блок-схема ввода и вывода одномерного массива
Блок-схема «а» – ввод элементов массива.
Блок-схема «б» – вывод элементов массива.
Блок-схема в – ввод и вывод элементов массива в одном цикле.
Для ввода и вывода значений элементов массива можно воспользоваться встроенным окном ввода, которое работает при использовании функции InputBox(). Функция InputBox() выводит диалоговое окно ввода на экран, ждет ввода данных и после ввода и нажатия кнопки «ОК» закрывает окно. Значением функции являются введенное число или строка текста, которое в программе присваивается некоторой переменной.
a = InputBox (StrMessage, StrTitle, Default, xPos, yPos, StrHelp, file, Context)
a – переменная, которой присваивается введенное значение;
InputBox – имя функции;
StrMessage – обязательный параметр, строка или строковая переменная, значение которой будет выводиться в окне в качестве пояснения (подсказка): [текст подсказки может быть выведен в несколько строк, для этого в конце каждой строки добавляется символ возврата каретки и перевода на новую строку: Chz(13) длина текста может быть до 1024 символов;]
StrTitle – необязательный параметр, строка текста или строковая переменная, значение которой будет отображаться в заголовке окна;
Default – строковая переменная или строка текста, значение которой будет вводиться в поле ввода по умолчанию, необязательный параметр, при его отсутствии поле ввода будет пустым;
хPos – положение окна ввода по горизонтали в твинах, необязательный параметр;
yPos – положение окна ввода по вертикали в твинах, необязательный параметр;
StrHelp file– строка, задающая путь к файлу справки, необязательный параметр;
Context – номер ссылки на раздел в справочном файле, необязательный параметр.
При использовании в программе окна ввода пользователь вводит данные и нажимает кнопку «ОК» или «Cancel»: если «ОК» (или клавишу Enter), то переменной присваивается введенное значение; если «Cancel» — то функция InputBox возвратит пустую строку, независимо от того, что ввел пользователь.
х = InputBox (“Введите элемент массива”, “Окно ввода данных”)
Для вывода значений элементов массива используем графическое окно PictureBox и метод Print.
Фрагмент программного кода:
Private Sub btnStart_Click()
Dim a (5) as Integer, i as byte
a(i) = InputBox (“Ввод элементов массива”, “Окно ввода”)
Picture1. Print a(i); Spc(2);
В разделе General: Option Base 1.
12.2.2. Формирование элементов массива с использованием генератора случайных чисел
Другой способ формирования элементов массива – это использование генератора случайных чисел. В VB таким генератором является функция Rnd, которая возвращает случайное число в диапазоне от 0 до 1. Синтаксис:
выражение – любое числовое выражение или число.
Значения выражения являются базовым числом, определяющим способ генерирования случайного числа. Если аргумент функции Rnd отсутствует, то в качестве базового числа используется последнее значение аргумента.
Для одинаковых значений аргумента генерируется одно и то же случайное число. Чтобы избежать этой ситуации, используют оператор Randomize, который задает значение аргумента для функции Rnd.
Для получения случайного числа из заданного диапазона целых чисел можно воспользоваться следующим выражением:
Int ((nmax – nmin) * Rnd + nmin), где
nmax – верхняя граница диапазона;
nmin – нижняя граница диапазона.
1) для получения случайных целых чисел в диапазоне от 1 до 100:
Int ((100 – 1) * Rnd + 1), т.е.
2) для получения случайных целых чисел в диапазоне от -10 до +10:
Int ((10 – (-10)) * Rnd + (-10)), т.е.
Int (20 * Rnd — 10)
3) фрагмент программного кода формирования элементов массива из 10 чисел в диапазоне от 0 до 20 и вывод полученного массива в графическое окно:
DIM a (1 to 10) as Byte
a(i) = Int (20 * Rnd)
Ввести с клавиатуры массив А из 12 целых чисел в диапазоне от –10 до +10. Из массива А сформировать массив В по правилу:
Для ввода элементов массива используется окно ввода (функция InputBox()). Исходный массив выводится в графическое окно Picture1, а сформированный – в окно Picture2. Очистка графического окна при повторном вводе массива – метод Cls.
Программный код процедуры:
Private Sub btnStart_Click ()
Picture1.Cls ‘очистка графических
Picture2. Cls ‘окон
Const n=12 ‘размер массива
Dim A (1 to n) as Integer ‘A содержит целые числа
Dim B (1 to n) as Single ‘B содержит вещественные числа
‘Ввод элементов массива в окно ввода и вывод
‘в графическое окно Picture1.
A(i) = InputBox (“Введите элемент массива”)
Picture1. Print A(i); Spc(2);
‘Формирование массива В и вывод в графическое окно Picture2
Picture2. Print Format (B(i), “0#.0#); Spc(2);
Функция Format задает формат выводимого значения B(i): “0#.0#”
Задан массив А из 11 целых чисел в диапазоне от –10 до +10. Требуется заменить элементы с четными индексами квадратами значений этих элементов, т.е. ai=ai+ ai 2 для четных i.
Четность индекса можно задавать явно, увеличивая i на 2, начиная с i = 2:
Формировать массив А будем с использованием генератора случайных чисел Rnd. Исходный массив выведем в графическое окно Picture1, вывод преобразованного массива – в графическое окно Picture2.
Фрагмент программного кода:
Dim a (1 to 11) as Integer, i as Byte
Randomize ‘инициация генератора случайных чисел
For i = 1 to 11 ‘формирование исходного
a(i) = Int (20 * Rnd –10) ‘массива и вывод его
Picture1. Print a(i); Spc(2); ‘графическое окно
i = 2 ‘начальное значение i – четное
a(i) = a(i) ^ 2 ‘исходного массива
i = i + 2 ‘с четными индексами
For i = 1 to 11 ‘вывод преобразованного
Picture2. Print a(i); Spc(2); ‘массива в графическое окно
Можно организовать цикл с просмотром всех индексов и в нем проверять каждый индекс на четность: на четность индекс i можно проверять, используя операцию mod (остаток от деления):
Источник: studopedia.su
ПРАКТИЧЕСКАЯ РАБОТА 7 ТЕМА: ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ
Изучить принципы работы с одномерными массивами на языке программирования Pascal. Получение навыков применения основных алгоритмов для решения задач с использованием массивов.
Оборудование: ПК, ИСР Pascal ABC
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Нахождение суммы элементов массива
Задача 1. В автопарке, имеющем 18 машин марки КАМАЗ, каждый из КАМАЗов перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день. При решении задачи будем использовать тип массива KAMAZ для описания всех КАМАЗов автопарка; переменную P[i] для описания объема груза, перевезенного i-той машиной за день (I меняется от 1 до 18). Блок-схема алгоритма для решения данной задачи будет выглядеть следующим образом (см. Рис . 1 ): Текст следующий вид :
Program Pr1;
Uses wincrt;
Type KAMAZ=array [1..18] of real;
Var i:integer; p:KAMAZ;
S:real; Begin S:=0;
For i:=1 to 18 do Begin
Writeln(‘Введите объем перевозок’,I,‘-ой машины, т’);
Writeln(‘Суммарный объем перевозок S=’,S:8:2,‘т’);
![]() |
Накопление суммы в данном примере будет проводиться по шагам, при вводе значения объема перевозок для очередной машины сумма будет увеличиваться на данную величину. Аналогично реализуется и алгоритм нахождения произведения элементов массива (с заменой начального значения суммы S:=0 на начальное значение произведения S:=1 и с заменой операции сложения элементов массива «+» на операцию умножения «*»).
Нахождение количества элементов массива, удовлетворяющих заданному условию
Задача 2. Известны результаты экзамена по информатике одной группы из 22 студентов.
Определить, сколько студентов сдали экзамен на 4 и 5. Один из вариантов решения этой
На Рис. 2 представлена блок-схема алгоритма поставленной задачи.
Program pr3; Uses wincrt; Label 1;
Type INF=array[1..22] of integer;
Var stud:INF; i,p:integer; begin p:=0;
for i:=1 to 22 do begin
1: writeln(‘ Введите оценку ’,i,’- го студента ’);
readln (stud[i]);
if (stud[i]<1) or (stud[i]>5) then goto 1;
if stud[i]>3 then p:=p+1; end;
writeln(‘На 4 и 5 сдали экзамен ’,p:2,’ студентов’);
В данной программе для обозначения списка оценок по информатике использовался тип массива INF, для обозначения оценок конкретных студентов – переменная stud. Программа предусматривает проверку
корректности вводимых данных: при попытке ввода несуществующей по пятибалльной системе оценки, программа повторяет ее ввод. Для этого используется оператор перехода GOTO, где имя метки, к которой осуществляется переход (в данном случае 1), описывается в разделе описания меток LABEL.
Рис. 2. Блок-схема программы
Сортировка массива по возрастанию
Задача 3. Предположим, известны результаты соревнований по стрельбе, в которых принимали участие 9 человек. Расположить данные результаты в порядке возрастания набранных при стрельбе очков. Алгоритм решения данной задачи является наиболее
сложным из приведенных выше примеров и требует использования вложенных циклов.
Один из способов сортировки массивов заключается в следующем. Сначала первый элемент массива в цикле сравнивается по очереди со всеми оставшимися элементами. Если очередной элемент массива меньше по величине, чем первый, то эти элементы переставляются местами. Сравнение продолжается далее уже для обновленного первого элемента.
В результате окончания данного цикла будет найден и установлен на первое место самый наименьший элемент массива. Далее продолжается аналогичный процесс уже для оставшихся элементов массива, т.е. второй элемент сравнивается со всеми остальными и, при необходимости, переставляется с ними местами. После определения и установки второго элемента массива, данный процесс продолжается для третьего элемента, четвертого элемента и т.д. Алгоритм завершается, когда сравниваются и упорядочиваются предпоследний и последний из оставшихся элементов массива.
Блок-схема представлена на Рис. 3
Программа реализации изложенного алгоритма может иметь следующий вид:
Program pr4;
Type STREL=array[1..9]of integer;
Var rez:strel; i,j,s:integer; Begin
For i:=1 to 9 do begin
writeln (‘ Введите результаты ’,i,’- го участника ’);
readln (rez[i]); end;
for i:=1 to 8 do for j:=i+1 to 9 do
if rez[i]>rez[j] then begin
rez[j]:=rez[i]; rez[i]:=s; end;
writeln(‘Отсортированные по возрастанию результаты:’);
for i:=1 to 9 do write (rez[i]:5,’ ‘);
Здесь STREL – тип массива результатов стрельбы участников,
rez[i] – переменная для описания результатов i-го участника (i
рис. 3. Блок-схема меняется от 1 до 9).
Вспомогательная переменная s используется для перестановки местами элементов массива.
ВАРИАНТЫ ЗАДАНИЙ
Исходные данные необходимо оформить в виде массива. При выполнении задания ввод исходных данных и вывод результатов сопровождать комментариями (какие данные нужно ввести и что получается в результате). Составить блок-схему программы. Оформить отчет
1. Подсчитать среднемесячную зарплату сотрудника предприятия.
2. Дан объем продукции, выпущенной заводом за год (помесячно). Найти наименьший объем. В качестве результата вывести номер месяца и объем выпущенной продукции.
3. Курс доллара в течение года менялся в диапазоне от 28руб. до 30руб. Найти наибольшее значение курса доллара. В качестве результата вывести номер месяца и значение курса доллара.
4. Известен месячный план выпуска некоторой продукции и объемы выпущенной этой продукции заводом за год (помесячно). Определить, когда завод не выполнил план. Результат получить в виде: номер месяца и объем выпущенной продукции.
5. Даны результаты сдачи экзамена по информатике группы студентов (в группе 20 студентов). Подсчитать количество студентов, не сдавших экзамен.
6. Известна среднемесячная зарплата 10 сотрудников отдела. Расположить данные в порядке убывания.
7. Известен годовой процент на вклад с капитализацией (начисление процентов ежемесячно). Определить, сколько денег получит вкладчик в конце года, если на 1 января сумма вклада составляла 1500руб. в качестве результата вывести сумму вклада на конец каждого месяца.
8. Известны данные по продаже компьютеров в течение недели. Найти общее количество проданных компьютеров.
9. Известны данные по продаже компьютеров в течение недели. Расположить эти данные в порядке возрастания.
10. Известен месячный план выпуска некоторой продукции и объемы выпущенной продукции заводом за год (помесячно). Определить месяц, в котором было максимальное отклонение от плана. В качестве результата вывести номер месяца и отклонение.
11. Известен месячный план выпуска некоторой продукции и объемы выпущенной продукции заводом за год (помесячно). Определить, был ли выполнен годовой план.
12. Даны результаты сдачи экзамена по информатике группы студентов (в группе 20 студентов). Подсчитать количество студентов, сдавших экзамен без троек.
13. Известен месячный план выпуска некоторой продукции и объемы выпущенной этой продукции заводом за год (помесячно). Определить, когда завод перевыполнил план. Результат получить в виде: номер месяца и объем продукции, выпущенной сверх плана.
14. Подсчитать среднемесячную зарплату сотрудника предприятия и найти зарплату, которая наиболее близка к средней. В качестве результата вывести среднюю зарплату, наиболее близкую и ее номер в массиве.
15. Даны результаты сдачи экзамена по информатике группы из 15 студентов. Подсчитать количество студентов, не сдавших экзамен, в численном и в процентном соотношении.
Источник: znanio.ru