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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2016, 10:46   #21
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

newerow1989, а для чего Вы формируете список слов в динамическом массиве?
По условиям задачи в этом необходимости нет!
Нашли очередное слово - выдали по нему информацию и пошли дальше, хранить то список для чего? Чтобы было медленее или чтобы памяти больше занять?
Или Вы просто взяли год из своего хранилища и выложили с минимальной доработкой?!

кроме того, как я вижу, задача поиска экстремума не решена:
Цитата:
и определяло слово в котором больше согласных
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2016, 11:10   #22
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Немножко не дочитал! Вот окончательный ответ:
Код:
procedure TForm1.Button1Click(Sender: TObject);
type tSlova=record
        Str:string;
        Count:integer;
     end;
const sogl=['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ'];
var s,s1:string;
    i,j,k,l,c:integer;
    slova:array of tSlova;
begin
   c:=0;
   For i:=0 to Memo1.Lines.Count-1 do
   begin
      s:=Memo1.Lines[i]+' ';
      s1:='';
      For j:=1 to Length(s) do
      begin
         If s[j]=' ' then
         begin
            c:=c+1;
            SetLength(slova,c);
            slova[c-1].Str:=s1;
            l:=0;
            For k:=1 to Length(s1) do
               If s1[k] in sogl then
                  Inc(l);
            slova[c-1].Count:=l;
            s1:='';
         end else
            s1:=s1+s[j];
      end;
   end;
   Memo2.Clear;
   For i:=0 to c-1 do
      Memo2.Lines.Add(Format('%s - %d согласных',[slova[i].Str,slova[i].Count]));
   If c=0 then
   begin
      Memo3.Text:='Нет слов!';
      Exit;
   end;
   k:=slova[0].Count;
   For i:=1 to c-1 do
      If k<slova[i].Count then
         k:=slova[i].Count;
   Memo3.Clear;
   Memo3.Lines.Add('Список слов, в которых количество согласных максимальна ('+
      IntToStr(k)+' согласных):');
   For i:=0 to c-1 do
      If k=slova[i].Count then
         Memo3.Lines.Add(slova[i].Str);
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 10.07.2016 в 13:50. Причина: Убрал - s:=Memo1.Text;
newerow1989 вне форума Ответить с цитированием
Старый 10.07.2016, 11:29   #23
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не ответили, так зачем Вам динамический массив?
Вы какую задачу этим решаете: сделать сложнее или сделать менее эффективно (медленее и занять побольше памяти)?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2016, 11:38   #24
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

да тут мягко говоря к любой строке кода вопросы))
come-on вне форума Ответить с цитированием
Старый 10.07.2016, 12:57   #25
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Цитата:
так зачем Вам динамический массив
Информацию о количестве согласных куда-то надо записывать, поэтому и создаю массив. Далее я обрабатываю эту информацию.
Цитата:
какую задачу этим решаете
Элементарную и проще так, чтобы любому программисту было приятнее читать
Цитата:
к любой строке кода вопросы
К какой именно? Ведь не будете задавать вопросы по некоторым строкам:
Код:
begin
end;
?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 10.07.2016, 13:15   #26
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Не вижу ничего плохого, в динамических массивах.
Структурированное программирование. Вначале создаем структуру потом функции для неё.
Такой код гораздо нагляднее, чем функциональный подход или подход с машиной состояний.
Во-вторых в задание требовалось
Цитата:
Для каждого заданного слова указать количество согласных.
А вот, код на функции я бы разбил. Чем больше функций тем более самодокументированным становиться код. Более выразительным. А также вырисовывается иерархическая - древовидная структура. Что также прибавляет выразительности коду. А более выразительный код легче читать и проще понимать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 10.07.2016 в 13:17.
Pavia вне форума Ответить с цитированием
Старый 10.07.2016, 13:41   #27
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
К какой именно? Ведь не будете задавать вопросы по некоторым строкам:
ну конечно, к таким не надо
но дальше почти ко всем, например
Цитата:
begin
s:=Memo1.Text;
c:=0;
вот эти
зачем первая?
для чего с, без нее обойтись никак?
ну и т.д.
ps: Pavia +1 по поводу последнего абзаца
come-on вне форума Ответить с цитированием
Старый 10.07.2016, 13:52   #28
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Про s:=Memo1.Text; я убрал (это я по привычке написал).
Для переменной c: можно обойтись и по-другому:
Код:
SetLength(slova,High(slova)+2);
slova[High(slova)+1].Str:=s1;
но это дольше писать пришлось, поэтому и создал переменную c

Цитата:
А вот, код на функции я бы разбил
Насколько помню, как учили, функция - это кусок программы, который можно вызывать неоднократно. По мнению Pavia, в программе функция вызовится только 1 раз. Зачем писать лишние функции, если можно ими обойтись?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 10.07.2016 в 13:57.
newerow1989 вне форума Ответить с цитированием
Старый 13.07.2016, 18:28   #29
Adult_Master
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 63
По умолчанию

Пока ждал ответа на свой вопрос в другой ветке накидал свой вариант, проверил, работает)

Код:
procedure TForm1.Button1Click(Sender: TObject);
const
 Sogl = ['б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ'];
var
 S: TStringList;
 i, k, MaxValue, len, count: Integer;
begin
 S := TStringList.Create;
 S.Delimiter := ' ';
 S.DelimitedText := Memo1.Text;

 MaxValue := 0;
 Memo2.Lines.Clear;

 for i := 0 to S.Count - 1 do
  begin
   count := 0;
   len := Length(S[i]);
   if len > MaxValue then
    MaxValue := len;
   for k := 1 to len do
    if AnsiString(S[i])[k] in Sogl then
     Inc(count);
   Memo2.Lines.Add(format('%s - %d согласных', [S[i], count]));
  end;

 Memo2.Lines.Add('Максимальное количество согласных в слове(словах):');

 if MaxValue > 0 then
  for i := 0 to S.Count - 1 do
   if Length(S[i]) = MaxValue then
    Memo2.Lines.Add(S[i]);

 S.Free;
end;
как мало пройдено дорог, так много сделано ошибок !

Код:
как - 2 согласных
мало - 2 согласных
пройдено - 5 согласных
дорог, - 3 согласных
так - 2 согласных
много - 3 согласных
сделано - 4 согласных
ошибок - 3 согласных
! - 0 согласных
Максимальное количество согласных в слове(словах):
пройдено
P.S. По уму конечно бы ещё накидать проверок на знаки препинания, и другие символы не считающиеся за слова, ну и приводить все буквы к какому то регистру, или добавить заглавные буквы в множество )

Последний раз редактировалось Adult_Master; 13.07.2016 в 18:46.
Adult_Master вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет кол-ва количество согласных букв DoktorKraft Помощь студентам 5 20.08.2015 16:06
Создать текстовый файл и подсчитать количество гласных/согласных в нём /Pascal ABC tinager2011 Помощь студентам 1 12.04.2014 22:10
количество слов в предложении, гласных и согласных букв Делфи 7 программирование Помощь студентам 3 10.10.2013 21:32
C# Подсчитать количество согласных букв SmailikEKB Помощь студентам 1 17.05.2013 23:02