3.9 Введення даних із діалогового вікна в середовищі Lazarus

Вікно введення – це стандартне діалогове вікно, яке з'являється на екрані в результаті виклику функції InputBox. Загалом

оператор введення даних із використанням цієї функції записують

• заголовок_вікна - рядок, що визначає назву вікна;

• підказка – текст пояснюючого повідомлення;

• значення – рядок, який буде знаходитись у полі введення при появі вікна на екрані;

• ім'я — змінна рядкового типу, якій буде надано

значення із поля введення;

Після виконання фрагменту програми var

S:=InputBox('ЗАГОЛОВОК ВІКНА', 'Підказка: введіть вихідні дані',

з'явиться вікно, що представлене на рис. 3.38. Користувач має можливість змінювати текст у полі введення. Клацніть по кнопці ОК приві-

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

Малюнок 3.38: Вікно введення

йде до того що, що у змінну, вказану зліва оператора присвоювання, буде занесено рядок, що у полі введення. В даному випадку в змінну S буде записано

рядок 'Це значення' .

Клацніть по кнопці Cancel закриє вікно введення.

Враховуючи, що функція InputBox повертає рядкове значення.

ня, при введенні числових даних застосовують функції перетворення

var S:string; gradus,radian:real; begin

'Введіть величину кута в радіанах','0,000'); gradus:=StrToFloat(S); radian:=gradus*pi/180;

MessageDlg('Величина кута в градусах' +FloatToStr(radian),MtInformation,[mbOk],0); end;

Можна застосовувати діалогове вікно під час вирішення завдань, які обробляють деякі числові послідовності . Розглянемо кілька таких завдань.

ЗАВДАННЯ 3.18. Надходить послідовність N речовинних чисел.Визначити максимальний елемент послідовності.

Вхідні дані: N - ціле число; Х – дійсне число, визна-

поділяє поточний елемент послідовності.

Вихідні дані : Max - дійсне число, елемент після-

ності з найбільшим значенням.

Проміжні змінні: i – параметр циклу, номер вводи-

мого елемента послідовності.

Алгоритм пошуку найбільшого елемента в наступній послідовності (рис. 3.39). У пам'яті комп'ютера відводиться осередок, наприклад з ім'ям Max , в якій зберігатиметься найбільший еле-

мент послідовності - максимум.

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

Вводимо кількість елементів послідовності та перший елемент послідовності. Припускаємо, перший елемент послідовності найбільший і записуємо їх у Max . Потім вводиться

другий елемент послідовності та порівнюється з передбачуваним максимумом. Якщо виявиться, що другий елемент більший, його записуємо в комірку Max. В проти-

ном випадку ніяких дій не робить. Потім переходимо до введення наступного елемента послідовності і алгоритм повторюється з початку. В результаті в комірці Max зберігатиметься еле-

мент послідовності з максимальним значенням 48 .

Розмістимо на формі об'єкт

Малюнок 3.39: Алгоритм типу напис Label1 і кнопку позову найбільшого числа в після- Button1 (рис. 3.40) .

Клацання по кнопці призведе до виконання наведеної далі

procedure Tform1.Button1Click( Sender: TObject);

var i,N:integer; max,X:real; S:string;

//Введення кількості елементів//послідовності. S:=InputBox('Введення',

48 Для пошукунайменшого елемента послідовності (мінімум) припускають, що перший елемент – найменший, записують його в комірку min, а потім серед елементів послідовності шукають число, значення якого буде менше, ніж гаданий мінімум.

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus 150

'Введіть кількість елементів у послідовності.','0');

//Введення першого елемента послідовності. S:=InputBox('Введення елементів

послідовності','Введіть число.','0'); X:=StrToFloat(S);

//Припустимо, що елемент максимальний. max: = X;

//Параметр циклу приймає стартове //значення i=2, т.к. перший елемент уже введено. for i:=2 to N do

//Введення наступних елементів послідовності. S:=InputBox('Введення елементів послідовності','Введіть число.','0'); X: = StrToInt (S);

//Якщо знайдеться елемент, що перевищує //максимум, записати його в комірку Max він передбачуваний максимум.

if X>max then max:=X; end;

// Висновок найбільшого елемента. MessageDlg('Значення найбільшого елемента - '+FloatToStr(max),MtInformation,[mbOk],0); end;

Результати роботи програми представлені на рис. 3.40 –3.42.

Рисунок 3.40: Друге вікно діалогу до завдання 3.18

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

Малюнок 3.41: Третє вікно діалогу до завдання 3.18

Рисунок 3.42: Результат роботи програми до завдання 3.18

ЗАВДАННЯ 3.19. Вводиться послідовність цілих чисел, 0 – кінець послідовності. Знайти найменше серед позитивних, якщо таких значень кілька 49 , визначити, скільки їх.

розв'язання задачі наведено на рис.3.43.

попередньорозміщеної на формі.

procedure TForm1.Button1Click(Sender: TObject); var

//Введення першого елемента послідовності. S:=InputBox('Введення елементів послідовно-

сти', 'введіть число. 0 - кінець послідовності','0');

49 Припустимо, вводиться послідовність чисел 11, 5, 12,5,7,10, 5,0. Найменшим позитивним числом є 5. Таких мінімумів у послідовності 3.

50 Алгоритм пошуку максимального (мінімального) елемента послідовності докладно описано у задачі 3.18.

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

Малюнок 3.43: Алгоритм пошуку мінімального по-

позитивного числа в послідовності

//Припустимо, що позитивних чисел //Ні - K = 0. У змінній K зберігатиметься

мінімумів серед позитивних чисел. k:=0;

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

//Поки введене число не дорівнює нулю, //виконувати тіло циклу.

while N<>0 do begin

//Чи є введене число позитивним? if N>0 then

//Якщо N>0 і K=0, надійшов елемент, припустимо, //що він мінімальний Min=N, відповідно //кількість мінімумів дорівнює 1.

якщо k=0 then begin

//Якщо елемент не перший, порівнюємо //його з передбачуваним мінімумом, якщо //елемент менше, записуємо його в Min. //Відповідно кількість //мінімум дорівнює 1.

else if N 0 then

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

//Якщо значення лічильника не дорівнює нулю, //виводимо значення мінімального елемента та //кількість таких елементів, MessageDlg('MIN = '+IntToStr(min)+

//вв іншому випадку повідомляємо, // що позитивних чисел немає.

MessageDlg('Позитивних чисел немає', MtInformation,[mbOk],0);

ЗАВДАННЯ 3.20. Визначити, скільки разів послідовність N довільних чисел змінює знак.

Щоб розв'язати задачу, потрібно попарно перемножувати елементи послідовності. Якщо результат добутку пари чисел – від'ємне число, отже, ці числа мають різні знаки.

Нехай k — кількість змін знака послідовності дорівнює 0. Нехай у змінній А зберігатиметься поточний елемент послідовності, а зміною У – попередній. Введемо N - кількість елементів послідовності. Організуємо цикл (змінна i змінюється від 1 до N). У циклі робитимемо наступне: вводимо черговий елемент послідовності ( A ), якщо це перший елемент послідовності ( i=1 ), то порівнювати його нема з чим, і просто переписуємо змінну A в змінну B ( B:=A ). Якщо це перший елемент послідовності ( i≠1 ), то перевіряємо знак твору A B (ті-

кущого та попереднього елементів послідовності). Якщо добуток , то лічильник k збільшуємо на 1 . Після чого не забуваємо в

змінну B записати A .

алгоритму наведено на рис.3.44.

Розмітимо на формі два об'єкти типу напис Label1 та Label2, об'єкт поле введення Edit1 та кнопку Button1 (рис.3.45). Текст під-

програми, яка буде виконана при зверненні до кнопки, наведе-

procedure TForm1.Button1Click(Sender: TObject); var

Алексєєв Є.Р., Чеснокова О.В., Кучер Т.В. Самовчитель з програмування на Free Pascal та Lazarus

Малюнок 3.44: Алгоритм задачі 3.20

S:=InputBox('Введення елементів послідовності', 'Введіть число. 0 – кінець послідовності','0');

for i:=1 to N do begin

S:=InputBox('Введення елементів послідовності', 'введіть число. 0 послідовно-