Программирование на на языке Турбо Паскаль

Введение

 

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

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

Для решения сколько-нибудь сложной задачи ЭВМ должна выполнить длинную последовательность команд (программу), составленную программистом и введённую в память машины до начала решения задачи. Каждая команда, как правило, состоит из двух частей: кода операции, который указывает, какое действие вызывает команда, и адресной части, указывающей адреса ячеек, используемых в качестве аргументов и результатов команды. Кроме списка команд, при составлении программы программист использует так же список величин программы. При этом одни величины даются уже в условии задачи – обычно это её исходные данные и искомые результаты. Другие возникают в ходе решения задачи и называются промежуточными переменными величинами. Их значения вычисляют как результаты выполнения одних команд программы и используются позднее в других командах как их аргументы.

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

Первоначально составление программы для ЭВМ выполнялось вручную и требовало много труда и времени. Затем для облегчения задачи программирования были разработаны специальные алгоритмические системы, получившие название алгоритмические языки программирования.

Одной из основных задач программирования как научно-технической дисциплины является разработка «языков программирования» - способов выражения программ, удобных для человека, и методов трансляции, перевода с языков программирования на язык машины. [1]

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

 

1 Постановка задачи

 

Постановка задачи – точная формулировка задачи для решения на компьютере с описанием входной и выходной информации. Входной информацией могут служить данные документов ручного заполнения; нормативно-справочная информация или результаты решения других задач, хранимых в базе данных; электрические сигналы, поступающие с датчиков, и другие данные. Выходная информация может быть представлена в виде документа (типа листинга), видеограммы на экране монитора, электрического сигнала для управления конкретным устройством. При постановке функциональной задачи формулируется её цель, место и связи с другими задачами; уточняются условия решения задачи с использованием средств вычислительной техники; Определяются функции обработки входной информации и др.[4]

Дан двухмерный массив размером M x N. Преобразовать его по правилу – разделить все элементы матрицы на элемент, наименьший по абсолютной величине. Из первых четырёх строк массива сформировать четыре новых вектора (одномерные массивы). Для каждого вектора найти элемент, ближайший к среднему арифметическому.

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

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

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

 

2 Анализ и исследование задачи, модели.

 

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

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

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

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

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

 

3 Разработка алгоритма

 

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

Исполнителем может быть человек, группа людей, станок, компьютер и др. С учётом особенностей исполнителя составленный алгоритм может быть представлен различными способами: с помощью графического или словесного описания, в виде таблицы, последовательностью формул, записанных на алгоритмическом языке (языке программирования), и др. [1]

По форме представления алгоритмы классифицируются на:

- Словесные (запись на  естественном языке);

- Графические (изображение  из графических символов);

- Псевдокоды (описание на  условном алгоритмическом языке);

- Программные (тексты на  языках программирования);

Алгоритм обладает несколькими свойствами:

- Понятность для исполнителя  – для выполнения алгоритма  он должен быть понятен, т.е  учитывать возможности и особенности  исполнителя на которого он  рассчитан;

- Конечность (дискретность) – алгоритм должен представлять  процесс решения задачи как  последовательное выполнение простых  шагов;

- Определённость – каждый  шаг алгоритма должен быть  чётк и однозначно определён  и не допускать двоякой трактовки  исполнения.

- Результативность –  цель выполнения алгоритма это  получение результата на основании  исходных данных;

 - Массовость – возможность применять один и тот же алгоритм для решения целого класса однотипных задач, различающихся исходными данными;

- Эффективность – каждый  шаг алгоритма должен быть  выполнен точно и за должное  время.

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

Процедура punkt – это процедура, которая рисует пункты меню от 1 до 5 и пояснительную информацию для пользователя. Данная подпрограмма выполнена в графическом режиме.

Процедура menu отвечает за главное меню программы, в ней осуществляется движение курсора между пунктами

 


 



 

 

 


 

 


 

 

 

Рисунок 1 – Блок-схема процедуры menu

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

В блоке 2 задаётся то, что при входе в программу автоматически курсор стоит на первом пункте.

В блоке 3 происходит считывание нажатой клавиши.

В блоке 4 анализируется условие: если нажатая клавиша не равна 13 ( клавиша Enter), то выполняется блок 5. Он отвечает за нажатие клавиш вверх (6) и вниз (7), необходимых для перемещения курсора, а также выбор конкретного пункта, посредством нажатия клавиши Enter.

В блоке 13 происходит выбор соответствующего пункта меню и его активация. В пунктах с 14 по 19 включена процедура punkt, для выделения цветом соответствующей строки.

В блоке 22 происходит зацикливание программы, до тех пор пока не будет нажата клавиша Enter.

Долее будет описана процедура заполнения массива случайными числами:


Рисунок 2 – Заполнение случайными числами

В блоках с 1 по 3 задаётся цикл, в котором массив заполняется случайными числами.

В блоках с 4 по 7  задаётся цикл, для того что бы в массиве присутствовали отрицательные числа.

В блоках с 8 по 10 осуществляется вывод массива на экран.

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


 


 

 


 





 

 


 

 


 


 


 

 

 

 



 

 


 

 

 

 

Рисунок 3 – Нахождение минимального элемента

 

В блоке 1 минимальный элемент приравнивается первому элементу массива.

В блоках со 2 по 5 задаётся цикл, и каждый элемент массива сравнивается с минимальным элементом. Если элемент меньше минимального, то этот элемент становится минимальным и так и далее.

В блоке 6 выводится найденный минимальный элемент.

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

 

Рисунок 4 – Преобразование массива

 

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

В блоках с 1 по 3 происходит преобразование массива: исходный массив делится на минимальное значение. В блоках 4-6 происходит вывод преобразованного массива.

В следующей блок схеме представлена процедура нахождения среднего арифметического значения для каждой строки:

 

Рисунок 5 – Нахождение среднего арифметического

В 1 блоке задаётся то, что в массиве будут обрабатываться только первые 4 строчки. В следующем блоке переменная sum приравнивается 0.

В блоках 3-5 находится сумма каждой строки.

С 6 по 8 блоки выполняется операция нахождения среднего арифметического

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


 

 

 



 


 


 

 


 

 



 

Рисунок 6 – Нахождение ближайшего элемента к ср. арифметическому

 

В блоках 1-5 выполняется операция нахождения минимального значения (по модулю) массива raz. Массив raz является служебным массивом. Каждое число этого массива есть разность преобразованного массива b и среднего арифметического каждой строки.

В блоках 5-7 находится ближайший элемент к среднему арифметическому каждой строки.

Блоки 8 и 9 отвечают за вывод массива ближайших элементов.

 

4 Программирование

 

Система программирования Турбо Паскаль, разработанная американской корпорацией Borland, остаётся одной из самых популярных систем программирования в мире. Этому способствует, с одной стороны, простота лежащего в его основе языка программирования Паскаль, а с другой – труд и талант сотрудников Borland во главе с идеологом и создателем Турбо Паскаля Андерсом Хейлсбергом.  Придуманный швейцарским учёным Никласом Виртом как средство для обучения студентов программированию, язык Паскаль стараниями А. Хейлсберга превратился в мощную современную профессиональную систему программирования, которой по плечу любые задачи - от создания простых программ для решения несложных вычислительных задач, до разработки сложнейших реляционных систем для управления базами данных.

Появление Windows и инструментальных средств Borland Pascal with objects для разработки программ в среде  Windows лишний показало, какие по истине неисчерпаемые возможности таит он в себе. [2]

Для написания курсовой я использовал лишь малую часть возможностей Турбо Паскаля. Пользовался лишь процедурами и функциями для текстового режима работы и стандартными библиотеками модулей  CRT и GRAPH.

 

5 Тестирование и отладка

 

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

При разработке отдельных процедур у меня возникала ошибка №202.

202 Stack overflow error (Переполнение стека).

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

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

В следующий раз это ошибка всплыла когда я пытался написать процедуру для вывода исходных и конечных данных на экран. Здесь мне уже пришлось использовать директиву компилятора {$S-} для расширения памяти.

Другой, часто возникающей ошибкой была ошибка №113.

113 Error in statement. (ошибка в операторе).

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

При обработке массива нужно было найти минимальный элемент и поделить на него массив. Но если минимум равнялся 0, то возникала ошибка №200 (деление на 0). Ниже представлен  фрагмент кода решения этой проблемы:

if min=0 then

    begin

     min:=1;

    writeln('Минимальное значение равно 0, делить на 0 нельзя. Массив остался без изменения.');

Для того, что бы после выполнении всех основных вычислительных действий программа не завершалась, а возвращала пользователя в главное меню я использовал цикл с пост-проверкой условия repeat –until. Код был следующим:

Repeat

   {основное тело  программы}

Until key=6

Таким образом выйти из программы можно лишь через кнопку «Выход» в главном меню.

В задании на курсовую работу стояла задача: поделить все элементы массива на минимальный элемент этого массива, если он не равен 0. Но если последний элемент был равен 0, то  программа выдавала ошибку 200. Это ошибка означала деление на ноль. Избавился я от этой ошибки с помощью оператора условия if-then-else с помощью следующего фрагмента кода:

  begin

     if a[i,n]=0 then

      begin

       b[i,j]:=a[i,j];

      end;

     end;

При таком условии массив останется без изменения.

 

6 Анализ результатов решения

 

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

Массив размерностью 4х3:

-2

7

3.5

0

4.1

0.9

2

2

-8

-2

0.5

4.5


Необходимо разделить весь массив на минимальный элемент массива. Его значение равно 0, следовательно массив останется без изменений.

Следующим шагом необходимо найти среднее арифметическое для каждой строки. Для первой строки это значение равно 2.83, для второй – 1.66, для третьей – (-1.33), для четвертой – 1. Все вычисления производил на калькуляторе.

Далее необходимо найти ближайший элемент в каждой строке к среднему арифметическому в этой строке.

Так как массив я выбрал не сложный, то без каких либо расчётов видно, что для первой строки ближайший элемент равен 3.5, для второй – 0.9, для третьей – 2, для четвёртой – 0.5.

Ниже представлены скриншоты программы, в которой она обрабатывает этот массив.

 

Рисунок 7 – Исходный массив

На рисунке 8 представлен скриншот программы, где она находит среднее арифметической каждой строки и ближайший элемент в строке к среднему арифметическому.

 

Рисунок 8 – Проверка вычислений

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

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

 

7 Сопровождение программы

 

Я провел полное тестирование и отладку программы. В процессе разработки программы я совершенствовал её: изменял, корректировал, вносил немало пояснений.

После запуска программы сочетанием клавиш Ctrl+F9 или через соответствующий *exe файл пользователь попадает в главное меню программы. В нём находятся три пункта, отвечающие за 3 разных вида заполнения массива, пункт информации о задании на курсовую работу и пункт «Выход», который обеспечивает выход из программы. Выбор каждого из пунктов осуществляется нажатием клавиши Enter.

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

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

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

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

Ниже представлены скриншоты работы программы.

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

 

Рисунок 9 – Главное меню программы

 

Для ознакомления с заданием и пояснительной информации рекомендуется для начала выбрать пункт 4 «Информация по курсовой работе», скриншот представлен ан рисунке 8.

 

Рисунок 10 – Информация по курсовой работе

Выбрав пункт первый откроется окно, в котором нужно будет ввести размерность массива, а затем и сам массив (рисунок 9):

 

 

Рисунок 11 – ввод массива  с клавиатуры.

 

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

 

Рисунок 12 – Вывод исходного и преобразованного массивов.

 

После нажатия клавиши Enter  происходит очистка экрана. На монитор выводится среднее арифметическое для каждой строки массива, 4 искомых вектора и ближайший к среднему арифметическому элемент в каждом векторе (рисунок 11).

 

 

Рисунок 13 – Результаты вычислений.

 

Заполнение массива случайными числами и из существующего файла  осуществляется по той же схеме.

После экрана с конечным результатом, программа возвращается в главное меню.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

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

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

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

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

 

 

 

 

 

 

 

 

 

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

 

1. Акулов О. А. Информатика: базовый курс : учеб. для студентов вузов,

бакалавров, магистров, обучающихся по направлению «Информатика и вычисл. техника» / О.А. Акулов, Н. В. Медведев. – 5-е изд., испр. и доп. – М.: Омега-Л, 2008. – 574с.

2. Фаронов В. В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. Издание 7-е, переработанное. – М.: Издательство ООО ОМД «Групп», 2002. – 576 с., ил.

3. Методические указания к выполнению курсовой работы по дисциплине «Информатика» для студентов по направлению подготовки бакалавров 200100 «Приборостроение», профилю подготовки «Приборостроение» и по направлению подготовки бакалавров 211000 «Конструирование и технология электронных средств» очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. М. А. Ромащенко, Е. А. Рогозин. Воронеж, 2012. 15 с.

4. Новожилов О. П. Информатика: учебное пособие / О. П. Новожилов. – М.: Издательство Юрайт, 2011. – 564 с. – Серия : Основы наук.   

5. Акулов О. А. Информатика: базовый курс : учеб. для студентов вузов,

бакалавров, магистров, обучающихся по направлению «Информатика и вычисл. техника» / О.А. Акулов, Н. В. Медведев. – 5-е изд., испр. и доп. – М.: Омега-Л, 2008. – 574с.

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ

Листинг программы

program moykurs;

{$S-}

uses crt,graph;

type

mas1=array[1..10] of real;

mas2=array[1..50,1..50] of real;

mas3=array[1..11,1..11] of integer;

var

gd,gm,n,m,key,key1,i,j:integer;

ch:char;

min:real;

a:mas2;

b,bl,raz:mas2;

bli,sr:mas1;

{Dalee idet oformlenie menu}

{punkti minu}

procedure punkt(p1,p2,p3,p4,p5:integer);

var

   x,y:integer;

begin

begin

 

  settextstyle(2,0,0);

 

end;

x:=getmaxx div 3;

y:=getmaxy div 3;

setbkcolor(15);

setfillstyle(1,7);

bar(0,0,700,500);

  begin

  setcolor(12);

  settextstyle(7,0,6);

  outtextxy(50,200,'"Информатика "');

  settextstyle(2,0,6);

  setcolor(9);

  outtextxy(150,280,'Выполнил студент: Рязанцев Сергей');

  outtextxy(150,300, 'Группа: РК-122 ');

   settextstyle(7,0,1);

   setcolor(p1);

   outtextxy(x-200,y-150,'1. Заполнение вручную');

   setcolor(p2);

   outtextxy(x-200,y-130,'2. Заполнение случайными числами');

   setcolor(p3);

   outtextxy(x-200,y-110,'3. Заполнение  из файла');

   setcolor(p4);

   outtextxy(x-200,y-90,'4. Информация по курсовой работе');

   setcolor(p5);

   outtextxy(x-200,y-70,'5. Выход');

   settextstyle(2,0,6);

   setcolor(9);

   outtextxy(x-200,y+270,'Для перехода между пунктами используйте клавиши вверх и вниз');

   outtextxy(x-200,y+285,' Для выбора одного из пунктов нажмите ENTER');

  end;

end;

procedure menu (var vibor:integer);

var key:integer;

begin

    punkt(9,0,0,0,0);

    vibor:=1;

    repeat

    key:=ord(readkey);

    if (key<>13) and (key<>72) and (key<>80) then

      begin

       case ord(readkey) of

Программирование на на языке Турбо Паскаль