Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 семестр. Презентации по информатики (лекции). / лк13_Символьные данные / лк13_Обработка символьной информации в Объектном Паскале.ppt
Скачиваний:
23
Добавлен:
13.03.2016
Размер:
118.27 Кб
Скачать

Шаги обработки строки таблицы

выделение смысловых полей -подстрок (с помощью функции 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.

При обработке таблиц большого объема эта программа имеет, по крайней мере, два недостатка:

количество строк таблицы задается вводом (но ручной подсчет количества строк таблицы – это достаточно большой труд); ввод данных происходит с экрана, хотя, конечно, лучше хранить

данные в файле на внешнем носителе и осуществлять ввод из файла.

Эти недостатки можно устранить, используя тип файл.