Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

Эффективность алгоритма... А Ты сможешь лучше??   Найти похожие ветки 

 
Unknowing   (2005-12-28 16:21) [0]

Уважаемые профессионалы!!! Учусь программировать, решаю типовые задачи, а ответить на мои вопросы некому :( Правильно ли составлена логика работы процедуры или можно эффективней??
Процедура возвращает:
- кол-во букв в самом большом слове строки
- в самом маленьком
- кол-во слов в строке.
Вот код:
Procedure Parse(Str: String; var Sl: Integer; var Max: Integer; var Min: Integer);
var
 N               : Integer;
 Ch_C,
 Ch              : Integer;
 Flag            : Boolean;
begin
N:=1;
Sl:=0;
Max:=0;
Min:=0;
Flag:=False;
if Str<>"" then
while N<>Length(Str)+1 do
 begin
  if (Str[N]<>" ") and (Flag=False) then
    begin
      Sl:=Sl+1;
      Flag:=True;
      Ch_C:=N;
      Ch:=0;
     while ((Ch_C<>Length(Str)+1) and (Str[Ch_C]<>" ")) do
       begin
        Ch:=Ch+1;
        Ch_C:=Ch_C+1;
       end;
       if Sl=1    then Min:=Ch;
       if Ch>Max  then Max:=Ch;
       if Ch<=Min then Min:=Ch;
    end
  else  if Str[N]=" " then  Flag:=False;
  N:=N+1;
end
else Writeln("Нет ни одного слова!");
end;


 
Курдль ©   (2005-12-28 16:28) [1]

Чтобы оценить правильность логики работы процедуры самому или попросить ее оценить других - надо не код присылать, а блок-схему алгоритма вывешивать.
Дай ссылку на свою блок-схему!


 
ferr ©   (2005-12-28 16:31) [2]

левое полушарие, правый нейрон на третьей секции снизу)


 
Ega23 ©   (2005-12-28 16:31) [3]

В предложении "Стой, собака!" сколько символов в самом длинном слове?


 
Unknowing   (2005-12-28 16:33) [4]

Уф!! Блок схему создавать лениво, а логику делаю на словах.
Опытным глазом так сразу оценить нельзя?


 
Игорь Шевченко ©   (2005-12-28 16:33) [5]


> Опытным глазом так сразу оценить нельзя?


Для опытного глаза слишком непонятный код


 
Unknowing   (2005-12-28 16:35) [6]


> Ega23 ©   (28.12.05 16:31) [3]

Слова здесь все что между пробелами!! Задача посчитать стоимость телеграммы, которая считается из перечисленных параметров.


 
ferr ©   (2005-12-28 16:35) [7]

вот такие вещи не почитаемы
(Flag=False)

сионисты вот на такие вещи любят набрасываться
Sl:=Sl+1;


 
Ega23 ©   (2005-12-28 16:37) [8]

Рекомендую обратить внимание на функции Copy, ExtractDelimited ичто-то ещё. Сейчас вспомню.
А, ещё Trim.


 
Unknowing   (2005-12-28 16:38) [9]

Здесь Flag определяет было ли вхождение "пробела"/

> ferr ©   (28.12.05 16:35) [7]

А почему эти сионисты такого не любят?


 
Джо ©   (2005-12-28 16:39) [10]


>  [9] Unknowing   (28.12.05 16:38)
> Здесь Flag определяет было ли вхождение "пробела"/

not Flag

> А почему эти сионисты такого не любят?

Потому что каждый раз происходит реаллокация памяти под строку.


 
Ega23 ©   (2005-12-28 16:40) [11]


> Здесь Flag определяет было ли вхождение "пробела"/


Речь идёт о том, что вместо
if (Flag=False)
обычно пишут
if not Flag

А сионисты не любят потому, что в С есть ++


 
Unknowing   (2005-12-28 16:41) [12]


> Ega23 ©   (28.12.05 16:37) [8]

Задача все сделать без применения готовых функций, так сказать,
на низком уровне..


 
Джо ©   (2005-12-28 16:41) [13]


> Потому что каждый раз происходит реаллокация памяти под
> строку.

Тьфу, не так прочитал. В данном случае красивше и понятнее Inc (S1).
П.С. Названия переменных ужасны, голова болит от такого.


 
ferr ©   (2005-12-28 16:42) [14]

А сионисты не любят потому, что в С есть ++))
звучит!


 
Lexer ©   (2005-12-28 16:43) [15]

а почему функция pos не катит?


 
ferr ©   (2005-12-28 16:43) [16]

а что искать?


 
MBo ©   (2005-12-28 16:44) [17]

Используй TStrings.CommaText - код сильно упростится


 
Unknowing   (2005-12-28 16:44) [18]


> Джо ©   (28.12.05 16:41) [13]

Да, правда! :) Болит даже у меня. Но тем не менее, так ли всё с точки зрения эффективности решения??


 
Ega23 ©   (2005-12-28 16:45) [19]


> Задача все сделать без применения готовых функций, так сказать,
>
> на низком уровне..
>


Как ты тогда объяснишь применение функции Length ?


 
Igorek ©   (2005-12-28 16:46) [20]

> Unknowing   (28.12.05 16:21)  
Ужас. Учи конечные автоматы.


 
Курдль ©   (2005-12-28 16:46) [21]


> Опытным глазом так сразу оценить нельзя?


Можно! .... [censored] на [censored], мать ![censored] :[censored], а не код!


 
Unknowing   (2005-12-28 16:46) [22]


> MBo ©   (28.12.05 16:44) [17]

Да нет! Опять же: я решаю как бы на "низком уровне". Т.е. ни о каких классах и слыхать не слыхивал.


 
Unknowing   (2005-12-28 16:49) [23]


> Курдль ©   (28.12.05 16:46) [21]

Спасибо, конечно, но думаю что censored можно назвать учителя который не учит, а показывает свою крутость перед учеником!!
Больше от Вас ответов не требую. Еще раз спасибо!


 
Джо ©   (2005-12-28 16:51) [24]


>  [23] Unknowing   (28.12.05 16:49)

Дык ведь указывают на ошибки, пока не видел, чтобы хоть одну исправил.


 
Igorek ©   (2005-12-28 16:52) [25]

>
> Unknowing   (28.12.05 16:49) [23]
> Спасибо, конечно, но думаю что censored можно назвать учителя
> который не учит, а показывает свою крутость перед учеником!

А также ученика, который в каждом предложении усматривает меряние во крутости. :)


 
Unknowing   (2005-12-28 16:53) [26]


> Джо ©   (28.12.05 16:51) [24]

Стараюсь на критику реагировать правильно! Но всё же: меня интересует больше не удобочтаемость, а эффективность!.


 
Курдль ©   (2005-12-28 16:54) [27]


> Unknowing   (28.12.05 16:49) [23]


Последний раз уж отвечу. (Я сёдня добрый :)

Хотел я поведать, как надо создавать процедуры... Про метод последовательной детализации от самого Паскаля, про некоторые приемы оптимизации от Вирта...

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

Однако и в серьезную компанию Вас на работу не возьмут, пока не научитесь.


 
ferr ©   (2005-12-28 16:55) [28]

Курдль ©   (28.12.05 16:54) [27]

тут достаточно простой автомат, схема и в голове уместится.


 
Чародей ©   (2005-12-28 16:56) [29]


> Unknowing   (28.12.05 16:21)  


>  Правильно ли составлена логика работы процедуры или можно
> эффективней??


Если процедура работает правильно то логика не может быть не праыильной. А эффективнее можно сделать всегда (правда после некоторого рубежа это становится не рационально). Можно Length(Str)+1 вычислить один раз до цикла, в конце концовможно обойтись одним циклом вместо двух.


 
Джо ©   (2005-12-28 16:56) [30]


>  [26] Unknowing   (28.12.05 16:53)
>
> > Джо ©   (28.12.05 16:51) [24]
>
> Стараюсь на критику реагировать правильно! Но всё же: меня
> интересует больше не удобочтаемость, а эффективность!.

А вряд-ли кто-то возьмется забесплатно оценивать непонятно какую "эффективность" плохо написанного и неотформатированного кода. Обычно расценивают как неуважение, со всеми вытекающими.

Вот самый банальный пример. Использование название переменной Sl — очень дурной тон. Потому, что маленькая "l" почти не отличима от "1" во многих моноширинных шрифтах.


 
Курдль ©   (2005-12-28 16:58) [31]


> ferr ©   (28.12.05 16:55) [28]
> тут достаточно простой автомат, схема и в голове уместится.


Я среагировал не на конкретную процедуру, а на исходный пост автора:


> Уважаемые профессионалы!!! Учусь программировать, решаю
> типовые задачи, а ответить на мои вопросы некому :(


Если автор учится программировать, ему бы начать не с кодинга, а с алгоритминга :)


 
Gero ©   (2005-12-28 16:59) [32]


> Эффективность алгоритма

По каким критериям оценивать эффективность?

> А Ты сможешь лучше??

Это, что, лозунг?


 
Unknowing   (2005-12-28 16:59) [33]


> Курдль ©   (28.12.05 16:54) [27]

Спасибо! Я не претендую на звание вундеркинда и уже работаю. Просто решил несколько автоматизировать свою работу... Конечно чтобы написать процедуру я создал нечто вроде блок-схемы, но в виде простых предложений. Собственно, изложил подход на листе фразами.


 
Курдль ©   (2005-12-28 16:59) [34]


> Unknowing   (28.12.05 16:53) [26]
> меня интересует больше не удобочтаемость, а эффективность!.


Пиши на Аssembler-е!


 
Unknowing   (2005-12-28 17:03) [35]


> Чародей ©   (28.12.05 16:56) [29]

А вот про один цикл вместо двух это уже интересней!! Но у меня голова не варит как это можно сделать.
И что правильней вводить дополнительную переменную и каждый раз считать в цикле Length(S)+1


 
Lexer ©   (2005-12-28 17:09) [36]

Unknowing, так почему ты всё-таки решил считывать каждый символ, скорость функции pos не устраивает?
iEndW = Pos(" ", Str)
можно сделать один цикл с постоянным уменьшением строки...
?


 
ferr ©   (2005-12-28 17:09) [37]

эээээ


 
Ega23 ©   (2005-12-28 17:11) [38]


> А вот про один цикл вместо двух это уже интересней!! Но
> у меня голова не варит как это можно сделать.
> И что правильней вводить дополнительную переменную и каждый
> раз считать в цикле Length(S)+1


Ну то, что один цикл - это и ежу понятно.
Просто один проход по исходной строке, этого вполне достаточно.


 
Digitman ©   (2005-12-28 17:18) [39]

Удалено модератором
Примечание: Следи за словарем


 
MBo ©   (2005-12-28 17:18) [40]


procedure ParseString(const s:string; var Longest, Shortest, NumWords:Integer);
const
 Delimiters = [" ",",","."];
var
 i, CurrLen, LastDelim:Integer;
 StateInWord: Boolean;

 procedure EndOfWord;
 begin
   CurrLen:=i-LastDelim;
   if CurrLen>Longest then
      Longest:=CurrLen;
   if CurrLen<Shortest then
     Shortest:=CurrLen;
   Inc(NumWords);
   StateInWord := False;
 end;

 procedure StartWord;
 begin
   LastDelim:=i;
   StateInWord:=True;
 end;

begin
 Longest:=0;
 Shortest:=MaxInt;
 LastDelim:=0;
 NumWords:=0;
 StateInWord:=False;
 for i := 1 to Length(s) do
   if (s[i] in Delimiters) then begin
     if StateInWord then
       EndOfWord
   end else
     if not StateInWord then
       StartWord;
 if StateInWord then
   EndOfWord;
 if NumWords=0  then
   Shortest:=0;
end;



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 7.501 c
2-1137161329
Serjhh
2006-01-13 17:08
2006.01.29
Rave5


1-1135427141
JazY
2005-12-24 15:25
2006.01.29
Как перенести данные из таблицы Adotable в Экселевский файл?


15-1136799701
Хинт
2006-01-09 12:41
2006.01.29
Помогите выбрать оформление


2-1137043616
Sirus
2006-01-12 08:26
2006.01.29
Цикл по компонентам


2-1136831380
Serg1981
2006-01-09 21:29
2006.01.29
Цветной RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский