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

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




































Главная

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

Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

В современную эпоху компьютеризации и информатизации перед обществом встает задача реализации все более и более сложных алгоритмов обработки потоков данных в кратчайшие сроки [1]. Реализацией этой задачи занимаются инженеры различных специальностей во всем мире. Для решения той или иной задачи в сфере информатики решаются следующие подзадачи:
1. Сравнительный анализ языков программирования высокого уровня Си и Паскаль
Язык высокого уровня [2] - тип языка компьютерного программирования. Языки высокого уровня предназначены для выражения потребностей программиста, а не возможностей компьютера. Они используют абстрактные данные и контролируют структуры, символические обозначения и переменные. Существует много языков высокого уровня, в том числе Бейсик (BASIC), Кобол (COBOL), Паскаль (Pascal), Фортран (FORTRAN), Алгол (Algol) и Си (C). Чтобы можно было использовать программы, написанные на языках высокого уровня, их нужно перевести в машинные коды. Рассмотрим в противопоставлении языки высокого уровня Си и Паскаль.
Для определения множеств имен переменных используется понятие идентификатора [3]. Идентификаторами в Паскале является произвольный набор символов. Требования к идентификаторам:
· идентификатор состоит из латинских букв и цифр (заглавные и строчные буквы не различаются);
· идентификатора должен начинаться обязательно с буквы ("а1", а не "1а");
· идентификатор может состоять из любого количества символов, но распознаются только первые 63;
· служебные слова запрещается использовать в качестве идентификаторов.
Программа составляется из операторов Паскаля, которые разделяются символом ";". Для выделения группы операторов используют операторные скобки: begin…..end. Несколько операторов, заключенных в операторные скобки, называют составным оператором. В тексте программы фигурными скобками выделяются комментарии, которые игнорируются при выполнении программы. В тексте лекций будем также использовать фигурные скобки для комментирования.
Структура программы на языке Турбо Паскаль:
Переменные, объявленные внутри основного блока программы, помещаются в сегмент данных и инициализируются нулем компилятором; переменные, объявленные внутри подпрограмм, объявляются внутри сегмента стека и не инициализируются. Все тело программы представляет собой жесткую конструкцию, в которую нельзя вносить никаких изменений без потери работоспособности проекта.
Структура Си-программ [4]. Идентификатором в языке Си называется последовательность цифр, букв и специальных символов. При этом первой стоит буква или специальный символ. Для получения идентификаторов можно использовать строчные или прописные буквы латинского алфавита. Специальным символом может служить символ подчеркивания «_».
Два идентификатора, для получения которых применяются совпадающие строчные и прописные буквы, считают различными. К примеру: abc, ABC, A328B, a328b. Компилятор допускает всякое количество символов в идентификаторе, но значим только первый 31 символ.
Идентификатор образуется на этапе объявления переменной, функции, структуры и т. п. После этого его можно применять в последующих операторах разрабатываемой программы. Важно отметить некоторые особенности при выборе идентификатора. Во-первых, идентификатор и ключевое слово не должны совпадать. Также не должно быть совпадения с зарезервированными словами и названиями функций библиотеки компилятора языка СИ.
Во-вторых, важно обратить особое внимание на применение символа подчеркивания «_» первым символом идентификатора, так как идентификаторы выстраиваются так, что, с одной стороны, могут совпадать с именами системных функций и «или» переменных, но при этом при применении таких идентификаторов программы могут стать непереносимыми, т. е. их нельзя применять на компьютерах других типов.
В-третьих, на идентификаторы, применяемые для определения внешних переменных, должны быть наложены ограничения, которые формируются используемым редактором связей. Кроме того, использование различных версий редактора связей или различных редакторов определяет различные требования на имена внешних переменных.
Ключевыми словами называются зарезервированные идентификаторы, наделенные определенным смыслом. Их можно применять только в соответствии со значением, известным компилятору языка СИ. Приведемсписокключевыхслов: auto double intstruct break else long switch register tupedef char extern return void case float unsigned default for signed union do if sizeof volatile continue enum short while. При этом в определенных версиях реализации языка СИ зарезервированными словами являются следующие: _asm, fortran, near, far, cdecl, huge, pascal, interrupt. Ключевые слова far, huge, near дают возможность определить размеры указателей на области памяти.
Ключевые слова _asm, cdecl, fortran, pascal используются для организации связи с функциями, которые написаны на других языках, а также для применения команд языка ассемблера непосредственно в теле будущей программы на языке СИ. Ключевые слова не могут применяться в качестве идентификаторов.
В Паскале все переменные должны объявляться в специально отведенном для этого месте - до начала блоковых скобок программы или функции и после ключевого слова var. Так же объявляются собственные типы (после ключевого слова type). Объявление переменных стандартного типа: идет допустимое название переменной, затем после двоеточия тип данных, хранящихся в этой переменной. Типы данных Паскаля перечислены в таблицах 1.2.1 - 1.2.3[5].
В обоих языках реализована возможность создавать псевдонимы для существующих типов и новые типы. [7]Кроме стандартных типов данных Паскаль поддерживает скалярные типы, определенные самим пользователем. К ним относятся перечислимые типы (когда непосредственно, в разделе описания типов, заранее записываются все значения для переменных этого типа) и интервальные (когда задаются границы диапазона значений для данной переменной), указательные типы (кроме Pointer), структурированные типы и процедурные типы.Данные этих типов занимают в памяти один байт, поэтому скалярные пользовательские типы не могут содержать более 256 элементов. Их применение значительно улучшает наглядность программы, делает более легким поиск ошибок, экономит память.
Перечислимый тип данных задается непосредственно перечислением всех значений, которые может принимать переменная данного типа. При описании отдельные значения указываются через запятую, а весь список заключается в круглые скобки. Интервальный тип позволяет задавать две константы, определяющие границы диапазона значений для каждой переменной. Обе константы должны принадлежать одному и тому же стандартному типу (кроме real). Указательные типы - их значениями являются адреса памяти. В отличие от стандартного указательного типа Pointer, пользовательский тип определяет множество значений, которые указывают на динамические переменные определенного типа , называемого базовым типом. Указатель на какой-либо тип может быть описан до объявления самого типа.
Псевдоним в Паскале создается в специальном разделе перед телом программы и после ключевого слова TYPE. Для создания псевдонима компилятору необходимо лишь знать размер, который будет занимать новый тип в байтах. Поэтому можно создавать псевдонимы, ссылающиеся на указатели и на массивы. В Си для этих целей используется ключевое слово typedef, которое вызывается в любой достижимой точке программы и имеет время жизни с момента вызова и до завершения блока, внутри которого произошел вызов. Принцип действия аналогичен паскалевскому.
В языке Си существует пять способов создания пользовательских типов данных. Пользовательские типы данных можно создавать с помощью:
· структуры - группы переменных, имеющей одно имя и называемой агрегатным типом данных. Кроме того, еще известны термины: соединение или конгломерат;
· объединения, которое позволяет определять один и тот же участок памяти как два и более типов переменных;
· битового поля, которое является специальным типом элемента структуры или объединения, позволяющим легко получать доступ к отдельным блокам;
· перечисления - списка поименованных целых констант;
· ключевого слова typedef, которое определяет новое имя для существующего типа;
В первоначальной реализации Си перечисляемых типов не было, их добавили позже. В Си представителем перечисляемого типа является нумерованный список enum, оформляемый следующим образом: вначале используется ключевое слово enum, затем необязательное название нумерованного списка. После в фигурных скобках идет перечисление элементов списка; если элементу не присвоено значение, то автоматически он переназначается как инкрементированное значение предыдущего элемента. Каждому элементу списка соответствует целое значение; если первый элемент не инициализирован, он инициализируется нулем.
Арифметическая операция - вычислительная операция над числами. Во многих языках программирования определены двуместные арифметические операции: сложения, вычитания, умножения, деления, деления нацело, вычисление остатка от деления. Допустимые операции в языке Паскаль представлены в таблице 1.3.1 [9].
Целый, вещественный, логический, строки
1.4 Указатели и векторные типы данных
В рассмотрении типов и операций необходимо отдельно выделить векторные типы данных и указатели. В предыдущем разделе было указано на наличие адресной арифметики в языке Си; необходимо указать, к каким выгодам это привело при работе с векторными типами данных.
Под векторным типом данных понимается организация типа по принципу структуры, в которой все элементы одного и того же типа. Это массивы и строки. Под строки в языке Паскаль выделен специальный тип, о котором говорилось выше. Массивы в языке Паскаль существуют как одномерные, так и многомерные. Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме LONGINT). Чаще всего используется интервальный тип (диапазон). Описание типа массива задается следующим образом: TYPE имя_типа = ARRAY[список индексов] OF тип. Здесь имя типа - допустимый идентификатор; список индексов - список одного или нескольких индексных типов, разделенных запятыми; тип - любой тип данных. Вводить и выводить массивы можно только поэлементно, над массивами не определены операции отношения. Сравнивать два массива также можно только поэлементно. Глубина вложенности многомерных массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт [11].
Массивы в Си в общих чертах имеют те же свойства, что и массивы в Паскале. Так, многомерность их также не ограничена, операции допустимы лишь посимвольно. Но главное отличие заключается в том, что имя массива есть указатель на первый его элемент, причем с этим указателем можно работать как с отдельной переменной. Нельзя изменять значение этого указателя, но возможно разыменовывать его и получать его адрес. Перемещение по элементам массива может проходить как через индексирование, так и через смещение относительно адреса, лежащего в переменной имени массива. Так как указатель никак кроме значения не связан с массивом, то допустимо пересекать границы массива в обе стороны. С одной стороны это дает большую гибкость и больше возможностей, с другой - это потенциальный источник ошибок.
Вернемся непосредственно к указателям. Так как указатель содержит адрес объекта, это дает возможность «косвенного» доступа к этому объекту через указатель. Унарная операция «&» в Си выдает адрес объекта; эта операция применима только к переменным и элементам массива, конструкции с использованием численных и строковых констант являются незаконными. Нельзя также получить адрес регистровой переменной. Унарная операция «*» рассматривает свой операнд как адрес конечной цели и обращается по этому адресу, чтобы извлечь содержимое [4]. Тип указателя неразрывно связан с информацией, хранимой по содержащемуся в нем адресу. Несколько указателей разных типов могут содержать один и тот же адрес, но при этом информация, которую они вернут при разыменовании, будет различаться. Исходя из этого, возникает следующая особенность адресной арифметики в Си: при увеличении указателя на n смещение в байтах будет равно произведению размера типа разыменованного указателя на n. Таким образом, любой указатель рассматривает всю память как массив элементов своего типа, и перемещается по памяти поэлементно. В Паскале адресная арифметика отсутствует; набор допустимых действий с указателями это разыменовывание и получение адреса. Эти действия были рассмотрены в разделе 2.3.
Оператор ветвления - оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения.
1.5.1 Условные операторы с несколькими условиями
В языке Паскаль имеет место синтаксис, согласно которому в ветвях условного оператора может быть помещена только одна команда. Поэтому для размещения там большего количества команд они группируются в составной оператор с помощью пары ключевых слов BEGIN и END. Ветвь ELSE необязательна. Ключевые слова BEGIN и END необходимы, только если операторов несколько (например, из соображений единообразия оформления кода) [12]. Оформление условного перехода IF … THEN … ELSE выглядит следующим образом: на первое место выносится ключевое слово IF, после которого следует через пробел выражение или переменная, возвращающие логический тип. В случае, если выражение составное, используются круглые скобки. Выражение закрывается ключевым словом THEN, после которого записывается оператор, выполняющийся в случае истинности условия. В случае, если необходимо обработать и случай ложности высказывания, используется ключевое слово ELSE. Перед ELSE недопустим знак завершения оператора «;». При необходимости после ELSEдопускается начинать новый оператор IF, который будет рассматриваться в общей совокупности с первым IF.
В языке Си условный оператор структурно аналогичен оператору в Паскале. Отличие состоит в том, что условие должно быть записано в круглых скобках, исчезает ключевое слово THEN, а вместо ключевых слов BEGIN и END используются фигурные скобки «{}» [12]. Условные операторы Си проигрывают условным операторам Паскаля в случае определения диапазонов и принадлежности к множествам, так как оператор принадлежности к множеству IN (раздел 2.3, операции Паскаля) работает быстрее двух операторов сравнения с верхней и нижней границей множества.
Конструкция переключателя имеет несколько (две или более) ветвей. Переключатель выполняет одну заданную ветвь в зависимости от значения вычисляемого ключевого выражения. Принципиальным отличием этой инструкции от условного оператора является то, что выражение, определяющее выбор исполняемой ветви, возвращает не логическое, а целое значение, либо значение, тип которого может быть приведён к целому [12].
В языке Паскаль в переключателе допустимо использовать в качестве выражения переменные целого и символьного типа. В качестве меток переключения могут использоваться как константы указанных типов, так и диапазоны; переменные в качестве меток не допускаются. Синтаксис: на первое место выносится ключевое слово CASE, после которого следует выражение, завершающееся ключевым словом OF. После OF без дополнительных символов начинается перечисление меток переключения, указываемых как простые константные выражения. После самой метки следует через двоеточие оператор, выполняющийся для этой метки. В качестве метки «по умолчанию» при необходимости используют ключевое слово ELSE. Завершается оператор ключевым словом END.
В языке Си в качестве переключателя используется оператор switch. Синтаксис его описания следующий: вначале ставится ключевое слово switch, после которого в круглых скобках располагается выражение для переключения по меткам переключателя. Затем начинается тело переключателя, оформляемое фигурными скобками. Метки внутри тела переключателя обозначаются при помощи ключевого слова case, после которого располагают константное выражение или символьную переменную для определения значения метки. После ставится двоеточие и следует набор операторов, количество которых не ограничивается языком. Метка «по умолчанию» задается ключевым словом default.
У переключателей в Си есть особенность, которую можно охарактеризовать как «проваливание» [4]. Оно обрабатывается при помощи оператора break, использующегося для выхода из тела переключателя. В том случае, если в конце набора операторов метки и перед новой меткой нет оператора break, то управление перейдет к следующим операторам до первого оператора break либо до завершения тела переключателя. Эта особенность имеет как свои плюсы, так и свои минусы. К положительным качествам можно отнести то, что оно позволяет связать несколько случаев с одним действием; но в то же время оно обычно приводит к необходимости заканчивать каждый случай оператором break, чтобы избежать перехода к следующему случаю. Проваливание с одного случая на другой неустойчиво, поэтому не рекомендуется использовать его часто [4].
В обоих языках операторы переключения работают намного быстрее обычных условных переходов, так как они используют исключительно целые типы, а в Паскале даже допустима работа с множествами и диапазонами.
Вследствие громоздкости конструкции switch из-за «проваливания», а так же отсутствия в Си диапазонов и множеств, оператор переключения в Паскале превосходит соответствующий оператор языка Си как по удобству использования, так и по быстродействию и объему решаемых задач.
1.6.1 Организация операторов циклов
Цикл - в программировании - оператор языка программирования, позволяющий многократно повторять одну и ту же последовательность команд (тело цикла). Различают:
- операторы циклов с заранее известным числом повторений;
Вследствие схожести структур рассмотрение всех типов циклов пройдет одним блоком.
Циклы в Паскале. [12]У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла. В языке программирования Паскаль существует три вида циклических конструкций. Цикл for используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется). В заголовке цикла указываются два значения. Первое значение присваивается так называемой переменной-счетчику, от этого значения начинается отсчет количества итераций (повторений). Отсчет идет всегда с шагом равным единице. Второе значение указывает, при каком значении счетчика цикл должен остановиться. Другими словами, количество итераций цикла определяется разностью между вторым и первым значением плюс единица. В Паскале тело цикла не должно содержать выражений, изменяющих счетчик. Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false - то нет. Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании. Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat - цикл с постусловием. В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false - его повторение.
Циклы в языке Си мало чем отличаются от циклов языка Паскаль. Также существует три конструкции для реализации цикла; это оператор «for(…;…;…)…;», оператор «while(…) …;» и оператор «do … while(…);». Первые два цикла предусловные, последний постусловный. Все циклы подразумевают выполнение одного оператора и в качестве условия продолжения цикла требуют логическую истину (неравенство нулю в Си). Условие выхода в операторе while помещается в круглые скобки и должно быть неравным нулю для продолжения работы цикла. Оператор for внутри скобок параметров цикла содержит следующие выражения: первый параметр выполняется один раз перед стартом цикла, второй является условием для выполнения цикла (также как и для while он не должен равняться нулю), а третий выполняется каждый проход в конце тела цикла. Каждый из параметров может быть опущен, однако символ точки с запятой опускать запрещается. Внутри параметров допускается использование оператора запятая.
Постусловный оператор do … while в Си устроен следующим образом: после ключевого слова do следует один оператор тела цикла, затем после символа точки с запятой следует ключевое слово while с условием выхода в круглых скобках. Для выхода из цикла значение условия должно быть равно нулю.
Циклы в обоих языках имеют примерно сходный синтаксис и мало отличаются; исключение из всего ряда составляет конструкция REPEAT … UNTIL, не вписывающаяся в общую концепцию подобия. Из этого можно сделать вывод, что циклы языка Си более удобны для восприятия.
Оператор BREAK существует в обоих языках программирования, и в обоих языках относительно циклов он несет одинаковую функциональную нагрузку - выход из текущего блока цикла. Оператор BREAK предназначен для досрочного завершения цикла. При его выполнении происходит немедленный выход из текущего цикла и переход к выполнению оператора, следующего за циклом. Оператор CONTINUE завершает текущую итерацию цикла, осуществляя переход к концу тела цикла. Главное различие для языков Си и Паскаль в использовании этих операторов в том, что в Си это именно операторы, а в ранних версиях Паскаля (включая BorlandPascal и DelphiPascal) это процедуры.
Оператор GOTO и система меток также имеется в обоих языках. В Паскале оператор GOTO осуществляет переход к оператору, помеченному специальной меткой, которая отделяется от самого оператора двоеточием. В качестве метки может быть использовано любое целое число без знака, содержащее более четырех цифр, или любое имя. Чтобы можно было использовать метку, она должна быть в обязательном порядке объявлена в разделе меток в описательной части программы. Этот раздел начинается служебным словом LABEL, после которого через запятую перечисляются метки [13]. В языке Си метки обозначаются таким же образом, но описывать их не нужно. В обоих языках использование этих операторов основано на аналоге оператора языка Ассемблер, поэтому и различий в их использовании нет.
Подпрограмма - самостоятельная часть программы, которая разрабатывается независимо от других частей и затем вызывается по имени. Подпрограммы в Паскале используются как вспомогательные элементы, в отличие от подпрограмм в языке Си, где функция является основной структурной единицей программы.
Подпрограммы языка Паскаль делятся на две категории: процедуры PROCEDURE, не возвращающие значений, и функции FUNCTION, возвращающие значения. Синтаксически процедуры и функции состоят из заголовка и тела, после которого ставится символ конца оператора «;». Заголовок содержит ключевое слово PROCEDURE или FUNCTION, затем следует имя подпрограммы. За именем находится необязательная конструкция из круглых скобок для передачи списка формальных параметров, и если подпрограмма является функцией, то далее располагается тип возвращаемого значения через символ двоеточия. Тело процедуры, как и программы, в свою очередь может содержать описания процедур и функций. Таким образом, процедуры и функции могут быть вложены друг в друга как угодно глубоко, при этом тело программы -- самое верхнее в цепочке. Вслед за заголовком процедур/функций вместо тела может помещаться ключевое слово FORWARD, это делается в том случае, если описание процедуры/функции располагается в программе после её вызова, и связано с поддерживаемой в Паскале возможностью компиляции программы за один проход [5]. Возвращение значения из функции осуществляется через временную переменную, которая доступна по имени самой функции. Таким образом, для того, чтобы вернуть значение в точку вызова, необходимо присвоить это значение имени функции внутри ее описания.
Подпрограммы языка Си представляют основную структурную единицу языка и доступны в одном виде - функции. Каждая функция может иметь несколько этапов своего создания. Первый этап - объявление функции, которое состоит из заголовка функции, списка формальных параметров и пустого оператора. Объявление требуется компилятору на стадии линковки для того, чтобы указать существование данной функции. Заголовок функции состоит из типа возвращаемого значения (в случае, если функция не возвращает значения, ей присваивается тип void), имя функции и обязательного списка формальных параметров. Если список формальных параметров пуст, то по умолчанию в него записывается ключевое слово void. Второй этап - определение функции, в котором после заголовка в фигурных скобках идут операторы, выполняющиеся в теле данной функции. В случае, если необходимо вернуть значение, используется оператор return. Он передает требуемое значение в поток вызова и принудительно завершает функцию. В одной функции может быть сколь угодно операторов возврата, но выход будет осуществляться по первому из них. И третий этап - непосредственно вызов функции, который может проходить ниже объявления либо определения и может быть использован внутри самой функции (рекурсия).
Подпрограммы в Си и Паскале имеют одинаковый механизм передачи параметров в функцию через стек, унаследованный у языков более низкого уровня. Возврат значения в Си происходит через процессор, а потому проходит быстрее возврата значения в Паскале. Функции Си имеют более последовательную организацию, а потому выигрывают в синтаксисе у подпрограмм Паскаля.
1.8 Итоги анализа сравнения языков программирования Паскаль и Си
В рассмотренных языках программирования высокого уровня Си и Паскаль имеются как свои плюсы, так и свои минусы. Удобство в использовании языка программистом является важным фактором при оценке и сравнении языков, а гибкость языка позволяет расширить возможности при реализации алгоритмов разных уровней. Язык Паскаль громоздок и имеет ограниченный набор возможностей по сравнению со многими языками, однако он достаточно иерархичен и структурирован. Язык Си гибок и логичен в своей структуре, имеет гораздо больше возможностей для работы, однако таит в себе много опасностей. Керниган говорит: «Си -- инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво» [4]. Поэтому использование языка Си оправдано лишь при достаточном уровне знаний в сфере программирования. На сегодняшний день очевидно, что язык Паскаль не может достойно конкурировать с языком Си, так как при усложнении задач, встающих перед программистами, требуется в первую очередь гибкость и функциональность.
2.1 Описание задачи и ограничений на ее выполнение
Формулировка задачи звучит следующим образом: В целочисленном массиве найти наиболее длинную цепочку одинаковых подряд стоящих элементов. Необходимо реализовать программу, способную генерировать случайную последовательность чисел либо загружать ее из предварительно подготовленного файла, и производить поиск максимальной по длине подпоследовательности, а затем производить сохранение последовательности в файл.
Ограничения, установленные для реализации задачи:
· наличие меню с удобным интуитивно понятным графическим интерфейсом;
· возможность изменения параметров программы без изменения исходного кода;
· возможность производить поиск всех подпоследовательностей максимальной длины;
При реализации задания были разработаны две структуры: для работы с последовательностями posled и для организации поиска подпоследовательности внутри последовательности search. Список файлов проекта представлен в таблице 2.2.1. Для удобства доступа к файлам в MAIN.CPP описаны макросы для быстрого изменения пути до файлов: с использованием склейки строк MSTR(p) для текстовых файлов и подстановки DISK(p) для подключаемых файлов.
Подключение стандартных библиотек, описание пользовательских типов, прототипы функций, подключение пользовательских файлов.
Функции работы с последовательностями.
Главный компилируемый файл проекта, содержащий функцию main().
Текстовый документ, его содержимое отображается в пункте меню ABOUT.
Из этого файла загружается последовательность для дальнейшей обработки. Формат записи:
В этот файл записывается последовательность, если в меню OPTIONS было указано раздельное сохранение последовательностей.
Для реализации графического интерфейса была применена стандартная библиотека graphics.h, использующая видеодрайвер egavga.bgi. Функций взаимодействия с пользователем 4: menu(), options(), about(), start(). Меню построено на рекурсивном и взаимно рекурсивном принципе. Для уменьшения кода была создана функция отрисовки фонового изображения draw_note(). Скриншоты главного меню и меню вывода результата представлены соответственно на рисунках 2.2.1 и 2.2.2.
Содержимое файла ALG.CPP указано в таблице 2/2.2. Рассмотрим содержимое файла MENU.CPP более подробно.
Р
Создание программы для работы с последовательностями курсовая работа. Программирование, компьютеры и кибернетика.
Реферат по теме Деятельность предприятия в рыночной среде
Гоголь Биография Реферат
Образование Эпохи Просвещения Реферат
Реферат: Химено Сильный
Как Делать Сноски В Курсовой Работе
Курсовая Работа На Тему Проблемы Становления И Развития Ювенальной Юстиции В России
Сочинение По Рассказу Капитанская Дочка 8 Класс
Реферат: Основы религиоведения
Вводные Слова Для Сочинения
Реферат по теме Антропогенное загрязнение среды
Бюджетное Законодательство Рф Реферат
Реферат: Древний Рим и Советский Союз – два лидера: Брежнев и Октавиан Август. Скачать бесплатно и без регистрации
Реферат: Анализ среды СП "Санта-Бремор" ООО
Реферат по теме Сущность и типы педагогического регулирования взаимодействия детей дошкольного возраста
Реферат: Разведка радиационной обстановки. Скачать бесплатно и без регистрации
Курсовая работа: Теневая экономика России и проблемы её ослабления. Скачать бесплатно и без регистрации
Реферат по теме Кометы и метеорные потоки
Электронная Торговля Реферат
Реферат: Лондон
Реферат: Предмет і завдання курсу Історія економічних вчень
Методологические основания эстетического воспитания учащихся средствами элективного курса по географическому краеведению и методика их реализации - Педагогика курсовая работа
Коммерческая тайна - Государство и право курсовая работа
PR-технологии в бизнесе: их роль и значение - Маркетинг, реклама и торговля контрольная работа


Report Page