| ||||||||||||||||||||||||||
|
4. Программирование алгоритмов с использованием строк.Пример: Во введенной строке символов подсчитать общее количество символов "+", "-" и "*" в данной строке.program Simbol; uses CRT; var Str : string; I, M : integer; begin ClrScr; Write('Введите небольшой текст:'); ReadLn(Str); M := 0; for I := 1 to Length(Str) do if (Str[I] = '+') or (Str[I] = '-') or (Str[I] = '*') then M := M + 1; WriteLn('Общее количество символов +, -, * равно: ', M); repeat until KeyPressed; end. Пример: Проверить, является ли введенная совокупность символов именем месяца (на русском языке). program MonthDemo; const SelMonth : array[1 .. 12] of string[10] = ('ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ', 'ИЮЛЬ', 'АВГУСТ', 'СЕНТЯБРЬ', 'ОКТЯБРЬ', 'НОЯБРЬ', 'ДЕКАБРЬ'); Month : boolean = False; var Str : string[10]; i, j : integer; begin Write('Введите имя месяца заглавными символами: '); ReadLn(Str); for i := 1 to 12 do if Str = SelMonth[i] then begin Month := True; j := i; end; if Month then WriteLn('Введено имя месяца: ', SelMonth[j]) else WriteLn('Вы ввели не имя месяца!'); end. Пример: Во введенном тексте произвести замену части текста, состоящей из одного или нескольких символов на строку, содержащую один символ или группу символов. program Zamena1; uses CRT; var Stroka, Sim1, Sim2 : string; Result : string; i, LenSim, LenTxt, L : Byte; begin ClrScr; Write('Введите небольшой текст: '); ReadLn(Stroka); Write('Введите группу символов, которую заменяете: '); ReadLn(Sim1); Write('Введите замену: '); ReadLn(Sim2); LenTxt := Length(Stroka); LenSim := Length(Sim1); L := LenTxt - LenSim + 1; Result := ''; i := 1; while i <= LenTxt do if copy(Stroka, i, LenSim) <> Sim1 then begin Result := Result + copy(Stroka, i, 1); Inc(i); end else begin Result := Result + Sim2; i := i + LenSim; end; WriteLn('Текст после обработки: ', Result); repeat until KeyPressed; end. Текст программы, выполняющей те же действие, что и предыдущая, с использованием встроенных функций обработки символьных строк. program Zamena2; uses CRT; var S1, S2, S3 : string; P : byte; begin ClrScr; Write('Введите небольшой текст: '); ReadLn(S1); Write('Введите группу символов, которую заменяете: '); ReadLn(S2); Write('Введите замену: '); ReadLn(S3); repeat P := Pos(S2, S1); if P <> 0 then begin Delete(S1, P, Length(S2)); Insert(S3, S1, P); end else begin WriteLn('Вхождение в текст заменяемой группы'); WriteLn('символов не обнаружено') end; until P = 0; WriteLn('Текст после обработки: '); WriteLn(S1); repeat until KeyPressed; end. Пример: Программа, демонстрирующая ввод символьной строки с клавиатуры. Описана возможность использования клавиши BackSpace ("забой"). Вводимые символы отображаются на дисплее.
uses CRT; var myText : string; function GetString : string; (* Ввод символьной строки *) var S : string; Ch : Char; Done : boolean; begin S := ''; Write('Вводите текст: > '); Done := False; repeat Ch := ReadKey; case Ch of { Ввод символов с кодами #32 .. #255 } #32 .. #255 : begin S := S + Ch; Write(Ch); end; { Обработка нажатия клавиши BackSpase } #8 : begin if Length(S) > 0 then begin S := Copy(S, 1, Length(S) - 1); Write(#8); ClrEol; end; end; { Обработка нажатия клавиши Enter } #13 : begin GetString := S; Done := True; end; { Обработка нажатия функциональных клавиш } #0 : Ch := ReadKey; end; { case } until Done; WriteLn; end; Begin ClrScr; myText := GetString; WriteLn('Введенный текст: ', myText); repeat until KeyPressed; End. Пример: Программа, демонстрирующая работу простейшего текстового редактора. Редактор выполняет процедуры вставки и замены символов (Insert), перемещение курсора в конец и начало строки (End, Home), удаление символа, стоящего на позиции курсора (Delete), слева от курсора (BS). На начало работы - режим вставки символов. Переключение режимов: замена символов и вставка символов - клавиша Insert.
uses CRT; var s : string; function GetStr(nRow, nCol: byte; cStr: string; nLen: byte): string; const InsMode : boolean = true; var cKey : char; Done : boolean; iChar : byte; cSave : string; procedure NextChar( Var iChar : byte ); begin if iChar < nLen then Inc( iChar ) else Write( #7 ); end; { procedure NextChar } procedure PrevChar( Var iChar : byte ); begin if iChar > 1 then Dec( iChar ) else Write( #7 ); end; { procedure PrevChar } begin GoToXY( nCol - 1, nRow ); Write('>'); cSave := cStr; if Length( cStr ) > nLen then cStr := Copy( cStr, 1, nLen ) else while Length( cStr ) < nLen do cStr := cStr + ' '; Write( cStr + '<' ); iChar := 1; Done := false; repeat GoToXY( nCol + iChar - 1, nRow ); cKey := ReadKey; if cKey = #0 then begin cKey := ReadKey; case cKey of { Нажатие на клавишу "стрелка вправо" } #77 : NextChar( iChar ); { Нажатие на клавишу "стрелка влево" } #75 : PrevChar( iChar ); { Нажатие на клавишу Home } #71 : iChar := 1; { Нажатие на клавишу End } #79 : iChar := nLen; { Нажатие на клавишу Insert } #82 : InsMode := not InsMode; { Нажатие на клавишу Delete } #83 : begin cStr := Copy( cStr, 1, iChar - 1) + Copy(cStr, iChar + 1, nLen - iChar) + ' '; Write(Copy(cStr, iChar, nLen - iChar + 1)); end; end end else case cKey of { Нажатие на клавишу Enter } #13 : Done := true; { Нажатие на клавишу Esc } #27 : cStr := cSave; { Нажатие на клавишу BackSpace } #8 : begin if iChar > 1 then begin PrevChar(iChar); cStr := Copy( cStr, 1, iChar - 1) + Copy(cStr, iChar + 1, nLen - iChar); GoToXY(nCol, nRow); Write(cStr); end; end; else begin { Режим ВСТАВКА символов} if InsMode then begin cStr := Copy( cStr, 1, iChar - 1) + cKey + Copy(cStr, iChar, nLen - iChar); Write( Copy(cStr, iChar, nLen - iChar + 1) ); end else begin cStr[ iChar ] := cKey; Write( cKey ) end; NextChar( iChar ); end end; until Done; GetStr := cStr; end; { Function GetStr} Begin ClrScr; WriteLn('Введите небольшой текст. Конец ввода - Enter.'); Read(s); Write('Редактируйте текст. '); Write('Конец редактирования - Enter. '); WriteLn('Отказ от редактирования - Esc.'); s := GetStr( 6, 15, s, 50 ); WriteLn; WriteLn; Write('Отредактированный текст: '); WriteLn( s ); repeat until KeyPressed; End. Пример: Программа, с помощью которой происходит преобразование строчных букв в прописные. Внутреннее представление (в коде ASCII) прописных и строчных букв разное. Поэтому в информационных системах (базах данных) для представления символов используют только прописные буквы. Однако исходная информация может содержать строчные буквы. Преобразование строчных букв в прописные основано на том, что код строчной буквы больше кода прописной. Код прописных букв от "а" до "п" больше кода соответствующих строчных букв на 32, а для букв от "р" до "я" - на 80 (см. таблицу кодов ASCII). program ChangeChar; uses CRT; const MaxSizeStr = 80; { предельная длина строки } var buf : array[1..MaxSizeStr] of char; n : integer; { длина введенной строки } i : integer; Begin n := 0; Write('> '); repeat if not EOLN then { если не конец строки, то ... } begin n := n + 1; Read(buf[n]); end; until EOLN or (n = MaxSizeStr); { здесь прочитана строка и записана в массив buf ... } { ... теперь преобразуем строку к верхнему регистру ... } for i := 1 to n do begin case buf[i] of 'а'..'п' : buf[i] := chr(ord(buf[i]) - 32); 'р'..'я' : buf[i] := chr(ord(buf[i]) - 80); end; end; { вывод преобразованной строки } WriteLn; for i := 1 to n do WriteLn(buf[i]); ReadLn End. |
| ||||||||||||||||||||||||
| ||||||||||||||||||||||||||
© Copyright(c) 2004 Amro Group. All rights reserved |
|