Программа для проверки работы операторов

АННОТАЦИЯ



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

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

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

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


ВВЕДЕНИЕ



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

	Система Турбо Паскаль довольно значительна по объему. Она поставляется на нескольких дистрибутивных дискетах и устанавливается на жестком диске. При развертывании системы на жестком диске обычно создается каталог с именем ТР, в который помещаются все файлы с дистрибутивных дискет. Файл TURBO. EXE cодержит готовую к работе диалоговую систему программирования Турбо Паскаля. В него входят минимально необходимые данные части Турбо Паскаля (текстовый редактор, компилятор, загрузчик, компоновщик).

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

	За исключением второстепенных деталей он содержит язык С как подмножество.

	Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции. Программирование с использованием таких объектов обычно называют объектно-ориентированным. Если этот метод применяется правильно, то программы становятся короче и понятнее, а сопровождение их упрощается.

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

	Язык С++ никогда бы не стал реальностью без, если бы постоянно не использовались предложения и советы и не учитывалась конструктивная критика со стороны многих друзей и коллег. Особенно следует упомянуть Тома Карджила, Джима Копли, Стью Фельдмана, Сэнди Фрэзера, Стива Джонсона, Брайана Кернигана, Барта Локанти, Дага Макилроя, Дэнниса Ритчи, Лэрри Рослера, Джерри Шварца и Джона Шапиро, которые внесли важные для развития языка идеи. Дэйв Пресотто реализовал текущую версию библиотеки потокового ввода/вывода.

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

	Существуют в Паскале такие операторы: составной оператор, условный оператор, оператор метки, оператор перехода, выбора, присваивания и повторный. Составной оператор – это последовательность произвольных операторов программы, заключенная в операторные скобки – зарезервированы словом begin…end. Язык Турбо Паскаля не накладывает никаких ограничений на характер оператора, входящих в состав оператора.

	Фактически весь раздел операторов, обрамленных словами begin…end, фактически представляет собой один оператор. 

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

	Например: 

	

	Var 

	x, y, max: Integer;

	begin 

	…………………………..

	If x>max then y: = max 

	Else y:=x;

	

	При выполнении этого фрагмента У получает значение Х, если только оно не превышает МАХ, в противном случае У=МАХ.

	Таким образом, условный оператор – это ветвления вычисляемого процесса.

	Условный оператор работает по следующему алгоритму. Вначале вычисляются условные выражения «условия». Если результат истина, то выполняется «оператор1», а «оператор2» пропускается; если результат лож, то наоборот.

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

	Например:

	

	…………………………..

	S:=0;

	If n>=0 then

	For i:=1 to n do

	S:=S+1 

	Else 

	For i:=-1 downto n do 

	S:=S+1 

	
Программа для пересчета любых сумм.

	Счетный оператор цикла FOR. При выполнении оператора вначале вычисляется выражение «начальное значение» и осуществляется присваивание « парный цикл»= «начальное значение».

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

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

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

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


1. ПОСТАНОВКА ЗАДАЧИ



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



2. ФУНКЦИОНАЛЬНОЕ НАЗНАЧЕНИЕ



Данная программа является служебной. Программа позволяет определить точное количество операторов и увидеть графически.



3. ВХОДЯЩИЕ И ИСХОДЯЩИЕ ДАННЫЕ



Входящими данными является путь к программе с расширением Паскаль.

Выходящие данные – диаграмма с данными



Путь к нужной программе

D:\ Rew\ Ij.PAS





4. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ



	Диаграмма – это один из способов наглядного представления разных числовых данных. Чаще всего встречаются линейные и круговые диаграммою. 

	А также помимо существуют: точечная, кольцевая пузырчатая и кольцевая.

	Точечная - позволяет сравнить пары значений. Отображает набор из трех значений.

	Кольцевая – подобна круговой. Отображает значение в разных категориях. 

	Круговая - отображает вклад каждого значения в общую сумму.

	Линейная – позволяет сравнить пары значений.

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

	Процент числа – сотая часть этого числа. Обозначается 1%

	В моей программе я буду искать процент работы, а для этого мне надо его найти. Чтобы найти процент от числа, необходимо сумму количество операторов поделить на 100%. А потом умножить отдельно на количество каждого оператора.

	На диаграмме тестируемой программы (Программа вводит целое число в диапазоне от 0 до 15) мы видим, что программа имеет одинаковое количество операторов. Они составляют в сумме 100%. Но подсчитав количество видим, что каждый оператор составляет по 20%. Диаграмма автоматически рисуется. Показывая нам полученный результат.



5. ОПИСАНИЕ ЛОГИЧЕСКОЙ СТРУКТУРЫ



	Шаг 0: инициализация переменных;

	Шаг 1: прописуем размер рамочек в рисунке. Рассчитываем на то что одна рамочка больше другой;

	Шаг 2: Перевести градусы в радианы. Задать координаты расположение надписей на диаграмме;

	Шаг 3: прописать графически диаграмму;

	Шаг 4:каждому известному оператору дам свое значение;

	Шаг 5: прописать, что можно открыть только Паскаль программы;

	Шаг 6: исключить открытие других файлов;

	Шаг 7: при помощи цикла запросить ввести путь файла для открытия;

	Шаг 8: проверяем построчно открытую нами программу. Счетчик считает операторы, пропуская те, что входят в разделители;

	Шаг 9: вводим графический режим;

	Шаг 10: используем процедуру PieSlice;

	Шаг 11: выводим круговую диаграмму;

	Шаг 12: разделяем по секторам, состоящим из значений найденных операторов;

	Шаг 13: выбираем палитру для каждого сектора;

	Шаг 14: заканчиваем работу проверкой на любой программе Паскаля.



6. ОПИСАНИЕ ПРОГРАММЫ



В данной программе был использован стандартный модуль Turbo Pascal – Crt. Он устанавливает режим работы адаптера дисплея, организует вывод в буфер экрана, регулирует яркость свечения символов и т.д. С момента подключения пользователю доступны все содержащиеся в нем стандартные средства. 

Также при написании программы были использованы такие стандартные процедуры и функции языка программирования как:

- процедура Read – позволяет читать фаил.

- процедура initgraph – открывает графический фаил.

- процедура Write – читать позволяет только файлы расширением PAS

- процедура Break – процедура осуществляет досрочный выход из циклов For, While или Repeat;

- процедура Close(var f) – закрывает открытый до этого логический файл. Вызов процедуры необходим при завершении работы с файлом;


Функция CHOISE.

Определяет ключом для выхода из некоторых циклов и основной программы символ ‘Y’, обозначая его true. Используется в основной программе. 

Функция PieSlice

Прорисует форму диаграммы ее цвет. 

Функция initgraph

Подключает графический файл.



7. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЮ



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


ВЫВОД



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

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

	Также я рассмотрела в своей работе такие языки как: С++, С. С#. Я поняла, что этих языках также могла написать эту программу но из-за не достатка знаний я написала на Паскале.


СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ



1. А. Епанешников, В. Епанешников Программирование в среде Turbo Pascal 7.0-М.: Диалог-МИФИ, 1993.

2. А.Б. Ставровский Турбо Паскаль 7.0. Учебник. – К.: Издательская группа BHV, 2000.

3. Конспект лекцій з дисципліни „Теорія алгоритмів та обчислювальних процесів” Частина 2.- Херсон, ХНТУ, 2005.

4. Конспект лекцій з дисципліни „Теорія алгоритмів та обчислювальних процесів” Частина 3. -Херсон, ХНТУ, 2005.

5. Методические указания про проведения лабораторных работ с основ программирования и алгоритмических яз. Часть 1. -Нога Л.В., Сидорук М.В. Херсон, 2003.

6. Методические указания про проведения лабораторных работ с основ программирования и алгоритмических яз. Часть 2.- Нога Л.В., Сидорук М.В. Херсон, 2003.

7. Фаронов В.В. TurboPascal 7.0. Начальный курс. - М.: Колидж, 1997.

8. С#. Сборник рецептов. – П. Агуров, Петербург, 2007.

9. Языки программирования / С++. - Бьерн Страуструп.


ПРИЛОЖЕНИЕ



{$N+}

program cursova;

uses graph;

type op=record

key:string[20];

count:integer;

end;

const n=8;

var

mas:array[1..n] of op;

procedure drawgraphic;

var d,e,r,j,all: integer;

startangle,nextangle,temp,x,y:extended;

xcord,ycord:word;

s,s2:string;

begin

all:=0;

for j:=1 to n do all:=all+mas[j].count;

d:= detect;

initgraph(d,r,'d:\bp\bgi\');

e:=graphresult;

if e<> grok then

writeln ( grapherrormsg (e))

else

begin

startangle:=0;

rectangle((getmaxx div 3)*2,20,getmaxx-20,getmaxy -20);

rectangle((getmaxx div 3)*2-4,16,getmaxx-16,getmaxy -16);

xcord:=(getmaxx div 3)*2+5;

ycord:=50+textheight('25%');

str(all,s2);

s2:='Vsego elementov '+s2;

outTextXy(xcord+30,ycord,s2);

for j:=1 to n do

begin

if mas[j].count<=0 then continue;

nextangle:=startangle+360/(all/mas[j].count);

setfillstyle(j,j);

pieslice(getmaxx div 3 +5, getmaxy div 2 + 4,trunc(startangle),trunc(nextangle),100);

temp:=startangle+(nextangle-startangle)/2;

str(mas[j].count/(all/100):0:0,s);s:=s+'%';

x:=cos(temp*0.017453292519)*60;

y:=sin(temp*0.017453292519)*60;

settextjustify(lefttext,toptext);

ycord:=ycord+textheight(s)*3;

outTextXy(trunc(x+getmaxx div 3+5),trunc(getmaxy div 2+4-y),s);

bar(xcord,ycord,xcord+textheight(s)*2,ycord+textheight(s)*2);

rectangle(xcord,ycord,xcord+textheight(s)*2,ycord+textheight(s)*2);

str(mas[j].count,s2);

s2:=mas[j].key+' '+s2;

outTextXy(xcord+textheight(s)*2+5,ycord+textheight(s),s2);

startangle:=nextangle;

end;

end;

outTextXy(20,getmaxy-20,'Dla vixoda najmite ENTER');

end;

var filename:string;

file1:file of char;

var i:integer;

var tstr:string;

var tc,popen:char;

function upstring(a:string):string;

var i,j:byte;

t:string;

begin

t:='';

i:=length(a);

for j:=1 to i do

:=t+upcase(a[j]);

upstring:=t;

end;

begin

for i:=1 to n do mas[i].count:=0;

mas[1].key:='BEGIN';

mas[2].key:='END';

mas[3].key:='IF';

mas[4].key:='FOR';

mas[5].key:='WHILE';

mas[6].key:='REPEAT';

mas[7].key:='CASE';

mas[8].key:='GOTO';

writeln ('4astota kly4evih slov':35);

{$I-}

repeat

writeln('wedi pyt k faily');

readln(filename);

tstr:=upstring(copy(filename,length(filename)-3,4));

if tstr<>'.PAS' then

begin

writeln('Must bve a pascal *.pas file!!!.Please continue');

continue;

end;

assign (file1,filename);

reset(file1);

until ioresult=0;

{$I+}

tstr:='';

popen:=' ';

tc:=' ';

while not eof(file1)do

begin

if tc='''' then begin{iwem konets const stroki}

tc:=' ';

while (tc<>'''')and(not eof(file1))do

read(file1,tc);

tc:=' ';

end;

(*if tc='(' then

begin

{iwem konets komenta}

if(not eof(file1))then read(file1,tc);

if tc='*' then

begin

while (tc<>')')and(not eof(file1))do

begin

read(file1,tc);

if tc='*' then

begin if(not eof(file1))then read(file1,tc) end

else if tc=')' then tc:=' ';

end

end else

{tc:=' ';}

end;*)

if tc='{' then begin{iwem konets komenta}

tc:=' ';

while (tc<>'}')and(not eof(file1))do

read(file1,tc);

tc:=' ';

end;

if tc in [' ',';',#0..#32,'(',')','}','{','.'] then

begin

if tstr<>''then

for i:=1 to n do

if mas[i].key=tstr then

begin

inc(mas[i].count);

break;

end;

tstr:='';

end

else tstr:=tstr+upcase(tc);

if(not eof(file1))then read(file1,tc);

end;

if tstr<>''then

for i:=1 to n do

if mas[i].key=tstr then

begin

inc(mas[i].count);

break;

end;

close(file1);

drawgraphic;

readln;

end.