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



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

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

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

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

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

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

Представлення рядка у виді масиву символів: Рядок може бути описаний як масив символів. Якщо масив має нульову границю, він сумісний з типом PChar.

Var

MasS: array[1..100] of Char;

 

На відміну від нуль-термінального рядка тут довжина має фіксоване значення і не може змінюватися в процесі виконання програми.

 

Компонент TlistBox

 

Компонент TListBox являє собою список, елементи якого вибираються за допомогою клавіатури або миші. Список елементів задається властивістю Items, методи Add, Delete і Insert якого використовуються для додавання, видалення і вставки рядків. Об'єкт Items (TString) зберігає рядка, що знаходяться в списку. Для визначення номера виділеного елемента використовується властивість ItemIndex.

 

Компонент TСomboBox

Комбінований список TComboBox являє собою комбінацію списку TListBox і редактори TEdit, тому практично усі властивості запозичені у цих компонентів. Для роботи з вікном редагування використовується властивість Text як у TEdit, а для роботи зі списком вибору - властивість Items як у TListBox. Існує. П'ять модифікацій компонента, обумовлених його властивістю Style. У модифікації csSimple список завжди розкритий, в інших він розкривається після натискання кнопки праворуч від редактора.

Компонент TbitBtn

Компонент TBitBtn розташований на сторінці Additonal палітри компонентів і являє собою різновид стандартної кнопки TBotton. Його відмінна риса - наявність растрового зображення на поверхні кнопки, що визначається властивістю Clyph. Крім того, мається властивість Kind, що задає одну з 11 стандартних різновидів кнопок. Натискання будь-якої з них, крім bkCustom і bkHelp закриває модальне вікно і повертає в програму результат mr*** (наприклад bkOk - mrOk). Кнопка bkClose закриває головне вікно і завершує роботу npoграми.

Обробка подій

Про усіх подіях, що відбуваються, таких, як створення форми, натискання кнопки миші або клавіатури і т.д., ядро Windows інформує вікна шляхом посилки відповідних повідомлень. Середовище DELPHI дозволяє приймати й обробляти більшість таких повідомлень. Кожен компонент містить обробники повідомлень на сторінки Events інспектори об'єктів.

Для створення обробника події необхідно розкрити список компонентів у верхній частині вікна інспектора об'єктів і вибрати необхідний компонент. Потім, на сторінці Events, натисканням лівої клавіші миші вибрати обробник і двічі клацнути по його лівій (білої) частини. У відповідь DELPHI активізує вікно тексту програми і покаже заготовку процедури обробки обраної події.

Кожен компонент має свій набір обробників подій, однак деякі з них властиві більшості компонентів. Найбільше часто застосовувані події представлені в табл. 13.1.

Таблиця 13.1

Подія Опис події
OnActivate Форма одержує цю подію при активації
OnCreate Виникає при створенні форми (компонент TForm). В обробникі даної події варто задавати дії, що повинні відбуватися в момент створення форми, наприклад установка початкових значень
OnKey Press Виникає при натисканні кнопки на клавіатурі. Параметр Key має тип Char і містить ASCII-код натиснутою клавішею (клавіша Enter клавіатури має код #13, клавіша Esc - #27 і т.д.). Звичайно ця подія використовується в тому випадку, коли необхідна реакція на натискання однієї з клавіш
OnKeyDown Виникає при натисканні клавіші на клавіатурі. Обробник цієї події одержує інформацію про натиснуту клавішу і стан клавіш Shift, Alt і Ctrl, а також про натиснуту кнопку миші. Інформація про клавішу передається параметром Key, що має тип Word
OnKeyUp Є парною подією для OnKeyDown і виникає при відпусканні раніше натиснутої клавіші
OnClick Виникає при натисканні кнопки миші в області компонента
OnDblClick Виникає при подвійному натисканні кнопки миші в області компонента

 

Хід виконання роботи.

 

Завдання: написати програму підрахунку числа слів у довільному рядку. Як роздільник може бути будь-яка кількість пробілів. Для введення рядків і роботи з ними використовувати ТСоmbоВох. Уведення рядка закінчувати натисканням Enter. Для виходу з програми використовувати кнопку Close.

Панель діалогу буде мати вигляд (мал.13.1). Текст програми приведений нижче.

 
 

Unit Unit1;

Interface

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type

Tunit_Lab5 = class(TForm)

ComboBox1: TComboBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

Button1: TButton;

 

Procedure FormActivate(Sender: TObject);

Procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);

Procedure ComboBox1Click(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

 

var

Unit_Lab5: TUnit_Lab5;

 

Implementation

{$R *.DFM}

 

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

Procedure TUnit_Lab5.FormActivate(Sender: TObject);

begin

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

end;

 

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

Procedure TUnit_Lab5.ComboBox1KeyPress(Sender: TObject; var Key: Char);

begin

if Key =#13 then //Якщо натиснуто клавішу Enter те...

begin

// Рядок з вікна редагування заноситься в список вибору

ComboBox1.Items.Add(ComboBox1.Text);

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

end;

end;

 

Procedure TUnit_Lab5.ComboBox1Click(Sender: TObject);

var

St: string;

n, і, nst, ind: integer;

begin

n:= 0; //Містить число слів обраного рядка

//Містить кількість слів

ind:= 0;

//Визначення номера обраного рядка

nSt:= ComboBox1.ItemIndex;

//Занесення обраного рядка в перемінну st

St:= ComboBox1.Items[nst];

//Перегляд усіх символів рядка st

for i:= 1 to Length(St) do

begin

Case ind of

0: if St[і] <>'' then

begin

//Якщо зустрівся символ після пробілу

//кількістьслів збільшується на одиницю

ind:= 1;

n:= n+1;

end;

// Якщо зустрівся пробіл після символів

1: if St[i] ='' then ind:= 0;

end;

end;

 

Label3.Caption:= IntToStr(n); //Виведення кількості слів у Label3

end;

end.

Контрольні запитання:

8. Які типи рядкових змінних у Delphi Ви знаєте?

9. Вкажіть на особливості кожного типу рядкових змінних.

10. Що називають обробником подій у Delphi&

11. Який інструментарій використовують для створення коду обробника подій?

Варіанти завдання

 

В усіх завданнях вихідні дані вводити за допомогою компонента TEdit у компонент TListBox або за допомогою властивості Text у властивість Items компонента рядка закінчувати натисканням клавіші Enter. Для виходу з програми використовувати кнопку Close. Для розрахунків уводити кілька різних рядків.

1. Дано рядок, що складаєтьсяться з груп нулів і одиниць. Кожна група відокремлюється від інший одним або декількома пробілами. Знайти кількість груп з п'ятьма символами.

2. Дано рядок, що складаєтьсяться з груп нулів і одиниць. Знайти і вивести на екран саму коротку групу.

3. Дано рядок, що складаєтьсяться з груп нулів і одиниць. Підрахувати кількість символів у самій довгій групі.

4. Дано рядок, що складаєтьсяться з груп нулів і одиниць. Знайти і вивести на екран групи з парною кількістю символів.

5. Дано рядок, що складаєтьсяться з груп нулів і одиниць. Підрахувати кількість одиниць у групах з непарною кількістю символів.

6. Дано рядок, що складаєтьсяться з літер, цифр, ком, крапок, знаків “+”, “-“. Виділити підрядок, що відповідає запису цілого числа (тобто починається зі знака “+” або “-” і усередині підрядка немає літер, ком і крапок).

7. Дано рядок символів, що складається з літер, цифр, ком, крапок, знаків ”+" і "-". Виділити підрядок, що відповідає записи речовинного числа з фіксованою крапкою.

8. Дано рядок символів, що складається з літер, цифр, ком, крапок, знаків ”+”і "-''. Виділити підрядок, що відповідає запису дійсного числа з крапкою, що плаває.

9. Дано рядок символів, що складається з довільних десяткових цифр, розділених пробілами. Вивести на екран числа цього рядка в порядку зростання їхніх значень.

10. Дано рядок символів, що складається з довільних десяткових цифр, розділених пробілами. Вивести парні числа цього рядка.

11. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Вивести на екран слова цього тексту в порядку, що відповідає латинському алфавітові.

12. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Вивести на екран порядковий номер слова, що накриває k-ю позицію (якщо на k-ю позицію попадає пробіл, то номер попереднього слова).

13. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Розбити вихідний рядок на двох підрядка, причому перша довжиною k символів (якщо на k-ю позицію попадає слово, то його варто віднести до другого рядка, доповнивши першу пробілами до k позицій).

14. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Вивести на екран порядковий номер слова максимальної довжини і номер позиції рядка, з яким воно починається.

15. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Вивести на екран порядковий номер слова мінімальної довжини і кількість символів у цьому слові.

16. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. У кожнім слові замінити першу літеру на прописну.

17. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Видалити перших k слів з рядка, зрушивши на їхнє місце наступні слова рядка.

18. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Поміняти місцями i-і і j-і слова.

19. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Поміняти місцями першу й останню літери кожного слова.

20. Дано рядок символів, що складається з довільного тексту англійською мовою, слова розділені пробілами. Замінити літери латинського алфавіту на відповідні їм літери російського алфавіту.

21. Дано рядок символів S1 S2 …Sm у якійможуть зустрічатися цифри, пробіли, літера "Е" і знаки "+", "-". Відомо, що перший символ S1 є цифрою. З даного рядка виділити підрядки, розділені пробілами. Визначити, чи є перший підрядок числом. Якщо так, то з'ясувати: ціле або дійсне число, додатнє або відємне.

22. Дано рядок символів, що містить деякий текст російською мовою. Розробити програму форматування цього тексту, тобто його розбивки на окремі рядки (по k символів у кожнім рядку) і вирівнювання по правій границі шляхом вставки між окремими словами необхідної кількості пробілів.

23. Дано рядок символів, що містить деякий текст російською мовою. Замінити літери російського алфавіту на відповідні їм літери латинського алфавіту.

24. Дано рядок символів, що містить деякий текст. Розробити програму, що визначає, чи є даний текст паліндромом, тобто чи читається він ліворуч праворуч так само, як і праворуч ліворуч (наприклад, “А роза упала на лапу Азора”).

25. Скласти програму, що читає по рядках текст іншої програми (увести з клавіатури) мовою Pascal, виявляє коментарі і виводить них на екран.

26. Скласти програму, що читає по рядках текст іншої програми (увести з клавіатури) мовою Pascal, підраховує кількість ключових слів “begin” і “end” і виводить на екран відповідне повідомлення.

27. Скласти програму, що задане число від 1до 1999 виводить на екран римськими цифрами.

28. Дано текст із заголовних латинських літер. Визначити, чи є цей текст правильним записом римськими цифрами від 1 до 999, і, якщо є, вивести на екран це число арабськими цифрами в десятковій системі.

29. Дано текст із k символів. Вивести на екран тільки рядкові російські літери, що входять у цей текст.

30. Дано текст із k символів. Вивести на екран за абеткою всі різні прописні російські літери, що входять у цей текст.

 

 


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



Поделиться:


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

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