Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2010, 17:43   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
Вопрос Строки, как найти слово с наименьшим количеством букв(Delphi)

Суть вопроса в том, что немагу понять как определить слово с наименьшим количеством гласных букв, т.е. какой оператор определяет длину слова и считает количество гластных.
Dima-91 вне форума Ответить с цитированием
Старый 28.09.2010, 18:29   #2
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

нет такого операторра надо ручками писать
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 28.09.2010, 18:36   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Dima-91, таких операторов не существует. Делается это так:
Код:
procedure FindPublicInWord(s:string; var MaxPublic:integer);
Var
i,j,k:integer;
ArrayOfWodrs:array of string;
ArrayOfPublicInWord:array of integer;
Begin
j:=0;
For i:=0 to (length(s)-1) do
begin
If s[i]=' ' then
begin
inc(j);
Setlength(ArrayOfWords,j);
Setlength(ArrayOfPublicInWord,j)
ArrayOfPublicInWord[j-1]:=0;
else
if s[i]='любая гласная буква (подумайте сами как это сделать)' then
ArrayOfPublicInWord[j-1]:=ArrayOfPublicInWord[j-1]+1
end;
end;
End;
Как-то так. Смысл в чем... Вы ищите слово: просматриваете весь текст, если нашли пробел, то началось новое слово, если ещё один пробел, то закончилось. Эти слова можно записать в динамический массив, а потом перебрать их все с помощью цикла FOR, и в этом цикле уже подсчитывать количество гласных букв, предварительно задав константу с ними, или используя Case, и в массив писать количество букв, потом перебрать и сравнить, или в том же цикле сравнивать. Запутал вас наверное... Ну ничего... Разберетесь
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 28.09.2010, 19:04   #4
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от ImmortalAlexSan Посмотреть сообщение
Dima-91, таких операторов не существует. Делается это так:
Код:
procedure FindPublicInWord(s:string; var MaxPublic:integer);
Var
i,j,k:integer;
ArrayOfWodrs:array of string;
ArrayOfPublicInWord:array of integer;
Begin
j:=0;
For i:=0 to (length(s)-1) do
begin
If s[i]=' ' then
begin
inc(j);
Setlength(ArrayOfWords,j);
Setlength(ArrayOfPublicInWord,j)
ArrayOfPublicInWord[j-1]:=0;
else
if s[i]='любая гласная буква (подумайте сами как это сделать)' then
ArrayOfPublicInWord[j-1]:=ArrayOfPublicInWord[j-1]+1
end;
end;
End;
Так как-то наверно по проще
Код:
const
  // множество гласных букв
  GlasnieSymb = ['а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я',
                 'А', 'Е', 'Ё', 'И', 'О', 'У', 'Ы', 'Э', 'Ю', 'Я'];

var
  s, cur_slovo, pred_slovo: string;
  i, cur_glasnie, pred_glasnie: Integer;
begin
  s := Edit4.Text;
  cur_glasnie := 0;
  pred_glasnie := 100000;
  cur_slovo := '';
  pred_slovo := ''; 
  for i:=1 to Length(s) do
  begin
    if s[i] <> ' ' then
      cur_slovo := cur_slovo + s[i];
    if s[i] in GlasnieSymb then
    begin
      inc(cur_glasnie);
    end;
    if (s[i]=' ') or (i=Length(s)) then
    begin
      if cur_glasnie < pred_glasnie then
      begin
        pred_slovo := cur_slovo;
        cur_slovo := '';
        pred_glasnie := cur_glasnie;
        cur_glasnie := 0;
      end;
    end
  end;

  s:='Cлов, содержащие наименьшее кол-во гласных: ' + pred_slovo + '; Кол-во гласных: ' + IntToStr(pred_glasnie);

  ShowMessage(s);
end;
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 29.09.2010, 17:30   #5
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

XeruH можешь если несложно объяснить как работает твой код.
Мне непонятно что даёт оператор - inc; а также строка :
Код:
 If s[i] in GlasnieSymb then
Хотя если неошибаюсь, то строка обозначает что s[i]=слово что получилось переноситься в GlasnieSymb. После чего слова что получились сравниваються.
Если где-то я ошибаюсь скажите пожалуйсто где.
Зарание спасибо.
Dima-91 вне форума Ответить с цитированием
Старый 29.09.2010, 17:47   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

inc — чернила, видимо... на самом деле это инкремент (приращение счётчика), вы бы хоть руководство по языку посмотрели, прежде чем программки делать!

Цитата:
Сообщение от ImmortalAlexSan Посмотреть сообщение
Вы ищЕте слово: просматриваете весь текст, если нашли пробел, то началось новое слово, если ещё один пробел, то закончилось.
Не факт, не факт, о мой Бессмертный тёзка! О тексте речь вообще не шла (в вопросе), да и так ясно, что слова могут быть и не разделены пробелами (а скажем, только преводом строк); часто даже после запятой пробела не ставят некоторые.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 29.09.2010, 18:05   #7
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

я думаю в таких программках рассматривается сферический текст в вакууме который идеально написан
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 29.09.2010, 18:33   #8
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
XeruH можешь если несложно объяснить как работает твой код.
Мне непонятно что даёт оператор - inc; а также строка :
Код:
 If s[i] in GlasnieSymb then
Хотя если неошибаюсь, то строка обозначает что s[i]=слово что получилось переноситься в GlasnieSymb. После чего слова что получились сравниваються.
Если где-то я ошибаюсь скажите пожалуйсто где.
Зарание спасибо.
inc - как и сказали выше инкремент(т.е. увеличивает значение переменной на 1).
Код:
 If s[i] in GlasnieSymb then
берем символ из строки s по позиции i (например если s='абв', то s[2]='б') и проверяем входит ли данный символ в множество GlasnieSymb.

Да кстати когда писал этот код, почему то казалось что в задании написано что разделитель между словами пробел. После сообщения Sasha_Smirnov понял что это не так. Значит проверять надо не только на пробел но и на другие возможные разделители слов.
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 30.09.2010, 16:31   #9
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Прошу прощение, за то что некоректо написал условие.
Раздилитель в тексте пробел, который разделяет слова в строке , которые и нужно будет сравнить между собой и вывести слово с наименьшим количеством гласных.
Dima-91 вне форума Ответить с цитированием
Старый 30.09.2010, 17:37   #10
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Тогда все должно работать.
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве G(6;8) определить номер столбца с наименьшим количеством нулей. Катюня Помощь студентам 2 21.01.2009 06:26
Исключить из файла слово с минимальным количеством слогов. катя@90 Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2008 14:23
Как найти слово в тексте ? geniy Паскаль, Turbo Pascal, PascalABC.NET 2 03.02.2008 21:37
С++ Найти самое длинное слово строки k0z7_g0b1in Общие вопросы C/C++ 3 22.04.2007 17:37