Смекни!
smekni.com

Обработка матриц (стр. 3 из 3)

4.1 Синтаксические ошибки

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

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

На рисунке 4.1 изображено окно редактора кода в тот момент, когда программа была запущена на компиляцию и компилятор обнаружил синтаксические ошибки. Напомним, что запуск на компиляцию и выполнение программы осуществляется командой Выполнить/Выполнить (функциональная клавиша F9), а запуск программы только на компиляцию можно осуществить при помощи команды Проект/Компилировать < имя файла проекта > (комбинация клавиш Ctrl+F9). В нижней части редактора кода содержатся сообщения об ошибках. Сообщение начинается словом [Ошибка], заключенным в квадратные скобки, далее идет имя файла проекта, затем в круглых скобках указывается номер строки программы, где была допущена ошибка и, в заключение, после двоеточия идет текст, поясняющий смысл допущенной ошибки.

Рисунок 4.1 - Сообщение компилятора о синтаксической ошибке

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

4.2 Ошибки периода выполнения программы

Другой возможный тип ошибок - это ошибки этапа выполнения (или семантические ошибки). Это происходит в том случае, если транслируется корректная программа, а затем при ее выполнении предпринимается попытка выполнить недопустимое действие, например, открыть несуществующий файл для ввода или выполнить деление на 0. В этом случае Delphi генерирует так называемое исключение (Exception) – рисунок 4.2.

Рисунок 4.2 - Сообщение о сгенерированном исключении

Сообщение, содержащееся в этом окне, информирует, что произошло деление на ноль, и выполнение программы приостановлено. Нажатие кнопки OK прерывает выполнение программы. Открывается окно редактора кода, в котором строка, содержащая ошибку, будет выделена синей полосой (рисунок 4.3).

Рисунок 4.3 - Строка кода, содержащая ошибку периода выполнения

4.3 Логические ошибки

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

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

Интегрированная среда Delphi предоставляет пользователю несколько команд пошаговой отладки доступных в меню Выполнить (рисунок 4.4).

Рисунок 4.4 – Команды отладки

В Delphi имеется два режима трассировки - без захода в подпрограмму и с заходом в неё.

Если необходимо выполнить трассировку части программы, то следует установить в редакторе кода указатель на тот оператор, с которого следует начать трассировку, и выполнить команду Выполнить/Выполнять до Курсора (функциональная клавиша F4). Затем можно продолжить трассировку, нажимая клавиши F7 или F8.

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

Для внесения новой точки останова выполняется команда Выполнить/Добавить Точку Останова или нажатие функциональной клавиши F5.

ВЫВОДЫ

В процессе выполнения курсовой работы были выполнено:

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

- разработка алгоритма разрабатываемой программы;

- разработка программы и пользовательского интерфейса;

- произведена отладка программы.


ПЕРЕЧЕНЬ ССЫЛОК

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988.

2. Довгаль С.И., Литвинов Б.Ю., Сбитнев А..И. Персональные ЭВМ : Турбо Паскаль V7.0, объектное программирование, локальные сети. – Киев: Информсиситема сервис, 1993.

3. Епанешников А.М., Епанешникова В.А. Программирование в среде TurboPascal 7.0.-М.: Диалог – МИФИ,1999.

4. Зуев Е.А. Программирование на языке TurboPascal 6.0,7.0. – М.: Радио и связь, Веста,1993.

5. Кандзюба С.П., Громов В.Н. Delphi 7.Базы данных и приложения. Лекции и упражнения. – К.: Издательство "ДиаСофт", 2001.

6. Климова Л.М. Pascal 7.0. Практическое программирование. Решение типовых задач. –М.:КУДИУ ОБРАЗ, 2000.

7. Марченко А. И., Марченко Л.А.. Программирование в среде TurboPascal 7.0.-К.: Век+,1999.

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

9. Методические указания к выполнению курсовой работы по дисциплине "Программирование" /Сост.: Н.С. Семенова, С.А. Сафонова – Северодонецк: Изд-во СТИ ВНУ, 2006. - 37с.


ПРИЛОЖЕНИЕ А

Схема алгоритма

Продолжение Приложения А


ПРИЛОЖЕНИЕ Б

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

unitUnit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

gbMatrix: TGroupBox;

sgMatrix: TStringGrid;

buZapoln: TButton;

gbMassiv: TGroupBox;

lbA: TLabel;

lbB: TLabel;

sgA: TStringGrid;

sgB: TStringGrid;

buMassiv: TButton;

sgC2: TStringGrid;

sgC1: TStringGrid;

lbC1: TLabel;

lbC2: TLabel;

buC: TButton;

procedure FormCreate(Sender: TObject);

procedure buZapolnClick(Sender: TObject);

procedure buMassivClick(Sender: TObject);

procedure buCClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

matrix: array [1..7, 1..9] of integer;

a, b, c1, c2: array [1..20] of integer;

kol_a, kol_b, kol_c1, kol_c2, min_a, min_a_i, max_b, max_b_i: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var

i, j: integer;

begin

Randomize; // включить генератор случайных чисел

for i:= 1 to 7 do

sgMatrix.Cells[0, i]:= IntToStr(i);

for i:= 1 to 9 do

sgMatrix.Cells[i, 0]:= IntToStr(i);

for i:= 1 to 7 do

for j:= 1 to 9 do

begin

matrix[i, j]:= random(31);

sgMatrix.Cells[j, i]:= IntToStr(matrix[i, j]);

end;

end;

procedure TForm1.buZapolnClick(Sender: TObject);

var i, j: integer;

begin

for i:= 1 to 7 do

for j:= 1 to 9 do

begin

matrix[i, j]:= StrToInt(sgMatrix.Cells[j, i]);

end;

end;

procedure TForm1.buMassivClick(Sender: TObject);

var i: integer;

begin

// заданиемассиваА

kol_a:= 10;

sgA.ColCount:= kol_a + 1;

for i:= 1 to kol_a do

begin

a[i]:= random(31)- random(41);

sgA.Cells[i, 0]:= IntToStr(i);

sgA.Cells[i, 1]:= IntToStr(a[i]);

end;

// задание масива В

kol_b:= 7;

sgB.ColCount:= kol_b + 1;

for i:= 1 to kol_b do

begin

b[i]:= random(21)- random(26);

sgB.Cells[i, 0]:= IntToStr(i);

sgB.Cells[i, 1]:= IntToStr(b[i]);

end;

// поиск максимума и минимума

min_a:= 100;

min_a_i:= 1;

max_b:= -100;

max_b_i:= 1;

for i:= 1 to kol_a do

if (a[i]>0) and (a[i]<min_a)then

begin

min_a:= a[i];

min_a_i:= i;

end;

for i:= 1 to kol_b do

if (b[i]<0) and (b[i]>max_b)then

begin

max_b:= b[i];

max_b_i:= i;

end;

end;

procedure TForm1.buCClick(Sender: TObject);

var i, j, k: integer;

begin

// формирование массивов с1 и с2

kol_c1:=0;

for i:= min_a_i+1 to kol_a do

begin

kol_c1:= kol_c1+1;

c1[kol_c1]:= a[i];

end;

for i:= 1 to max_b_i do

begin

kol_c1:= kol_c1+1;

c1[kol_c1]:= b[i];

end;

kol_c2:=0;

for i:= 1 to min_a_i do

begin

kol_c2:= kol_c2+1;

c2[kol_c2]:= a[i];

end;

for i:= max_b_i+1 to kol_b do

begin

kol_c2:= kol_c2+1;

c2[kol_c2]:= b[i];

end;

// сортировка массивов с1 и с2

for j:= kol_c1 downto 2 do

for i:= 1 to kol_c1 do

if c1[i] > c1[i+1] then

begin

k:=c1[i] ;

c1[i]:=c1[i+1];

c1[i+1]:=k;

end;

for j:= kol_c2 downto 2 do

for i:= 1 to kol_c2 do

if c2[i] < c2[i+1] then

begin

k:=c2[i] ;

c2[i]:=c2[i+1];

c2[i+1]:=k;

end;

// отображениес1 ис2

sgC1.ColCount:= kol_c1 + 1;

for i:= 1 to kol_c1 do

begin

sgC1.Cells[i, 0]:= IntToStr(i);

sgC1.Cells[i, 1]:= IntToStr(c1[i]);

end;

sgC2.ColCount:= kol_c2 + 1;

for i:= 1 to kol_c2 do

begin

sgC2.Cells[i, 0]:= IntToStr(i);

sgC2.Cells[i, 1]:= IntToStr(c2[i]);

end;

end;

end.