- •Обработка символьной информации в Объектном Паскале
- •КЛАССИФИКАЦИЯ ДАННЫХ ПО ТИПУ
- •СИМВОЛЬНЫЕ ДАННЫЕ
- •ПРЕДСТАВЛЕНИЕ СИМВОЛЬНЫХ ДАННЫХ В ПАМЯТИ ЭВМ
- •ASCII
- •ПРЕДСТАВЛЕНИЕ СИМВОЛЬНЫХ ДАННЫХ В ПАМЯТИ ЭВМ
- •Объявление символьных переменных в Объектном Паскале
- •Символьный тип - порядковый
- •Функция UPCASE
- •Символьная константа
- •Массивы символов
- •ПРЕДСТАВЛЕНИЕ СИМВОЛЬНЫХ ДАННЫХ В ПАМЯТИ ЭВМ
- •Тип String Турбо Паскаля (ShortString Объектного Паскаля)
- •Строковые типы Объектного Паскаля
- •Пример 1. Вычислить количество слов в строке.
- •начало
- •Пример 2. Удалить из текста все заглавные латинские буквы.
- •Функции, работающие со строками
- •Процедуры, работающие со строками
- •Задача обработки данных сложной структуры, представленных в виде таблицы
- •Шаги обработки строки таблицы
- •Определить самый дорогой конструктор для детей в возрасте до семи лет и его
- •BEGIN
- •При обработке таблиц большого объема эта программа имеет, по крайней мере, два недостатка:
Шаги обработки строки таблицы
•выделение смысловых полей -подстрок (с помощью функции COPY);
•преобразование некоторых полей из символьного представления в числовое (с помощью процедуры VAL);
•анализ символьных полей с помощью функции POS;
•подготовка строки выходных данных с помощью STR и CONCAT.
Определить самый дорогой конструктор для детей в возрасте до семи лет и его стоимость.
Program Primer3_1_3;
VAR N:Integer;{число строк таблицы} TABL:String[60];{строка таблицы–содержимое столбцов +5 разделителей}
nu:String[2]; {подстрока-номер игрушки} name:String[29]; {подстрока-название игрушки} MinAge,MaxAge,Rub:String[8]; {подстроки: мин. и макс. возраст,цена}
max:Real; {максимальная стоимость конструктора} MaxAR,RubR:Real;{макс.возраст и стоимость в веществен. представлении}
namemax:String[29];{название конструктора с максимальной ценой}
i {счетчик игрушек},
C {номер ошибочного символа при преобразовании строки в число} :Integer;
BEGIN
Writeln(' Введите число наименований игpушек'); ReadLn(N);
max:=0;
Writeln('Вводите сведения об игpушках в виде таблицы'); Writeln( '┌─┬─────────────┬─────┬─────┬────┐');
Writeln( |
|
|
|
'|N |
| название игpушки |
| миним. | макс. | стои- |
|'); |
Writeln( |
|
|
|
'| |
| |
| возpаст |возpаст |мость |
|’); |
Writeln( |
|
|
'├─┼─────────────┼─────┼─────┼────┤');
For i:=1 to N Do |
|
BEGIN |
|
Readln(TABL); |
|
name:=Copy(TABL,5,29); |
{выделение подстрок названия} |
MaxAge:=Copy(TABL,44,8); |
{и максимального возраста} |
Val(MaxAge,MaxAR,C); {преобразование строка - число } If C<>0 Then
Writeln(' ошибка в',C,'-й позиции MaxAge')
Else |
|
|
Begin |
|
|
If ((Pos('констpуктоp',name)>0) or |
{входит ли в название} |
|
(Pos('Констpуктоp',name)>0)) and |
{слово "конструктор"} |
|
(MaxAR<=7) Then |
|
|
Begin |
|
|
Rub:=Copy(Tabl,53,8); {выделение подстроки цены} |
||
Val(Rub,RubR,C); |
{преобразование строка-число} |
If C<>0 Then
Writeln(' ошибка в',C,'-й позиции Rub') Else
Begin
If RubR>max Then {определение текущего значения} BEGIN {максимальной цены}
max:=RubR;
namemax:=name{запомнили конмтруктор с макс. ценой} END;
End
End
End
END;
If max=0 Then
WriteLn(' Констpуктоpов для детей до семи лет нет') Else
BEGIN
WriteLn('Cамый доpогой констpуктоp для детей до семи лет'); STR(max:6:2,Rub);{перевод max в строку} WriteLn(CONCAT(namemax, ' стоит ',Rub, ‘ рублей’);
END;
END.
При обработке таблиц большого объема эта программа имеет, по крайней мере, два недостатка:
количество строк таблицы задается вводом (но ручной подсчет количества строк таблицы – это достаточно большой труд); ввод данных происходит с экрана, хотя, конечно, лучше хранить
данные в файле на внешнем носителе и осуществлять ввод из файла.
Эти недостатки можно устранить, используя тип файл.