Дана строка чисел, содержащая пробелы. Количество пробелов может быть произвольным. Сформировать массив чисел
Запустите среду программирования 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]);