![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
dog |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Репутация: ![]() ![]() ![]() |
Во веденной строке слово нечетной длины, в котором больше всего гласных букв
Задача наполовину решена, на вторую половину никаких идей.
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.
Слово нечетной длины программа находит, а вот что дальше делать с поиском слова с наибольшим числом гласных букв, никаких идей |
amega |
![]()
Сообщение
#2
|
![]() ? ![]() ![]() ![]() Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Слово нечетной длины программа находит, а вот что дальше делать с поиском слова с наибольшим числом гласных букв, никаких идей береш делаеш множество из гласных букв, потом каждое слово по букве проверяеш, евляется ли буква в этом множестве или нет, если да то увеличиваеш счетчик... |
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Вот, смотри:
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 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
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.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 2:58 |