Файл: Курсовая Программы циклической структуры. Массивы данных.docx
Добавлен: 21.10.2018
Просмотров: 1652
Скачиваний: 23
высыпать в тару 1 кружку муки;
Такой способ записи не является выгодным, т.к. расходуется больше памяти, а также на это тратиться много времени. Если применить циклы к данной программе, то алгоритм можно сократить, например, так:
В таре 0 кружек муки;
Высыпать в тару 1 кружку муки;
Если в таре меньше 15 кружек муки, повторить п.2.
Схематично этот алгоритм представлен на рисунке 1.
Рисунок 1 – Схема алгоритма
Разобраться во всем разнообразии циклов не сложно, отличие лишь в том известно ли нам количество повторений, если да, то перед нами арифметический цикл[1] for (цикл «ДЛЯ», цикл со счетчиком), если же нет, то это итерационный цикл.
В языке программирования Pascal итерационные циклы подразделяются на два вида алгоритмических циклов:
цикл while-do (цикл «ДО», цикл с предусловием);
цикл repeat-until (цикл «ПОКА», цикл с постусловием).[2]
Рассмотрим подробнее эти виды циклов.
Данный цикл также называется итерационным. Блок-схема алгоритма цикла представлена на рисунке 2.
Рисунок 2 – Циклический алгоритм
Данный цикл также называется итеративным. Блок-схема алгоритма цикла представлена на рисунке 2.
Синтаксис:
for <счетчик цикла>:=<начальное значение> to <конечное значение> do <оператор>;
for <счетчик цикла>:=<начальное значение> downto <конечное значение> do <оператор>;
Данный цикл выполняется до тех пор, пока переменная — счетчик цикла не выходит за заданные пределы.[3,c.40] При этом на каждой итерации цикла счетчик увеличивается на 1 (to) или уменьшается на 1 (downto). При этом вероятно использование значения счетчика, например, для расчетов внутри цикла. За пределами цикла сохранение последнего значения счетчиком цикла не гарантируется.
Выход из цикла осуществляется, если на очередной итерации значение счетчика цикла вышло за пределы диапазона значений цикла. Таким образом, если для цикла с to указать начальное значение больше конечного, то цикл не отработает ни разу.
Рисунок 3 – Итеративный цикл
Данный цикл называется также циклом с предусловием. Блок-схема алгоритма цикла представлена на рисунке 3.
Синтаксис:
while (условие) do <оператор>;
Данный цикл исполняется до тех пор, пока условие истинно. Как только условие становится ложным, выполнение цикла прерывается. Если условие ложно изначально[4], цикл не будет выполнен ни разу.
Рисунок 4 –Цикл с предисловием
Данный цикл называется также циклом с постусловием. Блок-схема алгоритма цикла показана на рисунке 4.
Синтаксис:
repeat
<операторы>
until (условие);
Данный цикл выполняется ровно до тех пор, пока условие ложно. Как только условие становится истинным, выполнение цикла прерывается. Если условие истинно изначально, цикл будет выполнен один раз. Следует обратить внимание, что конструкция repeat-until выполняет роль операторных скобок, поэтому внутри нее возможно размещение нескольких операторов.
Рисунок 5 – Цикл с постусловием
Операторы break и continue вызываются внутри циклов.
Оператор break прерывает выполнение цикла и передает управление следующему за циклом оператору (см. рис. 6).
Оператор continue прерывает текущую итерацию цикла и передает управление следующей итерации цикла (repeat-until) [5,c.25], или условию, предшествующему этой итерации (for, while-do)(см. рис. 7).
Следует заметить, что при использовании break для выхода из цикла for счетчик цикла не портится.
Рисунок 6 – Цикл с оператором break
Рисунок 7 – Цикл с оператором continue
Иногда необходимо выполнение одного цикла внутри другого. Такая конструкция называется вложенными циклами (см. рисунок 8).
Допускается вложение любых типов циклов друг в друга[2,c.10], а также можно вкладывать неограниченное количество циклов.
Мы рассмотрели блок-схемы и принципы циклических алгоритмов, теперь необходимо составить программы с их применением.
Решение циклических алгоритмов
Мы рассмотрели графическое отличие циклических алгоритмов, теперь создадим алгоритм на примере цикла While-do.
Для организации ввода чисел необходима переменная. Объявим ее, добавив в окно программы [6]
var a:integer;
Для подсчета произведения также необходима переменная. Для того, чтобы объявить ее, добавим следующую строку
mult:integer;
В нашем случае для цикла while-do необходим счетчик. Объявим переменную count, для чего добавим в текст программы
count:integer;
Проинициализируем счетчик.[7] Для этого в программе появляется следующая строка
count:=1;
Результат занесенных с трок мы видим на рисунке 8.
Рисунок 8 – Введение счетчика в программу
Произведем инициализацию переменной, отвечающей за произведение чисел. Для этого введем строку:
mult:=1;
Переменная инициализируется единицей, а не нулем,[8,c.203] т.к. мы будем перемножать числа, а не складывать.
Организуем цикл while-do. Для этого создадим в программе строку
while count<11 do
Значение "11" в качестве граничного результата выбрано в связи с тем, что если условие не выполняется, то и цикл тоже. Нам необходимо остановить выполнение цикла после 10-й итерации.
Организуем операторные скобки, для чего введем дополнительную строку в программу
begin
Введем окончание циклической составляющей
end;
Программы пишутся для пользователей, хорошо разбирающихся в своей предметной области, в которой они используют программу. Пользователи не обязаны понимать, что и как реализовал в этой программе разработчик. Поэтому прикладные программы должны иметь удобный для пользователя интерфейс, снабжаться удобными подсказками, как о запрашиваемых данных, так и о выведенных результатах. Эти подсказки должны быть лаконичны и понятны пользователю.
Необходимо уточнить пользователю, какие данные необходимо ввести с клавиатуры. Для этого вносим в программу строку
write('Введите ',count,'-ое значение:');
Результат заданных строк мы видим на рисунке 9.
Рисунок 9 – Ввод данных с клавиатуры
Запрашиваем переменную с клавиатуры. Для этого введем в строку ввода
readln(a);
Увеличиваем счетчик на 1[9,c.82]. Для этого введем с клавиатуры
count:=count+1;
Добавляем полученное значение к произведению. Для этого введем с клавиатуры
mult:=mult*a;
Добавляем вывод на экран строки результата. Для этого необходимо в программу добавить строку
writeln('Произведение чисел равно: ',mult);
Дошли до пункта проверки программы. Для запуска программы выберем пункт меню «Run» смотрите рисунок 10.
Рисунок 10 – Запуск программы
Запустим программу, введем произвольные числа в диапазоне от 1 до 5 и посмотрим результат на рисунке 11.
Рисунок 11 – Результат программы
Аналогично изложенной программе, создадим алгоритм со вложенным циклом используя цикл for-to.
Решим задачу: необходимо запросить с клавиатуры 10 чисел и найти их среднее арифметическое число.
Для организации цикла for-to необходимо воспользоваться переменной-счетчиком.[10,c.56]Объявляем такую переменную. Для этого создаем строку и добавляем её в программу
var count:integer;
Начало написания программы смотрите на рисунке 12.
Рисунок 12 – Введение счетчика в программу
Для запроса целочисленных данных от пользователя необходима переменная типа integer. Для этого введем строку программы
a:integer;
Для подсчета результата так же необходима переменная. В этой переменной будут суммироваться данные, вводимые пользователем.
sum:integer;
Переменная, отвечающая за суммирование, должна быть проинициализирована перед использованием, рисунок . Установим значение переменной, равное 0. Для этого введем в программу строку, рисунок 13.
sum:=0;
Рисунок 13 – Ввод суммирующего элемента
Организуем цикл для ввода 10-ти значений от пользователя. Для этого вводим в программу строку
for count:=1 to 10 do
Так как мы собираемся использовать в цикле несколько операций, то необходимо поставить операторные скобки. Вводим следующую строку
begin
...введите дополнительную строку, окончания данного задания
end;
Водим с клавиатуры очередное значение. Для этого вводим в алгоритм следующую команду
readln(a);
В результате всех этих действий наш алгоритм выглядит следующим образом, рисунок 14. Продолжим запись программы.
Рисунок 14 – Ввод очередного значения
Пользователю необходимо понять, что за данные программа у него запрашивает. Добавляем строку
Write (‘Введите ‘, count, ‘-тое значение:’);
Не забудем в каждой итерации цикла прибавить новое значение к сумме. Для этого добавим строку в программу
sum:=sum+a;
В конце программы выведем результат на экран, следующей строкой
Writeln (‘Среднее арифметическое:’, sum/10);
Запустим программу, щелкнув пункт меню «Run», рисунок 15.
Рисунок 15 – Запуск программы
Пользователю необходимо ввести 10-ть значений (от 1 до 10). Результат работы программы видно на рисунке 16
Рисунок 16 – Результат работы программы
Мы рассмотрели два варианта написания программы с использованием двух циклов. Как видно из данных примеров необходимо всесторонне подходить к написанию программы, чтобы пользователю было понятно и удобно использовать написанную программу. Для этого и вводим строки позволяющие пользователю получить желаемый результат работы программы.
Массив. Преимущество использования массивов
Массив — упорядоченный набор данных для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.[4]
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, а с двумя - двумерными, и т. д. Одномерный массив - нестрого соответствует вектору в математике; двумерный («строка», «столбец») - матрице. Чаще всего применяются массивы с одним или двумя индексами; реже - с тремя; ещё большее количество индексов -встречается крайне редко.
Для лучшего понимания того, что из себя представляет массив давайте рассмотрим рисунок 17
Рисунок 17 – Наглядный пример массива
На рисунке изображен массив целых чисел, глядя на него мы можем понять следующее:
- У каждого массива есть своё имя
- Он может содержать в себе заданное количество элементов. Минимальное значение 1, максимальное же значение ограничено только памятью компьютера.
- Массив может хранить элементы только одного типа. Например, вы не можете хранить в одном массиве переменные типа integer и типа double.
Также к преимуществам массивов относится и то, что не требуется помещать данные в каждый элемент массива и нет надобности сохранять элементы последовательно. Массивы особенно полезны, если нужно обрабатывать целый набор элементов, как если бы это был один элемент. Например, добавить к каждому имени однообразную информацию. Можно выделить ряд достоинств:
- лёгкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим)
- одинаковое время доступа ко всем элементам
- малый размер элементов: они состоят только из информационного поля
-позволяют сократить кол-во инициализированных переменных до минимума
Одномерные и двумерные массивы. Типовые алгоритмы их обработки
Работа с многомерными массивами всегда связана с организацией вложенных циклов, рассмотрим пример написания такого массива.
Начинаем запись программы
Program TestProg;
Begin
End.
Для начала нам необходимо определить массив для хранения десяти введенных пользователем значений. Для этого введите в программу строку
var a:array[1..10] of integer;
Обработка массивов очень часто производится при помощи цикла for. Для использование данного цикла необходимо определить переменную-счетчик.
i:integer;
Ввод данных с клавиатуры будет осуществляться в цикле for. Добавим в программу данный цикл. Для этого введем строку
for i:=1 to 10 do
Так как в теле цикла будет составной оператор, рисунок 18 то введем следующее:
Begin
End;
Рисунок 18 – Составной оператор цикла
Сделаем запрос на ввод очередного элемента. В алгоритм программы добавляем строку
Write (‘Введите’,i,’-ый элемент’);
Запросим i-ый элемент у пользователя. Для этого введите строку
readln(a[i]);
Для нахождения максимального значения нам понадобится еще одна переменная, она будет следующая
max:integer;
Инициализируем переменную числом 0. Для этого вводим строку в программу
max:=0;
Организуем цикл для поиска максимального значения, смотрите рисунок 19 . Необходимо перебрать все элементы массива.
For i:=1 to 10
Begin
End;
Рисунок 19 – Цикл для поиска максимального значения
Проверим, больше ли очередной элемент массива, чем значение в max? Если больше, то запишем это значение в max. Для этой операции в алгоритм программы необходимо добавить следующую строку
if (a[i]>max) then max:=a[i];[11]
Выведем пользователю результат выполнения программы, рисунок 20.
Write (‘максимальное значение в массиве:’, max);
Рисунок 20 – Готовая программа по поиску максимального значения
Запустим программу, для чего щелкнем по меню Run для открытия меню.
Теперь, введя по запросу 10 чисел, в качестве результата получим наибольшее из этих значений, рисунок 21.
Рисунок 21 – Готовая программа по поиску максимального значения
На данный момент мы имеем программу, которая запрашивает у пользователя 10 чисел с клавиатуры и заполняет ими массив. Теперь необходимо организовать цикл обработки значений массива[12], начиная со 2-го
For i:=2 to 10
Begin
End.
Организуем проверку двух соседних значений массива. Для этого в алгоритм добавим условие с составным оператором (рис. 22).
If (a [i-1]>a[i]) then
Begin
End;
Рисунок 22 – Цикл с составным оператором
Если условие выполняется, присвоим x наименьшее из двух значений. Введите в строку ввода
x:=a[i];
Присвоим переменной j номер элемента, расположенного перед рассматриваемым. Для этого введите в строку ввода
j:=i-1;
Организуем цикл, рисунок 23, для перемещения блока значений, больших x вперед по массиву.
While (j>0 and (a[j]>x) do
Begin
End;
Рисунок 23 – Перемещение блока значений
Передвинем очередное значение вперед по массиву. Для этого введем в программу
a[j+1]:=a[j];
Уменьшим j на 1 для движения к началу массива.[13,c.70]
j:=j-1;
Как только переберем весь блок с значениями больше x, запишем x в конце этого блока. Для этого введем строку, рисунок 24
a[j+1]:=x;
Рисунок 24 – Поиск значения большего x
Организуем цикл вывода упорядоченного массива в консоль.[14] Для этого введем в активную область следующий блок.
For i:=1 to 10 do
Begin
End;
Выведем очередной элемент на экран, рисунок 25
Writeln (I,’-ый элемент:’, a[i]);
Рисунок 25 – Вывод данных на экран
Запустим программу. Для чего щелкнем меню «Run» и выберем в открывшемся меню пункт «Run».[15]
Теперь необходимо пользователю ввести значения для вычисления, после этого программа вычислит искомое значение, рисунок 26
Рисунок 26 – Ввод данных в программу
После ввода значений программа упорядочит массив и выведет его на экран, рисунок 27
Рисунок 27 – Результат работы программы