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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 22:18   #1
yaroslav_bondarev
 
Регистрация: 28.11.2011
Сообщений: 9
Восклицание Задача на строковый тип данных

Дана строка, содержащая русский текст. Вывести в порядке, обратном к алфавитному, слова текста, содержащие не менее 3-х гласных, в остальных словах удалить гласные и продублировать согласные буквы.

Слабо понимаю в строковых типах данных, написал что смог. Помогите написать правильно программу, а то у меня вышел бред какой-то

Код:
program Variant3;
const smax=30;
      alf1='АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЫЬЭЮЯ';
      alf2='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
      glas='аеёиоуыэюя';
      sogl='бвгджзйклмнпрстфхцчшщъь'
type mass=array[1..smax] of string;
var                      t,t1:text;
                          s:string;
                          a,b:mass;
                     i,j,k:integer;

{функция удаления гласных}
function GlasnieD( s:string):string;
                      var i:integer;
begin
  i:=1;
  while i<=length(s) do
   begin
     if (pos(ansilowercase(s[i]),glas)>0) then delete(s,i,1)
     else i:=i+1;
   end;
  GlasnieD:=s;
end;

{функция удаления согласных}
function dddd(s:string):string;
var s1:string;
i,j:integer;
begin
s1:='';
for i:=1 to length(s) do
if pos(s[i],sogl)>0 then s1:=s1+s[i]+s[i];
else s1:=s1+s[i]+s[i];
dddd:=s1;
end;


procedure Slova(s:string;var a,b:mass; var j,k:integer);
var                                       s,q,w: string;
                                              i:integer;
begin
  q:=s+' ';
  w:='';
  j:=1;
  k:=1;
  for i:=1 to length(q) do
    if (pos(q[i],alf1)>0) or (pos(q[i],alf2)>0) then w:=w+q[i]
      else
    begin
      if w<>'' then begin
        if (KolGlas(s)>=3) then
          begin
            a[j]:=w;
            inc(j);
          end
       else
         begin
            b[k]:=glasnied(w);
            b[k]:=dddd(w);
            inc(k);
          end;
        w:='';
     end;
    end;
end;

procedure Sortirovka(var a : mass; j : integer);
var                                 i,g:integer;
                                s1,s2,s3:string;
begin
  for i:=1 to j-1 do
      for g:=i+1 to j do
        begin
          s1:=ansilowercase(copy(a[i],1,1));
          s2:=ansilowercase(copy(a[g],1,1));
          if pos(s1,alf2)<pos(s2,alf2) then
            begin
              s3:=a[i];
              a[i]:=a[g];
              a[g]:=s3;
            end;
        end;
end;

begin
  reset(t,'rus.txt');
  rewrite(t1,'output.txt');
  readln(t,s);
  slova(s,a,b,j,k);
  writeln(t1,'A:');
  for i:=1 to j do writeln(t1,a[i]);
  writeln(t1,'B:');
  for i:=1 to k do writeln(t1,b[i]);
  close(t);
  close(t1);
end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.12.2011 в 10:31.
yaroslav_bondarev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строковый тип данных Ehha1234 Паскаль, Turbo Pascal, PascalABC.NET 0 08.06.2010 10:43
Строковый тип данных Skip72rus Паскаль, Turbo Pascal, PascalABC.NET 0 28.04.2010 12:48
Задача на строковый тип dante92 Помощь студентам 2 26.12.2009 20:12
Строковый тип данных Mihael-Vlz Паскаль, Turbo Pascal, PascalABC.NET 7 23.04.2009 17:01
Строковый тип данных. Paul Oakenfold Паскаль, Turbo Pascal, PascalABC.NET 2 11.04.2009 21:05