IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Упорядочение слов по алфавиту, Обработка текстовых строк
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Задание:
подсчитать общую длину всех слов, являющихся регулярными цепочками, в которых чередуются гласные и согласные буквы, и напечатать их в алфавитном порядке. Напечатать в перевернутом виде самое длинное слово, состоящее только из цифр и букв.

Сделал все, кроме печати регулярных цепочек в алфавитном порядке.
Подскажите, как это сделать.

З.Ы. Регулярная цепочка - слово, состоящее только больших английских букв.

:low:

Код
Program Lab;
Uses Crt;

type letters = set of 'A'..'Z';


const  gl : letters = ['E', 'Y', 'U', 'I', 'O', 'A'];
      sogl : letters = (['A'..'Z'] - ['E', 'Y', 'U', 'I', 'O', 'A']);
      alphabet = ['A'..'Z', 'a'..'z'];
      digits = ['0'..'9'];


var  maxslovo, st, slovo, s : string;
    ch : char;
    i, n, k, j, dlina, max : integer;

Function length1(s : string) : integer;
begin
  length1 := ord(s[0]);
end;

Function RegCep (s : string) : boolean;
var i : integer;
begin
  RegCep := true;
  For i := 1 to length(s) do
  if (ord(s[i]) < 65) or (ord(s[i]) > 90) then RegCep := false;
end;

Function Cheredovanie (s : string) : boolean;
var i : integer;
b1, b2 : boolean;
begin
  cheredovanie := true;
  if s[1] in gl then
     For i := 1 to length(s) do
       if i mod 2 = 1 then
          if not(s[i] in gl) then cheredovanie := false else else
             if not(s[i] in sogl) then cheredovanie := false;

  if s[1] in sogl then
     For i := 1 to length(s) do
       if i mod 2 = 1 then
          if not(s[i] in sogl) then cheredovanie := false else else
             if not(s[i] in gl) then cheredovanie := false;
end;

Function  BykvbI(s : string): boolean;
var i : integer;
begin
BykvbI := false;
For i := 1 to length(s) do
If s[i] in alphabet then BykvbI := true;
end;

Function  CbIfrbI(s : string): boolean;
var i : integer;
begin
CbIfrbI := false;
For i := 1 to length(s) do
If s[i] in digits then CbIfrbI := true;
end;


Procedure Perevorot (var s : string);
var buf : char;
     i : integer;
begin
  For i := 1 to length(s) div 2 do
  begin
       buf := s[i];
       s[i] := s[length(s) - i + 1];
       s[length(s) - i + 1] := buf;
  end;
  writeln('Camoe dlinnoe slovo - ',s);
end;

BEGIN
ClrScr;
max := 0;
Write('Vvedite stroky simvolov : ');
Readln(st);
st := st + ' ';
slovo := '';
dlina := 0;

For i := 1 to length(st) do
     if st[i] <> ' ' then slovo := slovo + st[i]
        else if length(slovo) <> 0 then
        begin
              If RegCep(slovo) and Cheredovanie(slovo) then
              begin
                 dlina := dlina + length(slovo);
              end;
        If length(slovo) > max then
        begin
           max := length(slovo);
           maxslovo := slovo;
        end;
        slovo := '';
end;
writeln;
writeln('Dlina = ', dlina);
writeln;
If (BykvbI(maxslovo) = true) and (CbIfrbI(maxslovo) = true) then
Perevorot(maxslovo)
else writeln('Takogo slova net :-(');
readln;
END.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


...
Никто не поможет? Плиз smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






FENIX
Посмотри, я подправил кое-что (Cheredovanie) и добавил то, что было нужно...

Program Lab;
Uses Crt;

type letters = set of 'A'..'Z';


const
  gl = ['E', 'Y', 'U', 'I', 'O', 'A'];
  sogl = (['A'..'Z'] - gl{['E', 'Y', 'U', 'I', 'O', 'A']});
  alphabet = ['A'..'Z', 'a'..'z'];
  digits = ['0'..'9'];

const
  sets: array[boolean] of letters = (gl, sogl);


var
  words: array[1 .. 50] of string;
  word_count: integer;
  T: string;

  maxslovo, st, slovo, s : string;
  ch : char;
  i, n, k, j, dlina, max : integer;

Function length1(s : string) : integer;
  begin
    length1 := ord(s[0]);
  end;

Function RegCep (s : string) : boolean;
  var i : integer;
  begin
    RegCep := true;
    For i := 1 to length(s) do
      if (ord(s[i]) < 65) or (ord(s[i]) > 90) then RegCep := false;
  end;

Function Cheredovanie (s : string) : boolean;
  var
    i : integer;
    is_glas, res: boolean;
  begin
    res := true;
    is_glas := (s[1] in gl);
    for i := 1 to length(s) do
      if odd(i) then
        res := res and (not (s[i] in sets[is_glas]))
      else
        res := res and (not (s[i] in sets[not is_glas]));
    cheredovanie := res
  end;

Function  BykvbI(s : string): boolean;
  var i : integer;
  begin
    BykvbI := false;
    For i := 1 to length(s) do
      If s[i] in alphabet then BykvbI := true;
  end;

Function  CbIfrbI(s : string): boolean;
  var i : integer;
  begin
    CbIfrbI := false;
    For i := 1 to length(s) do
      If s[i] in digits then CbIfrbI := true;
  end;


Procedure Perevorot (var s : string);
  var buf : char;
  i : integer;
  begin
    For i := 1 to length(s) div 2 do
      begin
        buf := s[i];
        s[i] := s[length(s) - i + 1];
        s[length(s) - i + 1] := buf;
      end;
    writeln('Camoe dlinnoe slovo - ',s);
  end;

BEGIN
  ClrScr;
  max := 0;
  Write('Vvedite stroky simvolov : ');
  Readln(st);

  st := st + ' ';
  slovo := '';
  dlina := 0; word_count := 0;

  For i := 1 to length(st) do
    if st[i] <> ' ' then slovo := slovo + st[i]
    else if length(slovo) <> 0 then
      begin
        If RegCep(slovo) and Cheredovanie(slovo) then
          begin
            dlina := dlina + length(slovo);
            inc(word_count); words[word_count] := slovo;
          end;
        If length(slovo) > max then
          begin
            max := length(slovo);
            maxslovo := slovo;
          end;
        slovo := '';
      end;
    writeln;
    writeln('Dlina = ', dlina);
    writeln;

    For i := 1 To word_count Do
       For j := word_count DownTo i+1 Do
         If words[j - 1] > words[j] Then
           Begin
             T := words[j - 1]; words[j - 1] := words[j]; words[j] := T
           End;

    writeln('words in ABC order:');
    for i := 1 to word_count do
      write(words[i], ' ');
    writeln;

    If (BykvbI(maxslovo) = true) and (CbIfrbI(maxslovo) = true) then
      Perevorot(maxslovo)
    else writeln('Takogo slova net :-(');
    readln;
END.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


2 volvo
Спасибо огромное smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.04.2025 14:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name