РефератыИнформатика, программированиеПрПрограммирование на Object Pascal в среде Delphi

Программирование на Object Pascal в среде Delphi


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


Программирование
линейных алгоритмов

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


1.1.Визуальная
среда DELPHI

При
запуске DELPHI на
экране появляется
панель интерфейса,
показанная
на рис. 1.1. Среда
DELPHI визуально
реализуется
в виде нескольких
одновременно
раскрытых на
экране монитора
окон. Количество,
расположение,
размер и вид
окон может
изменяться
программистом.


Главное
окно всегда
присутствует
на экране и
предназначено
для управления
процессом
создания приложения.


Главное
меню содержит
все необходимые
средства для
управления
проектом.


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


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


Окно
Инспектора
Объектов
предназначено
для изменения
свойств выбранных
компонентов
и состоит из
двух страниц.
Страница Properties
(Свойства)
предназначена
для изменения
необходимых
свойств компонента.
Страница Events
(События) – для
определения
реакции компонента
на то или иное
событие (например,
щелчок кнопки
“мыши ”).


Окно
Формы представляет
собой интерфейс
проектируемого
Windows-приложения.
В это окно на
этапе проектирования
приложения
помещаются
необходимые
компоненты,
которые разработчик
берет из Палитры
Компонентов.
Каждой Форме
проекта соответствует
модуль (Unit),
текст которого
на языке Object Pascal
размещается
в окне Редактора
Кода.


Окно
Редактора Кода
предназначено
для просмотра,
создания и
редактирования
текстов модулей
проекта. При
первоначальной
загрузке в окне
Редактора Кода
находится текст
модуля, содержащий
минимальный
набор операторов
для нормального
функционирования
пустой Формы
в качестве
Windows-приложения.
При размещении
некоторого
компонента
в окне Формы,
текст модуля
автоматически
дополняется
необходимыми
операторами.


Обо
всех происходящих
в системе событиях,
таких как создание
Формы, нажатие
кнопки мыши
или клавиатуры
и т.д., ядро Windows
информирует
окна путем
посылки соответствующих
сообщений.
Среда DELPHI
принимает и
обрабатывает
сообщения с
помощью обработчиков
событий (например,
щелчок кнопки
“мыши” – событие
OnClick, создание
Формы – OnCreate).
Наиболее часто
применяемые
события представлены
в табл. 1.1.
































Таблица
1.1

Событие



Описание
события


OnActivate Возникает
при активизации
Формы

OnCreate

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

OnKeyPress

Возникает
при нажатии
клавиши на
клавиатуре.
Параметр Key
имеет тип Char
и содержит
ASCII-код нажатой
клавиши (клавиша
Enter клавиатуры
имеет код #13,
клавиша Esc - #27
и т.д.). Обычно
это событие
используется
в том случае,
когда
необходима
реакция на
нажатие одной
из клавиш.
OnKeyDown Возникает
при нажатии
клавиши на
клавиатуре.
Обработчик
этого события
получает
информацию
о нажатой клавише
и состоянии
клавиш Shift,
Alt и Ctrl, а также
о нажатой кнопке
мыши.

Для
создания обработчика
события программисту
необходимо
раскрыть список
компонентов
в верхней части
окна Инспектора
Объектов и
выбрать необходимый
компонент.
Затем, на странице
Events Инспектора
Объектов, нажатием
левой клавиши
мыши выбрать
название обработчика
и дважды щелкнуть
по его правой
(белой) части.
В ответ DELPHI
активизирует
окно Редактора
Кода модуля
и покажет заготовку
процедуры
обработки
выбранного
события. Для
каждого обрабатываемого
события в тексте
модуля организуется
процедура
(procedure), между
ключевыми
словами begin
и end которой
программист
на языке Object Pascal
записывает
требуемый
алгоритм обработки
события.


Переключение
между окном
Формы и окном
Редактора Кода
осуществляется
кнопкой главного
меню с пиктограммой
или клавишей
F12.


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

Задание:
создать Windows-приложение
для вычисления
выражения


.


Численные
значения данных
x, y и z занести
с клавиатуры
в соответствующие
поля панели
интерфейса.
Один из возможных
вариантов
панели интерфейса
создаваемого
приложения
показан на рис.
1.2.



1.2.1. Сохранение
проекта


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


Для
сохранения
проекта откройте
в главном меню
пункт File
и щелкните
“мышью”
на опции Save
Project As…(Сохранить
проект как…).
Сначала DELPHI
откроет панель
диалога Save
Unit1 As (Сохранить
модуль как)
для сохранения
модуля проекта.
В этой панели
найдем созданную
папку LAB1 и
сохраним в ней
модуль под
именем, например,
UnLinAlg. Обратите
внимание на
то, что DELPHI по
умолчанию
присвоит этому
файлу тип Delphi
unit c расширением
*.pas. Затем
откроется
панель диалога
Save Project1 As . Назовем
наш проект,
например, PrLinAlg
и сохраним
его в этой же
папке. Здесь
DELPHI даст файлу
тип Delphi project и расширение
*.dpr. Убедитесь
в том, что главное
окно DELPHI теперь
называется
PrLinAlg, окно главного
файла проекта-
PrLinAlg.dpr, а окно
модуля проекта-
UnLinAlg.pas.


Старайтесь
давать файлам
осмысленные
имена вместо
однообразных
Unit1 и Project1, предлагаемых
DELPHI.


Чтобы
избежать потери
файлов проекта
в аварийных
ситуациях
связанных,
например, с
выключениием
питания, зависании
системы и т.д.,
рекомендуется
периодически
сохранять
проект,
используя
пиктограмму
главного меню
или опцию
Save All в
меню File.


1.2.2. Настройка
окон


Чтобы
работать с
окном, необходимо
сделать его
активным, щелкнув
“мышью”
в любом месте
окна. У активного
окна заголовок
становится
выделенным,
например, на
рис. 1.1 активным
является окно
Редактора Кода.


Окна
Формы и Редактора
Кода модуля
в правом верхнем
углу имеют
кнопки управления,
которые предназначены:
-для свертывания
окна в пиктограмму,
-для разворачивания
окна на весь
экран и возвращения
к исходному
размеру
,
-для закрытия
окна.


С
помощью “мыши”,
захватывая
одну из кромок
окна или выделенную
строку заголовка,
отрегулируете
нужные размеры
окон Формы,
Редактора Кода,
Инспектора
Объектов и их
положение на
экране.


1.2.3.
Изменение
заголовка Формы

Новая
Форма имеет
одинаковые
имя (Name) и заголовок
(Сaption) - FORM1. Начинающим
программистам
имя Формы менять
не рекомендуется,
т.к. оно используется
в тексте модуля.


Для
изменения
заголовка
активизируйте
окно Инспектора
Объектов и на
странице Properties
в свойстве
Caption замените
заголовок Form1
на Лаб.
работа №1-Линейный
алгоритм
.
Убедитесь, что
одновременно
изменился
заголовок окна
Формы.


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

Будем
размещать
компоненты
на Форме так,
чтобы они
соответствовали
панели, показанной
на рис 1.2.


Рис.1.2


Для
нанесения
надписей на
Форму используется
компонент
Label. Выберите
в Палитре Компонентов
на странице
Standard пиктограмму
компонента
Label и щелкните
на ней “мышью”.
Затем в нужном
месте Формы
щелкните “мышью”
- появится
надпись Label1. В
свойстве Caption
Инспектора
Объектов замените
надпись Label1
на Введите
значение
X:.
В свойстве Font
подберите
шрифт. Аналогично
нанесите на
Форму остальные
надписи. Щелкнув
“мышью”
на любом из
размещенных
компонентов,
отрегулируйте
его местоположение
на Форме и размер.


Для
ввода/вывода
данных в простейших
случаях используются
компоненты
Edit и Memo. Компонент
Edit применяется
в тех случаях,
когда данные
представляются
одной строкой.
Если данные
представляют
собой несколько
строк, то используется
компонент Memo.


Для
создания полей
ввода численных
значений переменных
x, y
и z используем
компонент
Edit. Выберите
в Палитре Компонентов
на странице
Standard пиктограмму
и разместите
компонент Edit
в нужных местах
Формы так же,
как Вы это делали
с компонентом
Label.


Для
вывода результатов
используем
компонент Memo.
Выберите в
Палитре Компонентов
на странице
Standard пиктограмму
,
поместите
компонент Memo
на Форму и
откорректируйте
его местоположение
и размеры.


1.2.5.
Написание
процедуры
обработки
события создания
Формы (FormCreate)

Если
программист
желает, чтобы
при появлении
панели интерфейса
на экране в
соответствующих
полях находились
начальные
значения данных,
он должен учесть,
что при запуске
приложения
возникает
событие - создание
Формы (OnCreate). Создадим
процедуру
обработки этого
события, которая
занесет начальные
значения переменных
x, y, z в
поля Edit1, Edit2
и Edit3 соответственно,
а в поле Memo1
поместит строку
Лабораторная
работа №1 – Линейный
алгоритм
. Для
этого дважды
щелкните мышью
на любом свободном
месте Формы.
На экране появится
текст модуля
UnLinAlg, в котором
DELPHI автоматически
создает заготовку
процедуры-обработчика
события создания
Формы:
Procedure TForm1.FormCreate(Sender:TObject).
Между операторами
begin и
end этой
процедуры
вставьте операторы,
которые выполняют
необходимые
действия
(текст модуля
приведен в
п.1.2.7).


1.2.6.
Написание
процедуры
обработки
события нажатия
кнопки Button1
(Button1Click)

Поместим
на Форму кнопку,
нажатие которой
приведет к
вычислению
выражения.
Выберите в
Палитре Компонентов
на странице
Standart пиктограмму
компонента
Button. В свойстве
Caption Инспектора
Объектов замените
надпись на
кнопке Button1
на Вычислить.
В свойстве Font
подберите
шрифт. Отрегулируйте
положение и
размер кнопки.
Затем дважды
щелкните “мышью”
на кнопке, после
чего курсор
установится
в тексте
процедуры-обработчика
события
нажатия кнопки
Button1 : Procedure
TForm1.Button1Click(Sender:TObject
).
Внимательно
наберите
операторы этой
процедуры,
используя
текст модуля
UnLinAlg.

1.2.7.
Текст модуля
UnLinAlg


Unit
UnLinAlg;


interface


uses



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



StdCtrls;


type



TForm1 =
class(TForm)



Label1: TLabel;



Edit1: TEdit;



Label2: TLabel;



Edit2: TEdit;



Label3: TLabel;



Edit3: TEdit;



Label4: TLabel;



Memo1: TMemo;



Button1:
TButton;



procedure
FormCreate(Sender: TObject);



procedure
Button1Click(Sender: TObject);



private



{ Private
declarations }



public



{ Public
declarations }



end;


var



Form1: TForm1;


implementation


{$R *.DFM}



//
Процедура
обработки
события создания
Формы:



procedure
TForm1.FormCreate(Sender: TObject);



begin



Edit1.Text:='0.4';



//
начальное
значение X



Edit2.Text:='8.75e-2';

//
начальное
значение Y



Edit3.Text:='-19.63';

//
начальное
значение Z



Memo1.Clear;
//
очистка Memo1



// Вывод
строки в Memo1:



Memo1.Lines.Add('Лабораторная
работа №1 - Линейный
алгоритм'
);



end;



//
Процедура
обработки
события нажатия
кнопки Button1:



procedure
TForm1.Button1Click(Sender: TObject);



var



x,y,z,a,b,c,u
: extended;
//
объявление
локальных
переменных



begin



x:=StrToFloat(Edit1.Text);
//
X присваивается
содержимое
Edit1



y:=StrToFloat(Edit2.Text);
//
Y присваивается
содержимое
Edit2



z:=StrToFloat(Edit3.Text);
//
Z присваивается
содержимое
Edit3



// Вычисляется
выражение



a:=sqrt(x)-y*y*y;



b:=sin(a)/cos(a);



c:=Exp(5*Ln(b));



u:=c+exp(y/z)*sin(z*z);



Memo1.Lines.Add('X
=

'+Edit1.Text+' Y
=

'+Edit2.Text+



'
Z
=

'+Edit3.Text); //
контрольный
вывод X, Y, Z в Memo1



//
Вывод результата
в Memo1:



Memo1.Lines.Add('
U =
'+FloatToStrF(u,ffFixed,8,3));



end;


end.


Данные,
с которыми
работают компоненты
Edit и Memo, имеют тип
String. Поэтому в
процедуре
TForm1.Button1Click при
присваивании
содержимого
полей Edit1,Edit2,Edit3
переменным
X,Y,Z c помощью
функции StrToFloat
осуществляется
преобразование
данных типа
String в действительные
значения с
плавающей
точкой типа
Extended. Если
необходимо
работать с
данными целого
типа, используется
функция StrToInt.


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

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

Для
запуска созданного
приложения
нажмите пиктограмму
главного меню
или клавишу
F9. При этом
происходит
компиляция
модулей и, если
нет ошибок,
компоновка
проекта и создание
выполняемого
файла PrLinAlg.exe.
На экране появляется
панель интерфейса
приложения
(рис.1.2).


Щелкните
“мышью”
на кнопке “Вычислить
и в поле Memo1
появляется
результат.
Измените исходные
значения x,
y, z в полях
Edit и снова
нажмите кнопку
Вычислить”.
Убедитесь, что
в поле Memo1
отображаются
новые результаты.
Завершить
работу приложения
можно нажатием
кнопки
в правом верхнем
углу панели
интерфейса.


В
случае нештатного
функционирования
приложения
восстановить
первоначальный
режим работы
с проектом
можно путем
выбора в меню
Run опции ProgramReset или
нажать клавиши
Ctrl+F2.


1.3. Выполнение
индивидуального
задания

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

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

1.


При
x=14.26, y=-1.22, z=3.5
t=0.564849.

2.


При
x=-4.5,
y=0.75,z=0.845
u=-55.6848.

3.


При
x=3.74,
y=-0.825, z=0.16
v=1.0553.

4.


При
x=0.4
,y=-0.875, z=-0.475
w=1.9873.

5.


При
x=-15.246, y=4.642,
z=20.001
=-182.036.



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


Программирование
разветвляющихся
алгоритмов

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


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

Задание:
создать Windows-приложение
для вычисления
выражения



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


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


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

Будем
размещать
компоненты
на Форме так,
чтобы они
соответствовали
панели, показанной
на рис 2.1.



Рис. 2.1


При
создании приложений
в DELPHI часто
используются
компоненты
в виде кнопок-переключателей.
Состояние такой
кнопки (включено
- выключено)
визуально
отражается
на Форме. На
панели (рис.
2.1) представлены
кнопки-переключатели
двух типов:
CheckBox и RadioGroup .


Компонент
CheckBox организует
кнопку независимого
переключателя,
с помощью которой
пользователь
может указать
свое решение
типа “да/нет”. Компонент
RadioGroup
организует
группу кнопок
- зависимых
переключателей.
При нажатии
одной из кнопок
группы все
остальные
кнопки выключаются.


Поместите
на Форму компоненты
Label, Edit и Memo
в соответствии
с рис.2.1. Выберите
в Палитре Компонентов
на странице
Standard пиктограмму
компонента
CheckBox и разместите
ее в нужном
месте Формы.
. В свойстве
Caption Инспектора
Объектов замените
надпись CheckBox1
на Контрольный
вывод данных
.
. Чтобы при
запуске приложения
кнопка CheckBox
оказалась
включена,
cвойство Checked установите
равным True.


Выберите
в Палитре Компонентов
Standard пиктограмму
компонента
RadioGroup и поместите
ее в нужное
место Формы.
В свойстве
Caption измените
заголовок
RadioGroup1 на
f(x). Для
размещения
кнопок в один
столбец, свойство
Columns установите
равным 1. Дважды
щелкните “мышью”
по правой
части свойства
Items - появится
строчный редактор
списка наименований
кнопок. Наберите
2 строки
с именами:
в первой строке
- sin(x), во второй
- cos(x) и нажмите
ОК. После этого
на Форме появится
группа из двух
кнопок - переключателей
с соответствующими
надписями.
Чтобы при запуске
приложения
первая кнопка
RadioGroup оказалась
включена,
cвойство ItemIndex
установите
равным 0.


2.1.2. Создание
процедур обработки
событий FormСreate
и Button1Сlick

Технология
создания процедур
обработки
событий FormСreate и
Button1Сlick ничем
не отличается
от предыдущей
работы. Внимательно
наберите
операторы этих
процедур, используя
текст модуля
UnRazvAlg.


2.1.3.
Текст модуля
UnRazvAlg

Unit
UnRazvAlg;

interface

uses


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


StdCtrls,
ExtCtrls;

type


TForm1
= class(TForm)


Label1:
TLabel;


Edit1:
TEdit;


Label2:
TLabel;


Edit2:
TEdit;


Label4:
TLabel;


Memo1:
TMemo;


Button1:
TButton;


RadioGroup1:
TRadioGroup;


CheckBox1:
TCheckBox;


procedure
FormCreate(Sender: TObject);


procedure
Button1Click(Sender: TObject);


private


{
Private declarations }


public


{
Public declarations }


end;

var


Form1:
TForm1;

implementation


{$R
*.DFM}


//
Процедура
обработки
события создания
Формы:


procedure
TForm1.FormCreate(Sender: TObject);


begin


Edit1.Text:='0.5';
// начальное
значение X


Edit2.Text:='1.8';
//
начальное
значение Y


Memo1.Clear;
//
очистка Memo1


//
Вывод строки
в Memo1:



Memo1.Lines.Add(Лабораторная
работа №2 - Разветвляющийся
алгоритм
);


end;


//
Процедура
обработки
события нажатия
кнопки
Button1:


procedure
TForm1.Button1Click(Sender:
TObject);


var


x,y,z,fx
: extended; //
объявление
локальных
переменных


begin



x:=StrToFloat(Edit1.Text);
//
X присваивается
содержимое
Edit1



y:=StrToFloat(Edit2.Text);
//
Y присваивается
содержимое
Edit2


fx:=sin(x);


//
fx присваивается
начальное
значение


//
Выбор функции,
соответствующей
нажатой кнопке:


case
RadioGroup1.ItemIndex of


0:fx:=sin(x);


1:fx:=cos(x);


end;


//
Вычисление
выражения:


if
xxk;


end;


end.

3.3.
Выполнение
индивидуального
задания

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


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


В
заданиях с №1
по №15 необходимо
вывести на
экран таблицу
значений функции
Y(x) и ее разложения
в ряд S(x) для значений
x от
до
с
шагом
.
Близость значений
S(x) и Y(x) во всем
диапазоне
значений x указывает
на правильность
вычисления
S(x) и Y(x).













































































































S(x) n Y(x)

1


0.1


1




16



2


0.1


1




10




3


0.1


1




12




4


0.1


1




8



5


0.1


1




14




6


0.1

1






8




7


0.1


1




12




8


0.1


1




10



9


0.1


1




14




10


0.1


0.5




15



11


0.1


0.8




10



12


0.1


1




8







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


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

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


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

Задание:
создать Windows-приложение
для вычисления
вектора
x={x1,x2,…,xm},равного
p-й строке
матрицы A={aij}(xj=apj,
j=1,2,…,m) и вектора
y={y1,y2,…,yn},
равного q-му
столбцу матрицы
A={aij}(yi=aiq,
i=1,2,…,n) (n6,m8).
В панели интерфейса
предусмотреть
возможность
управления
размерностью
массивов.


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

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

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




Рис. 4.1


Компонент
StringGrid используется
для отображения
информации
в виде таблицы.
Таблица содержит
две зоны –
фиксированную
и рабочую.
Фиксированная
зона служит
для вывода
наименований
строк и столбцов
рабочей зоны
и управления
их размерами
с помощью “мыши”.
Фиксированная
зона выделена
другим цветом
и в нее запрещен
ввод информации
с клавиатуры.
Количество
строк и столбцов
фиксированной
зоны устанавливается
в свойствах
FixedRows и FixedCols, соответственно.


Рабочая
зона содержит
RowCount строк и ColCount
столбцов информации,
которую можно
изменять как
программно,
так и с помощью
“мыши”
или клавиатуры.


Доступ
к информации
в программе
осуществляется
с помощью свойства
Cells[ACol, ARow: integer]: string, где
ACol-номер
столбца, а ARow –
номер строки
таблицы, причем
нумерация
начинается
с нуля.


Пиктограмма
компонента
StringGrid находится
на странице
Additional Палитры
Компонентов.
Так как в нашем
задании для
всех компонентов
StringGrid фиксированная
зона не используется,
в Инспекторе
Объектов значения
свойств FixedCols и
FixedRows установите
равными 0. В
соответствии
с заданием
установите
предельные
значения количества
строк n и
столбцов
m для компонента
StringGrid1: ColCount=8, а RowCount=6
(восемь столбцов
и шесть строк).
Для компонента
StringGrid2 ColCount=1, RowCount=8, а для
компонента
StringGrid3 ColCount=1, RowCount=6.


По
умолчанию в
компонент
StringGrid запрещен
ввод информации
с клавиатуры,
поэтому для
компонента
StringGrid1 необходимо
в Инспекторе
Объектов дважды
щелкнуть “мышью”
на символе +
свойства +Options и
в открывшемся
списке опций
установить
значение goEditing в
True.


Для
удобства работы
с компонентами
SpinEdit установите
для компонента
SpinEdit1 значения
свойств:
MinValue=1, MaxValue=6, а для
компонента
SpinEdit2: MinValue=1, MaxValue=8.


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

События
SpinEdit1Change и SpinEdit2Change
возникают
при любом изменении
значения в поле
редактора
SpinEdit1 и SpinEdit2
соответственно.
Создадим процедуры
обработки этих
событий, в которых
присвоим значения
n и m,
полученные
из полей редакторов
SpinEdit, свойствам
ColCount и
RowCount компонентов
StringGrid. Это позволит
управлять
размерами
таблиц StringGrid
с помощью компонентов
SpinEdit без
дополнительных
кнопок, так
как изменение
значений в поле
редактора
SpinEdit сразу приведет
к изменению
размера таблиц
StringGrid. Дважды
щелкните “мышью”
на компоненте
SpinEdit1 – курсор
установится
в тексте
процедуры-обработчика
события SpinEdit1Change:
procedure TForm1.SpinEdit1Change(Sender:
TObject)
. Внимательно
наберите операторы
этой процедуры,
используя текст
модуля UnMas(см.
п.4.1.3). Аналогичным
образом создайте
процедуру-обработчик
события SpinEdit2Change:
procedure TForm1.SpinEdit2Change(Sender: TObject).

4.1.3. Текст
модуля UnMas



Unit
UnMas;



interface



uses



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



StdCtrls, Spin,
Grids;


type



TForm1 =
class(TForm)



Label1: TLabel;



SpinEdit1:
TSpinEdit;



SpinEdit2:
TSpinEdit;



Label8:
TLabel;



StringGrid1:
TStringGrid;



StringGrid2:
TStringGrid;



StringGrid3:
TStringGrid;



Label2: TLabel;



Label3: TLabel;



Label4: TLabel;



Label5: TLabel;



SpinEdit3:
TSpinEdit;



SpinEdit4:
TSpinEdit;



Label6: TLabel;



Label7: TLabel;



Button1:
TButton;



procedure
FormCreate(Sender: TObject);



procedure
SpinEdit1Change(Sender: TObject);



procedure
SpinEdit2Change(Sender:
TObject);



procedure
Button1Click(Sender: TObject);



private



{
Private declarations }



public



{ Public
declarations }



end;



var



Form1: TForm1;



implementation



{$R *.DFM}



var



A:array[1..6,1..8]
of extended;// объявление
двумерного
массива A



X:array[1..8]
of extended; // объявление
одномерного
массива X



Y:array[1..6]
of extended; // объявление
одномерного
массива Y



n,m,p,q:integer;


// объявление
глобальных
переменных



procedure
TForm1.FormCreate(Sender: TObject);



begin



SpinEdit1.Text:='4';

//
начальное
значение n



SpinEdit2.Text:='6';

// начальное
значение m



SpinEdit3.Text:='2';

// начальное
значение p



SpinEdit4.Text:='3';

// начальное
значение q



StringGrid1.RowCount:=4;
// количество
строк массива
A



StringGrid1.ColCount:=6;
//
количество
столбцов массива
A



StringGrid2.RowCount:=6;
// количество
строк массива
X



StringGrid3.RowCount:=4;
//
количество
строк массива
Y



end;



procedure
TForm1.SpinEdit1Change(Sender: TObject);



begin



n:=StrToInt(SpinEdit1.Text);//
n
присваивается
содержимое
поля редактора



StringGrid1.RowCount:=n;
// устанавливается
количество
строк массива
A



StringGrid3.RowCount:=n;
// устанавливается
количество
строк массива
Y



end;



procedure
TForm1.SpinEdit2Change(Sender: TObject);



begin



m:=StrToInt(SpinEdit2.Text);//
m
присваивается
содержимое
поля редактора



StringGrid1.ColCount:=m;
//
устанавливается
количество
столбцов массива
A



StringGrid2.RowCount:=m;
//
устанавливается
количество
строк массива
X



end;



procedure
TForm1.Button1Click(Sender:
TObject);



var



i,j:integer;
// объявление
локальных
переменных



begin



n:=StrToInt(SpinEdit1.Text);



StringGrid1.RowCount:=n;



StringGrid3.RowCount:=n;



m:=StrToInt(SpinEdit2.Text);



StringGrid1.ColCount:=m;



StringGrid2.RowCount:=m;



p:=StrToInt(SpinEdit3.Text);



q:=StrToInt(SpinEdit4.Text);



// Ввод
значений из
таблицы в массив
A



for i:=1 to n do



for j:=1 to m do



A[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);



for
j:=1 to m do
//
формирование
массива X и вывод
его значений
в таблицу



begin



X[j]:=A[p,j];



StringGrid2.Cells[0,j-1]:=FloatToStrF(X[j],ffFixed,3,1);



end;



for
i:=1 to n do
//
формирование
массива Y и вывод
его значений
в таблицу



begin



Y[i]:=A[i,q];



StringGrid3.Cells[0,i-1]:=FloatToStrF(Y[i],ffFixed,3,1);



end;



end;



end.

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


Запустите
созданное
приложение.
Занесите числовые
значения в
элементы матрицы
A и убедитесь
в том, что приложение
функционирует
в соответствии
с заданием.


4.2.
Выполнение
индивидуального
задания


Изучите
в приложении
2 описание
компонентов
StringGrid и DrawGrid.


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


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



1. Задана
целочисленная
матрица A
размером NxM.
Получить массив
B, присвоив
его k-му элементу
значение 0,
если все элементы
k-го столбца
матрицы нулевые,
и значение 1
в противном
случае(k=1,2,…,M).



2. Задана
целочисленная
матрица
A размером
NxM. Получить
массив B, присвоив
его k-му элементу
значение 1,
если элементы
k–й строки
матрицы упорядочены
по убыванию,
и значение 0
в противном
случае(k=1,2,…,N).



3. Задана
целочисленная
матрица A
размером
NxM. Получить
массив B, присвоив
его k-му элементу
значение 1,
если k-я строка
матрицы симметрична,
и значение 0
в противном
случае(k=1,2,…,N)..



4. Задана
целочисленная
матрица размером
NxM. Определить
k–количество
“особых”
элементов
матрицы, считая
элемент “особым”,
если он больше
суммы остальных
элементов
своего столбца.



5. Задана
целочисленная
матрица размером
NxM. Определить
k–количество
“особых”
элементов
матрицы, считая
элемент “особым”,
если в его строке
слева от него
находятся
элементы, меньшие
его, а справа
– большие.



6. Задана
символьная
матрица размером
NxM. Определить
k-количество
различных
элементов
матрицы (т.е.
повторяющиеся
элементы считать
один раз).



7. Дана
вещественная
матрица размером
NxM. Упорядочить
ее строки по
неубыванию
их первых элементов.



8. Дана
вещественная
матрица размером
NxM. Упорядочить
ее строки по
неубыванию
суммы их элементов.



9. Дана
вещественная
матрица размером
NxM. Упорядочить
ее строки по
неубыванию
их наибольших
элементов.



10. Определить
является ли
заданная квадратная
матрица n-го
порядка симметричной
относительно
побочной диагонали.



11. Для
заданной целой
матрицы размером
NxM вывести на
экран все ее
седловые точки.
Элемент матрицы
называется
седловой точкой,
если он является
наименьшим
в своей строке
и одновременно
наибольшим
в своем столбце
или, наоборот,
является наибольшим
в своей строке
и наименьшим
в своем столбце.



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 присваивается

r />выбранная
строка


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.


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



Label


Edit


Button


Разместим
на Форме компоненты
Label, Edit, SpinEdit, Button и Memo.


Р

Memo


ис.
8.1



Сохраним модуль
под именем
UnModul (текст модуля
приведен в
п.8.1.4).


8.1.2.
Создание модуля

и подключение
его к проекту



В соответствии
с заданием
создадим модуль,
в котором вычисление
значений
оформим в виде
функции, а вычисление
- в виде процедуры.
Для создания
модуля откроем
в главном меню
пункт File
и щелкнем “мышью”
на опции New…(Новый…).
Delphi откроет
панель New
Items(Репозиторий),
в которой сделаем
активной пиктограмму
Unit(Модуль)
и нажмем кнопку
OK. Откроется
окно с “пустым”
модулем Unit2.
С помощью
опции Save As…
меню File
сохраним модуль
в папке c
файлами проекта,
присвоив ему
имя, например,
UnFuncProc.



В этом модуле
операторы
вычисления
Y(x) в виде
подпрограммы-функциии
F и операторы
вычисления
S(x) в виде
подпрограммы-процедуры
Sum оформим по
правилам создания
модулей (текст
модуля UnFuncProc
приведен в
п.8.1.3).



Для подключения
модуля UnFuncProc
к проекту необходимо
сделать активным
окно с текстом
модуля UnModul,
затем в меню
File выбрать
опцию Use
Unit…и в открывшемся
окне Use Unit указать
имя используемого
модуля – UnFuncProc.
Убедитесь в
том, что в разделе
Implementation модуля
UnModul появился
оператор Uses
UnFuncProc;
, который
Delphi вставила
в текст модуля
UnModul.



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



8.1.3.
Текст модуля
UnFuncProc


unit
UnFuncProc;

interface

var


n:integer;
// количество
слагаемых в
сумме S


Function
F(x:extended):extended;


Procedure
Sum(x:extended;Var s:extended);

Implementation

Function
F(x:extended):extended;


begin



result:=(1-x*x*0.5)*cos(x)-0.5*x*sin(x);


end;


Procedure
Sum(x:extended;Var s:extended);


var


c:extended;


k:integer;


begin


c:=-x*x*0.5;


S:=1;


for
k:=1 to n do


begin


s:=s+c*(2*k*k+1);



c:=-c*x*x/((2*k+1)*(2*k+2));


end;


end;


end.


8.1.4.
Текст модуля
UnModul

Unit
UnModul;

interface


uses


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


StdCtrls,
ExtCtrls, Spin, Buttons;

type


TForm1
= class(TForm)


Memo1:
TMemo;


Label1:
TLabel;


Label2:
TLabel;


Label3:
TLabel;


Edit1:
TEdit;


Edit2:
TEdit;


SpinEdit1:
TSpinEdit;


BitBtn1:
TBitBtn;


procedure
FormCreate(Sender: TObject);


procedure
BitBtn1Click(Sender: TObject);


private


{
Private declarations }


public


{
Public declarations }


end;

Type



func=function(x:extended):extended;

//
функциональный
тип



proc=procedure(x:extended;Var
s:extended); // процедурный
тип


var


Form1:
TForm1;

implementation

uses
UnFuncProc; // Delphi
подключает
модуль UnFuncProc

{$R
*.DFM}

procedure
TForm1.FormCreate(Sender: TObject);


begin


SpinEdit1.text:='4';
// начальное
значение N


Edit1.text:=’0.1’;
// начальное
значение Xn


Edit2.text:=’2.0’;
// начальное
значение Xk


Memo1.Clear;



Memo1.Lines.Add('Лабораторная
работа №8 - Создание
модулей'
);


end;


процедуре
Tablica вычисляется
и выводится
таблица значений
x,
S(x)
и Y(x)}


procedure
Tablica(Sum:proc;F:func;n:integer;xn,xk,h:extended);


var


x,y,s:extended;


begin



Form1.Memo1.Lines.Add(#9+'x'+#9+'S'+#9+'Y');//
заголовок
таблицы


x:=xn;


repeat

//
цикл по x


Sum(x,s);
// вызов
процедуры Sum
для вычисления
S(x)


y:=F(x);
// обращение
к функции F для
вычисления
Y(x)



Form1.Memo1.Lines.Add(#9+FloatToStrF(x,ffFixed,5,2)
//
вывод
x



+#9+FloatToStrF(s,ffFixed,6,3)


// вывод
S



+#9+FloatToStrF(y,ffFixed,6,3));


// вывод
Y


x:=x+h;


until
x>xk;


end;


procedure
TForm1.BitBtn1Click(Sender: TObject);


var


xn,xk,h:extended;


begin



n:=StrToInt(SpinEdit1.Text);



xn:=StrToFloat(Edit1.Text);



xk:=StrToFloat(Edit2.Text);


h:=(xk-xn)*0.1;


// шаг
h


Tablica(Sum,F,n,xn,xk,h);
// вызов
процедуры
Tablica для вычисления
таблицы


end;


end.


8.2.
Выполнение
индивидуального
задания

По
указанию
преподавателя
выберите из
таблицы два
варианта
индивидуальных
заданий. Создайте
модуль, в котором
вычисление
значений
реализуйте
в виде подпрограммы-процедуры,
а вычисление
значений
- в виде подпрограммы-функции.
На панели интерфейса
установите
компонент, с
помощью которого
реализуйте
возможность
выбора соответствующего
варианта задания
и вывод таблицы
значений
,
где i-номер
варианта. Созданный
модуль подключите
к проекту и
выполните
приложение.


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


В
заданиях необходимо
вывести на
экран таблицу
значений функции
Y(x) и ее разложения
в ряд S(x) для значений
x от
до
с
шагом
.



Близость
значений S(x) и
Y(x) во всем диапазоне
значений x указывает
на правильность
вычисления
S(x) и Y(x).






























































S(x)



n



Y(x)


1


0.1


1




8




2








18




3








6




4


0.1


0.8




12




5


0.1


0.8




16



6


0.1


1




14







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


Программирование
алгоритмов
с использованием
динамических
структур данных

Цель
лабораторной
работы:

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


Примеры
создания приложений
9.1 Использование
динамических
массивов


Задание:
создать приложение
для вычисления
наименьшего
и наибольшего
из всех значений
элементов
целочисленной
матрицы A={aij},
где i=1,2,…,
m; j=1,2,…, n.
Значения m
и n
задаются
пользователем
на панели интерфейса,
а элементы
матрицы A
генерируются
с помощью датчика
случайных чисел
и размещаются
в памяти динамически.



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



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



Разместим
на Форме компоненты
Label, SpinEdit, Button и
StringGrid.



Label



SpinEdit


Label


StringGrid




Button


Label



Рис. 9.1



Сохраним
модуль под
именем
UnDinMas (текст модуля
приведен в
п.9.1.3).

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


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



При
желании можно
создать процедуру,
которая будет
выделять заданным
цветом границы
ячеек с наименьшим
и наибольшим
значениями
в компоненте
StringGrid.
Для создания
такой процедуры
сделайте активным
компонент
StringGrid
и на странице
Events(события)
Инспектора
Объектов дважды
щелкните “мышью”
в правой части
события OnDrawCell. В
ответ Delphi создаст
обработчик
этого события
– процедуру
procedure
TForm1.StringGrid1DrawCell
и
установит
курсор между
операторами
begin
и
end
этой процедуры.
Используя
текст модуля
UnDinMas, внимательно
наберите операторы
процедуры
TForm1.StringGrid1DrawCell.


9.1.3 Текст
модуля UnDinMas


Unit
UnDinMas;


interface


uses



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



StdCtrls, Spin,
Grids, Buttons;


type



TForm1 =
class(TForm)



Label1: TLabel;



SpinEdit1:
TSpinEdit;



SpinEdit2:
TSpinEdit;



Label8: TLabel;



StringGrid1:
TStringGrid;



Label2: TLabel;



Label5: TLabel;



Label3: TLabel;



Button1:
TButton;



Label4: TLabel;



Label6: TLabel;



Label7: TLabel;



Label9: TLabel;



procedure
FormCreate(Sender: TObject);



procedure
SpinEdit1Change(Sender: TObject);



procedure
SpinEdit2Change(Sender: TObject);



procedure
StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;



Rect: TRect;
State: TGridDrawState);



procedure
Button1Click(Sender: TObject);



private



{ Private
declarations }



public



{ Public
declarations }



end;


var



Form1: TForm1;


implementation



{$R *.DFM}



Type



Mas=array[1..1]
of
integer; //
массив целочисленных
значений



pMas=array[1..1]
of
^mas; //
массив указателей



var
//
объявление
глобальных
переменных



pA:^pMas;
//
указатель на
массив указателей



m,n,max,min:integer;



procedure
TForm1.FormCreate(Sender: TObject);



begin



m:=6;
//
начальное
значение m



n:=8;
//
начальное
значение n



SpinEdit1.Text:='6';



SpinEdit2.Text:='8';



StringGrid1.RowCount:=m;
//
количество
строк



StringGrid1.ColCount:=n;
//
количество
столбцов



end;



procedure
TForm1.SpinEdit1Change(Sender: TObject);



begin



m:=StrToInt(SpinEdit1.Text);//
m
присваивается
содержимое
поля редактора



StringGrid1.RowCount:=m;



end;



procedure
TForm1.SpinEdit2Change(Sender: TObject);



begin



n:=StrToInt(SpinEdit2.Text);//
n
присваивается
содержимое
поля редактора



StringGrid1.ColCount:=n;



end;



procedure
TForm1.Button1Click(Sender: TObject);



label 1;



var



i,j,k,l,r:integer;



begin



Randomize;
//
инициализация
датчика случайных
чисел



GetMem(pA,4*m);
//
выделение
памяти для
массива из m
указателей



for
i :=1 to m do



begin
//
формирование
i-й строки массива



{ Выделение
памяти для n
элементов i-й
строки}



GetMem(pA^[i],SizeOf(integer)*n);



pA^[1]^[1]:=Random(1000);//
случайное
целое число
занести в массив



for
j:=1 to n do



begin
//
формирование
j-го элемента
строки



1:
r:=Random(1000); //
генерирование
случайного
числа



for
k:=1 to i do



for
l:=1 to j do



if
r=pA^[k]^[l] then
//
если такое
число уже есть
в массиве тогда...



goto
1;



pA^[i]^[j]:=r;
//
случайное число
занести в массив



end;



end;



for
i:=1 to m do
//
элементы массива
занести в ячейки



for
j:=1 to n do
//
компонента
StringGrid1



StringGrid1.Cells[j-1,i-1]:=IntToStr(pA^[i]^[j]);



{ Поиск
min и max значений
среди элементов
массива}



max:=pA^[1]^[1];



min:=max;



for
i:=1 to m do



for
j:=1 to n do



if
pA^[i]^[j]max then



max:=pA^[i]^[j];



Label7.Caption:=IntToStr(min);
//
вывод min значения



Label9.Caption:=IntToStr(max);
//
вывод max значения



for
i:=1 to m do



{ Освобожение
памяти, занимаемой
n элементами
i-й строки}



FreeMem(pA^[i],SizeOf(integer)*n);



{ Освобождение
памяти, занимаемой
массивом из
m указателей}



FreeMem(pA,4*m);



end;



procedure
TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;



Rect:
TRect; State: TGridDrawState);



begin



with
StringGrid1.Canvas do



if
StringGrid1.Cells[Col,Row]=IntToStr(min) then
//
если элемент
ячейки



begin
//
равен min тогда...



Brush.Color:=clGreen;
//
установить
цвет кисти
зеленый



FrameRect(Rect);
//
выделить границы
ячейки заданным
цветом



end



else



if
StringGrid1.Cells[Col,Row]=IntToStr(max) then
//
если элемент
ячейки



begin
//
равен max тогда...



Brush.Color:=clRed;
//
установить
цвет кисти
красный



FrameRect(Rect);
//
выделить границы
ячейки заданным
цветом



end



end;



end.


9.2 Использование
динамических
списков


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


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



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



Разместим
на Форме компоненты
Label, Edit, Button и Memo.



Label


Memo




Edit


Button




Рис. 9.2


Сохраним
модуль под
именем UnStek
(текст модуля
приведен в
п.9.2.3).

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


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

9.2.3
Текст модуля
UnStek


Unit
UnStek;



interface



uses



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



StdCtrls;



type



TForm1 =
class(TForm)



Label1: TLabel;



Edit1: TEdit;



Button1:
TButton;



Label2: TLabel;



Label3: TLabel;



Memo1: TMemo;



procedure
Button1Click(Sender: TObject);



procedure
FormCreate(Sender: TObject);



private



{ Private
declarations }



public



{ Public
declarations }



end;



var



Form1: TForm1;



implementation



{$R *.DFM}



Type



PSt=^Zap;



Zap=record



inf:integer;



adr:PSt



end;



Var

//
объявление
глобальных
переменных:



PVer,
//
указатель
вершины стека



PTek:PSt;
//
текущий указатель



ElSt:integer;
//
элемент стека



procedure
TForm1.Button1Click(Sender: TObject);



begin



New(PTek);
//
выделить память



ElSt:=StrToInt(Edit1.Text);//
в
ElSt занести значение
из Edit1



PTek^.inf:=ElSt;
//
в информационную
часть стека
занести ElSt



PTek^.adr:=PVer;
//
в адресную
часть занести
указатель на
вершину



PVer:=PTek;//
указатель
вершины должен
указывать на
последний
элемент



if
ElSt>=0 then
//
если элемент
стека неотрицательный
тогда...



begin



Edit1.Text:='';//
очистить
окно редактора
Edit1



Edit1.SetFocus;//
передать
фокус ввода
редактору Edit1



end



else



begin



Memo1.Lines.Add('Элементы
стека:'); // вывести
заголовок



repeat



Memo1.Lines.Add(#9+IntToStr(PTek^.inf));//
вывод
элементов



PVer:=PTek^.adr;



Dispose(PTek);
// освободить
память



PTek:=PVer



until
PTek=nil;



end;



end;



procedure
TForm1.FormCreate(Sender: TObject);



begin



PVer:=nil; //
инициализировать
указатель
вершины



ElSt:=0; //
инициализировать
элемент стека



end;



end.

9.3.
Выполнение
индивидуального
задания


По указанию
преподавателя
выберите два
варианта
индивидуальных
заданий. В заданиях
№1-№15 необходимо
использовать
динамические
массивы, а в
заданиях №16-№30
– динамические
списки. Во всех
заданиях необходимо
предусмотреть
контрольный
вывод исходных
данных.



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



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



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



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



Создать
приложение,
которое осуществляет
ввод
k
значений элементов
одномерного
массива с
клавиатуры,
изменяет порядок
следования
элементов на
противоположный
и выводит полученный
массив.



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



Создать
приложение,
которое осуществляет
ввод
значений
элементов
двумерного
массива n-го
порядка с клавиатуры
и выводит значение
суммы элементов
главной диагонали.



Создать
приложение,
которое осуществляет
ввод
k
значений элементов
одномерного
массива с
клавиатуры,
меняет местами
элементы с
минимальным
и максимальным
значениями
и выводит полученный
массив.



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



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



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



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



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



Создать
приложение,
которое осуществляет
ввод
k
значений элементов
одномерного
массива с клавиатуры
и выводит среднее
арифметическое
значение элементов
массива.



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



Создать
приложение,
которое заносит
в стек целые
положительные
числа с клавиатуры,
выводит содержимое
стека и среднее
арифметическое
значение его
элементов.



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



Создать
приложение,
которое заносит
в каждый элемент
стека английское
слово с клавиатуры
и, как только
будет введено
слово “end”,
выводит содержимое
стека.



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



Создать
приложение,
которое заносит
в стек символы
с клавиатуры,
выводит содержимое
стека и сообщение
о том, упорядочены
ли элементы
стека по алфавиту
или нет.



Создать
приложение,
которое заносит
в стек положительные
целые числа
с клавиатуры
и, как только
будет введено
число, равное
сумме введенных
чисел, выводит
содержимое
стека.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Программирование на Object Pascal в среде Delphi

Слов:11474
Символов:106969
Размер:208.92 Кб.