Жизненные циклыbibliofond_552434. Техническое задание Аналитический раздел 1 Обзор и анализ существующих программных решений
Скачать 4.55 Mb.
|
4.4 Отладка выявленных ошибок, обнаруженных при тестированииВо время выполнения отладки, были использованы следующие методы: · unit тестирование; · анализ кода без исполнения программы; · запуск программы из под отладчика. Отладка ряда ошибок прошла успешно, были внесены изменения в интерфейс программы. Также были предусмотрены некоторые исключительные ситуации:. Для квадратного корня не была учтена область допустимых значений. А также для операции "деление" не было учтено деление на "0". Для устранения данной ошибки преобразован оператор case: case CurrentFunc of … '/': begin if stemp=0 then begin res: =0; outtextxy (450,65,'false'); end else if SParam<>'0'then begin Res: =FTemp/STemp;; end; '√': begin if ftemp <0 then begin res: =0; outtextxy (450,65,'false'); end else Res: =sqrt (Ftemp); end; … ЗаключениеВ результате выполнения данного курсового проекта был разработан игровой программный продукт "Калькулятор". При помощи этой программы можно высчитывать определенные арифметические операции. Программа не занимает много места, не требовательна к установленному программному обеспечению. Также было проведено исследование полученного программного продукта. В результате были выявлены следующие достоинства и недостатки полученного программного продукта: Достоинства: · Существует возможность сбрасывать результат; · Программный продукт малотребователен к системным ресурсам компьютера. Недостатки: · Невозможность выполнения некоторых других математических операций; · Невозможность сохранения операндов или результатов в памяти программы; В целом, поставленная в начале курсового проекта цель была достигнута. В программе выполняются все необходимые функциональные требования. Список литературы1. Фаронов, В.В. Программирование в Delphi 7: учеб. пособие / В.В. Фаронов. - 7-е изд., перераб. - М.: Нолидж, 2006. - 412с. . Ставровский, А.Б. Delphi в задачах и примерах: учеб. для вузов / А.Б. Ставровский. - Киев: BНV, 2004. - 399с. . Кнут, Д.Э. Искусство программирования: учеб. пособие: в 3 т.: пер. с англ. Т.1: Основные алгоритмы. - 3-е изд. - М. и др.: Вильямс, 2000. - 720 с. . Гловацкая, А.П. Методы и алгоритмы вычислительной математики: учеб. пособие для вузов / А.П. Головыцкая. - М.: Радио и связь, 1999. - 408с. . Бежанова, М.М. Практическое программирование: структуры данных и алгоритмы: учеб. для вузов / М.М. Бежанова, Л.А. Москвина, И.В. Поттосин. - М.: Логос, 2001. - 223с. ПриложенияПриложение 1 Листинг программы program Calculator; uses Functions,GrMouse,GrButton,Graph,GrOutPut,dos,crt;: string=' 7 8 9/< - x^y'+ ' 4 5 6 * sin cos'+ ' 1 2 3 - tg ktg'+ ' 0 с. + = ы'+ ' P R O E K T'; {$F+}: array [1.35] of TGrButton;,QuitButton: TGrButton;,SecondEdit: TGrButton;: TMouseStatus;: boolean;GetCaption (i: byte): string;,TempPos,Count: byte;: =0;: =0;x: =1 to Length (Captions) doCaptions [x] =' ' then inc (count);Count=i-2 then TempPos: =x;Count=i-1 then GetCaption: =copy (Captions,TempPos+2,x-TempPos-1);;;ChangeSysOfCount (SysOfCount: TSysCountStr);: string;SysOfCount [1] of 'D': begin;;SysOfCount [1] of 'D': begin SysCount: =DEC; DisButtons: =DECindexes; end;;(FParam);(SParam);(false);(SParam);(true);(FParam);;SetGroupEnabled (SysOfCount: TSysCountStr);: =ALLnumbers;i: =2 to 35 doi in DisButtons thenButtons [i] donot Enabled then(true);(SysOFCount);i: =2 to 35 doi in DisButtons then[i]. SetEnabled (False);: ='';;DrawingSquareOfButt (MaxTopInc,LeftOffs,TopOffs,BStartInd,BCount: word);: =0;j<=MaxTopInc doi: =BStartInd-1 to BStartInd+BCount-2 do[j+i+1]. Left: =i*50+LeftOffs;[j+i+1]. Top: =j*7+TopOffs;[j+i+1]. Draw;;(j,7);;;Action;: =true;;SetRadioClick (var ActButt,DisAct1,DisAct2: TGrButton);ActButt. FillColor=ActButt. FillColor then. FillColor: =ActButt. PressedColor;. FillColor: =1;. FillColor: =1;. Fill (ActButt. PressedColor);. Fill (DisAct1. FillColor);. FIll (DisAct2. FillColor);;;SetDECsys;(Buttons [8],Buttons [1],Buttons [15]);('DEC');;FstAction;(FirstEdit. FillColor=1) then. FillColor: =4;. FillColor: =1;. Draw;. Draw;(true);: =false;;;SndAction;(SecondEdit. FillColor=1) then. FillColor: =1;. FillColor: =4;. Draw;. Draw;(false);;;;;. Init;. Init;. Init;. Init;i: =1 to 35 doButtons [i] do;: =GetCaption (i+1);;QuitButton do: =140;: =GetMaxY-50;: =20;: =370;: ='Quit';;;CEButton do: =GetMaxX-220;: =80;: =30;: =85;: ='CE';;;FirstEdit do: =GetMaxX-55;: =120;: ='Fst';: =4;;;SecondEdit do: =GetMaxX-55;: =170;: ='Snd';;;(30,140,1200,1,1);(30,170,120,2,6);(5,5,GetMaxX-5,GetMaxY-5);(OutXs,OutYs,OutXf,OutYf); {/*End of drawing*/};;;[1]. PressedColor: =8;[8]. PressedColor: =8;[15]. PressedColor: =8;('DEC');(Buttons [8],Buttons [1],Buttons [15]);[8]. Action: =SetDECsys;[6]. Action: =BackSpaceSymbol;[24]. Action: =SetPlusMines;[27]. Action: =GetResult; {*************************}not Quit doi: =1 to 35 doButtons [i] doonClick (Action,MouseStatus) then(Length (Caption) =1) then(Caption [1] in SysCount) then(Caption);: =false;;(Caption [1]);Caption [1] ='с' then Calculated: =false;;: =0;KeyPressed then: =Ord (readkey);Key of .57,46,97.103:UpCase (Char (Key)) in SysCount then(UpCase (Char (Key)));: =false;; : begin;: =false;; : SetEnterMode ('*'); {*} : SetEnterMode ('+'); {+} : SetEnterMode ('-'); {-} : SetEnterMode ('/'); {/} : exit;;;;. onClick (Action,MouseStatus);. OnClick (CEClick,MouseStatus);FirstEdit. OnClick (FstAction,MouseStatus) or (FActive) then FstAction;SecondEdit. OnClick (SndAction,MouseStatus) or (SActive) then SndAction;;;. Модуль Function unit Functions; {$F+} {$N+}Graph,GrOutPut;SetEnterMode (Func: char);GetResult;FilterExpValue (var Par: StrParam);IntToStr (Param: word): String;: string;: word;(Param,Temp);: =Temp;;FilterExpValue (var Par: StrParam);degree,mant,NullStr: string;,e,DotPos,ExpPos: integer;,minus: boolean;: integer;Par [1] ='-' then minus: =trueminus: =false;: =Pos ('. ',Par);: =Pos ('E',Par);: ='';: ='';: =false; {**************}ExpPos=0 then exit;: =Copy (Par,ExpPos+1,Length (Par) - ExpPos);: =Copy (Par,DotPos-1,ExpPos-DotPos+1);(Degree, IntDegree,e);(IntDegree>0)begini: =1 to IntDegreebegin: =Pos ('. ',mant);(mant,DotPos,1);('. ',mant,DotPos+1);;;(IntDegree<0)begini: =1 to - IntDegreebegin('0',mant,1);: =Pos ('. ',mant);(mant,DotPos,1);('. ',mant,2);;;: =Length (mant);(mant [i] ='0')begin(mant, i,1);: =i-1;;mant [Length (mant)] ='. 'Delete (mant,Length (mant),1);minus then insert ('-',mant,1);: =mant;;ExcludeMines (Par: boolean);Par thenPos ('-',FParam) <>0 then(FParam,1,1);Pos ('-',SParam) <>0 then(SParam,1,1);elsePos ('-',FParam) =0 then: ='-'+FParam;Pos ('-',SParam) =0 then: ='-'+SParam;;;Value (FPar,SPar: StrParam; var FTemp,STemp);: word;(FPar,Extended (FTemp),e);(SPar,Extended (STemp),e);;Operation: string;,STemp,Res: extended;,Answer: StrParam;,RetBin,Ex: boolean;: word; {******************} {******************}: =false;: =false;(FParam,SParam,FTemp,STemp);: =false; {*used for exit after odnomest function*}CurrentFunc of '+': Res: =FTemp+STemp; '-': Res: =FTemp-STemp; '*': Res: =FTemp*STemp; '/': if SParam<>'0'then Res: =FTemp/STemp; 's': Res: =sin (ftemp); 'c': Res: =cos (ftemp); 't': Res: = (sin (ftemp) /cos (ftemp)); 'k': Res: = (cos (ftemp) /sin (ftemp)); '√': Res: =sqrt (Ftemp); 'x': Res: =exp (ln (Ftemp) *stemp);;(Res,St);Ex then exit;(st);(SParam);(FParam);: =St;: =st;: =#0;(Result);;;SetEnterMode (Func: char);(Func in AllOper) then(Length (FParam) =0) or (FParam='0') then(true);elseFunc in ['n','p'] then: =Func;;;;(False);CurrentFunc=#0 then: =Func;;Calculated then: =Operation;;Calculated then: =Result;;(true);(FParam);(false);: =false;: ='';: ='';else(Length (SParam) >0) and (SParam<>'0') then(FParam);(SParam);: =Operation;;;;;GetResult;not Calculated thenCurrentFunc<>#0 then: =Operation;;. Модуль Groutput unit GrOutPut; {$N+}Graph;=string [64];=Procedure;=record: char;: StrParam;;=record,y1,x2,y2: word;; {Output controls}=30;=20;=600;=60; {***************} {All ordinal operations}= ['+','-','*','/','c','s','t','k','√','x']; {**********************}= ['0'. '9','. ']; {*****************************************}= [2,3,4,9,10,11,16,17,18,23,30.35];= [30.35]; {***********************************}=13;=36;CheckOutPut (var Out: StrParam);ClearOutPut;ClrResOut;SetFActive (param: boolean);TextToOut (Out: StrParam);AddToOutPut (Param: string);SetPlusMines;ResultToScreen;BackSpaceSymbol;CEClick;CurrentFuncToScr;ClearCurrentFunc;,FParam,SParam: StrParam;: TMem;: set of char;: set of byte;: char;,Operation, i,j,Middle,Key: word;,SActive,Calculated: boolean;CheckOutPut (var Out: StrParam);: boolean;: =1;: =false;Pos ('-',Out) <>0 then(Out,1,1);: =true;;Pos (' ',Out) <>0 do delete (Out,Pos (' ',Out),1);i<=Length (Out) doOut [i] ='. ' theni<>Pos ('. ',Out) then(Out, i,1);: =i-1;;(i);;Out [2] <>'. ' then(Out [1] ='0') or (Out [1] ='. ') doLength (Out) >1 then Delete (Out,1,1) else;Out [1] ='. ' then Out: ='0'+Out;Out [Length (Out)] ='. ' then Out: =Out+'0';Length (Out) =0 then Out: ='0';MinesState thenPos ('-',Out) =0 then: ='-'+Out;;SetFActive (param: boolean);: =Param;: =not Param;;BackSpaceSymbol;: =false;FActive of:FParam<>'0' then(FParam,Length (FParam),1);(FParam);;:SParam<>'0' then(SParam,Length (SParam),1);(SParam);;;;ClrResOut;(OutXs+1,OutYs+FParamOfs+8,OutXf-1,OutYf-3,true);;(0,0,GetMaxX,GetMaxY,true);;TextToOut (Out: StrParam);FActive of: SetViewPort (OutXs+1,OutYs+3,OutXf-1,OutYs+FParamOfs-1,true);: SetViewPort (OutXs+1,OutYs+FParamOfs,OutXf-1,OutYf-3,true);;;(Out);;FActive of: begin OutTextXY (OutXf-40-TextWidth (Out) div 2,4,Out); ClrResOut; end;: OutTextXY (OutXf-40-TextWidth (Out) div 2,4,Out);;(0,0,GetMaxX,GetMaxY,true);;ResultToScreen;(OutXs+1,OutYs+23,OutXf-1,OutYf-1,true);;(OutXf-40-TextWidth (Result),2,OutXf-40,2);(OutXf-40-TextWidth (Result) div 2,9,Result);: =true;(0,0,GetMaxX,GetMaxY,true);;CEClick;: =0;;: =false;FActive of: begin FParam: ='0'; TextToOut ('0');(false); TextToOut (SParam);(true); end;: begin SParam: ='0'; TextToOut ('0');(true); TextToOut (FParam);(false); end;;('0');(true);;AddToOutPut (Param: string);: string;;FActive of: beginSysCount=Dec thenPos ('E',FParam) <>0 then FParam: ='0';: =FParam+Param;(FParam);;: beginSysCount=Dec thenPos ('E',SParam) <>0 then SParam: ='0';: =SParam+Param;(SParam);;;;;AddDelMines (var Param: StrParam);(Length (Param) >=1) and (Param<>'0') and (Param<>'0.0') thenPos ('-',Param) =0 then: ='-'+Param;(Param);(Param);else(Param,1,1);(Param);(Param);;;SetPlusMines;FActive of: AddDelMines (FParam);: AddDelMines (SParam);;;ClearCurrentFunc;: ViewPortType;(ViewPort);(OutXs+1,OutYs+6,OutXf-20-Middle,OutYs+14,true);;ViewPort do(x1,y1,x2,y2,Clip);;CurrentFuncToScr;: ViewPortType; {if CurrentFunc=#0 then exit; }(ViewPort); {**************}TextWidth (FParam) >TextWidth (SParam) then: =TextWidth (FParam)Middle: =TextWidth (SParam); {**************}(OutXs+1,OutYs+6,OutXf-30-Middle,OutYs+14,true);; {**************}(OutXf-OutXs-40-Middle,5,CurrentFunc); {**************}ViewPort do(x1,y1,x2,y2,Clip);;ClearOutPut;(OutXs+1,OutYs+1,OutXf-1,OutYf-1,true);;(0,0,GetMaxX,GetMaxY,true);;: =true;: =false;: =#0;: =DEC;: =false;: ='0';: ='0';: =''; en Приложение 2 Графический интерфейс программы Рис.1. Графический интерфейс программы Рис.2. Программа во время работы0> |