trains_hr.gif
 


В ПОМОЩЬ СТУДЕНТУ И ШКОЛЬНИКУ

 


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]    [ДАЛЕЕ]

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 ("забой"). Вводимые символы отображаются на дисплее.
  • myText - переменная для хранения результата;
  • S - переменная, хранящая вводимый текст;
  • Done - флаг окончания работы (True);
program GetText;
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.
  • s - вводимая строка текста;
  • nRow - номер строки, где находится курсор;
  • nCol - номер позиции курсора, откуда выводится текст;
  • cStr - переменная для хранения всех текущих изменений текста;
  • nLen - максимальная длина редактируемой строки;
  • InsMode - включение режима ЗАМЕНА/ВСТАВКА символов;
  • cKey - инициализация редактируемого символа;
  • Done - флаг окончания работы (True);
  • cSave - переменная для хранения начального значения введенного текста;
  • iChar - указатель позиции курсора в строке.
program DemoEdit;
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.

[НАЗАД]    [ДАЛЕЕ]


Главная
Новости
TurboPascal
Учебное пособие
Лекции
Исходники
Математика
Книги
Лекции
Шпоры
ЦТ и ЕГЭ
Физика

Книги

Шпоры
ЦТ и ЕГЭ

Литература

Сочинения

Краткие содержания

Другое
Мой родной край
Фотогалерея
Форум
Ссылки

Гостевая






 

                                        © Copyright(c) 2004 Amro Group. All rights reserved

 

Hosted by uCoz