Автор работы: Пользователь скрыл имя, 12 Марта 2014 в 21:38, курсовая работа
Первоначально составление программы для ЭВМ выполнялось вручную и требовало много труда и времени. Затем для облегчения задачи программирования были разработаны специальные алгоритмические системы, получившие название алгоритмические языки программирования.
Одной из основных задач программирования как научно-технической дисциплины является разработка «языков программирования» - способов выражения программ, удобных для человека, и методов трансляции, перевода с языков программирования на язык машины.
Появление 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:
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
Информация о работе Программирование на на языке Турбо Паскаль