comp2009
.pdf2. Практикум по программированию на языке Visual Basic For Application "
‘Добавление в файл
Private Sub CommandButton2_Click()
FilNum = FreeFile() Dim nbyte As Long
Open Fil For Random Access Read Write As FilNum Len
= Len(Trec)
nbyte = LOF(FilNum)
n = CInt(nbyte / Len(Trec))
Trec.Name = InputBox(“Введите фамилию”)
Trec.Code = n + 1
Put FilNum, n + 1, Trec
Close FilNum
End Sub
‘Чтение файла и вывод на экран
Private Sub CommandButton3_Click()
FilNum = FreeFile()
Open Fil For Random Access Read As FilNum Len =
Len(Trec)
Do While Not EOF(FilNum)
Get FilNum, , Trec
S = Str(Trec.Code) & “ “ & Trec.Name
ListBox1.AddItem (S)
Loop
End Sub
‘Создание папки для записи в нее файла
Private Sub CommandButton4_Click()
ChDrive “C”
On Error Resume Next MkDir “Lab”
ChDir “Lab”
End Sub
131
"Компьютерный практикум по информатике и программированию
3.Запускаем программу на выполнение
3.1.Создаем папку (щелчком на соответствующей кнопке).
3.2.Создаем файл. Вводим фамилии (в цикле), программа осуществляет вывод в файл с заданным именем каждой записи, например, рис. 2.21.
Рис. 2.21
4.Дополняем файл одной записью
5.Выводим содержимое файла с помощью компонента ListBox
(рис. 2.22):
Рис. 2.22
132
!
3. ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ В СРЕДЕ
CODEGEAR DELPHI 2007 НА ЯЗЫКЕ OBJECT PASCAL
1.Данная часть содержит примеры решения задач по программированию на Object Pascal и порядок разработки программ. Предполагается, что материал, связанный с описанием среды и теории программирования на данном языке изучается в курсе дисциплины «Информатика» либо в специальных курсах по программированию, а также с использованием литературы (см. список Рекомендуемой литературы).
2.В части 4 настоящего учебника содержатся различные задания по программированнию, которые могут выполняться по вариантам.
3.1. Линейный алгоритм
Задание. Составить программу вычисления для заданных значений x, y, z арифметического выражения
u = tg2 (x + y ) – ey –z cosx2 + sinz2 .
1.Создать новый проект и изменить заголовок у главного окна. Переключиться в окно Object Inspector (клавишей F11), ввести в свойстве Caption элемента Form1 текст Линейный алгоритм — выполнил
Ф.И.О.
2.Разместить элементы управления TLabel, TEdit, TMemo, TButton как показано на рис. 3.1.
3.У элементов управления TEdit изменить в Object Inspector значения поля Text, введя любые числа, например, такие как на рис. 3.1. Обратить внимание, что на интерфейсе Windows дробная часть отделяется от целой знаком запятая, а в тексте программы знаком точка.
133
" Компьютерный практикум по информатике и программированию
Рис. 3.1
4.В элементе TMemo1 текст размещать не следует, потому, что он появляется в результате работы программы.
5.Установить свойство Caption кнопки TButton1, ввести текст Выполнить. Выполнить двойной щелчок левой кнопки мыши на кнопке TButton1 и перейти в режим редактирования. Вид окна редактирования показан на рис. 3.2. Обратить внимание, что в этом окне уже есть некоторое число строк программы. Их изменять и удалять не следует.
6.Найтиглавныйразделподключениямодулей(uses), послеStdCtrls ввести запятую и Math. Ввести текст программы. Обратить внимание, что текст
программы приведен полностью, но некоторые строки уже существуют.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
134
3. Практикум по программированию на языке Object Pascal "
Рис. 3.2.
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Memo1: TMemo; Button1: TButton;
procedure Button1Click(Sender: TObject); private
{Private declarations } public
{Public declarations }
end;
var
Form1: TForm1;
135
" Компьютерный практикум по информатике и программированию implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var x,y,z,u:extended; // это раздел описаний пере-
менных begin
Memo1.Clear; // Очистка окна Memo1
Memo1.Lines.Add(‘Линейный алгоритм’); // Вывод текста в окно Memo1
x:=StrToFloat(Edit1.Text); // Считывание x y:=StrToFloat(Edit2.Text); // Считывание y z:=StrToFloat(Edit3.Text); // Считывание z u:=sqr(tan(x+y))-exp(y-z)*sqrt(cos(sqr(x))+sin(sq r(z))); // Расчет u по заданной формуле
Memo1.Lines.Add(‘При x=’+FloatToStr(x)); // Вывод
значения x
Memo1.Lines.Add(‘При y=’+FloatToStr(y)); // Вывод
значения y
Memo1.Lines.Add(‘При z=’+FloatToStr(z)); // Вывод
значения x
Memo1.Lines.Add(‘Значение u=’+FloatToStr(u)); //
Вывод значения u end;
end.
7.Запустить программу можно, нажав Run в главном меню Run или клавишу F9. При этом происходит трансляция и, если нет ошибок, компоновка программы и создание единого загружаемого файла с расширением .exe.
8.Работа с программой происходит следующим образом. Нажмите (щелкните мышью) кнопку Выполнить. В окне Memo1 появляется результат. Измените исходные значения x, y, z в окнах Edit и снова нажмите кнопку Выполнить — появятся новые результаты. Завершить работу программы можно, нажав или Program Reset в главном меню Run, или кнопку закрытия на форме.
136
3.Практикум по программированию на языке Object Pascal "
3.2.Разветвляющийся алгоритм
При создании программ в CodeGear Delphi 2007 для организации разветвлений часто используются компоненты в виде кнопок-переключате- лей. Состояние такой кнопки (включено/выключено) визуально отражается на форме. Компонент TCheckBox организует кнопку независимого переключателя, с помощью которой пользователь может указать свое решение типа да/нет. В программе состояние кнопки связано со значением булевской переменной, которая проверяется с помощью оператора if. Компонент TRadiogroup организует группу кнопок — зависимых переключателей. При нажатии одной из кнопок группы все остальные кнопки отключаются. В программу передается номер включенной кнопки (0, 1, 2, ...), который анализируется с помощью оператора case.
Задание. Ввести три числа x, y, z. Вычислить по усмотрению u = = sin(x) или u = cos(x), или u = tg(x). Найти максимальное из трех чи-
сел: max(u, y, z).
1. Создать форму по образцу рис. 3.3. Используемые компоненты: Label1, Label2, Label3 — для отображения текста Введите значение x, y, z соответственно; Edit1, Edit2, Edit3 — для ввода числовых значений x, y, z соответственно, причем дробная часть отделяется запятой; Memo1 — для вывода результатов; Button1 — для выполнения вычислений.
Рис. 3.3
137
"Компьютерный практикум по информатике и программированию
2.Обратить внимание, что используются компоненты CheckBox1 и RadioGroup1. Для того, чтобы задать строки в компоненте RadioGroup1 нужно выбрать в инспекторе объектов свойство Items, появится строчный редактор списка заголовков кнопок. Набрать три строки с текстом: в первой строке — sin(x), во второй — cos(x + y), в третьей — tan(x – y + z), нажать ОК. После этого на форме внутри окаймления появится три кноп- ки-переключателя с введенными надписями.
3.Ввести текст программы, выполняющийся по нажатию кнопки Button1 (текст процедуры) и добавить Math в раздел модулей uses. Обра-
тить внимание, что текст программы приведен полностью, но некоторые строки уже существуют.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math;
type
TForm1 = class(TForm) Label1: TLabel;
Label2: TLabel;
Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit;
RadioGroup1: TRadioGroup;
CheckBox1: TCheckBox; Memo1: TMemo; Button1: TButton;
procedure Button1Click(Sender: TObject); private
{Private declarations } public
{Public declarations }
end;
138
3. Практикум по программированию на языке Object Pascal "
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var x,y,z,u,max:extended;
st:string[20]; begin
Memo1.Clear;
st:=’’;
x:=StrToFloat(Edit1.Text);
y:=StrToFloat(Edit2.Text);
z:=StrToFloat(Edit3.Text);
// Проверка номера нажатой кнопки и выбор соот-
ветствующей ей функции
case RadioGroup1.ItemIndex of
0:begin u:=sin(x);st:=RadioGroup1.Items. ValueFromIndex[0];end;
1:begin u:=cos(x+y);st:=RadioGroup1.Items. ValueFromIndex[1];end;
2:begin u:=tan(x-y+z); st:=RadioGroup1.Items. ValueFromIndex[2];end;
end;
Memo1.Lines.Add(‘При x= ‘+FloatToStr(x));
Memo1.Lines.Add(‘При y= ‘+FloatToStr(y)); Memo1.Lines.Add(‘При z= ‘+FloatToStr(z)); Memo1.Lines.Add(‘Рассчитано u= ‘+ st +’ = ‘+FloatToStr(u));
// Проверка состояния кнопки CheckBox1 if CheckBox1.Checked then
begin // Нахождение максимального из трех чисел if (x>=y) and (x>=z) then max:=x else
if (y>=x) and (y>=z) then max:=y else if (z>=x) and (z>=y) then max:=z;
139
" Компьютерный практикум по информатике и программированию
Memo1.Lines.Add(‘Максимальное из х,y,z = ‘+FloatToStr(max));
end;
end;
end.
4. Вид выполняемой программы приведен на рис. 3.4.
Рис. 3.4
3.3. Циклический алгоритм
n
Задание 1. Вычислить значение функции S = ∑ 2i(n -1,5i ), для
i=1
n — целого числа, выводя промежуточные результаты при суммировании.
1. Создать форму по образцу рис. 3.5. Используемые компоненты: Label1 — для сообщения о вводе числа повторов цикла; Label2 — для сообщения о промежуточных итогах; Edit1 — для ввода числа повторов цикла; Memo1 — для вывода результатов; Label3 — сообщение о результате суммирования; Edit2 — для вывода результата суммирования.
140