Оператори if і case мови Паскаль 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Оператори if і case мови Паскаль



Для програмування алгоритмів, що розгалужуються, в мові Pascal використовуються спеціальні змінні типу boolean, які можуть набувати тільки два значення - true і false (так, ні), а також оператори if і case. Оператора if перевіряє результат логічного виразу, або значення змінної типу boolean, і організовує розгалуження обчислень.

Наприклад, якщо bl|: boolean|, x,y,u:integer|, то фрагмент програми з|із| оператором if| може бути таким:

bl:=x>y|; if bl then u:=x-y; else u:=x-y;

Оператор вибору case організовує розгалуження залежно від значення деякої змінної перераховуваного типу.

Кнопки-перемикачі в Delphi|

При створенні|створінні| програм в Delphi| для організації розгалужень|розгалуджень| часто використовуються компоненти у вигляді кнопок-перемикачів. Стан|достаток| такої кнопки (включено - вимкнено) візуально відбивається на формі. На формі представлені|уявляти| кнопки-перемикачі двох типів (TCheckBox|, TRadioGroup|).

Компонент TCheckBox організовує кнопку незалежного перемикача, за допомогою якої користувач може вказати своє вирішення типу так/ні. У програмі стан кнопки пов'язаний із значенням булевої змінної, яка перевіряється за допомогою оператора if.

Компонент TRadiogroup організовує групу кнопок - залежних перемикачів. При натисненні однієї з кнопок групи решта всіх кнопок відключається. У програму передається номер включеної кнопки (0,1,2..), який аналізується за допомогою оператора case.

Питання для самоконтролю:

1. Яким чином реалізований вибір розгалуження алгоритму в мові Object Pascal?

2. Команда, в якій вибір здійснюється залежно від виконання умови та дозволяє вибрати один з двох можливих варіантів?

3. Якого типу повинна бути умов в команді розгалуження?

4. Які компоненти в Delphi часто використовують для організації розгалужень при створенні програм?

5. Який компонент організовує кнопку незалежного перемикача, за допомогою якої користувач може вказати вирішення типу так/ні?

6. Який компонент організовує групу кнопок - залежних перемикачів?

7. За допомогою якої властивості здійснюється перевірка стану кнопки CheckBox?

8. За допомогою яких команд в програмі може бути організований цикл?

9. Яка команда дозволяє змінити порядок виконання команд в програмі?

10. Яка властивість дозволяє змінити заголовок компоненти?


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

Тема: Розробка програм для обробки символів та рядків.

Мета роботи: вивчити правила роботи з компонентами TListBox і TСomboBox. Написати програму роботи з рядками.

Завдання

Написати програму підрахунку числа слів в довільному рядку. Як роздільник може бути будь-яке число пропусків. Для введення рядків і роботи з ними використовувати TComboBox. Введення рядка закінчувати натисненням клавіші Enter. Для виходу з програми використовувати кнопку Close.

ХІД РОБОТИ

1.Створити папку С:\Delphi\lab_6.

2. Завантажити середовище візуального програмування Delphi.

3.Створити форму, представлену|уявляти| на малюнку, і написати відповідну програму, скоректувавши текст написів Label|надписів| і положення|становище| компоненти TComboBox|. Крім того, розмістіть на формі кнопку для виходу з програми.

 

 

 

4. Створити процедури-обробники подій FormActivate,| ComboBox1KeyPress і ComboBox1Click, текст процедур приведений нижче.

 

// Обробка події активізації форми

procedure| TForm1|.FormActivate(Sender|: TObject|);

begin|

ComboBox1.SetFocus; // Передача фокусу ComboBox1

end|;

 

// Обробка події натиснення лівої клавіші миші

procedure| TForm1|.ComboBox1KeyPress(Sender|: TObject|; var| Кеу: Char|);

begin|

if| key=#13| then| begin| // Якщо натиснута|натискувати| клавіша Enter|, то...

ComboBox1|.Items.Add(ComboBox1|.Text); // Рядок з|із| вікна редагування заноситься у список вибору

ComboBox1|.Text:=''; // Очищення|очистка| вікна редагування

end |;

end|;

 

procedure| TForm1|.ComboBox1Click(Sender|: TObject|);

var| st|: string|;

n,i,nst,ind|: integer|;

begin|

n:=0|; // Містить|утримує| число слів

ind:=0|;

nst:=ComboBox1|.ItemIndex; // Визначення номера вибраного рядка

st:=ComboBox1|.Items[nst|]; // Занесення вибраного рядка в змінну st|

for| i:=1| to| Length|(st|) do| begin| // Перегляд|проглядати| всіх символів рядка st|

case| ind| of |

0: if| st|[i]<>|' ' then| begin| // Якщо зустрівся символ після|потім| пропуску|прогалини|

ind:=1|;

n:=n+1|; // Число слів збільшується на одиницю

end |;

1: if| st|[i]=' ' then| ind:=0|; // Якщо зустрівся пропуск|прогалина| після|потім| символів

end |;

end |;

Label3|.Caption:=IntToStr(n); // Виведення числа слів в Label3|

end |;

 

5. Запустити проект та перевірити правильність його виконання.

ТЕОРЕТИЧНІ ВІДОМОСТІ

Типи даних для роботи з|із| рядками

Короткі рядки типу|типа| ShortString| і String|[N]

Короткі рядки мають фіксовану кількість символів. Рядок ShortString| може містити|утримувати| 255 символів. Рядок String|[N] може містити|утримувати| N символів, але|та| не більше 255. Перший байт цих змінних містить|утримує| довжину рядка.

Довгий рядок типу|типа| String|

При роботі з|із| цим типом даних пам'ять виділяється в міру необхідності (динамічно) і може займати|позичати| всю доступну програмі пам'ять. Спочатку компілятор виділяє для змінної 4 байти, в яких розміщується номер елементу пам'яті, починаючи|розпочинати| з|із| якої розташовуватиметься символьний рядок. На етапі виконання програма визначає необхідну довжину ланцюжка символів і звертається|обертається| до ядра операційної системи з|із| вимогою виділити необхідну пам'ять.

Процедури і функції для роботи з|із| короткими і довгими рядками.

Для роботи з|із| рядками застосовуються наступні|такі| процедури і функції (у квадратних| дужках указуються|вказують| необов'язкові параметри).

 

Процедури і функції для роботи з рядками
Function Concat(S1 [, S2..., SN]: String): String; Повертає рядок, що є зчепленням рядків-параметрів S1, S2,.., SN
Function Copy(St: String; Index, Count: Integer): String; Копіює з рядка St Count символів, починаючи з символу з номером Index
Procedure Delete(St: String; Index, Count: Integers; Видаляє Count символів з рядка St починаючи з символу з номером Index
Procedure Insert(SubSt: String; St, Index: Integer); Вставляє підрядок SubSt в рядок St починаючи з символу з номером Index
Function Length(St: String): Integer; Повертає поточну довжину рядка St
Function Pos(SubSt, St: String): Integer;   Відшукує в рядку St перше входження підрядка SubSt і повертає номер позиції, з якою вона починається. Якщо підрядок не знайдений, повертається нуль
Procedure SetLength(St: String; NewLength: Integer);   Встановлює нову (меншу) довжину NewLength рядка St, якщо NewLength більше поточної довжини рядка, звернення до SetLength ігнорується
Підпрограми перетворення рядків в інші типи т
Function StrToCurr(St: String): Currency;   Перетворить символи рядка St в ціле число типу Currency. Рядок не повинен містити провідних або ведених пропусків
Function StrToDate(St: String): TDateTime;   Перетворить символи рядка St в дату. Рядок повинен містити два або три числа, розділених правильним для Windows роздільником дати (у русифікованій версії таким роздільником є «.») Перше число - день, друге – місяць, якщо вказано третє число, воно задає рік
Function StrToDateTime(St: String): TDateTime; Перетворить символи рядка St в дату і час. Рядок повинен містити дату і час, розділені пропуском
Function StrToFloat(St: String): Extended; Перетворить символи рядка St в дійсне число. Рядок не повинен містити провідних або ведених пропусків
Function StrToInt(St: String): Integer;   Перетворить символи рядка St в ціле число. Рядок не повинен містити провідних або ведених пропусків
Function StrToIntDef(St: String; Default: Integer): Integer; Перетворить символи рядка St в ціле число. Якщо рядок не містить правильного представлення цілого числа, повертається значення Default
Function StrToIntRange(St: String; Min, Max: Longint): Longint; Перетворить символи рядка St в ціле число і порушує виключення ERangeError, якщо число виходить із заданого діапазону Mm Max
Function StrToTime(St: String): TDateTime; Перетворить символи рядка St в час  
Procedure Val(St: String; var X; Code: Integer);   Перетворить рядок символів St у внутрішнє представлення цілої або речової змінної X, яке визначається типом цієї змінної. Параметр Code містить нуль, якщо перетворення пройшло успішно, і тоді в Х поміщається результат перетворення; інакше він містить номер позиції в рядку St, де виявлений помилковий символ, і в цьому випадку вміст X не міняється. У рядку St можуть бути провідні і (або) ведені пропуски
Підпрограми зворотного перетворення
Function DateToStr(Value: TDateTime): String; Перетворить дату з параметра Value в рядок символів  
Function DateTimeToStr(Value: TDateTime): String; Перетворить дату і час з параметра Value в рядок символів  
Procedure DateTimeToString (var St: String; Format: String; Value: TDataTime); Перетворить дату і час з параметра Value в рядок St  
Function FormatDateTime (Format: String; Value: TDateTime): String; Перетворить дату і час з параметра Value в рядок символів  
Function FloatToStr(Value: Extended): String; Перетворить речове значення Value в рядок символів  
Function FloatToStrF(Value: Extended; Format: TFloatFor-mat; Precision, Digits: Integer): String; Перетворить речове значення Value в рядок символів з урахуванням параметрів Precision і Digits (див. пояснення нижчий)
Function FormatFloat(Format: String; Value: Extended): String; Перетворить речове значення Value в рядок  
Function IntToStr(Value: Integer): String; Перетворить ціле значення Value в рядок символів  
Function TimeToStr(Value: TDateTime): String; Перетворить час з параметра Value в рядок символів
Procedure Str(X [:width [:Decimals]]; var St: String);   Перетворить число Х будь-якого речового або цілого типу в рядок символів St; параметри Width і Decimals, якщо вони присутні, задають формат перетворення: Width визначає загальну ширину поля, виділеного під відповідне символьне представлення дійсного або цілого числа X, а Decimals –количество символів в дробовій частині (цей параметр має сенс тільки у тому випадку, коли Х - дійсне число)

 

 

Правила використання параметрів функції FloatToStrF| показані нижче:

Значення Format Опис
fFfExponent   Наукова форма уявлення з множником еХХ («помножити на 10 в ступені XX»). Precision задає загальну кількість десяткових цифр мантиси. Digits - кількість цифр в десятковому порядку XX. Число округляється з урахуванням першої відкиданої цифри: 3.1416Е+00
ffFixed   Формат з фіксованим положенням роздільника цілої і дробової частин. Precision задає загальну кількість десяткових цифр в представленні числа. Digits - кількість цифр в дробовій частині. Число округляється з урахуванням першої відкиданої цифри: 3,14
ffGeneral   Універсальний формат, що використовує найбільш зручну для читання форму представлення дійсного числа. Відповідає формату ffFixed, якщо кількість цифр в цілій частині менше або рівне Precision, а само число - більше або рівне 0,00001, інакше відповідає формату ffExponent: 3,1416
ffNumber   Відрізняється від ffFixed використанням символу - роздільника тисяч при виведенні великих чисел (для русифікованої версії Windows таким роздільником є пропуск). Для Value = (* 1000 отримаємо 3 141,60
ffCurrency   Грошовий формат. Відповідає ffNumber, але в кінці рядка ставиться символ грошової одиниці (для русифікованої версії Windows - символи «р.»). Для Value = (*1000 отримаємо: 3 141,60р

 

Широкий рядок типу|типа| WideString|

Введена|запроваджувати| для забезпечення сумісності з|із| компонентами, заснованими на OLE-технології|. Від типу|типа| String| відрізняється тільки|лише| тим, що для представлення кожного символу використовується не один, а два байти.

Нуль-термінальний рядок типу|типа| PChar|

Є ланцюжком символів, обмеженим символом #0. Максимальна довжина рядка обмежена тільки доступній програмі пам'яттю. Нуль-термінальні рядка широко використовуються при зверненнях до API-функцій Windows (API – Application Program Interface – інтерфейс прикладних програм).



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 329; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.240.21 (0.021 с.)