Обработка строки чисел (динамический массив)

           <- Назад                  Вперед ->


Дана строка чисел, содержащая пробелы. Количество пробелов может быть произвольным. Сформировать массив чисел

Запустите среду программирования Lazarus (Приложения – Программирование – Lazarus).

Создайте новый проект и сохраните его в новой папке Обработка строк - Проект — Сохранить проект как...)

1. Создайте форму и разместите на ней компоненты Edit1, Edit2, Label1, Label2, Button1, Button2.


2. Измените значения свойства Caption для Form1, Label1, Labe2, Button1, Button2. Удалите текст из Edit1 и Edit2, изменив свойство Text.

3. Создайте процедуру сброса данных для кнопки Button2 – OnClick:

N:=0; Edit1.Text:=''; Edit2.Text:='';


4. Добавьте кнопку выхода из программы, процедура OnClick которой состоит из одной команды Close;

5. В разделе описания переменных опишите переменные целого типа N и i, где N – размер массива, i – порядковый номер элемента массива., а также М – массив целых чисел.

var Form1: TForm1;

N,i:integer;

M:array of integer; {Описание динамического массива}

6. Реализуем запрет ввода любых символов в окно Edit1. Для этого выберите в окне Инспектора объектов Edit1 - События - OnKeyPress.


Вставьте в тело процедуры следующий оператор:

Key:=#0;

7. Для Edit2 вызовите событие OnKeyPress и запретите ввод символов, не являющихся цифрами, минус и пробел разрешаюися

if not(Key in['-',' ','0'..'9'])then Key:=#0;

8. Создайте программный код события OnClick для кнопки Button1, учитывая, что нажатие на кнопку Button1 означает конец ввода с клавиатуры, количество введенных чисел должно быть присвоено N и выведено в поле Edit1.

{если строка Edit2 пуста, предложите исправить ситуацию}

...

{если первый символ является цифрой или знаком минус, считаем число первым}

if Edit2.Text[1]in['-','0'..'9']then N:=1 else N:=0;

{цикл ПОКА для анализа каждого символа, начиная со второго и до конца строки}

...

{если за пробелом следует число, увеличиваем количество чисел на 1}

if(Edit2.Text[i-1]=' ')and(Edit2.Text[i]in['-','0'..'9'])then inc(N);

{увеличиваем в цикле на 1 номер символа}

...

{конец цикла, выводим количество символов в поле Edit1}

...

{Задать массиву М длину N}

SetLength(M,N);

{Организуем второй проход по строке для формирования массива чисел. Для этого обнуляем значение дополнительной строковой переменной, счетчик символов в строке и счетчик элементов в массиве присваиваем 1}

...

while i<=length(Edit2.Text) do

{Eсли пробел, то следующий шаг}

if(Edit2.Text[i]=' ')then inc(i)

{Иначе считываем посимвольно число в дополнительную строковую переменную}

...

repeat

s:=s+Edit2.Text[i];inc(i);

until (Edit2.Text[i]=' ')or(Edit2.Text[i]='');

{Переводим в целое число и сохраняем в массиве}

M[k]:= StrToInt(s);

{Обнуляем переменную и увеличиваем номер элемента массива на 1}

s:=''; inc(k); edit1.Text:=inttostr(N); Edit2.Text:='';

{Вывод массива с одним пробелом между числами}

for i:=1 to N do Edit2.Text:=Edit2.Text+' '+IntToStr(M[i]);

Практические задания к урокам в Lazarus                                          <- Назад                  Вперед ->

Яндекс.Метрика

©   2012 - 2024