12. В матрице n-го порядка переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине.



Лабораторная работа №5

ПРОГРАММИРОВАНИЕ Алгоритмов С ИСПОЛЬЗОВАНИЕМ строк

Цель лабораторной работы: освоить применение компонентов ListBox и СomboBox и создать приложение, в котором используются строки.

5.1. Пример создания приложения

Задание: создать Windows-приложение для подсчета количества слов в произвольной строке. Слова в строке разделяются любым количеством пробелов. Ввод строки заканчивать нажатием клавиши Enter. Работа приложения должна завершаться нажатием кнопки Close.

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.5.1.

5.1.1. Размещение компонентов на Форме

При работе со строками ввод и вывод информации на экран удобно организовывать с помощью компонентов ListBox и ComboBox.


Рис. 5.1



Компонент ListBox представляет собой список, элементы которого выбираются при помощи клавиатуры или “мыши”. Список элементов задается свойством Items, методы Add, Delete и Insert которого используются для добавления, удаления и вставки строк, соответственно. Для определения номера выделенного элемента используется свойство ItemIndex.

Компонент ComboBox представляет собой комбинацию списка ListBox и редактора Еdit, поэтому практически все свойства заимствованы у этих компонентов. Для работы с окном редактирования используется свойство Text как в Edit, а для работы со списком выбора используется свойство Items как в ListBox. Cуществует 5 модификаций компонента, определяемых его свойством Style. В модификации csSimple список всегда раскрыт, в остальных он раскрывается после нажатия кнопки справа от редактора.

Компоненты ListBox и ComboBox находятся на странице Standard Палитры Компонентов.

Компонент BitBtn расположен на странице Additional Палитры Компонентов и представляет собой разновидность стандартной кнопки Button. Его отличительная особенность – наличие растрового изображения на поверхности кнопки, которое определяется свойством Glyph. Кроме того, имеется свойство Kind, которое задает одну из 11 стандартных разновидностей кнопок. Нажатие любой из них, кроме bkCustom и bkHelp закрывает модальное окно. Кнопка bkClose закрывает главное окно и завершает работу программы.

5.1.2. Создание процедур обработки событий

В момент запуска приложения, когда панель интерфейса появляется на экране, для пользователя удобно чтобы курсор уже находился в поле редактора компонента ComboBox. При активизации Формы возникает событие OnActivate, которое можно использовать для передачи фокуса ввода компоненту ComboBox. Для создания процедуры-обработчика этого события необходимо в Инспекторе Объектов выбрать компонент Form1, на странице Events найти событие OnActivate и дважды щелкнуть “мышью” по его правой (белой) части. Курсор установится в тексте процедуры-обработчика события активизации Формы: procedure TForm1.FormActivate(Sender: TObject). В этом месте процедуры наберите оператор передачи фокуса ввода компоненту ComboBox1 (см. текст модуля UnStr, который приведен в п. 5.1.3).

В соответствии с заданием необходимо, чтобы при нажатии клавиши Enter строка символов, которую пользователь набрал в поле редактирования, переносилась в список выбора компонента ComboBox. Для создания процедуры-обработчика этого события необходимо в Инспекторе Объектов выбрать компонент ComboBox1, на странице Events найти событие OnKeyPress и дважды щелкнуть “мышью” по его правой части. Курсор установится в тексте процедуры-обработчика события нажатия клавиши на клавиатуре: procedure TForm1.ComboBox1KeyPress(Sender:TObject;var Key:Char). В этом месте процедуры, пользуясь текстом модуля UnStr, наберите операторы, которые при нажатии клавиши Enter переносят строку из поля редактирования в список выбора и очищают поле редактирования.

Процесс создания процедуры-обработчика события нажатия клавиши “мыши” в списке выбора procedure TForm1.ComboBox1Click(Sender: TObject) выполняется аналогично для события OnClick компонента

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


5.1.3. Текст модуля UnStr

Unit UnStr;

interface

uses

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

StdCtrls, Buttons;

type

TForm1 = class(TForm)

Label2: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

ComboBox1: TComboBox;

Label1: TLabel;

procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);

procedure ComboBox1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;


Implementation

{$R *.DFM}


// Обработка события активизации Формы

procedure TForm1.FormActivate(Sender: TObject);

begin

ComboBox1.SetFocus; // передача фокуса ввода ComboBox1

end;


// Обработка события ввода символа и нажатия клавиши Enter

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then // если нажата клавиша Enter то

begin // строка из поля редактирования заносится

ComboBox1.Items.Add(ComboBox1.Text); // в список выбора

ComboBox1.Text:=''; // очистка окна редактирования

end;

end;


// Обработка события нажатия клавиши "мыши" в списке выбора

procedure TForm1.ComboBox1Click(Sender: TObject);

var

st : string;

n,i,nst,ind: integer;

begin

n:=0; // n содержит количество слов

ind:=0;

nst:=ComboBox1.ItemIndex; // определение номера выбранной строки

st:=ComboBox1.Items[nst]; // st присваивается выбранная строка

for i:=1 to Length(st) do // просмотр всех символов строки

case ind of

0 : if st[i]' ' then // если встретился символ

begin

ind:=1;

n:=n+1; // количество слов увеличивается на единицу

end;

1 : if st[i]=' ' then // если встретился пробел

ind:=0;

end;

Label3.Caption:=IntToStr(n); // вывод количества слов в Label3

end;

end.

5.2. Выполнение индивидуального задания Во всех заданиях исходные данные вводить с помощью компонента Edit в компонент ListBox, либо с помощью свойства Text в свойство Items компонента ComboBox. Результат выводить c помощью компонента Label. Ввод строки заканчивать нажатием клавиши Enter. Работа приложения должна завершаться нажатием кнопки Close.

Для проверки функционирования приложения подготовить несколько тестов.

Индивидуальные задания

1. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти количество групп с пятью символами.

2. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран самую короткую группу.

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

4. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы с четным количеством символов.



Лабораторная работа №6

Программирование АЛГОРИТМОВ с использованием записей

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

6.1.Пример создания приложения

Задание: создать Windows-приложение для обработки ведомости об успеваемости учащихся в количестве 9 человек. Каждая запись должна содержать фамилию, инициалы, а также оценки по физике, математике и сочинению. Вывести список учащихся, отсортированный в порядке уменьшения их среднего балла.

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.6.1.

6.1.1. Размещение компонентов на Форме

При работе с записями ввод и вывод информации на экран удобно организовывать с помощью компонента StringGrid.


Рис. 6.1



В этом задании для нанесения соответствующих надписей в колонках и строках используется фиксированная зона компонента StringGrid, поэтому в Инспекторе Объектов значения свойств FixedCols и FixedRows установите равными 1. В соответствии с заданием установите значение свойства ColCount=6, а значение свойства RowCount=10. Для возможности просмотра всего списка учащихся в компоненте StringGrid удобно использовать вертикальную линейку прокрутки, поэтому установите свойство ScrollBars в состояние ssVertical. Откройте список опций свойства +Options и установите значение goEditing в True – это даст возможность редактировать информацию в компоненте StringGrid с помощью клавиатуры и “мыши”.

6.1.2 Создание процедур обработки событий FormCreate и Button1Click

Двойным нажатием клавиши “мыши” на Форме и кнопке Button1 создайте соответствующие процедуры обработки событий. Используя текст модуля UnZap, внимательно наберите операторы этих процедур.

6.1.3 Текст модуля UnZap

Unit UnZap;

interface

uses

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

StdCtrls, Buttons, Grids;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

type

zap=record // объявление записи

fio :string[20];

mat,fiz,soch:integer;

srbal :extended

end;

var

MZap:array[1..9] of zap; // объявление массива записей

procedure TForm1.FormCreate(Sender: TObject);

var

i:integer;

begin

with StringGrid1 do

begin // занесение информации в ячейки StringGrid1

Cells[0,0]:='№пп’;

Cells[1,0]:='Фамилия,инициалы';

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

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

Cells[4,0]:='Сочинение';

Cells[5,0]:='Ср.балл';

for i:=1 to 9 do

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

Cells[1,1]:='Первый П.П.'; Cells[2,1]:='3'; Cells[3,1]:='3'; Cells[4,1]:='3';

Cells[1,2]:='Второй В.В.'; Cells[2,2]:='3'; Cells[3,2]:='3'; Cells[4,2]:='4';

Cells[1,3]:='Третий Т.Т.'; Cells[2,3]:='3'; Cells[3,3]:='4'; Cells[4,3]:='4';

Cells[1,4]:='Четвертый Ч.Ч.'; Cells[2,4]:='4'; Cells[3,4]:='4'; Cells[4,4]:='4';

Cells[1,5]:='Пятый П.П.'; Cells[2,5]:='3'; Cells[3,5]:='4'; Cells[4,5]:='5';

Cells[1,6]:='Шестой Ш.Ш.'; Cells[2,6]:='5'; Cells[3,6]:='4'; Cells[4,6]:='4';

Cells[1,7]:='Седьмой С.С.'; Cells[2,7]:='5'; Cells[3,7]:='5'; Cells[4,7]:='4';

Cells[1,8]:='Восьмой В.В.'; Cells[2,8]:='5'; Cells[3,8]:='5'; Cells[4,8]:='5';

Cells[1,9]:='Девятый Д.Д.'; Cells[2,9]:='3'; Cells[3,9]:='5'; Cells[4,9]:='5';

for i:=1 to 9 do

with MZap[i] do

begin // формирование полей массива записей

fio:=Cells[1,i];

mat:=StrToInt(Cells[2,i]);

fiz:=StrToInt(Cells[3,i]);

soch:=StrToInt(Cells[4,i]);

srbal:=(mat+fiz+soch)/3; // вычисление значения ср. балла

Cells[5,i]:=FloatToStrF(srbal,ffFixed,5,2); // вывод значения ср.балла

end; // в последнюю колонку StringGrid1

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i,j :integer;

vper:zap;

begin

for i:=1 to 9 do

with StringGrid1,MZap[i] do

begin

fio:=Cells[1,i];

mat:=StrToInt(Cells[2,i]);

fiz:=StrToInt(Cells[3,i]);

soch:=StrToInt(Cells[4,i]);

srbal:=(mat+fiz+soch)/3;

Cells[5,i]:=FloatToStrF(srbal,ffFixed,5,2);

end;

for i:=2 to 9 do // сортировка методом "пузырька"

for j:=9 downto i do

if MZap[j-1].srbalMZap[j].fio then

begin

vper:=MZap[j-1];

MZap[j-1]:=MZap[j];

MZap[j]:=vper;

end;

for i:=1 to n do // заполнение ячеек StringGrid1 полями массива записей

with StringGrid1,MZap[i] do

begin

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

Cells[1,i]:=fio;

Cells[2,i]:=IntToStr(mat);

Cells[3,i]:=IntToStr(fiz);

Cells[4,i]:=IntToStr(soch);

end;

end;


{ Создание нового файла записей}

procedure TForm1.BitBtnNewClick(Sender: TObject);

var

i:integer;

begin // вывод на экран окна с предупреждающим сообщением

if MessageDlg('Содержимое существующего файла будет уничтожено. Вы уверены?',

mtConfirmation, mbYesNoCancel, 0)=mrYes then

begin

for i:=1 to n do

with StringGrid1,MZap[i] do

begin // формирование полей массива записей

fio:=Cells[1,i];

mat:=StrToInt(Cells[2,i]);

fiz:=StrToInt(Cells[3,i]);

soch:=StrToInt(Cells[4,i]);

end;

with OpenDialog1 do

begin

Title:='Создание файла'; // заголовок окна диалога

if Execute then // выполнение стандартного диалога выбора имени файла

begin

FileNameZap:=FileName; // присваивание имени файла

AssignFile(FileZap,FileNameZap); // назначить файлу FileZap имя FileNameZap

ReWrite(FileZap); // открыть файл на запись

for i:=1 to n do

write(FileZap,MZap[i]); // запись в файл массива записей

CloseFile(FileZap); // закрытие файла записей

end;

end;

end;

end;


{Обработчик кнопки изменения размера}

procedure TForm1.SpinEdit1Change(Sender: TObject);

var

i,m:integer;

begin

m:=StrToInt(SpinEdit1.Text); // присвоить новое значение размера

with StringGrid1 do

begin

RowCount:=m+1; // пересчитать количество строк

if m>n then // если строки добавлены то

for i:=n+1 to m do // инициализировать новые ячейки

begin

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

Cells[1,i]:='';

Cells[2,i]:='';

Cells[3,i]:='';

Cells[4,i]:='';

end;

end;

n:=m; // запомнить новое значение размера

end;


{ обработчик нажатия кнопки Open }

procedure TForm1.BitBtnOpenClick(Sender: TObject);

var

i:integer;

begin

with OpenDialog1 do

begin

Title:='Открытие файла'; // заголовок окна диалога

if Execute then // выполнение стандартного диалога выбора имени файла

begin

FileNameZap:=FileName; // присваивание имени файла

AssignFile(FileZap,FileNameZap); // назначить файлу FileZap имя FileNameZap

ReSet(FileZap); // открыть файл на чтение

n:=0; // инициализация счетчика кол-ва прочитанных из файла элементов

while not EoF(FileZap) do

begin

n:=n+1; // увеличение счетчика

read(FileZap,MZap[n]); // чтение из файла n-го элемента массива записей

end;

SpinEdit1.Text:=IntToStr(n); // занести кол-во прочитанных записей в SpinEdit

StringGrid1.RowCount:=n+1; // присвоить кол-во строк

for i:=1 to n do

with StringGrid1,MZap[i] do

begin // заполнение ячеек StringGrid1 полями массива записей

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

Cells[1,i]:=fio;

Cells[2,i]:=IntToStr(mat);

Cells[3,i]:=IntToStr(fiz);

Cells[4,i]:=IntToStr(soch);

end;

CloseFile(FileZap); // закрытие файла записей

end;

end;

BitBtnSort.Show; // показать кнопку “Sort”

BitBtnSave.Show; // показать кнопку “Save”

end;


{ Сохранение данных в текстовом файле}

procedure TForm1.BitBtnSaveClick(Sender: TObject);

var

i:integer;

begin

with SaveDialog1 do

if Execute then // выполнение стандартного диалога выбора имени файла

begin

FileNameText:=FileName; // присваивание имени файла

AssignFile(FileText,FileNameText); // назначить файлу FileText имя FileNameText

ReWrite(FileText); // открыть текстовый файл на запись

for i:=1 to n do

with MZap[i] do // запись в текстовый файл

writeln(FileText,i:3,fio:20,mat:5,fiz:5,soch:5);

CloseFile(FileText); // закрытие текстового файла по окончании записи

end;

BitBtnSort.Hide; // спрятать кнопку ”Sort”

end;

end.

7.1.4 Работа с приложением

Запустите созданное приложение. Занесите в соответствующие поля панели интерфейса информацию об успеваемости учащихся. Кнопкой “New” сохраните данные в файле. Завершите выполнение приложения.

Вновь запустите приложение и кнопкой “Open” откройте только что созданный файл. Убедитесь, что информация не содержит ошибок. При необходимости обнаруженные ошибки можно исправить, а также дополнить ведомость новой информацией. Для сортировки ведомости в алфавитном порядке воспользуйтесь кнопкой “Sort” и сохраните отсортированную информацию кнопкой “New”.

Еще раз завершите и вновь запустите приложение.

Кнопкой “Open откройте файл и убедитесь, что в нем теперь содержится ведомость, отсортированная в алфавитном порядке. Кнопкой “Save” сохраните информацию в текстовом файле. Для просмотра содержимого текстового файла воспользуйтесь, например, приложением “Microsoft Word”.

Используя все управляющие компоненты панели интерфейса, убедитесь в правильном функционировании приложения во всех предусмотренных режимах работы.

7.2 Индивидуальные задания

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


1. Ведомость абитуриентов, сдавших вступительные экзамены в университет содержит: Ф.И.О. абитуриента, оценки. Определить средний балл по университету и вывести список абитуриентов, средний балл которых выше среднего балла по университету. Первыми в списке должны идти студенты, сдавшие все экзамены на 5.

2. В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий (телевизор, радиоприемник и т. п.), марка изделия, дата приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о состоянии заказов на текущие сутки по группам изделий.

3. У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего следования на ближайшую неделю в следующем виде: дата выезда, пункт назначения, время отправления, число свободных мест. Оргкомитет международной конференции обращается к администратору с просьбой зарезервировать m мест до города N на k-й день недели с временем отправления поезда не позднее t часов вечера. Вывести время отправления или сообщение о невозможности выполнить заказ в полном объеме.

4. Разработать программу формирования ведомости об успеваемости студентов. Каждая запись этой ведомости должна содержать: номер группы, Ф.И.О. студента, оценки за последнюю сессию. Вывести списки студентов по группам. В каждой группе Ф.И.О. студентов должны быть расположены в порядке убывания среднего балла.



Лабораторная работа №8

Программирование алгоритмов с использованием функций и процедур. создание модулей

Цель лабораторной работы: освоить методику создания модулей, содержащих процедуры и функции, и использования их в проекте.

8.1. Пример создания приложения

Задание: создать Windows-приложение которое выводит таблицу значений функции и ее разложения в ряд в виде суммы для значений x от xn до xk c шагом h=(xk - xn)/10. Создать модуль, в котором вычисление значений оформить в виде функции, а вычисление - в виде процедуры. Подключить модуль к проекту и выполнить созданное приложение.

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.8.1.


Информация о работе «Программирование на Object Pascal в среде Delphi»
Раздел: Информатика, программирование
Количество знаков с пробелами: 62207
Количество таблиц: 3
Количество изображений: 0

Похожие работы

Скачать
49877
5
0

... в среде Delphi). Задачи использовались как с данного сайта, так и из других источников – книг и семинарских занятиях по информатике в МГОУ. Курс завершается разработкой игры. Программное обеспечение: свободно распространяемая версия объектно-ориентированной среды программирования Delphi. Методы обучения: метод проектов, лекции, проблемный метод, частично-поисковый метод. Контроль знаний и умений ...

Скачать
17314
1
5

... // ... if(condition1) { j = 4; goto label1; } // ... for(j = 0; j < 10; j++) { // ... label1: // ... if(condition2) { i = 6; goto label2; } } // ... label2: // ... } 2.2       Разработка программы В среде программирования Borland Delphi создадим новое приложение (пункт меню File New Application). ...

Скачать
135570
16
5

... химических соединений, которые могут представлять ценность как сырье и использоваться в виде дополнения к шахте. 7. заключение В результате дипломного проектирования была разработана программа «АРМ менеджера по продажам в автосалоне «A-Motors», предназначенная для для регистрации и ведения учета продаж автомобилей. Программа предназначена для того, чтобы облегчить рутинный труд менеджера ...

Скачать
3767
0
0

... ситуация другая. Учитель на уроке работает с 10-15 учащимися. Осуществить должный контроль за усвоением материала всеми учащимися, если в классе есть компьютеры, без привлечения автоматизированных средств обучения затруднительно. Автором разработана обучающая программа «Учимся программировать на Паскале». Программа написана на языке Object Pascal в среде Delphi 6 и может работать на компьютерах ...

0 комментариев


Наверх