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

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

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

 
 Ответить  Открыть новую тему 
> Задача на строки, Задача на строки
dog
сообщение 4.02.2010 19:10
Сообщение #1


Новичок
*

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

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


Во веденной строке слово нечетной длины, в котором больше всего гласных букв

Задача наполовину решена, на вторую половину никаких идей.


PROGRAM PRP4;
var a, temp:string;
i:integer;
BEGIN
     WRITELN('Введите текст');
     READLN(a);
     a:=' '+a;
     for i:= length(a) downto 1 do
     begin
         if a[i]<>' ' then temp:=temp+a[i]
         else begin
             if length(temp) mod 2<>0 then WRITELN(temp); {распечатка temp для примера т. к. temp слово нечетной длины}
             temp:='';
         end;
     end;
END.



Слово нечетной длины программа находит, а вот что дальше делать с поиском слова с наибольшим числом гласных букв, никаких идей
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
amega
сообщение 4.02.2010 21:03
Сообщение #2


?
***

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

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


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

береш делаеш множество из гласных букв, потом каждое слово по букве проверяеш, евляется ли буква в этом множестве или нет, если да то увеличиваеш счетчик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 4.02.2010 22:30
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

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


Вот, смотри:

const
   limits = [#0..#32,'.',',',':',';','!','?','"'];
   letters = ['a','e','i','o','u','y','A','E','I','O','U','Y']; //будет работать только с латинской
// строкой. Если надо с кириллической тоже, добавь в это множество русские гласные буквы.

var
   s,buf,res : string;
   i,ii,back,n,sc1,sc2:byte;

begin
  i := 1;n:= 0;
  sc1:=0;sc2:=0;
  writeln('Vvedite stroku');
  readln(s);
  while(i<=length(s)) do begin
     while(i<=length(s)) and (s[i] in limits) do inc(i);
      if i<=length(s) then begin
        back := i;
        while(i<=length(s)) and not(s[i] in limits) do inc(i);
        inc(n);
        if length(copy(s, back, i-back)) mod 2<>0 then begin
          buf:=copy(s, back, i-back);
          sc1:=0;
          for ii:=1 to length(buf) do if (buf[ii] in letters) then inc(sc1);
          if sc1>sc2 then begin
            sc2:=sc1;
            res:=buf;
          end;
        end;
     end;
  end;
  writeln(res);
  readln;
end.



Хорошее разбиение на слова есть в FaQ форума.

Сегодня узнал, что около 10 процентов учащихся бюджетных мест в ВУЗах России не сдали первую сессию и были отчислены... А вместе с коммерческими - около 25%. Мрак.


Сообщение отредактировано: Unconnected - 4.02.2010 22:33


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 5.02.2010 6:34
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Unconnected, зачем же столько циклов? Вполне можно обойтись одним..
Количество строковых переменных тоже великовато..
И еще: лучше работать с множеством букв, а не разделителей.
При такой входной строке:
sss
- у тебя ответ неверный (верный: sss - в нем 0 гласных, и это максимум).
И в случае
ss
- ты ничего не должен напечатать, а ты печатаешь пустую строку.
Ну и последнее: делать множество гласных и называть его "буквы" - очень misleading..

Я б сделал типо так..
const
  Letter=['A'..'Z']+['0'..'9'];
  Vowel=['A','E','I','O','U','Y'];

var
  s: string;
  i,j,n,l,v,m: integer;

begin
  Write('Type in a line: ');
  ReadLn(s);
  j:=1;     {начало слова}
  v:=0;    {кол-во гласных}
  m:=-1;  {максимум гласных}
  for i:=1 to Length(s)+1 do if (i>Length(s)) or not (UpCase(s[i]) in Letter) then begin
    if Odd(i-j) and (v>m) then begin
      n:=j;
      l:=i-j;
      m:=v
    end;
    j:=i+1;
    v:=0
  end
  else if UpCase(s[i]) in Vowel then Inc(v);
  if m>-1 then WriteLn(Copy(s,n,l));
  ReadLn
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

- Текстовая версия 24.07.2025 2:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"