Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по лабораторным Delphi.doc
Скачиваний:
42
Добавлен:
13.02.2016
Размер:
610.3 Кб
Скачать

Ход работы

  1. Загрузите систему визуального программирования Delphi.

  2. Поместите на форму компоненты:

    Компонент

    Свойства

    Panel1

    Caption – очистить. Align – alBottom.

    Edit1, Edit2

    Text – очистить.

    Label1

    Caption – фамилия.

    RadioGroup1

    Caption – пол. Items – Мужск., Женск. ItemIndex – 0.

    RadioGroup2

    Items – Средний балл юношей, Средний балл девушек, Общий средний балл. Caption – очистить.

    BitBtn1

    Caption – записать. Glyph – картинка из подкаталога Images| Buttons

    BitBtn2

    Kind - bkClose.

    StringGrid1

    Align – alClient. ColCount – 6. RowCount – 30. DefaultColWidth. Options| goEditting – True.

    Form1

    Caption – Лабораторная работа №3, Name – Lab3

  3. Сохраните ваш проект в папке Lab3.

  4. Напишите обработчики события:

Const nn=20; mm=5;

//Максимальное количество студентов =20.

// Максимальное количество экзаменов =5.

pp: array [0..1] of string[1] = ('m', 'g');

//Массив, содержащий половой признак.

var

Form1:TForm1;

n: integer;

f: array [1..nn] of string [30];

p: array [1..nn] of string [1];

a: array [1..nn, 1..mm] of real;

ss: array [1..nn] of real;

//n – текущий номер студента. Количество студентов;

//f – массив фамилий;

//p – массив для идентификации пола;

//a – массив оценок;

//ss – массив для среднего балла студентов;

Implementation

{$R *.DFm}

procedure TForm1.BitBtn1Click(Sender: TObject);

// Обработчик кнопки «Записать». Осуществляет ввод фамилии и пола.

// Переносит значения фамилии в фиксированный столбец таблицы.

begin

n:= n+1;

f[n]:= Edit1.Text;

p[n]:= pp[RadioGroup1.ItemIndex];

StringGrid1.Cells[0,n]:=f[n];

Edit1.SetFocus;

Edit1.Clear;

end;

procedure TForm1.FormActivate(Sender:TObject);

// Обработчик для задания значений фиксированной строки

// таблицы. Обнуление начального значения номера студента.

begin

n:=0;

Edit1.SetFocus;

With StringGrid1 do

Begin

Cells[1,0]:= 'Физика';

Cells[2,0]:= 'Математ.';

Cells[3,0]:= 'История';

Cells[4,0]:= 'Иностр.яз.';

Cells[5,0]:= 'Средний балл';

End; end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: integer; const Value:string);

//Событие возникает при завершении редактирования

// ячейки (ACol, ARow). В параметре Value обработчик

// получает результат вывода или редактирования текста.

var

b: real; j:byte;

//b – вещественное значение строки редактирования.

//j – параметр цикла для текущего номера столбца матрицы a.

begin

With StringGrid1 do

Begin

If Value = ' ' then Exit; //Если ничего не введено, то выйти из процедуры

//Начало защищенного блока.

Try b:=StrToFloat(Value)

Except ShowMessage('Не верный символ! '); b:=0;

end; //Конец защищенного блока.

//Игнорировать неверно введенную оценку.

If (b<1) or (b>5) then begin Cells[ACol,ARow]:= ' '; Exit; end;

Cells[ACol,ARow]:= Value;//Отразить оценку в таблице.

a[ARow,ACol]:=b; //Записать оценку в массив.

//Далее подсчет среднего балла.

ss[ARow]:=0;

for j:=1 to 4 do ss[ARow]:=ss[ARow] + a[ARow,j];

ss[ARow]:= ss[ARow]/4;

//Отобразить средний балл в 5-ом столбце таблицы.

Cells[5,ARow]:= FormatFloat('##.##', ss[ARow])

End; End;

Расчет среднего балла:

procedure TForm1.RadioGroup2Click(Sender: TObject);

// Событие возникает при смене признака расчета

var S:real; k, i: byte;

begin

S:=0; k:=0;

With RadioGroup2 do

Begin

Case ItemIndex of

0: begin // Расчет среднего балла юношей

for i:= 1 to n do

if p[i] = 'm' then begin S:=S + ss[i] ; k:=k + 1 end;

if k=0 then S:=0 else S:=S/k; end;

1: begin // Расчет среднего балла девушек

for i:= 1 to n do

if p[i] = 'g' then begin S:=S + ss[i] ; k:=k + 1 end;

if k=0 then S:=0 else S:=S/k; end;

2: begin // Расчет общего среднего балла

for i:= 1 to n do

S:=S + ss[i] ;

if n=0 then S:=0 else S:=S/n; end; end; end;

// Вывод результата в окно редактора

Edit2.Text := FormatFloat('##.##',S);

end; end;

5. Обратите внимание на то, что у компонента StringGrid1 существует обработчик OnClick. Он равен обработчику OnClick для RadioGroup2. Установлен он выбором из списка событий, который открывается при щелчке по правой части строки инспектора событий.

Компиляция и отладка приложения.

  1. Подготовка приложения к отладке:

    1. Прежде чем отлаживать приложение, его необходимо откомпилировать специальным образом. Для этого следует выполнить команду ProjectOptions и выбрать страницу Compiler. На этой странице необходимо выбрать опции Debug Information, Local Symbols и Reference Info. После этого необходимо выполнить команду Project/Compiler (комбинация клавиш <Ctrl-F9>). Теперь приложение готово к отладке.

    2. Командой View/Debug windows/Watches вызовите окно наблюдений. Окно наблюдений используется в отладочном режиме для наблюдения за изменением значений выражений, помещенных в это окно. Для добавления нового выражения щелкните по окну правой кнопкой мыши и выберите опцию Add Watch. В строке Expression введите выражение Acol. Окно Repeat count определяет количество показываемых элементов массивов данных; переключатель Enabled разрешает или запрещает вычисление выражения. Остальные элементы определяют вид представления значения. В отладочном режиме текущее значение любой переменной можно посмотреть, указав на нее курсором: значение появится в ярлычке с курсором.

    3. Установите две точки контрольного останова: щелкните мышью, указав на служебную зону слева от нужной строки в программе (выберите строки, содержащие Acol).

  2. Выполните программу (<F9>). После останова выполняйте программу построчно. Посмотрите значения переменных при помощи установки на них курсора.

  3. Попробуйте другие методы отладки, например Run To Cursor, Program Pause, Program Reset.

Задания:

  1. Разработать приложение для обработки результатов соревнований. Исходные данные: фамилия спортсмена, время старта, время финиша, контрольное время. Вывести фамилии спортсменов, уложившихся в контрольное время. Рекомендации: фамилии спортсменов задать в виде типизированной константы-массива; время старта и время финиша вводить в таблицу; результат отразить в компоненте TMemo.

  2. С помощью таблицы TStringGrid ввести элементы матрицы и подсчитать сумму квадратов его столбцов. Организовать по выбору расчет наибольшей суммы элементов столбцов или наибольшей суммы элементов строк. Результат отобразить в компоненте TEdit.

  3. Рассчитать средние параметры группы студентов. Исходные данные: фамилии студентов, количество баллов, набранных каждым студентом при тестировании, рост и вес каждого студента. Рассчитать средний балл, средний вес и средний рост студентов в группе.

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

  5. Представить в виде таблицы ведомость сведений о пропусках занятий студентами. Исходной информацией является: фамилия, номер группы, количество часов, пропущенных по уважительной и неуважительной причине. Получить список студентов, пропустивших более ХХХ часов по неуважительной причине. ХХХ – вводимая величина.