Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2009, 20:41   #1
Dmitri91
Новичок
Джуниор
 
Регистрация: 18.10.2009
Сообщений: 1
По умолчанию Обработка массивов символов.

Есть задача, немогу решить. Буду очень благожарен если кто нить решит ее =)
Условия задачи - "В тексте содержатся слова на русском языке, разделенные между собою пробелом, запятой или точкой. Для записи слов используются как строчные, так и прописные буквы, считающиеся эквивалентными. Перенести в выходной файл слова, которые начинаются с гласной буквы, переставив при этом буквы каждого слова в обратном порядке. Слова в выходном файле должны быть разделены между собой одним пробелом."

Код:
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;

{ Поиск слов которые начинаются с гласной}
 {Вот тут у меня проблемы... ничего неполучается. }
Dmitri91 вне форума Ответить с цитированием
Старый 19.10.2009, 09:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Скажем так, реализацию отсева слов из текста, и переворачивание их можно реализовать вот так:
Код:
  var e,s:string;i:integer;
begin
 s:='В тексте содержатся слова на русском языке, разделенные между собою пробелом, запятой или точкой.';
 s:=' '+s;
 e:='';
 i:=1; while i<length(s) do begin
  if (s[i] in ['е','у','ы','а','о','я','и','ю','э'])and(s[i-1] in [' ',',','.']) then begin
   while (i<length(s))and(s[i]<>' ') do begin
    e:=s[i]+e;inc(i);
   end;
   write(e,' ');e:=''; {это типа писание слова в файл}
  end;
  inc(i);
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Смысл ясен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка массивов данных ALEX_АНДр Помощь студентам 6 06.04.2009 18:59
обработка одномерных массивов felmor Помощь студентам 16 05.02.2009 19:22
Обработка массивов. C++ for DOS. slog Помощь студентам 0 09.12.2008 17:34