Есть задача, немогу решить. Буду очень благожарен если кто нить решит ее =)
Условия задачи - "В тексте содержатся слова на русском языке, разделенные между собою пробелом, запятой или точкой. Для записи слов используются как строчные, так и прописные буквы, считающиеся эквивалентными. Перенести в выходной файл слова, которые начинаются с гласной буквы, переставив при этом буквы каждого слова в обратном порядке. Слова в выходном файле должны быть разделены между собой одним пробелом."
Код:
Uses Crt,Printer;
Const
Nmax= 50; { макс.количество эл-тов в массиве строк St }
Enter = 13; { код клавиши Enter }
Escape = 27; { код клавиши Esc }
PressKey = 'Нажмите клавишу Enter';
Separs = ' .,'; { список разделителей }
Glasn = ‘уеыаоэяиюё’; {список гласных}
Type
String66 = string[66]; { тип строки текста }
StringAr = array[1..Nmax] of String66;
Var
i, { параметр цикла }
n, { кол-во строк в массиве St }
l,len, { длина строки }
k1,k2 { границы слова }
: byte;
Cond, { управляющая переменная }
IndPrinter : boolean; { индикатор использования принтера }
ch, { символ текста }
Reply : char; { символ ответа на запрос программы }
S,Sb { строка входного текста }
Sd : string66; { строка для записи в выходной файл }
St : StringAr; { массив строк текста }
FileText : text; { входной файл }
FileOut { выходной файл }
: file of String66;
{ ----------------------------------------------------------- }
Procedure WaitEnter;
{ Задержка выполнения программы, пока не будет нажата }
{ клавиша Enter }
Var ch : char;
Begin
Repeat
ch:=ReadKey;
Until ord(ch) = Enter;
End { WaitEnter };
{ ----------------------------------------------------------- }
Procedure ScreenText;
{ Вывод на экран массива строк St }
Var i : integer;
Begin
ClrScr;
Writeln(' В Х О Д Н О Й Т Е К С Т');
For i:=1 to n do
Writeln(St[i]);
End { ScreenText };
{ ----------------------------------------------------------- }
Procedure PrinterText;
{ Печать на принтере входного текста }
Var i : integer;
Begin
Writeln(Lst);
Writeln(Lst,' В Х О Д Н О Й Т Е К С Т');
For i:=1 to n do
Writeln(Lst,St[i]);
End { PrinterText };
{ ----------------------------------------------------------- }
Procedure ScreenOutFile;
{ Вывод на экран выходного файла }
Var S : string66;
Begin
Seek(FileOut,0);
Writeln(' В Ы Х О Д Н О Й Ф А Й Л');
While not eof(FileOut) do
Begin
Read(FileOut,Sb);
Writeln(Sb);
End;
End { ScreenOutFile };
{ ----------------------------------------------------------- }
Function SignBegin(S:string66; k:byte):byte;
{ Поиск начала слова начинающегося с гласной в строке S }
Var i : byte;
Begin
SignBegin:=0;
For i:=k to length(S) do
If Pos(S[i],Glasn)<>0 then
Begin
SignBegin:=i; Exit
End;
End { SignBegin };
{ ----------------------------------------------------------- }
Function SignEnd(S:string66; k:byte):byte;
{ Поиск конца слова в строке S }
Var i : byte;
Begin
SignEnd:=0;
For i:=k to length(S) do
If Pos(S[i],Separs)>0 then
Begin
SignEnd:=i; Exit
End;
End { SignEnd };
----------------------------------------------------------- }
Function Make(Sr:string66):string66;
{ Переставление букв в слове местами }
Var Ox : array[0..30] of char;
k : byte;
d : char;
Sm : string66;
Begin
For i:=1 to (length(Sr)div 2) do
D:=Ox[length(Sr)+1-i];
Ox[length(Sr)+1-i]:=Sr[i];
Sr[i]:=d;
Make:=Ox;
End { Make16 };
{ ----------------------------------------------------------- }
Begin
{ Установление соответствия между внутренним }
{ и внешним файлами }
ClrScr;
Assign(FileText,’InFile.txt’);
Assign(FileOut,'OutFile.dat');
{ Открытие используемых файлов }
Reset(FileText); Rewrite(FileOut);
{ Запрос об использовании принтера }
IndPrinter:=false;
Writeln('Будет использоваться принтер ? (Да,Нет)');
Reply:=ReadKey;
If Reply in ['Д’,'д','L','l'] then
IndPrinter:=true;
{ Ввод и печать исходных данных }
n:=0;
While not eof(FileText) do
Begin
Inc(n);
Readln(FileText,St[n]);
End;
ScreenText('Входной текст');
If IndPrinter then
PrinterText;
{ Поиск слов которые начинаются с гласной}
{Вот тут у меня проблемы... ничего неполучается. }