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 послідовно-