3.9 Въвеждане на данни от диалогов прозорец в средата на Lazarus
Полето за въвеждане е стандартен диалогов прозорец, който се появява на екрана в резултат на извикване на функцията InputBox. Общо взето
изявление за въвеждане на данни с помощта на тази функция write
• window_title – низ, който определя заглавието на прозореца;
• съвет – текст на обяснително съобщение;
• стойност – низ, който ще бъде в полето за въвеждане, когато прозорецът се появи на екрана;
• name е променлива от низов тип, която ще бъде присвоена
стойност от полето за въвеждане;
След изпълнение на програмния фрагмент var
S:=InputBox('WINDOW TITLE', 'Hint: enter input',
прозорецът, показан на фиг. 3.38. Потребителят има възможност да променя текста в полето за въвеждане. Щракването върху бутона OK ще
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
Фигура 3.38: Прозорец за въвеждане
Това означава, че променливата, посочена вляво от оператора за присвояване, ще бъде попълнена с низа, който е в полето за въвеждане. В този случай ще бъде записана променливата S
низът 'Дадената стойност'.
Щракването върху бутона Отказ ще затвори прозореца за въвеждане.
Като се има предвид, че функцията InputBox връща стойност на низ
nie, при въвеждане на числови данни се използват функции за преобразуване
varS:низ; градус, радиан: реален; започвам
'Въведете стойността на ъгъла в радиани','0,000'); градус:=StrToFloat(S); радиан:=градус*pi/180;
MessageDlg('Стойност на ъгъла в градуси' +FloatToStr(radian),MtInformation,[mbOk],0); край;
Можете да използвате диалоговия прозорец, когато решавате задачи, които обработват определени числови поредици. Нека разгледаме някои от тези проблеми.
ЗАДАЧА 3.18. Влиза поредица от N реални числа.Определете най-големия елемент от редицата.
Входни данни: N - цяло число; X е реално число, дефинирано
разделя текущия елемент от последователността.
Изходни данни: Max е реално число, елемент от редицата
стойности с най-висока стойност.
Междинни променливи: i - параметър на цикъла, входен номер
моят последователен елемент.
Алгоритъмът за намиране на най-големия елемент в редица е следният (фиг. 3.39). В паметта на компютъра се заделя клетка, например с името Max, която ще съхранява най-големия елемент
последователност - максимум.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
Въведете броя на елементите на редицата и първия елемент на редицата. Приемаме, че първият елемент от редицата е най-големият и го записваме на Max. След това влезте
втория елемент от последователността и сравнен с очаквания максимум. Ако се окаже, че вторият елемент е по-голям, го записваме в клетката Max. срещу-
В противен случай не се предприемат действия. След това преминаваме към въвеждане на следващия елемент от последователността и алгоритъмът се повтаря отначало. В резултат клетката Max ще съхранява елемента
Стойността на редицата с най-голяма стойност е 48.
Поставете обект върху формуляра
Фигура 3.39: Алгоритъм за етикета на типа Label1 и бутона за търсене на най-голямото число след Button1 (Фигура 3.40).
Щракването върху бутона ще изпълни следното
процедура Tform1.Button1Click( Подател: TObject);
var i,N:цяло число; max,X:реално; S: низ;
//Въведете броя на елементите //от последователността. S:=InputBox('Вход',
48 Да търсишнай-малкият елемент от редицата ( минимум ) приемете, че първият елемент е най-малкият, запишете го в клетката min и след това потърсете число сред елементите на редицата, чиято стойност ще бъде по-малка от очаквания минимум.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus 150
'Въведете броя на елементите в поредицата.','0');
//Въведете първия елемент от последователността. S:=InputBox('Полета за въвеждане
последователности','Въведете число.','0'); X:=StrToFloat(S);
//Приемете, че елементът е макс. max:=X;
//Параметърът на цикъла приема първоначалната //стойност i=2, защото първият елемент вече е въведен. за i:=2 до N направи
//Въвеждане на следващите елементи от последователността. S:=InputBox('Въвеждане на елементи от последователност','Въведете число.','0'); X:=StrToInt(S);
//Ако има елемент, който надвишава //максималния, запишете го в клетката Max, това е предполагаемият максимум.
if X>max then max:=X; край;
//Изведете най-големия елемент. MessageDlg('Стойността на най-големия елемент е ' +FloatToStr(max),MtInformation,[mbOk],0); край;
Резултатите от програмата са показани на фиг. 3,40 -3,42.
Фигура 3.40: Втори диалогов прозорец за задача 3.18
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
Фигура 3.41: Трети диалогов прозорец за задача 3.18
Фигура 3.42: Резултатът от програмата за задача 3.18
ЗАДАЧА 3.19. Въведена е поредица от цели числа, 0 е краят на поредицата. Намерете най-малкото число сред положителните, ако има няколко такива стойности 49, определете колко са.
решението на проблема е показано на фигура 3.43.
преди товапоставени върху формуляра.
процедура TForm1.Button1Click(Подател: TObject); вар
//Въведете първия елемент от последователността. S:=InputBox('Въвеждане на елементи последователно
sti', 'въведете номер. 0 – край на последователността','0');
49 Да предположим, че сте въвели редица от числа 11, 5, 12,5,7,10, 5, 0. Най-малкото положително число е 5. Има 3 такива минимума в редицата.
50 Алгоритъмът за намиране на максималния (минималния) елемент на редица е описан подробно в задача 3.18.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
Фигура 3.43: Алгоритъм за намиране на минимума
положително число в последователност
//Да приемем, че //няма положителни числа – K=0. Променливата K ще се съхранява
минимуми сред положителните числа. k:=0;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
//Докато въведеното число не е равно на нула, //изпълнете тялото на цикъла.
докато N0 започват
//Въведеното число положително ли е? ако N>0 тогава
//Ако N>0 и K=0, даден елемент е пристигнал, да предположим, //че това е минималният Min=N, съответно //броят на минимумите е 1.
ако k=0 тогава стартирайте
//Ако елементът не е първият, // сравняваме го с предполагаемия минимум, ако // елементът е по-малък от, записваме го в Min. //Съответно, броят //на минимумите е равен на 1.
иначе, ако N 0 тогава
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
//Ако стойността на брояча не е равна на нула, //показва стойността на минималния елемент и //броя на тези елементи, MessageDlg('MIN = '+IntToStr(min)+
//Вв противен случай съобщаваме, че //няма положителни числа.
MessageDlg('Няма положителни числа', MtInformation,[mbOk],0);
ЗАДАЧА 3.20. Определете колко пъти последователност от N произволни числа променя знака.
За да решите задачата, трябва да умножите елементите на редицата по двойки. Ако резултатът от произведението на двойка числа е отрицателно число, тогава тези числа имат различни знаци.
Нека k е броят на промените на знака на последователността, равен на 0. Нека променлива A съхранява текущия елемент от последователността, а променлива B съхранява предишния. Нека въведем 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). Текст под-
програмата, която ще се изпълни при натискане на бутона,
процедура TForm1.Button1Click(Подател: TObject); вар
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Безплатен урок по програмиране на Pascal и Lazarus
Фигура 3.44: Алгоритъм за задача 3.20
S:=InputBox('Въведете елементи от редицата', 'Въведете число. 0 е краят на редицата','0');
за i:=1 до N направете начало
S:=InputBox('Въведете елементи на последователността', 'Въведете число. 0 в последователност-