Создание программы циклической структуры. Работа с массивами

Негосударственное образовательное учреждение 

высшего профессионального образования 

Московский технологический институт «ВТУ»



Факультет Техники и современных технологий

Кафедра Информатики и автоматизации





                                                          







КУРСОВАЯ РАБОТА

по дисциплине Программирование на языке высокого уровня



на тему:

«Создание программы циклической структуры. Работа с массивами»













Уровень образования бакалавриат

Направление Информатика и вычислительная техника

Профиль  (или магистерская программа) Сети ЭВМ и телекоммуникации







Выполнил (а):

Студент (ка) __2__ курса

Форма обучения заочная

Фельзинг Владимир Александрович

(ФИО полностью)



Москва 2011

																Оглавление

																

																Введение____________________________________________________

																3

																Циклические алгоритмы на языке Паскаль ____________________

																5

																Решение циклических алгоритмов___________________________ 

																13

																Работа с массивами________________________________________

																22

																Заключение_________________________________________________

																32

																Список  использованной  литературы____________________________

																34

																

																Введение

Актуальность выбранной темы для курсовой работы как «Создание программы циклической структуры. Работа с массивами»  очень велика. В нашей повседневной жизни мы постоянно сталкиваемся с повторяющимися действиями, выполняя которые мы затрачиваем огромное количество времени, но упростить или отменить их зачастую просто не возможно. Однако век высоких технологий приносит свои плоды, теперь с помощью языка программирования возможно описать и тем более упростить любые действия в том числе нет необходимости описывать повторяющиеся действия шаг за шагом, достаточно использовать циклические алгоритмы. В этой курсовой работе нами будут исследованы все возможные варианты описания циклических алгоритмов и способы работы с ними.

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

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

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

Обзор источников.  Рассмотрим основные использованные источники.

Так Краснов С.В. в своей книге «Программирование на языке высокого уровня Turbo Pascal » рассматривает вопросы разработки программы[8,c.2], уделяя большое внимание основным понятиям, операторам ввода и вывода данных, составлению программ, реализующих ветвление, циклические процессы, работе с массивами, процедурами и записями. Понятия циклов и  их основные условия применения, использования и ограничения, что позволяет безошибочно действовать при создании программы. 

В своей книге «Программирование на языке Паскаль» Перминов О.Н. изложил детальное и формальное изложение всех конструкций языка[11,c.3], а приведенные примеры изложены доступным языком с использованием различных приемов программирования. Подробно расписаны циклические алгоритмы, все их разновидности с приведение подробных примеров, что позволяет свободно ориентироваться в большом потоке информации, выбрать для своей работе именно то, что нужно для достижения поставленной цели.







Циклические алгоритмы на языке Паскаль

Достаточно часто необходимо не только выполнить какую-либо последовательность действий, но и повторить ее определенное число раз. Например, если мы составляем алгоритм приготовления какого-либо блюда, где есть операция «положить в кастрюлю 10 ложек сахара», то мы можем столкнуться с тем, что нам необходимо выполнить операцию «положить в кастрюлю 1 ложку сахара» 10 раз подряд, т.е. наш алгоритм будет выглядеть следующим образом:

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

положить в кастрюлю 1 ложку сахара;

Такая запись не выгодна ни с точки зрения времени написания программы, ни с точки зрения расхода памяти. С использованием циклов алгоритм можно сократить, например, так:

В кастрюле 0 ложек сахара.

Положить в кастрюлю 1 ложку сахара.

Если в кастрюле меньше 10 ложек сахара, повторить п.2.

Схематично этот алгоритм представлен на рисунке 1.



Рис. 1. Схема алгоритма



Разобраться во всем разнообразии циклов не сложно, отличие лишь в том известно ли нам количество повторений, если да, то перед нами арифметический цикл [5]for (цикл «ДЛЯ», цикл со счетчиком), а если нет, то это итерационный цикл.

В языке Pascal итерационные циклы подразделяются на два вида алгоритмических циклов:

цикл while-do (цикл «ДО», цикл с предусловием);

цикл repeat-until (цикл «ПОКА», цикл с постусловием).[6]



Подробнее эти виды циклов будут рассмотрены ниже.





Рис. 2.  Циклический алгоритм



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

Синтаксис:

for <счетчик цикла>:=<начальное значение> to <конечное значение> do <оператор>;

for <счетчик цикла>:=<начальное значение> downto <конечное значение> do <оператор>;

Данный цикл исполняется до тех пор, пока переменная — счетчик цикла не выходит за заданные пределы.[4,c.40] При этом на каждой итерации цикла счетчик увеличивается на 1 (to) или уменьшается на 1 (downto). При этом возможно использование значения счетчика, например, для расчетов внутри цикла. За пределами цикла сохранение последнего значения счетчиком цикла не гарантируется.

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





Рис. 3. Итеративный цикл



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

Синтаксис:

while (условие) do <оператор>;

Данный цикл исполняется до тех пор, пока условие истинно. Как только условие становится ложным, выполнение цикла прерывается. Если условие ложно изначально[1], цикл не будет выполнен ни разу.





Рис. 4. Цикл с предисловием



Данный цикл называется также циклом с постусловием. Блок-схема алгоритма цикла показана на рисунке.

Синтаксис:

repeat

<операторы>

until (условие);

Данный цикл исполняется до тех пор, пока условие ложно. Как только условие становится истинным, выполнение цикла прерывается. Если условие истинно изначально, цикл будет выполнен один раз. Следует обратить внимание, что конструкция repeat-until выполняет роль операторных скобок, поэтому внутри нее возможно размещение нескольких операторов.



Рис. 5.  Цикл с постусловием



Операторы break и continue вызываются внутри циклов.

Оператор break прерывает выполнение цикла и передает управление следующему за циклом оператору (см. рис. 6).

Оператор continue прерывает текущую итерацию цикла и передает управление следующей итерации цикла (repeat-until) [7,c.25], или условию, предшествующему этой итерации (for, while-do)(см. рис. 7).

Следует заметить, что при использовании break для выхода из цикла for счетчик цикла не портится.





Рис. 6. Цикл с оператором break





Рис. 7. Цикл с оператором continue



Иногда необходимо выполнение одного цикла внутри другого. Такая конструкция называется вложенными циклами (см. рисунок 8).

Допускается вложение любых типов циклов друг в друга[2,c.10], а также можно вкладывать неограниченное количество циклов.



Рис. 8. Один цикл внутри другого



	Мы рассмотрели блок-схемы и принципы циклических алгоритмов, теперь необходимо составить программы с их применением.



























Решение циклических алгоритмов

Графическое отличие  циклических алгоритмов мы рассмотрели, теперь попробуем создать алгоритм на примере цикла While-do.

Для организации ввода чисел необходима переменная. Объявим ее, добавив в окно программы [19] 

var a:integer;

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

mult:integer;

 В нашем случае для цикла while-do необходим счетчик. Объявим переменную count, для чего добавим в текст программы

count:integer;

 Проинициализируем счетчик.[15] Для этого в программе появляется следующая строка 

count:=1;

Результат занесенных с трок мы видим на рисунке 9.





Рис. 9. Введение счетчика в программу



 Проинициализируем переменную, отвечающую за произведение чисел. Для этого введем строку 

mult:=1;

Переменная инициализируется единицей, а не нулем,[9,c.203] т.к. мы будем перемножать числа, а не складывать.

Организуем цикл while-do. Для этого создадим в программе строку 

while count<11 do

 Значение "11" в качестве граничного результата выбрано в связи с тем, что при невыполнении условия цикл больше не выполняется. Нам необходимо прекращение выполнения цикла после 10-й итерации.

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

begin

Введем окончание циклической составляющей

end;

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

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

write('Введите ',count,'-ое значение:');

Результат заданных строк мы видим на рисунке 10.





Рис. 10. Ввод данных с клавиатуры



Запросим переменную с клавиатуры. Для этого введем в строку ввода 

readln(a);

Увеличим счетчик на 1[3,c.82]. Для этого введем с клавиатуры

count:=count+1;

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

mult:=mult*a;

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

writeln('Произведение чисел равно: ',mult);

Дошли до пункта проверки программы. Для запуска программы выберем пункт меню «Run» смотрите рисунок 11.





Рис. 11. Запуск программы



Запустим программу, введем произвольные числа в диапазоне от 1 до 5 и посмотрим результат на рисунке 12





Рис. 12. Результат программы



Аналогично изложенной программе, давайте создадим алгоритм со вложенным циклом используя цикл for-to.

Решим задачу: необходимо запросить с клавиатуры 10 чисел и найти их среднее арифметическое.

Для организации цикла for-to необходимо использование переменной-счетчика.[14,c.56] Объявим такую переменную. Для этого создадим строчку и добавим её в программу 

var count:integer;

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



Рис. 13. Введение счетчика в программу



Для запроса целочисленных данных от пользователя необходима переменная типа integer. Для этого введем строку программы 

a:integer;

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

sum:integer;

Переменная, отвечающая за суммирование, должна быть проинициализирована перед использованием, рисунок . Установим значение переменной, равное 0. Для этого введем в программу строку, рисунок 14  

sum:=0;



Рис. 14. Ввод суммирующего элемента



Организуем цикл для ввода 10-ти значений от пользователя. Для этого вводим в программу строку 

for count:=1 to 10 do

Так как мы собираемся использовать в цикле несколько операций, то необходимо поставить операторные скобки. Вводим следующую строку 

begin

...введите дополнительную строку, окончания данного задания 

end;

Водим с клавиатуры очередное значение... Для этого вводим в алгоритм следующую  команду 

readln(a);

В результате наш алгоритм выглядит следующим образом, рисунок 15. Продолжим запись программы.





Рис. 15. Ввод очередного значения



Однако пользователь должен понять, что за данные ему необходимо вводить.

Write (‘Введите ‘, count, ‘-тое значение:’);

Не забудем в каждой итерации цикла прибавить новое значение к сумме. Для этого введем строку в программу

sum:=sum+a;

В конце программы выведем результат на экран, следующей строкой

Writeln (‘Среднее арифметическое:’, sum/10);

Запустим программу, щелкнув пункт меню «Run», рисунок 16.





Рис. 16. Запуск программы



Необходимо пользователю ввести 10-ть значений (от 1 до 10). Результат работы программы видно на рисунке 17



Рис. 17. Результат работы программы



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

Работа с  массивами

Массив — упорядоченный набор данных для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.[1]

Работа с многомерными массивами всегда связана с организацией вложенных циклов, рассмотрим пример написания такого массива.

Начнем запись программы

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];[16]

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

Write (‘максимальное значение в массиве:’, max);





Рис. 20. Готовая программа по поиску максимального значения



Запустим программу, для чего щелкнем по меню Run для открытия меню.

Теперь, введя по запросу 10 чисел, в качестве результата получим наибольшее из этих значений, рисунок 21. 





Рис. 21. Результат работы программы



На данный момент мы имеем программу, которая запрашивает у пользователя 10 чисел с клавиатуры и заполняет ими массив. Теперь необходимо организовать цикл обработки значений массива[10], начиная со 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. Поиск значения большего х



Организуем цикл вывода упорядоченного массива в консоль.[12] Для этого введем в активную область следующий блок.

For i:=1 to 10 do

Begin

End;

Выведем очередной элемент на экран, рисунок 25

Writeln (I,’-ый элемент:’, a[i]);



Рис.25. Вывод данных на экран



Запустим программу. Для чего щелкнем меню «Run» и выберем в открывшемся меню пункт «Run».[17]

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



Рис. 26. Ввод данных в программу



После ввода значений программа упорядочит массив и выведет его на экран, рисунок 27





Рис. 27. Результат работы программы.



Заключение

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

цикл for (цикл «ДЛЯ», цикл со счетчиком, здесь значения должны иметь порядковый тип, т.к. значение переменной цикла увеличивается или уменьшается на один при каждой итерации цикла);

цикл while-do (цикл «ДО», цикл с предусловием будет выполняться до тех пор пока выражение принимает истинное значение, но стоит выражению принять ложное значение, то осуществляется переход к следующему оператору); 

цикл repeat-until (цикл «ПОКА», цикл с постусловием ведет себя противоположно циклу «ДО», т.е. пока выражение ложное тело цикла продолжается, как только логическое выражение станет истинным, цикл прекратится).

Нами были рассмотрены примеры использования циклов, а так же мы выяснили, что тело цикла с постусловием всегда выполняется хотя бы один раз, а вот тело цикла с предусловием может быть так и не выполнено[18], этот факт необходимо учитывать при написании программы.

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

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

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

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

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

Список использованной литературы

		Богатырев Р. Журнал «Мир ПК» выпуск №4/2001 от 17.04.2001, с.58

		Вылиток А.А., Матвеева Т.К. Динамические структуры данных. Задание практикума. Язык Паскаль. // Учебно-методическое пособие. – М.: Издательский отдел Факультета ВМиК МГУ им. М.В. Ломоносова, 2005. – с. 8-20. 

		Грогоно П. Программирование на языке Паскаль. — М.: Мир, 1982. — с. 108

		Зверева О.М., Саблина Н.Г. Среда Турбо Паскаль 7.0. Реализация простейших алгоритмов: Конспект лекций. Часть 1. - Екатеринбург: Изд-во УМЦ-УПИ, 2004. - с.112 

		Игошина Л.В. Программирование на языке высокого уровня. Рабочая программа дисциплины. - Пенза: ПГУ, 2004. - с.5 

		Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка.//Пер. с англ. и предисл. Д.Б.Подшивалова - М.: Финансы и статистика,1989. -  с. 151

		Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие - СПбГУАП. СПб,2003 – с. 21-30

		Краснов С.В. Программирование на языке высокого уровня TURBO PASCAL: Учебное пособие. - Ульяновск: УлГТУ, 2004. - с.27-31 

		Моргун А. Н. Программирование на языке Паскаль (Pascal). Основы обработки структур данных. - М.: Диалектика, 2005. — с. 576

		Максимова Т.М. Программирование на языках высокого уровня: Методические указания к выполнению курсового проекта. - СПб.: ГУАП, 2005. - с.27 

		Перминов О.Н. Программирование на языке Паскаль:Справочник.– М.: Радио и связь, 1998. – с.243-304

		Подвальный С.Л., Холопкина Л.В., Носачева М.П. Программирование на языке Паскаль: практикум -  2008, с.24

		Рубенкинг Н.Дж. Турбо Паскаль для Windows: в 2-х томах. Пер. с англ.. - М.: Мир, 1993. – с.78

		Сулейманов Р.Р. Методика решения учебных задач средствами программирования//Методическое пособие – М: 2010, с. 112

		Трофимов С.П. Программирование на языке высокого уровня: Рабочая программа дисциплины. - Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2005. - с.12 

		Шумова Е.О., Рачева Н.В. Программирование на языке высокого уровня: Методические указания к курсовой работе. - СПб.: СЗТУ, 2002. - с.36 

		Пахомова А.В. Методическое пособие "Программирование на языке Turbo Pascal.- URL: http://tp7.info/metod_uk2.php (дата обращения: 03.06.2011)

		Учебник Turbo Pascal 7.0 - CибГУТИ, 2011 [Электронный ресурс] - URL: http://pascal.guti.ru/fornext.html  (дата обращения: 14.07.2011)

		Программирование. Динамические списки Pascal.//сайт посвященный языку программирования Turbo Pascal  -  2010 [Электронный ресурс] - URL: http://www.pascal.helpov.net/index/dynamic_lists_pascal_programming (дата обращения: 08.07.2011)

		Программирование на языке высокого уровня TURBO PASCAL: Учебное пособие. - 2004 [Электронный ресурс] - URL: http://www.doklad.ref24.ru/works/62792.html (дата обращения: 21.06.2011)







2