Добавлен: 29.04.2023
Просмотров: 197
Скачиваний: 1
ВВЕДЕНИЕ
В своей повседневной жизни мы довольно часто сталкиваемся с повторяющимися действиями, тратим на них большое количество времени и сил, но сделать проще или вовсе отменить эти действия зачастую не получается. Однако с началом появления разнообразных языков программирования, стало возможным описание и упрощение любых действий, например, чтобы предотвратить часто повторяющиеся действия следует использовать циклические алгоритмы. Из вышесказанного ясно, что актуальность избранной темы заключается в необходимости упрощения повторяющихся действий на примере повседневной деятельности применив средства программирования. Объектом исследования в данной курсовой являются возможности языков высокого уровня в работе с циклами и массивами. В данной курсовой работе будут изучены все возможные варианты циклических алгоритмов, и будет продемонстрирована работа с массивами на языке высокого уровня Pascal.
На данный момент существует великое множество различных языков программирования, ход развития которых шел вместе с ходом развития вычислительной техники. Язык Pascal разрабатывался для обучения программированию, однако ввиду легкости изучения и наглядности написанных на нем программ он получил широкое распространение и дальнейшее развитие. Сегодня, Pascal считается одним из самых используемых языков во всем мире.
Целью в данной работе является решение задач прямо связанных с применением циклов — когда нужно применить ту или иную форму циклической структуры, чтобы не возникло ошибок и алгоритм был эффективен. Для ее достижения выделим основные задачи:
- Классификация основных языков программирования, описание особенностей их построения, достоинства и недостатки языков, этапы разработки программ и основные критерии оценки их качества.
- Основные принципы организации алгоритмов циклических структур. Примеры организации циклических структур в различных языках программирования высокого уровня, выполнение сравнительного анализа и выделение особенностей их построения.
- Классификация массивов по различным категориям построения, их достоинства и недостатки. Организация работы с массивами статического и динамического типов в различных языках программирования высокого уровня, сравнительный анализ и выделение особенности их построения.
Алгоритм действий и их повторения позволит изобразить программу понятным для других пользователей языком.
Основные пособия к данной работе. В книге С. Немнюгина «Turbo Pascal» разбираются основные вопросы по программированию в среде Pascal, уделяется пристальное внимание основным понятиям, подробно изображается работа с процедурами, операциями над строками, в том числе и работа с массивами, а также работа с множествами, системное программирование, программирование графики, рекурсивные алгоритмы и введение в обьектно-ориентированное программирование. Также, в своей книге «Turbo Pascal. Наиболее полное руководство» В. Фаронов дает детальное изложение всех конструкций языка, приводит многочисленные примеры программ написанные доступным языком и с использованием различных приемов программирования. Хорошо расписаны все виды циклических алгоритмов с приведением множества примеров, что предоставляет возможность свободно ориентироваться в большом потоке информации и выбрать именно то, что нужно для решения поставленной в курсовой работе цели.
ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ
1.1 Языки программирования
Языки программирования, имитирующие естественные языки, обладающие укрупненными командами, ориентированными на решение прикладных содержательных задач, называют языками «высокого уровня.
Языки программирования высокого уровня имеют следующие достоинства:
• алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;
• набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;
• конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде;
• используется аппарат переменных и действия с ними;
• поддерживается широкий набор типов данных.
Таким образом, языки программирования высокого уровня являются машинно-независимыми и требуют использования соответствующих программ-переводчиков (трансляторов) для представления программы на языке машины, на которой она будет исполняться.
Примеры: C++, C#, Java, JavaScript, Python, PHP, Ruby, Perl, Паскаль, Delphi, Лисп.
Для строгого и точного описания синтаксиса языка программирования, используют специальные метаязыки (языки для описания других языков). Наиболее распространенными метаязыками являются металингвистические формулы Бэкуса - Наура (язык БНФ) и синтаксические диаграммы Вирта.
Например, метаформулы
<переменная>::=А]В
<выражение>::=<переменная>|<переменная>+<переменная>|<переменная><переменная>-<переменная>
Алфавиты большинства языков программирования близки друг другу и основываются на буквах латинского алфавита, арабских цифрах и общепринятых спецсимволах, таких как знаки препинания, математических операций, сравнений и обозначений.
Несмотря на серьезные различия между языками программирования, некоторые основные понятия в большинстве из них являются схожими.
Оператор представляет собой законченную фразу языка и определяет однозначно трактуемый этап обработки данных. Различают следующие основные операторы языка: присвоения, условный и безусловный переход, пустой оператор. К производным, не основным, относят составной оператор, оператор выбора, оператор цикла и оператор присоединения. Все операторы языка в коде программы отделяются разделителями: Sl;S2;...;Sn
Исполнение операторов происходит в порядке их следования в коде программы. Большая часть операторов осуществляет обработку величин. Величины могут быть постоянными и переменными. Наиболее распространенные типы величин - числовые (целые и вещественные), символьные и логические. Тип величины определяется ее значением.
Имя программного объекта называют идентификатором. Чаще всего идентификатором является любая конечная последовательность букв и цифр, начинающаяся с буквы:
<идентификатор>::=<буква> | <идентификатор> | <буква>
<идентификатор><цифра>
В большинстве языков программирования в роли идентификатора запрещается использовать служебные слова языка. При назначениий имен необходимо избегать мало выразительных обозначений, не использовать краткие имена. Имена должны быть понятны, наглядны, отражать суть обозначаемого объекта, к примеру,
Summa, Time, i, j, integral, init и т. п.
Некоторые идентификаторы являются стандартными, например, Sin.
Переменные играют одну из важнейших ролей в системах программирования. Переменная представляет собой программный объект, способный принимать определенное значение посредством оператора присваивания. Синтаксис переменной имеет следующий вид:
<имя переменной>::=<значение>
Функция является программным объектом, который задает вычислительную процедуру определения значения, зависимого от некоторых аргументов. Бывают выражения арифметические, принимающие числовые значения, логические, символьные, строковые и так далее.
Процедура - программный объект, представляющий собой некоторый самостоятельный этап обработки данных. Процедура обладает входными и выходными параметрами, называемые формальными. При использовании процедуры формальные параметры будут заменены на фактические.
Модуль - программная единица, предназначающаяся для создания библиотек и разделения больших программ на логически связанные блоки. В состав модуля входят разделы: заголовок, интерфейс, реализация, инициализация.
Качество кода определяется различными критериями: низкая сложность кода, небольшое использование ресурсов памяти и процессора, правильная обработка искл. ситуаций, небольшое число предупреждений в процессе компиляции и линковке.
1.2 Этапы создания программ
Процесс создания программы можно разделить на следующие этапы:
1. Постановка задачи — определение цели задачи, ее содержание и общий подход к решению.
2. Анализ задачи и моделирование — определение исходных данных и результата, выявление ограничения на их значения, формализованное описание задачи и построение математической модели, пригодной для решения на компьютере.
3. Разработка или выбор алгоритма решения задачи — выполняется на основе ее математического описания.
4. Проектирование общей структуры программы — формирование модели решения с последующей детализацией и разбивка на подпрограммы, определение "архитектуры" программы, способ хранения информации
5. Кодирование — запись алгоритма на языке программирования. Для успешной реализации целей проекта программисту необходимо использовать методы структурного программирования.
6. Отладка и тестирование программы. - устранение ошибок в программе. Тестирование позволяет вести их поиск и, в конечном счете, убедиться в том, что полностью отлаженная программа дает правильный результат.
ГЛАВА 2. РЕШЕНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ И РАБОТА С МАССИВАМИ
2.1 Решение циклических алгоритмов
Часто у нас возникает необходимость в повторении какой-либо последовательности действий определенное количество раз. К примеру, при составлении алгоритма приготовления земляничного варенья, где есть действие «положить одну ст. ложку сахара», мы сталкиваемся с необходимостью выполнения операции «положить одну ст. ложку сахара» 10 раз. Таким образом алгоритм принимает следующий вид:
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
Реализуя такую запись, мы тратим много личного времени и памяти программы. Чтобы это предотвратить, следует сократить алгоритм, применив циклы, после чего он будет выглядеть следующим образом:
В кастрюле 0 ст. ложек сахара
Добавить в кастрюлю одну ст. ложку сахара
В случае, если в кастрюле ложек сахара меньше 10, то применяем п. 2
Схематично данный алгоритм показан на рисунке 1.
Рис. 1 — Схема алгоритма
Различие циклов заключается в том, известно ли нам количество повторений, в том случае, если известно, тогда такой цикл будет арифметическим, а если нет, то перед нами предстанет итерационный цикл. Последние, в свою очередь в языке Паскаль делятся на два вида алгоритмических циклов: первый, это конструкция while-do (цикл с предусловием); а второй, это repeat-until (цикл с постусловием). Рассмотрим эти виды более подробнее.
Рис. 2 — Циклический алгоритм.
Циклический (итеративный) алгоритм имеет следующий синтаксис:
for <счетчик>:=<начальное значение> to <конечное значение> do <оператор>;
for <счетчик цикла>:=<начальное значение> downto <конечное значение> do <оператор>;
Цикл будет исполняться до тех пор, пока показатель счетчика не выйдет за заданный диапазон. Каждая итерация цикла увеличивает показатель счетчика на единицу (to) или уменьшает на единицу (downto). Можно использовать значение счетчика, например, для расчетов осуществляемых внутри цикла. Когда последнее значение вышло за пределы счетчика цикла, его сохранения не происходит. Цикл прекращает свое действие тогда, когда на очередной итерации, показатель счетчика вышел за установленные пределы значений цикла. Также при указании в начальном значении индекса большего, чем в конечном, такой цикл работать не будет.
Рис. 3 — Итеративный цикл
Синтаксис итеративного (цикла с предусловием) имеет такой вид:
repeat
<операторы>
until (условие);
Цикл будет исполняется до тех пор, пока условие является ложным (false). Как только условие примет значение истина (true), выполнение цикла будет прервано. Если условие является истинным изначально, тогда цикл выполнится один раз. Следует обратить внимание на то, что конструкция repeat-until выполняет роль операторных скобок, что позволяет размещать внутри нее более одного оператора.