Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / лаб5 / lab5_1

.pas
Скачиваний:
17
Добавлен:
07.06.2023
Размер:
3 Кб
Скачать
program lab5_1;
var
    a: array of string;
    n: string;
    i,j,f: integer;
    arr_size: integer = 0;
    an: integer = 1;
    temp_str: string = '';
    bad_symbs: array[1..5] of string = (' ', '.', '!', ',', '?');
begin
    Write('Введите Выражение: '); ReadLn(n);

    // определяем количество слов
    for i:=1 to Length(n) do
    begin
        if (i = 1) or (n[i] = ' ') then arr_size := arr_size + 1;
    end;

    // выделяем длину массива равную количеству слов
    setLength(a,arr_size);

    // разделяем введённую строку на отдельные слова, и добавляем их в массив
    for i:=1 to Length(n) do
    begin
        // в случае если мы находим пробел или конец выражения, то добавляем сгенерированное слово в массив
        if (n[i] = ' ') or (i = Length(n)) then 
        begin
            // в случае если мы находим конец строки, то добавляем последний символ к временной переменной строки
            if (i = Length(n)) then temp_str := temp_str + n[Length(n)];
            a[an] := temp_str;
            temp_str := '';
            an := an + 1;
        end
        // в других случаях, мы добавляем к временной переменной строки символ
        else 
        begin
            f := 0;
            for j:=1 to Length(bad_symbs) do
            begin
                if (n[i] <> bad_symbs[j]) then f := f + 1;
            end;
            if (f = Length(bad_symbs)) then temp_str := temp_str + n[i];
        end;
    end;

    // сортируем по возрастанию массив по длине каждого слова. переиспользуем переменную temp_str для экономии памяти
    for i:=1 to Length(a) do
    begin
        for j:=1 to Length(a)-1 do
        begin
            if (Length(a[j]) > Length(a[j+1])) then
            begin
                temp_str := a[j];
                a[j] := a[j+1];
                a[j+1] := temp_str;
            end;
        end;
    end;

    // длины слов делим на 2, потому что Length() возвращает длину строки в кирилице умноженную на 2
    WriteLn('Длина самого короткого слова: ', Length(a[1]) div 2);
    WriteLn('Длина самого длинного слова: ', Length(a[Length(a)]) div 2)
end.
Соседние файлы в папке лаб5