Лекции Практические и лабораторные занятия Курсовая работа (проект) Самостоятельная работа студента




Скачать 1.86 Mb.
страница 3/7
Дата 11.10.2016
Размер 1.86 Mb.
1   2   3   4   5   6   7

Задание


1. В соответствии с вариантами задания и приведенной ниже спецификацией реализуйте приложение под Windows.

2. Разработайте тестовые задания, и оттестируйте программу одним из методов тестирования.


Спецификация приложения


1. В соответствии с приведенными вариантами заданий реализуйте приложение под Windows, используя для организации пользовательского интерфейса следующие элементы управления: «форма» (класс TForm), «кнопка» (класс TButton), «метка» (класс TLabel), «однострочный редактор» (класс TEdit). Ввод данных и вывод результатов осуществляйте в элементы управления «однострочный редактор». Подписи к однострочным редакторам выполните с помощью элементов «метка». Вычисление результата свяжите с нажатием на элементе управления «кнопка» левой клавиши мыши.

2. Организуйте контроль содержимого строки, вводимой в элемент «однострочный редактор». Если вводимая строка не соответствует заданному формату, то необходимо предусмотреть следующее: в окне сообщений вывести сообщение об ошибке, очистить строку, введенную в «однострочный редактор».


Рекомендации к выполнению


1. Для организации управляющей структуры программы используйте оператор присваивания.

2. Для выполнения заданий используйте операции mod, div и стандартные функции Abs, Int, Frac,Trunc, Round, Odd.

3. Для преобразования введенных значений из строкового формата в числовой, а результатов – из числового формата в строковый формат используйте библиотечные подпрограммы StrToInt, StrToFloat, IntToStr, FloatToStr модуля Sysutils.

4. Организуйте контроль ввода данных в элемент «однострочный редактор». Для этого используйте блок try…finally и процедуру ShowMessage модуля Dialogs.

5. Разработанные приложения сохраняйте в отдельной папке.

Варианты заданий


1. Вычислите значение функции

2. Вычислите площадь треугольника со сторонами a, b, c по формуле Герона:



3. Вычислите высоты треугольника со сторонами a, b, c по формулам:



4. Вычислите площадь поверхности s и объем v усеченного конуса, используя функцию возведения в квадрат SQR:





5. Вычислите значение функции, используя функцию возведения e в заданную степень EXP и функцию SIN:



6. Выведите третий справа разряд целого числа, содержащего не менее трех разрядов. Для решения используйте операции mod, div.

7. Выведите первый после десятичной точки разряд дробной части действительного числа, содержащего не менее одного разряда в дробной части. Для решения используйте функции Int, Frac.


Пример


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



Рис. 1

Ей соответствует модуль, текст которого приведен ниже.

unit Unit1;

interface

uses

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



StdCtrls;

type


TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Edit3: TEdit;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

private


{Private declarations}

public


{Public declarations}

end;


var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c: real;

begin

a:= StrToFloat(Edit1.Text); //Преобразуем введенную строку в вещественное число



b:= StrToFloat(Edit2.Text);//Преобразуем введенную строку в вещественное число

c:= a/b;


Edit3.Text:= FloatToStr(c); //Преобразуем вещественное число в строку

Edit1.SetFocus; //Устанавливаем фокус ввода на Edit1

end;

end.


Разработанное выше приложение имеет ряд недостатков:

• приложение не работает, если при вводе допускаются ошибки: введенная строка не является изображением числа или ни одного символа не было введено в строку;

возникает ошибка выполнения, если делитель равен 0.

Указанных недостатков лишено приложение, текст модуля которого приведен ниже. Его интерфейс совпадает с интерфейсом приложения, описанного выше.

В этом приложении нельзя покинуть элемент управления «однострочный редактор» (переместить фокус ввода на другой визуальный компонент), пока не введена строка, изображающая число. В случае ошибки ввода пользователь приложения получает окно, содержащее сообщение об ошибке. Если он закрывает окно сообщения, фокус ввода вновь устанавливается в «однострочный редактор», содержащий строку с ошибкой. В случае, когда делитель равен нулю, пользователь также получает окно с сообщением о делении на ноль. Когда он закрывает окно сообщения, фокус ввода вновь устанавливается в «однострочный редактор», содержащий строку с ошибкой.

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c: real;

begin


try

a:= StrToFloat(Edit1.Text); //Преобразуем введенную строку в вещественное число

b:= StrToFloat(Edit2.Text); //Преобразуем введенную строку в вещественное число

c:= a/b;


Edit3.Text:= FloatToStr(c); //Преобразуем вещественное число в строку

Edit1.SetFocus; //Устанавливаем фокус ввода на Edit1

except

on EZerodivide do //операторы выполняются



begin //в случае деления на ноль

ShowMessage('Деление на ноль');

Edit2.SetFocus;

end;


end;

end;


procedure TForm1.Edit1Exit(Sender: TObject);

var a: real;

begin

try


a:= StrToFloat(Edit1.Text)

except


on EConvertError do

begin


ShowMessage('Ошибка ввода');

Edit1.SetFocus;

end;

end;


end;

procedure TForm1.Edit2Exit(Sender: TObject);

var a: real;

begin


try

a:= StrToFloat(Edit2.Text)

except

on EConvertError do



begin

ShowMessage('Ошибка ввода');

Edit2.SetFocus;

end;


end;

end;


end.

Содержание отчета


1. Задание.

2. Текст программы на Object Pascal.

3. Тестовые наборы данных для тестирования приложения.

Контрольные вопросы


1. Назовите синтаксические правила, в соответствии с которыми записывается оператор присваивания.

2. Укажите порядок, в котором выполняется оператор присваивания.

3. Какое отношение должно существовать между ссылкой на переменную, стоящую слева от символа оператора присваивания, и типом выражения, стоящего справа от него?

4. В каком разделе подпрограммы описываются переменные?

5. Какую информацию извлекает компилятор из описания переменной?

6. Для чего предназначена функция StrToFloat?

7. Для чего предназначена процедура ShowMessage?

8. Для чего предназначен метод SetFocus?



9. Для чего предназначена функция FloatToStr?

10. Для чего предназначен визуальный компонент «метка» (тип TLabel)?

11. Для чего предназначен визуальный компонент «однострочный редактор» (тип TEdit)?

12. Для чего предназначен визуальный компонент «командная кнопка» (тип TButton)?

13. Когда вызывается событийная процедура OnExit и как создать шаблон ее кода для компонента «однострочный редактор» (тип TEdit) в интегрированной среде разработки (IDE)?

14. Когда вызывается событийная процедура OnClick и как создать шаблон ее кода для компонента «командная кнопка» (тип TButton) в интегрированной среде разработки (IDE)?



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

Тема: Управляющие структуры языка Delphi. Условие.

Цель: Сформировать практические навыки: реализация разветвляющихся процессов обработки данных с помощью операторов if, case Object Pascal; построение однооконных интерфейсов с помощью визуального компонента «окно» (класс TForm) и визуальных компонентов панели инструментов Standard: «метка» (класс TLabel), «редактор» (класс TEdit), «кнопка» (класс TButton).

Задание


1. В соответствии с вариантами задания и приведенной ниже спецификацией реализуйте приложение под Windows.

2. Разработайте тестовые задания, и оттестируйте программу одним из методов тестирования.



Спецификация приложения


1. В соответствии с приведенными вариантами заданий реализуйте приложение под Windows, используя для организации пользовательского интерфейса следующие элементы управления: «форма» (класс TForm), «кнопка» (класс TButton), «метка» (класс TLabel), «однострочный редактор» (класс TEdit). Ввод данных и вывод результатов осуществляйте в элементы управления «однострочный редактор». Подписи к однострочным редакторам выполните с помощью элементов «метка». Вычисление результата свяжите с нажатием на элементе управления «кнопка» левой клавиши мыши.

2. Организуйте контроль содержимого строки, вводимой в элемент «однострочный редактор». Если вводимая строка не соответствует заданному формату, то необходимо предусмотреть следующее: в окне сообщений вывести сообщение об ошибке, очистить строку, введенную в «однострочный редактор».

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

4. Установите удобный для пользователя порядок перемещения фокуса по компонентам с помощью клавиши Tab.


Рекомендации к выполнению


1. Для организации управляющей структуры программ используйте оператор if в форме if then и if then else или case.

2. Для выполнения заданий используйте операции mod, div и стандартные функции Abs, Int, Frac,Trunc, Round, Odd.

3. Для преобразования введенных значений из строкового формата в числовой, а результатов – из числового формата в строковый формат используйте библиотечные подпрограммы StrToInt, StrToFloat, IntToStr, FloatToStr модуля Sysutils.

4. Организуйте контроль ввода данных в элемент «однострочный редактор». Для этого используйте блок try…finally и процедуру ShowMessage модуля Dialogs.

5. Чтобы компонент был доступен только для чтения, необходимо в его свойство ReadOnly занести значение True.

6. Чтобы на компонент нельзя было установить фокус ввода с помощью клавиши Tab, необходимо занести в его свойство TabStop значение False.

7. Чтобы установить нужный порядок перемещения фокуса ввода по элементам формы с помощью клавиши Tab:

• установите указатель мыши на форме;

• нажмите правую клавишу мыши;

• в появившемся меню выберите пункт Tab Order;

• в появившемся диалоговом окне установите требуемый порядок перемещения фокуса.



8. Разработанные приложения сохраняйте в отдельной папке.

Варианты заданий


1. Вычислите площадь треугольника со сторонами a, b, c. Перед вычислением проанализируйте значения, введенные в качестве длин сторон. Если эти значения не могут выступать в качестве длин сторон треугольника, необходимо сообщить об этом пользователю и потребовать повторный ввод. Площадь треугольника вычисляйте по формуле Герона:

2. Вычислить высоты треугольника ha, hb, hc по длинам трех его сторон a, b, c. Перед вычислением площади проанализируйте введенные в качестве длин сторон значения. Если эти значения не могут выступать в качестве длин сторон треугольника, необходимо сообщить об этом пользователю и потребовать повторный ввод. Площадь треугольника s вычисляйте по формуле Герона:





3. Проанализируйте введенное с клавиатуры целое число и выведите сообщение о его четности.

4. Проанализируйте введенную с клавиатуры пару целых чисел a, n и выведите сообщение о кратности числа a числу n.

5. Вычислите корни квадратного уравнения

если


то корни действительные; следовательно, необходимо вычислять



если d

6. Вычислите значение функции



7. Определите, попадает ли точка с координатами x0, y0 в круг радиусом r. Уравнение окружности: r2 = x2 + y2.



8. Определите и сообщите, к какому множеству символов принадлежит введенная литера:

• прописная латинская;

• строчная латинская;

• арабская цифра;

• прописная кириллица;

• строчная кириллица;

• другой символ.

Проверку принадлежности введенного символа множеству и вывод сообщения об этом осуществляйте в событийной процедуре OnKeyPress элемента «однострочный редактор». Внутри этой процедуры введенный символ хранится в переменной Key в формате Char. После вывода сообщения о принадлежности введенного символа очищайте содержимое элемента управления «однострочный редактор», используя метод Clear (Например, Edit1.Clear).

9. Выполните задание предыдущего пункта (8), используя оператор Case.

Пример


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



Рис. 2

Ей соответствует модуль, текст которого приведен ниже.

unit Unit1;

interface

uses

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



StdCtrls;

type


TForm1 = class(TForm)

Edit1: TEdit; //элемент «однострочный редактор» для ввода символа

Edit2: TEdit; //элемент «однострочный редактор» для вывода ответа

Label1: TLabel; //элемент «метка» для хранения надписи к Edit1

Label2: TLabel; //элемент «метка» для хранения надписи к Edit2

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

private

{Private declarations}



public

{Public declarations}

end;

var


Form1: TForm1;

implementation

{$R *.DFM}

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

begin

if ((Key>='0') and (Key

begin Edit2.Text:='Арабская цифра'; Edit1.Clear end

else begin Edit2.Text:='Другой'; Edit1.Clear end

end; //Событийная процедура, вызываемая при нажатии клавиши, когда фокус ввода находится на элементе Edit1

end.

Содержание отчета


1. Задание.

2. Текст программы на Object Pascal.

3. Тестовые наборы данных для тестирования программы.

Контрольные вопросы


1. Назовите синтаксические правила, в соответствии с которыми записывается оператор if.

2. Укажите порядок, в котором выполняется оператор if.

3. Как поместить в Then- и Else- часть несколько операторов?

4. Что можно размещать между зарезервированными словами if и Then?

5. Что можно размещать после зарезервированного слова Then?

6. Что можно размещать после зарезервированного слова Else?

7. Нарисуйте управляющую структуру, соответствующую оператору if, содержащему только Then- часть, и укажите порядок выполнения узлов.

8. Нарисуйте управляющую структуру, соответствующую оператору if, содержащему Then- и Else- часть, и укажите порядок выполнения узлов.

9. Для чего предназначен метод Clear визуального компонента «однострочный редактор» и как на него можно сослаться в тексте программы?

10. Что содержится в свойстве Text визуального компонента «однострочный редактор» и как на него можно сослаться в тексте программы?

11. Каково множество значений типа Char и как записываются значения этого множества в тексте программы?

12. Перечислите операции, определенные на значениях типа Char, и поясните правила их выполнения.



13. Перечислите стандартные процедуры и функции, определенные на значениях типа Char, и поясните правила их выполнения.

14. Когда вызывается событийная процедура OnKeyPress и как создать шаблон ее кода для компонента «однострочный редактор» (тип TEdit) в интегрированной среде разработки?



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

Тема: Управляющие структуры языка Delphi. Выбор.

Цель: Сформировать практические навыки: реализация разветвляющихся процессов обработки данных с помощью оператора case Object Pascal и применения логических и побитовых операций; построение однооконных интерфейсов с помощью визуального компонента «окно» (класс TForm) и визуальных компонентов панели инструментов Standard: «метка» (класс TLabel), «редактор» (класс TEdit), «кнопка» (класс TButton), «список» (TListBox), «комбинированный список» (TComboBox).

Задание


1. В соответствии с вариантами задания и приведенной ниже спецификацией реализуйте приложение под Windows.

2. Разработайте тестовые задания и оттестируйте программу одним из методов тестирования.


Спецификация приложения


1. В соответствии с приведенными вариантами заданий реализуйте приложение под Windows, используя для организации пользовательского интерфейса следующие элементы управления: «форма» (класс Tform), «кнопка» (класс TButton), «метка» (класс TLabel), «однострочный редактор» (класс TEdit), «список» (класс TListBox), «комбинированный список» (класс TComboBox). Ввод данных и вывод результатов осуществляйте в элементы управления «однострочный редактор». Подписи к редакторам сделайте с помощью элементов «метка». Выбор операции реализуйте с помощью элемента управления «комбинированный список». Вычисление результата свяжите с нажатием на элементе управления «командная кнопка» левой клавиши мыши.

2. Организуйте контроль содержимого строки, вводимой в элемент «однострочный редактор». Если вводимая строка не соответствует заданному формату, то необходимо предусмотреть следующее: в окне сообщений вывести сообщение об ошибке, очистить строку, введенную в «однострочный редактор».

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

4. Установите удобный для пользователя порядок перемещения фокуса по компонентам с помощью клавиши Tab.


Рекомендации к выполнению


1. Для организации управляющей структуры программ используйте оператор case.

2. Для выполнения заданий используйте логические и побитовые операции.

3. Для преобразования введенных значений из строкового формата в числовой, а результатов – из числового формата в строковый формат используйте библиотечные подпрограммы StrToInt, StrToFloat, IntToStr, FloatToStr модуля Sysutils.

4. Организуйте контроль ввода данных в элемент «однострочный редактор». Для этого используйте блок try…finally и процедуру ShowMessage модуля Dialogs.

5. Чтобы компонент был доступен только для чтения, необходимо в его свойство ReadOnly занести значение True.

6. Чтобы на компонент нельзя было установить фокус ввода с помощью клавиши Tab, нужно занести в его свойство TabStop значение False.

7. Разработанные приложения сохраняйте в отдельной папке.

Варианты заданий


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

2. Реализуйте Windows-приложение, которое обеспечивает пользователю возможность выбора любой логической операции из определенных в языке, ввод значений операндов, вычисление и вывод результата.


Пример 1


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



Рис. 3

Ей соответствует модуль, текст которого приведен ниже.

unit Unit1;

interface

uses


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

StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)



ComboBox1: TComboBox;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Button1: TButton;

Edit3: TEdit;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

procedure ComboBox1Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Edit1Exit(Sender: TObject);

procedure Edit2Exit(Sender: TObject);

private


{Private declarations}

public


{Public declarations}

end;


var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ComboBox1Change(Sender: TObject);

begin


Label3.Caption:= ComboBox1.Items[ComboBox1.ItemIndex];

if Label3.Caption= 'minus' then begin

Label1.Hide;

Edit1.Hide;

Edit2.SetFocus;

end


else begin

Label1.Visible:= True;

Edit1.Visible:= True;

Edit1.SetFocus;

end;

end;


procedure TForm1.Button1Click(Sender: TObject);

var a,b,c: integer;

begin

if ComboBox1.ItemIndex5 then a:= StrToInt(Edit1.Text);



b:= StrToInt(Edit2.Text);

case ComboBox1.ItemIndex of //вычисляется индекс выбранного значения комбинированного списка

0: c:= a + b;

1: c:= a – b;

2: c:= a * b;

3: c:= a mod b;

4: c:= a div b;

5: c:= –b;

end;

Edit3.Text:= IntToStr(c);



if ComboBox1.ItemIndex5 then Edit1.SetFocus else Edit2.SetFocus;

end;


procedure TForm1.FormActivate(Sender: TObject);

begin


ComboBox1.ItemIndex:= 0;

ComboBox1.Text:=ComboBox1.Items[ComboBox1.ItemIndex];

Label3.Caption:=ComboBox1.Items[ComboBox1.ItemIndex];

end;


procedure TForm1.Edit1Exit(Sender: TObject);

var a:integer;

begin

try


a:= StrToInt(Edit1.Text);

except


on EConvertError do

begin


ShowMessage('Ошибка ввода');Edit1.SetFocus;

end


end;

end;


procedure TForm1.Edit2Exit(Sender: TObject);

var a:integer;

begin

try


a:= StrToInt(Edit2.Text);

except


on EConvertError do

begin


ShowMessage('Ошибка ввода');Edit2.SetFocus;

end


end;

end;


end.

Пример 2


Пусть требуется обеспечить пользователю возможность выполнения логической операции and, ввод значений операндов, вычисление и вывод результата. Для решения этой задачи можно построить приложение, состоящее из одной формы следующего вида (рис. 4):


Рис. 4

Ей соответствует модуль, текст которого приведен ниже.

unit Unit1;

interface

uses


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

StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)



Label1: TLabel;

Button1: TButton;

Label2: TLabel;

Label3: TLabel;

Label5: TLabel;

ListBox1: TListBox;

ListBox2: TListBox;

Edit1: TEdit;

procedure Button1Click(Sender: TObject);

private


{ Private declarations }

public


{ Public declarations }

end;


var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c: Boolean;

begin

if ListBox1.Items[ListBox1.ItemIndex]= 'True'//анализируется содержимое выделенной строки



then a:= True else a:= False;

if ListBox2.Items[ListBox2.ItemIndex]='True'' //анализируется содержимое выделенной строки

then b:= True else b:= False;

c:= a and b;

if c then Edit1.Text:= 'True' //заносится результат

else Edit1.Text:= 'False';

end;

procedure TForm1.FormActivate(Sender: TObject);



begin

ListBox1.ItemIndex:= 0; //выделяем строку с индексом 0

ListBox2.ItemIndex:= 0; //выделяем строку с индексом 0

end;


end.

Содержание отчета


1. Задание.

2. Текст программы на Object Pascal 2.0.

3. Тестовые наборы данных для тестирования приложения.

Контрольные вопросы


1. Назовите синтаксические правила, в соответствии с которыми записывается оператор case.

2. Укажите порядок, в котором выполняется оператор case.

3. Как поместить в Case- часть несколько операторов?

4. Что можно размещать между зарезервированными словами Case и of?

5. Что можно размещать после зарезервированного слова Else?

6. Что допустимо использовать в качестве меток варианта в операторе Case?

7. Перечислите допустимые варианты записи меток варианта.

8. Нарисуйте управляющую структуру, соответствующую оператору case, и укажите порядок выполнения узлов.



9. Для чего предназначены функции StrToInt и IntToStr?

10. Перечислите, какие типы относятся к целочисленным типам, охарактеризуйте множества их значений, покажите, как записываются значения этих типов в тексте программы.

11. Перечислите операции, определенные на значениях целочисленных типов, и поясните правила их выполнения.

12. Перечислите стандартные процедуры и функции, определенные на значениях целочисленных типов, и поясните правила их выполнения.

13. Когда вызывается событийная процедура OnKeyPress и как создать шаблон ее кода для компонента «редактор» (тип TEdit) в интегрированной среде разработки?

14. Как сослаться на значение индекса выбранной строки визуального компонента «комбинированный список» (тип TComboBox) в тексте программы?

15. Как сослаться на выбранную строку визуального компонента «комбинированный список» (тип TComboBox) в тексте программы?

16. Когда вызывается событийная процедура OnKeyPress и как создать шаблон ее кода для компонента «редактор» (тип TEdit) в интегрированной среде разработки?

17. Когда вызывается событийная процедура OnChange и как создать шаблон ее кода для компонента «комбинированный список» (тип TComboBox) в интегрированной среде разработки?



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

Тема: Управляющие структуры языка Delphi. Циклы.

Цель: Сформировать практические навыки: реализация циклических процессов обработки данных с помощью операторов While, Repeat Object Pascal; построение однооконных интерфейсов с помощью визуального компонента «окно» (класс TForm) и визуальных компонентов панели инструментов Standard: «метка» (класс TLabel), «редактор» (класс TEdit), «кнопка» (класс TButton), «многострочный редактор текста» (TMemo).

Задание


1. В соответствии с вариантами задания и приведенной ниже спецификацией реализуйте приложение под Windows.

2. Разработайте тестовые задания и оттестируйте программу одним из методов тестирования.


Спецификация приложения


1. В соответствии с приведенными вариантами заданий реализуйте приложение под Windows, используя для организации пользовательского интерфейса следующие элементы управления: «форма» (класс Tform), «кнопка» (класс TButton), «метка» (класс TLabel), «однострочный редактор» (класс TEdit), «многострочный редактор» (класс TMemo). Ввод данных и вывод результатов осуществляйте в элементы управления «однострочный редактор». Подписи к редакторам сделайте с помощью элементов «метка». Документирование работы с приложением выполните с помощью элемента управления «многострочный редактор». Вычисление результата свяжите с нажатием на элементе управления «кнопка» левой клавиши мыши.

2. Организуйте контроль ввода в элемент «редактор», так что если вводимая строка не соответствует требованиям, то в окне сообщений выводится сообщение об ошибке, очищается строка «однострочный редактор».

3. Документируйте сеанс работы с приложением: запоминайте введенные исходные данные и полученный результат в элементе управления «многострочный редактор».

Рекомендации к выполнению


1. Для организации управляющей структуры программ используйте операторы While, Repeat.

2. Для преобразования введенных значений из строкового формата в числовой, а результатов – из числового формата в строковый формат используйте библиотечные подпрограммы StrToInt, StrToFloat, IntToStr, FloatToStr модуля Sysutils.

3. Организуйте контроль ввода данных в элемент «редактор». Для этого используйте блок try…finally и процедуру ShowMessage модуля Dialogs.

4. Чтобы компонент был доступен только для чтения, необходимо в его свойство ReadOnly занести значение True.

5. Чтобы на компонент нельзя было установить фокус ввода с помощью клавиши Tab, необходимо занести в его свойство TabStop значение False.

6. Документирование сеанса осуществляйте с помощью компонента «многострочный редактор», как показано в примере.

7. Разработанные приложения сохраняйте в отдельной папке.

Варианты заданий


1. Выведите заданный разряд целого числа. Разряды нумеруйте справа налево, начиная с единицы. Для решения используйте операции mod, div. Решите задачу дважды: первый раз – используя оператор while, второй раз – оператор repeat.

2. Выведите заданный разряд дробной части действительного числа. Разряды нумеруйте от десятичной точки направо, начиная с единицы. Для решения используйте функции Int, Frac. Решите задачу дважды: первый раз – используя оператор while, второй раз – оператор repeat.

3. Вычислите и выведите сообщение о четности введенного целого числа. Операции mod, div и функцию Odd не использовать. Решите задачу дважды: первый раз с помощью оператора while, второй раз – оператора repeat.

4. Вычислите и выведите сообщение о кратности пары введенных целых чисел. Операции mod, div и функцию Odd не использовать. Решите задачу дважды: первый раз с помощью оператор while, второй раз – оператора repeat.



5. Вычислите и выведите число Фибоначчи по его номеру, который вводится пользователем. Ряд чисел 1, 1, 2, 3, 4, 8, 13, … называются числами Фибоначчи. Каждое число называется «фибом». Таким образом, первый «фиб» или «фиб(1)» – это 1, «фиб(2)» – это 1, «фиб(3)» – это 2 и т.д. Ряд строится на основе того, что каждый последующий «фиб» является суммой двух предыдущих, т.е. фиб(8) = 21.

6. Напишите программу, которая вычисляет наибольший общий делитель (НОД) двух натуральных чисел.


Пример 1


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


Рис. 5

Для хранения таблицы использован компонент «многострочный редактор», расположенный в правой части формы. Ввод символа и отображение его кода осуществляется в компоненты «однострочный редактор». Для переноса введенного символа и его кода из компонентов «однострочный редактор» в строку компонента «многострочный редактор» используется компонент «командная кнопка» с подписью «Запомнить». Для удаления последней строки из компонента «многострочный редактор» используется компонент «командная кнопка» с подписью «Удалить».

Первую строку компонента «многострочный редактор», содержащую текст «Символ Код», можно сформировать на этапе визуального проектирования формы. Для этого необходимо:

• выделить на форме компонент Memo1;

• в инспекторе объектов выделить свойство Lines и кликнуть указателем мыши на кнопке с тремя точками;

• в появившемся окне редактора ввести необходимый текст.

Чтобы можно было просматривать строки текста компонента «многострочный редактор», которые не помещаются на экране, необходимо в свойстве ScrollBars установить значение ssVertical.

Разработанной форме соответствует модуль, текст которого приведен ниже.

unit Unit1;

interface

uses


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

StdCtrls;

type

TForm1 = class(TForm)



Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Memo1: TMemo;

Button2: TButton;

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

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{Private declarations}



public

{Public declarations}

end;

var


Form1: TForm1;

implementation

{$R *.DFM}

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

begin

Edit2.Text:= IntToStr(Ord(Key)); //код введенного символа заносится в редактор



Edit1.Clear;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin


Memo1.Lines.Add(Edit1.Text+' '+Edit2.Text); //добавляется строка в компонент Memo1

Edit1.SetFocus;

end;

procedure TForm1.Button2Click(Sender: TObject);



begin

if Memo1.Lines.Count>1 then //удаляем из Memo1 последнюю строку, если строк больше одной

Memo1.Lines.Delete(Memo1.Lines.Count-1);

Edit1.SetFocus;

end;

end.

Пример 2


Пусть требуется подсчитывать количество значащих десятичных разрядов в целом неотрицательном числе и заполнять таблицу из двух колонок: в первую заносится введенное целое, во вторую – количество разрядов. Для решения этой задачи можно построить приложение, состоящее из одной формы следующего вида (рис. 6):


Рис. 6

Для хранения таблицы использован компонент «многострочный редактор», расположенный в правой части формы. Ввод целого и отображение количества разрядов в нем осуществляется в компоненты «однострочный редактор». Для переноса введенного целого и количества разрядов в нем из компонентов «однострочный редактор» в строку компонента «многострочный редактор» используется компонент «командная кнопка» с подписью «Запомнить». Для удаления последней строки из компонента «многострочный редактор» используется компонент «командная кнопка» с подписью «Удалить».

Первую строку компонента «многострочный редактор», содержащую текст «Символ Код», можно сформировать на этапе визуального проектирования формы. Для этого необходимо:

• выделить на форме компонент Memo1;

• в инспекторе объектов выделить свойство Lines и кликнуть указателем мыши на кнопке с тремя точками;

• в появившемся окне редактора ввести необходимый текст.

Чтобы можно было просматривать строки текста компонента «многострочный редактор», которые не помещаются на экране, необходимо в свойстве ScrollBars установить значение ssVertical.

Разработанной форме соответствует модуль, текст которого приведен ниже.

unit Unit1;

interface

uses


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

StdCtrls;

type

TForm1 = class(TForm)



Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton; // кнопка добавить

Memo1: TMemo;

Button2: TButton; // кнопка удалить

Button3: TButton;// кнопка вычислить

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Edit1Exit(Sender: TObject);

private

{Private declarations}



public

{Public declarations}

end;

var


Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

//добавляется строка к списку строк компонента Memo1



Memo1.Lines.Add(Edit1.Text+' '+Edit2.Text);

Edit1.SetFocus;

end;

procedure TForm1.Button2Click(Sender: TObject);



begin

if Memo1.Lines.Count>1 then begin

//удаляем из Memo1 последнюю строку, если строк больше одной

Memo1.Lines.Delete(Memo1.Lines.Count-1);

end;

Edit1.SetFocus;



end;

procedure TForm1.Button3Click(Sender: TObject);

var k,n: Integer;

begin


n:= StrToInt(Edit1.Text);

k:= 0;


while n>0 do begin//вычисляем число разрядов

n:= n div 10;

inc(k);

end;


Edit2.Text:= IntToStr(k);

end;


procedure TForm1.Edit1Exit(Sender: TObject);

var a:Cardinal;

begin

try


a:= StrToInt(Edit1.Text);

except


on EConvertError do begin

showMessage('Ошибка ввода');

Edit1.SetFocus

end;


end;

end;


end.

Содержание отчета


1.Задание.

2.Текст программы на Object Pascal.

3.Тестовые наборы данных для тестирования приложения.

Контрольные вопросы


1. Назовите синтаксические правила написания оператора While.

2. Укажите порядок, в котором выполняется оператор While.

3. Как поместить в do= часть несколько операторов?

4. Что можно размещать между зарезервированными словами While и do?

5. Нарисуйте управляющую структуру, соответствующую оператору While, и укажите порядок выполнения узлов.

6. Назовите синтаксические правила написания оператора Repeat.

7. Укажите порядок, в котором выполняется оператор Repeat.

8. Что можно размещать между зарезервированными словами Repeat и until?

9. Нарисуйте управляющую структуру, соответствующую оператору Repeat, и укажите порядок выполнения узлов.

10. Охарактеризуйте множество значений типа Boolean, покажите, как записываются значения этого типа в тексте программы.

11. Перечислите операции, определенные на значениях типа Boolean, и поясните правила их выполнения.

12. Перечислите стандартные процедуры и функции, определенные на значениях типа Boolean, и поясните правила их выполнения.



13. Как добавить строку в конец списка строк визуального компонента «многострочный редактор» (класс TMemo) в тексте программы?

14. Как сослаться на текущую длину списка строк визуального компонента «многострочный редактор» (класс TMemo) в тексте программы?

15. Как удалить последнюю строку списка строк визуального компонента «многострочный редактор» (класс TMemo) в тексте программы?

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

Тема: Символы и строки

Цель: Сформировать практические навыки: реализация процессов обработки символьных и строковых данных с помощью функций и процедур; построение однооконных интерфейсов с помощью визуального компонента «окно» (класс TForm) и визуальных компонентов панели инструментов Standard: «метка» (класс TLabel), «редактор» (класс TEdit), «кнопка» (класс TButton), «многострочный редактор текста» (TMemo)
Компьютер может обрабатывать не только числовую информацию, но и символьную. Язык Delphi оперирует с символьной информацией, которая может быть представлена как отдельными символами, так и строками (поcледовательностью символов).

Символы

Для хранения и обработки символов используются переменные типа Ansichar и wideChar. Тип Ansichar представляет собой набор ANSI-символов, з котором каждый символ кодируется восьмиразрядным двоичным числом (байтом). Тип wideChar представляет собой набор символов в кодировке Unicode, в которой каждый символ кодируется двумя байтами.

Для обеспечения совместимости с предыдущими версиями поддерживается тип Char, эквивалентный AnsiChar.

Значением переменной символьного типа может быть любой отображаемый символ:


  • буква русского или латинского алфавитов;

  • цифра;

  • знак препинания;

И специальный символ, например, "новая строка".

Переменная символьного типа должна быть объявлена в разделе объявления переменных. Инструкция объявления символьной переменной в общем виде выглядит так:

Имя: char;

где:


  • имя — имя переменной символьного типа;

  • char — ключевое слово обозначения символьного типа.

Примеры:

otv: char; ch: char;

Как и любая переменная программы, переменная типа char может получить значение в результате выполнения инструкции присваивания. Если переменная типа char получает значение в результате выполнения операции присваивания, то справа от знака := должно стоять выражение типа char, например, переменная типа char или символьная константа — символ, заключенный в кавычки.

В результате выполнения инструкций c1 := '*'; с2 := c1; переменная c1 получает значение присваиванием значения константы, а переменная с2 — присваиванием значения переменной cl (предполагается, что переменные c1 и с2 являются переменными символьного типа).

Переменную типа char можно сравнить с другой переменной типа char или с символьной константой. Сравнение основано на том, что каждому символу поставлено в соответствие число (см. приложение 2), причем символу 'о' соответствует число меньшее, чем символу У, символу 'А' — меньшее, чем 'в', символу V — меньшее, чем а. Таким образом, можно записать:

'0'

Символам русского алфавита соответствуют числа большие, чем символам латинского алфавита, при этом справедливо следующее:

'А'

В тексте программы вместо символа можно указать его код, поставив перед числом оператор #. Например, вместо константы 'в' можно записать #193. Такой способ записи, как правило, используют для записи служебных символов или символов, которые во время набора программы нельзя ввести с клавиатуры. К примеру, часто используемый при записи сообщений символ "новая строка" записывается так: #13.

В программах обработки символьной информации часто используют функции chr и Ord. Значением функции chr является символ, код которого указан в качестве параметра. Например, в результате выполнения инструкции c:=chr(32) переменной с будет присвоено значение пробел. Функция ord позволяет определить код символа, который передается ей в качестве параметра. Например, в результате выполнения инструкции k:=ord('*') переменная k будет содержать число 42 — код символа *.

Программа, текст которой приведен в листинге 3.1, выводит таблицу кодировки букв русского алфавита. Вид окна программы представлен на рис. 3.1.

Основную работу выполняет процедура обработки события OnActivate, которая формирует и выводит в поле метки (Label1) таблицу. Событие OnActivate происходит при активизации формы приложения, и поэтому процедура TForm1.FormActivate выполняется автоматически, сразу после появления формы на экране.





Рис. 3.1. Форма приложения во время разработки



Рис. 3.2. Форма приложения во время работы

Листинг 3.1. Таблица символов

unit tablsim_;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabe1;

procedure FormActivate(Sender: TObject); private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;



implementation

{$R *.DFM}



procedure TForm1.FormActivate(Sender: TObject);

var

st:string; // таблица формируется как строка символов

dec: byte; // код символа

i,j:integer; // номер строки и колонки таблицы

begin

st:='';


dec:=192;

for i:=0 to 15 do // шестнадцать строк

begin

dec:=i + 192;

for j:=1 to 4 do // четыре колонки

begin

st:=st+chr(dec)+'-'+IntToStr(dec)+' '; dec:=dec + 16;



end;

st:=st + #13; // переход к новой строке экрана



end;

Label1.caption:=st;



end;

end.

Форма приложения Таблица символов содержит только один компонент -поле метки (Label1l). Для того чтобы колонки таблицы имели одинаковую ширину, свойству Label1.Font.Name следует присвоить имя шрифта, у которого все символы имеют одинаковую ширину, например, courier New cyr. Вид окна приложения во время работы приведен на рис. 3.2.

Строки

Строки могут быть представлены следующими типами: shortstring, Longstring и widestring. Различаются эти типы предельно допустимой длиной строки, способом выделения памяти для переменных и методом кодировки символов.

Переменной типа shortstring память выделяется статически, т. е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа Longstring и widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена.

Помимо перечисленных выше типов можно применять универсальный cтроковый тип String. Тип String эквивалентен типу Shortstring.

Переменная строкового типа должна быть объявлена в разделе объявления переменных. Инструкция объявления в общем виде выглядит так:

Имя: String;

или


Имя: String [длина]

где:


  • имя — имя переменной;

  • string — ключевое слово обозначения строкового типа;

  • длина — константа целого типа, которая задает максимально допустимую длину строки.

Пример объявления переменных строкового типа:

name: string[30];

buff: string;

Если в объявлении строковой переменной длина строки не указана, то ее длина задается равной 255 символам, т. е. объявления

stroka: string [255]; stroka: string;

эквивалентны.

В тексте программы последовательность символов, являющаяся строкой (строковой константой), заключается в одинарные кавычки. Например, чтобы присвоить строковой переменной parol значение, нужно записать:

parol:= 'Большой секрет';

или

parol:= '2001';



Следует обратить внимание, что инструкция parol:=2001; неверная, т.к. тип константы не соответствует типу переменной. Во время компиляции этой инструкции будет выведено сообщение: incompatible types: 'Char' and 'Integer' (типы Char и Integer несовместимы).

Используя операции =, , = и о, переменную типа string можно сравнить с другой переменной типа string или со строковой константой. Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом. В табл. 3.1 приведены примеры сравнения строк.



Таблица 3.1. Сравнение строк



















Строка 1

Строка 2

Результат сравнения







Иванов

Иванов

Строки равны







Васильев

Васильев

Строка 1 больше строки 2







Алексеев

Петров

Строка 1 меньше строки 2







Иванова

Иванов

Строка 1 больше строки 2



















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

f irst__name: ='Иван' ;

last_name:='Иванов';

ful_name:=first_name+last_name;

переменная fui_name получит значение 'Иван Иванов'.

Операции со строками

В языке Delphi есть несколько полезных при работе со строками функций и процедур. Ниже приведено их краткое описание и примеры использования.

Функция length

Функция length возвращает длину строки. У этой функции один параметр — выражение строкового типа. Значением функции length (целое число) является количество символов, из которых состоит строка.

Например, в результате выполнения инструкций

n:=length('Иванов');

m:=length(' Невский проспект '); значение переменных n и m будет равно 6 и 20.

Процедура delete

Процедура delete позволяет удалить часть строки. В общем виде обращение к этой процедуре выглядит так: delete(Строка, р, п)

где:


  • Строка — переменная или константа строкового типа;

  • р — номер символа, с которого начинается удаляемая подстрока;

  • п — длина удаляемой подстроки.

Например, в результате выполнения инструкций

p:='Город Санкт-Петербург';

delete(s,7,6); значением переменной s будет строка ' город Петербург'.

Функция роs

Функция роз позволяет определить положение подстроки в строке. В общем виде обращение к функции выглядит так:

pos(Подстрока,Строка); где Подстрока — строковая константа или переменная, которую надо найти в строковой константе или переменной строка.

Например, в результате выполнения инструкции

р := pos('Пе','Санкт-Петербург'); значение переменной р будет равно 7. Если в строке нет искомой подстроки, то значение функции роз будет равно нулю.

Ниже приведена инструкция while, в результате выполнения которой удаляются начальные пробелы из строки st.

while(pos(' ',st) = 1) and(length(st) > 0) do delete (st,1,1);

Пробелы удаляет инструкция delete (st, i, i), которая выполняется в цикле до тех пор, пока первым символом строки является пробел (в этом случае значение роs (' ',st) равно единице). Необходимость проверки условия length (st) > 0 объясняется возможностью того, что введенная строка состоит только из пробелов.

Функция сору

Функция сору позволяет выделить фрагмент строки. В общем виде обращение к функции сору выглядит так:

сору(Строка, р, п) где:



строка — выражение строкового типа, содержащее строку, фрагмент которой надо получить;

  • р — номер первого символа, с которого начинается выделяемая подстрока;

  • n — длина выделяемой подстроки. Например, в результате выполнения инструкций

st:= 'Инженер Иванов'; fam:=copy(st, 9, 6) ;

значением переменной fam будет строка 'Иванов1.



Задания для самостоятельной работы

  1. Написать программу, которая будет подсчитывать количество символов в введенной строке.

  2. Модернизировать предыдущую программу таким образом, чтобы дополнительно узнать сколько пробелов было в введенной строке.

  3. Измените предыдущую программу таким образом, чтобы кроме подсчета символов она заменяла все пробелы буквой "s" и выводила на экран итоговый результат.

  4. Напишите программу, которая будет удалять пробелы из строки, а результат выводить на экран.

  5. Напишите программу, которая читает с клавиатуры строку текста и выводит ее на экране "задом на перед". 


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

Тема: Массивы. Объявление массивов. Ввод и вывод.

Цель: Сформировать практические навыки: реализация процессов обработки одномерных и двумерных массивов; построение однооконных интерфейсов с помощью визуального компонента «окно» (класс TForm) и визуальных компонентов панели инструментов Standard: «метка» (класс TLabel), «редактор» (класс TEdit), «кнопка» (класс TButton), (класс TStringGrid).

Массив – это структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя.

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

Описание и обработка массивов в Delphi осуществляются так же как и в Pascale , а вот ввод и вывод отличаются.

В Delphi для ввода данных используются компоненты StringGrid палитры Additional (Дополнительная) или Memo палитры Standart (Стандартная), а вывод осуществляется



  • или в поле диалогового окна (обращение к свойству Caption текстовой метки Label1.Caption или к свойству Lines многостраничного поля Memo1.Lines.Add(st)

  • или в окно сообщения ShowMessage.

При вводе-выводе удобно использовать инструкцию for. При этом переменная-счетчик инструкции for может быть использована в качестве индекса элемента массива. При вводе массива через таблицу (StringGrid), надо учитывать, что колонки и строки таблицы нумеруются с нуля.

Рассмотрим ввод-вывод массива на примере: вычисление среднего арифметического значения элементов массива.



Использование компонента StringGrid

Значок StringGrid находится на вкладке Additional (Дополнительная). Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки символов.

Ниже перечислены некоторые свойства компонента StringGrid:

RowCount, ColCount – число строк и столбцов, включая заголовок

Row,Col – текущие строка и столбец

ColWidths[], RowHeights[] – массивы ширины столбцов и высоты строк

Cells[столбец, строка] – данные ячейки таблицы (строковый тип)

FixedCols, FixedRows – число зафиксированных столбцов слева и строк сверху. Нумеруются с нуля, причем нулевые строка и столбец по умолчанию отведены для заголовков

Options – настройки таблицы со значениями True/False (.goEditing – допустимость редактирования, goRowSizing, goColSizing – можно ли пользователю менять размеры строк и столбцов)

DefaultColWidth, DefaultRowHeight – ширина и высота ячейки по умолчанию

GridLineWidth –ширина линий, ограничивающих ячейки

Options.AlwaysShowEditing – Признак нахождения компонента в режиме редактирования. Если значение свойства False, то для того, чтобы в ячейке появился курсор, надо начать набирать текст, нажать клавишуF2> или сделать щелчок мышью.

Options.goTabs – Разрешает (True) или запрещает (False) использование клавиши Tab> для перемещения курсора в следующую ячейку таблицы.

Добавляется компонент StringGrid в форму точно та же, как и другие компоненты. После добавления компонента к форме нужно выполнить его настройку:

ColCount=10

FixedCols=0

RowCount=1

DefaultRowHeight=24

DefaultColWidth=64

Options. GoEditing=true


1   2   3   4   5   6   7


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница