Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Pascal. Строки

60K
06 января 2011 года
C++oder
14 / / 04.10.2010
Здравствуйте.
Задача:
Для каждого слова заданного предложения указать долю согласных букв. Определить слово, в котором доля согласных максимальна.

Код:
uses crt;
const sogl:string='bcdfghjklmnpqrstwxz';
var s,cw,mw,msw:string;
    ls,i,j,nsogl,lcw:byte;
    mp,cp:real;
begin
     clrscr;
     writeln('Введите предложение:');
     readln(s);
     ls:=length(s);
     i:=1;
     mp:=0;
     while(i<=ls)do
     begin
          while(i<=ls)and not(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do inc(i);
          cw:='';
          while(i<=ls)and(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do
          begin
               cw:=cw+s;
               inc(i);
          end;
          nsogl:=0;
          lcw:=length(cw);
          for j:=1 to lcw do
              if(pos(cw[j],sogl)<>0)then inc(nsogl);
          cp:=nsogl/lcw;
          writeln(cw,' ',cp:0:2);
          if(cp>mp)then
          begin
               mp:=cp;
               mw:=cw;
          end;
          for j:=1 to lcw div 2 do
              if(cw[j]<>cw[lcw-j+1])then break;
     end;
     writeln('Слово с макс содержанием согласных: ',mw,' ',mp:0:2);
end.


Но если ввести, например, два слова с одинаковым количеством согласных, то максимальным показывается только одно из них. Как исправить, чтоб выходили все слова?
278
07 января 2011 года
Alexander92
1.1K / / 04.08.2008
Например, вот так:

Код:
uses crt;
const sogl:string='bcdfghjklmnpqrstwxz';
var s,cw:string;
    ls,i,j,k,nsogl,lcw:byte;
    cp:real;
    mw: array[1..10] of string;
    mp: array[1..10] of real;
    mwords_num: integer;
begin
     clrscr;
     writeln('Введите предложение:');
     readln(s);
     ls:=length(s);
     i:=1;
     mp:=0;
     while(i<=ls)do
     begin
          while(i<=ls)and not(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do inc(i);
          cw:='';
          while(i<=ls)and(((s>='A')and(s<='Z'))or((s>='a')and(s<='z')))do
          begin
               cw:=cw+s;
               inc(i);
          end;
          nsogl:=0;
          lcw:=length(cw);
          for j:=1 to lcw do
              if(pos(cw[j],sogl)<>0)then inc(nsogl);
          cp:=nsogl/lcw;
          writeln(cw,' ',cp:0:2);
          if(cp>mp[mword_num])then
          begin
             mwords_num := 1;
             for k := 1 to 10 do
             begin
               mw[k] := '';
               mp[k] := 0;
             end;
             mp[1]:=cp;
             mw[1]:=cw;
          end else if (cp = mp[mwords_num]) then
          begin
            inc(mwords_num);
            mp[mwords_num] := cp;
            mw[mwords_num] := cw;
          end;
          for j:=1 to lcw div 2 do
              if(cw[j]<>cw[lcw-j+1])then break;
     end;
     writeln('Слова с максимальным содержанием согласных:');
     for k := 1 to mwords_num do
       writeln(mw[k],' ',mp[k]:0:2);
end.


Не проверял, но, думаю, суть уловили.
60K
07 января 2011 года
C++oder
14 / / 04.10.2010
Всё работает. Спасибо большое! =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог