Создание программы

Курсовая работа

Представление числа с одинарной точностью

Логические данные, которые имеют значение либо «истина» — 1, либо «ложь» — 0, обрабатываются с помощью логических операций и операций сравнения. К ним относятся:

  • NOT — отрицание;
  • OR — объединение, или логическое сложение;
  • AND — пересечение, или логическое умножение;
  • XOR — исключающее ИЛИ или сложение по модулю два;
  • EQV — эквивалентность;
  • IMP — импликация, или следование.

Результат работы операций задается следующей таблицей истинности (таблицы значений):

Таблица 7. Таблица значений

Количество аргументов

1 аргумент

2 аргумент

результат

Операция NOT

1

Истина

Ложь

Ложь

Истина

Операция OR

2 и более

Истина

Истина

Истина

Истина

Ложь

Истина

Ложь

Истина

Истина

Ложь

Ложь

Ложь

Операция AND

2 и более

Истина

Истина

Истина

Истина

Ложь

Ложь

Ложь

Истина

Ложь

Ложь

Ложь

Ложь

Операция XOR

2 и более

Истина

Истина

Ложь

Истина

Ложь

Истина

Ложь

Истина

Истина

Ложь

Ложь

Ложь

Операция EQV

2 и более

Истина

Истина

Истина

Истина

Ложь

Ложь

Истина

Ложь

Ложь

Ложь

Истина

Операция IMP

2 и более

Истина

Истина

Истина

Истина

Ложь

Ложь

Ложь

Истина

Истина

Ложь

Ложь

Истина

Запомнить таблицу можно, помня следующее:

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

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

  • =, <>, X, >, <, <=,>=.

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

Массив

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

Чтобы задать массив в Qbasic, необходимо использовать зарезервированное слово DIM , значения индексов массива и тип элементов массива.

Например , объявление одномерного массива 11 целых чисел может быть задано так: DIM N%(10)

Интерпретатор автоматически устанавливает минимальное значение индекса, равное нулю. Например, запись DIM BB (5,7), х(5)

объявляет двумерный массив BB из 48 чисел обычной точности и одномерный массив из шести таких чисел.

до объявления

где n равно единице или нулю

Оператор ERASE отменяет объявление массивов, сделанных оператором DIM:список имен массивов .

Символьные данные

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

Например, А$, DF$, STR$.

Этот тип является порядковым, и значения символьных переменных можно сравнивать между собой используя знаки сравнения (>, <, >=, <=).

Например, «pit» < «pita»<» pitaon».

Возможна между ними иконкатенация(+): «само» + «лет» = «самолет».

К символьным переменным относятся все прописные латинские буквы: «А», «В», «С»,…, «Z», строчные: «а», «b», «с»,…, «z», цифры: «0», «1», «2»,…, «9», знаки препинания, всевозможные скобки, русские буквы и т.д.

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

Внутри каждого такого ряда коды символов упорядочены:

  • «А» <
  • «В»<
  • «С» <…<
  • «Z»;
  • «а» <
  • «b» <
  • «с» <…<
  • «z»;
  • «0» <
  • «1» <
  • «2» <…<
  • «9»;
  • «А» <
  • «Б» <
  • «В» <…<
  • «Я»;
  • коды всех строчных букв меньше всех прописных.

Для работы с таким типом данных часто используются функции, аргументы которых могут быть символьными переменными (табл. 8).

Таблица 8 Функции для работы с символьными переменными

Функция

Назначение

CHR$ (N)

Преобразование кода N в символьное представление

ASC (Х$)

Преобразование символа Х$ в десятичный код

LEFT$(X$, N)

Выделение N символов, начиная с самого левого символа в символьном выражении Х$

MID$ (X$, N, M)

Выделение М символов, начиная с N-ro символа в символьном выражении Х$ (М может быть опущено)

RIGHT$(X$, N)

Выделение N символов, начиная с самого правого символа в символьном выражении Х$

SWAP X$, Y$

Обмен символьными выражениями Х$ и Y$

STRINGS (N, X$)

Формирование строки из N одинаковых символов

SPACE$(N)

Формирование строки из N пробелов

Перевод десятичных чисел в восьмеричное счисление

HEX$(N)

Перевод десятичных чисел в шестнадцатеричное счисление

LEN (X$)

Определение длины символьного выражения

STR$(N)

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

INSTR (N, X$, Y$)

Поиск подстроки YS в строке Х$ начиная с N-ro символа N можно опустить


Файл

Одним из типов данных в Qbasic является файловый тип, который является последовательностью связанных между собой однотипных компонентов — записей, расположенных на внешнем носителе. Запись рассматривается как единое целое.

В Qbasic имеется 2 категории файлов, работа с которыми отличается

  • последовательные;
  • с произвольным доступом.

Основные понятия

Программирование — это реализация некоторой идеи, которая лежит в основе конструирования программ.

Фундаментальным понятием при обработке задач на ЭВМ является алгоритм.

Алгоритм-это конечная последовательность точных указаний, приводящая к решению поставленной задачи. Как следует из определения, класс задачи определяет класс указаний (действий).

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

Их назначение — помочь программисту продумать разработку программы прежде, чем попытаться написать ее на языке программирования. Тщательно подготовленная программа на псевдокоде может быть легко преобразована в соответствующую программу на выбранном языке программирования. Во многих случаях для этого достаточно просто заменить предложения псевдокода их эквивалентами из выбранного языка программирования. Псевдокод включает только исполняемые операторы — те, которые выполняются, когда программа переведена из псевдокода на язык программирования и запущена на обработку. Объявления не являются исполняемыми операторами.

Блок-схема — это графическое представление алгоритма или фрагмента алгоритма. Блок-схема рисуется с использованием специальных символов, таких, как прямоугольники, ромбы, овалы и малые окружности; эти символы соединяются стрелками, называемыми линиями связи .

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

Нисходящее проектирование

Нисходящее проектирование — подход к проектированию программ, при котором первоначально создается главный модуль, для которого затем проводится декомпозиция (разбиение на модули, решающие подзадачи главной задачи).

Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы («сверху — вниз»).

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

Создание программы с использованием технологии нисходящей (сверху — вниз) разработки с пошаговой детализацией. Эта технология является неотъемлемой частью создания хорошо структурированных программ. Она начинаем с записи псевдокода вершины.

Вершина — это единственное предложение (оператор), выражающее общее назначение программы. Таким образом, вершина отображает всю программу в целом.

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

Поэтому нужен процесс детализации.

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

Многие программы могут быть логически разделены на три этапа:

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

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

Реализованная программа окажется в этом случае простой и наглядной.

Нисходящее проектирование может осуществляться следующими способами:

  • По алгоритму программы создается текст главного модуля, содержащего в виде комментариев основны6е этапы решения задачи. Желательно, чтобы каждая строка комментария представляла собой вызов подпрограммы, решающей подзадачу главной задачи.
  • Основные этапы заменяются строчкой кода, представляющего собой вызов функции, соответствующей этапу решения задачи.

Выбирается имя функции, тип возвращаемого значения и определяется список параметров.

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

Динамическое программирование

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

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

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

Оптимальная подструктура в динамическом программировании означает, что оптимальное решение подзадач меньшего размера может быть использовано для решения исходной задачи. К примеру, кратчайший путь в графе из одной вершины (обозначим s) в другую (обозначим t) может быть найден так: сначала считаем кратчайший путь из всех вершин, смежных с s, до t, а затем, учитывая веса ребер, которыми s соединена со смежными вершинами, выбираем лучший путь до t (через какую вершину лучше всего пойти).

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

  • Разбиение задачи на подзадачи меньшего размера.
  • Нахождение оптимального решения подзадач рекурсивно, проделывая такой же трехшаговый алгоритм.
  • Использование полученного решения подзадач для конструирования решения исходной задачи.

Подзадачи решаются делением их на подзадачи ещё меньшего размера и т.д., пока не приходят к тривиальному случаю задачи, решаемой за константное время (ответ можно сказать сразу).

К примеру, если нам нужно найти n!, то тривиальной задачей будет 1! = 1 (или 0! = 1).

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

Динамическое программирование пользуется следующими свойствами задачи:

  • перекрывающиеся подзадачи;
  • оптимальная подструктура;
  • возможность запоминания решения часто встречающихся подзадач.

Динамическое программирование обычно придерживается двух подходов к решению задач:

  • нисходящее динамическое программирование: задача разбивается на подзадачи меньшего размера, они решаются и затем комбинируются для решения исходной задачи. Используется запоминание для решений часто встречающихся подзадач.

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

Языки программирования могут запоминать результат вызова функции с определенным набором аргументов (мемоизация), чтобы ускорить «вычисление по имени». В некоторых языках такая возможность встроена, а в некоторых требует дополнительных расширений.

Известны сериальное динамическое программирование, включённое во все учебники по исследованию операций, и не сериальное динамическое программирование (НСДП), которое в настоящее время слабо известно, хотя было открыто в 1960-х годах.

Обычное динамическое программирование является частным случаем не сериального динамического программирования, когда граф взаимосвязей переменных — просто путь. НСДП, являясь естественным и общим методом для учета структуры задачи оптимизации, рассматривает множество ограничений и / или целевую функцию как рекурсивно вычислимую функцию. Это позволяет находить решение поэтапно, на каждом из этапов используя информацию, полученную на предыдущих этапах, причём эффективность этого алгоритма прямо зависит от структуры графа взаимосвязей переменных. Если этот граф достаточно разрежен, то объём вычислений на каждом этапе может сохраняться в разумных пределах.

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

Заключение

Решение какой-либо задачи с помощью ЭВМ распадается на три основных этапа:

  • постановка задачи;
  • составление алгоритма решения;
  • программная реализация алгоритма на ЭВМ.

В данной работе реализованы все указанные выше этапы в среде программирования Qbasic.

Была оформлена пояснительная записка в соответствии с требованиями, предъявляемых к программной документации.

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

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

Во второй части курсовой работы приведено руководство пользователя.

В третьей — ответы на контрольные вопросы.

  • выполнение арифметических операций,
  • решения задач из курса высшей математики.

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

В среде Qbasic существует несколько экранных режимов. Основной исходный экран представляет поле редактирования текста программы. Встроенный текстовый редактор выполняет две функции — редактирования текста и синхронной интерпретации строки. В этой связи строки в некоторых программах не нумеровались. Результаты работы программы, комментарии и сообщения интерпретатора представлялись в текстовом экране (по умолчанию режим SCREEN 0).

Особый интерес представляла система помощи help (подсказок), имеющая контекстную структуру с возможностью копирования примеров из текста подсказок, что позволило освоить работу с языком программирования Qbasic практически самостоятельно.

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

Список литературы

[Электронный ресурс]//URL: https://inzhpro.ru/kursovaya/razrabotka-programm/

программа пользователь алгоритм

1. Могилев А.В. Информатика. — М., 1999. — 816 с.

2. Сафронов И.К. Бейсик в задачах и примерах. — СПб.: BHV, 2001. — 215 с.

— Семашко Г.Л. Программирование для всех. — М.: Наука, 1986. — 325 с.

— Ставнистый Н.Н. Qbasic в математике. Решение задач с помощью компьютера. Ч1. — М.: СОЛОН-Р, 2001. — 143 с.

— Федоренко Ю. Алгоритмы и программы на QBASIC. — СПб.: Питер, 2002. — 287 с.

— Хомоненко А.Д. Основы современных компьютерных технологий. — СПб.: КОРОНА принт, 1998. — 448 с.

— Чернов Б.И. Программирование на алгоритмических языках Бейсик, Фортран, Паскаль. — М.: Просвещение, 1991. — 192 с.