Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Вывести слово с наименьшим количеством гласных, Ввёл (Да и Ода) комп вывел да 
V
    Опции темы
Гектор
  Дата 7.5.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 5.5.2008

Репутация: -1
Всего: нет



Получить слово с наименьшим колич. гласных букв ( Пример вводишь "Свободу попугаям" выводит свободу)

Если можно текст проги накидайте не пойму за что ухватиться новичёк в Delphi!!.
Заранее спасибо ! smile 

PM MAIL   Вверх
valentos
Дата 7.5.2008, 14:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 7.12.2006
Где: Belarussia, Gomel

Репутация: 2
Всего: 2



тут никто тебе не ответит!!! пиши сдесь:Центр помощи smile 
А вообще эта задачка решается в течении 5 минут smile 
берешь и перебираешь в цикле все символы строки, приэтом проверяя каждый символ - гласный он или нет (см. ASC||). если гласный то берешь его к счетчику. И внутри общего цикла , у тя будет ешоо один- от пробела до пробела (это слово), после этого цикла (внутреннего), ты скидываешь свой счетчик в др. переменную и обнуляешь его! потом после след. слова ты сравниваешь счетчик с переменной и смотришь где больше))) 
Ну это так, наставил я тя на путь истинный, дальше или Центр помощи или сам уже додумай

P.S.  в теме топика написано (ввел "Да и Ода", комп вывел "Да") smile  smile  smile Так вот: комп выведет "и" smile 

Это сообщение отредактировал(а) valentos - 7.5.2008, 14:23
--------------------
[code=sql]select name, telephone from Girls where age between 20 and 25 and (.)(.) >= 2 order by IQ desc [/code]
PM MAIL   Вверх
Alexeis
Дата 8.5.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
mr.Anderson
Дата 8.5.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Где-то подобная задача решалась ну совсем недавно. Поройся в поиске.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Гектор
Дата 9.5.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 5.5.2008

Репутация: -1
Всего: нет



Я конечно всё понимаю что вы все тут умные програмисты! Но если по вашим словам всё так легко почему бы не набросать текст проги!
 smile 
PM MAIL   Вверх
saneea
Дата 11.5.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 13.7.2005

Репутация: 1
Всего: 0



Цитата(valentos @ 7.5.2008,  14:07)
P.S.  в теме топика написано (ввел "Да и Ода", комп вывел "Да") smile  smile  smile Так вот: комп выведет "и" smile

Вобще-то комп должен вывести "да", т. к. вывести нужно слово с наименьшим числом гласных букв. В словах "да" и "и" гласных букв по одной, так что результат может быть как "да", так и "и". Но учитывая то, что "да" стоит в строке первее, то правильный результат "да".

Итак, как я решил эту задачу... Написал две функции, которые находят в строке номер символа, по которому начинается слово под определённым номером и номер символа, на котором заканчивается слово под определённым номером. Работают они очень просто: смотрят в строке i-ый символ и (i+1)-ый символ. Если i-ый символ пробел, а (i+1)-ый не пробел, то это (i+1)-ый символ - это начало слова (ну ещё началом слова является i-ый символ, если i=1, т.е. начало строки). Аналогично находятся и концы слов. Вот две эти функции:

Код

function BegWord(str: string; num: integer): integer;
var
i, k: integer;
buf1, buf2: char;
begin
k:=0;
for i:=1 to length(str) do
  begin
  buf1:=str[i-1];
  buf2:=str[i];
  if (buf1=' ') and (buf2<>' ') then
    inc(k);
  if (i=1) and (buf2<>' ') then
    inc(k);
  if k=num then
    break;
  end;
if i=length(str)+1 then
  BegWord:=0
else
  BegWord:=i;
end;

function EndWord(str: string; num: integer): integer;
var
i, k: integer;
buf1, buf2: char;
begin
k:=0;
for i:=1 to length(str) do
  begin
  buf1:=str[i];
  if i<>length(str) then
    buf2:=str[i+1];
  if (buf1<>' ') and (buf2=' ') then
    inc(k);
  if (i=length(str)) and (buf1<>' ') then
    inc(k);
  if k=num then
    break;
  end;
if i=length(str)+1 then
  EndWord:=0
else
  EndWord:=i;
end;


Далее я написал на основе двух предыдущих функций функцию, которая возвращает i-ое слово в строке (к примеру в строке 'Свободу Юрию Деточкину', при параметре 2, возвращает строку 'Юрию'), если слова с заданным номером  в строке нет, то функция возвращает пустую строку:

Код

function WordI(s: string; i: integer): string;
var
b, e: integer;
begin
b:=BegWord(s, i);
e:=EndWord(s, i);
if (b<>0) and (e<>0) then
  WordI:=copy(s, b, e-b+1)
else
  WordI:='';
end;


Написал функцию которая опознаёт символ (если символ - гласная буква, то true, иначе - false). Константой задал множетство из гласных букв, если проверяемый символ входит в множетсво, то true:

Код

function glasn(c: char): boolean;
const
gl: set of char=['А', 'Е', 'Ё', 'И', 'О', 'У', 'Ы', 'Э', 'Ю', 'Я',
                 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я'];
begin
glasn:=(c in gl);
end;


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

Код

function GetCountGlasn(s: string): integer;
var
i, count: integer;
begin
count:=0;
for i:=1 to length(s) do
  if glasn(s[i]) then
    inc(count);
GetCountGlasn:=count;
end;


И наконец функция, которая берёт в качестве аргумента строку, а возвращает слово с наименьшим числом гласных букв. Работает следующим образом. Изначально подразумеваем что первое слово имеет наимешее число гласных. Если первого слова не существует, то разговаривать дальше не о чём и сразу пишем результат: 'Шото слов маловато в исходной строке...', иначе едем дальше... Проверяем в цикле каждое слово. Если оно существует (str<>''), то проверяем сколько в нём гласных и сравниваем с минимальным (храним только номер слова с минимальным количеством гласных). Если у свежепроверенного слова гласных мешьше, то запоминаем номер этог слова и едем дальше. В итоге у нас получается номер слова с наименьшим числом гласных букв. Зная номер слова с помощью функции WordI возвращаем строку, содержащую искомое слово:

Код

function GetMaxGlasnWord(s: string): string;
var
i, min: integer;
str: string;
begin
min:=1;
if WordI(s, min)<>'' then
  begin
  i:=2;
  while true do
    begin
    str:=WordI(s, i);
    if str<>'' then
      begin
      if GetCountGlasn(str)<GetCountGlasn(WordI(s, min)) then
        min:=i;
      inc(i);
      end
    else
      break;
    end;
  GetMaxGlasnWord:=WordI(s, min);
  end
else
  GetMaxGlasnWord:='Шото слов маловато в исходной строке...';
end;


Ну вот тебе и примерчик...
PM MAIL   Вверх
Гектор
Дата 11.5.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 5.5.2008

Репутация: -1
Всего: нет



Спасибо saneea! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.