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

Вниз

оператор goto   Найти похожие ветки 

 
Jeer ©   (2004-09-01 12:20) [40]

Ega23 ©   (01.09.04 11:56) [34]

Case со строками можно делать, но с умом:)
хеш или так:

function StrCase(Selector: string; StrList: array of string): integer;
var
i: Integer;
begin
 Result := -1;
 for i := 0 to High(StrList) do begin
   if Selector = StrList[i] then begin
     Result := i;
     Break;
   end;
 end;
end;

case StrCase(StringToTest, ["First", "Second", "Third"]) of
 0: ShowMessage("1: " + s);
 1: ShowMessage("2: " + s);
 2: ShowMessage("3: " + s);
else
 ShowMessage("else: " + s);
end;


 
Jeer ©   (2004-09-01 12:21) [41]

Думкин ©   (01.09.04 12:18) [39]
Перемешивать долго придется:)


 
DimKa ©   (2004-09-01 12:21) [42]


> Jeer ©   (01.09.04 12:14) [38]

ПравДа? не вижу ошибки (


 
Jeer ©   (2004-09-01 12:23) [43]

где заполнение массива ?


 
DimKa ©   (2004-09-01 12:29) [44]


> Jeer ©   (01.09.04 12:23) [43]

if ZnEx then
     LostPakets[i] := NewZn;


 
}|{yk ©   (2004-09-01 12:30) [45]

2Думкин ©   (01.09.04 12:18) [39]
Да нет, а если в нужно чтобы в любом "кресте" должны быть только уникальные числа


 
KilkennyCat ©   (2004-09-01 12:34) [46]

begin
 label1: goto label4;
 label2: goto label3;
 label3: goto label1;
 label4: goto label2;
end;

это просто так. крик души. достало все...


 
Jeer ©   (2004-09-01 12:35) [47]

DimKa ©   (01.09.04 12:29) [44]

я о DimKa ©   (01.09.04 11:14) [11]


 
DimKa ©   (2004-09-01 12:35) [48]


> KilkennyCat ©   (01.09.04 12:34) [46]
> это просто так. крик души. достало все...

Тогда так:

toall : goto ...


 
DimKa ©   (2004-09-01 12:37) [49]


> Jeer ©   (01.09.04 12:35) [47]

Там, да не полный, просто пример goto


 
КаПиБаРа ©   (2004-09-01 12:48) [50]

Jeer ©   (01.09.04 12:21) [41]

> Перемешивать долго придется:)

Randomize;
SetLength(LostPakets,KolUpak);
Offset := 0;
for i := 0 to KolUpak-1 do
begin
 Inc(Offset, Random((Npackets - Offset) div (KolUpak-i))+1);
 LostPakets[i] := Offset;
end;
for i := 0 to KolUpak-1 do
begin
 j := Random(KolUpak);
 n := LostPakets[j];
 LostPakets[j] := LostPakets[i];
 LostPakets[i] := n;
end;


 
VMcL ©   (2004-09-01 13:09) [51]

>>Ega23 ©  (01.09.04 11:56) [34]

Массив-константа из правых частей ("AAA", "BBB", ...) спасет отца русской демократии.

P.S. UpperCase(Str) в каждом из if"ов - это, по моему совершенно нескромному мнению, гнусное ламерство. Почему не сделать один раз StrUp := UpperCase(Str); и сравнивать далее StrUp (что кстати в общем случае увеличит скорость и улучшит читабельность)?


 
YurikGL ©   (2004-09-01 14:59) [52]

Редко, но использую goto т.к. не считаю это чем-то страшным. ИМХО просто не надо ими злоупотреблять а читабельность кода он иногда повышает, если название метки оражает название блока к которому осуществляется переход.


 
Igorek ©   (2004-09-01 18:22) [53]

goto лучше при выходе из вложенного цикла чем флажки бо нету break 2 (3...)


 
Fay ©   (2004-09-01 18:45) [54]

Чей-то сознательный отказ от goto у меня вызывает только жалость.
Те, кто по религиозным соображениям не ест свинину мне более понятны.


 
nikkie ©   (2004-09-01 18:53) [55]

>Ничаго интересного - задача заполнения массива случайными числами без повтора значений.
вариант без goto
 i := 0;
 while (i < n) do begin
   Arr[i] := Random(Max);
   j := 0;
   while j < i do begin
     if Arr[i] = Arr[j] then break;
     Inc(j);
   end;
   if j = i then Inc(i);
 end;


тот же алгоритм с goto:

 for i := 0 to n - 1 do begin
get_random:
   Arr[i] := Random(Max);
   for j := 0 to i - 1 do
     if Arr[i] = Arr[j] then goto get_random;
 end;


даже чуть короче. честно говоря, в коде [11] меня больше напрягает использование n в качестве переменной цикла. такое ощущение, что этот код вложен в еще 3 цикла - и переменные i,j,k уже использованы. если так, то вынести заполнение цикла в отдельную процедуру и жить станет легче, жить станет веселее.


 
nikkie ©   (2004-09-01 18:59) [56]

еще вариант без goto.
 for i := 0 to n - 1 do begin
   repeat
     ok := True;
     Arr[i] := Random(Max);
     for j := 0 to i - 1 do
       if Arr[i] = Arr[j] then begin
         ok := False;
         break;
       end;
   until ok;
 end;

я бы написал без goto, наверное. в основном из-за того, что ломало бы label объявлять..

ЗЫ. о, фей неуловимый появился...


 
Fay ©   (2004-09-01 19:12) [57]

2 nikkie ©   (01.09.04 18:59) [56]
Инет починили.


 
clickmaker ©   (2004-09-01 19:15) [58]


> [54] Fay ©   (01.09.04 18:45)
> Чей-то сознательный отказ от goto у меня вызывает только
> жалость.

А бессознательный? :)


 
Fay ©   (2004-09-01 19:21) [59]

2 clickmaker ©   (01.09.04 19:15) [58]
Порой мне кажется, что этот путь пошире МКАД-а 8)


 
nikkie ©   (2004-09-01 19:44) [60]

>Инет починили.
мои поздравления.

цитирую из ветки
http://delphimaster.net/view/14-1091091921/
последняя моя попытка. устал уже за тобой по разным веткам бегать...

****

[139] nikkie ©   (19.08.04 15:26)
>Требуется уточнение - какой именно код
хороша перцовочка... :)
http://delphimaster.net/view/14-1091091921/

>Я спросил, не будешь ли ты против письма. Ответ не видел. М.б. плохо смотрел.
http://delphimaster.net/view/14-1091091921/
[105],[107]

>Сам то будешь?
в этой ветке [99],[127]

ЗЫ нет, ты просто не понимаешь, сколько ты теряешь без клиента... :)


 
Fay ©   (2004-09-01 19:59) [61]

>> ЗЫ нет, ты просто не понимаешь, сколько ты теряешь без клиента... :)

Очень вероятно.


 
Alex Konshin ©   (2004-09-01 20:01) [62]

Goto использую по делу и совесть меня не мучает.
Иногда это намного понятнее чем структурные извраты.
При обучении языку его использование вредно, т.к. может войти в привычку. Но не будьте догматиками.
Придумываете себе трудности, а потом героически их преодолеваете.


 
Fay ©   (2004-09-01 20:02) [63]

2 Alex Konshin ©   (01.09.04 20:01) [62]
Такое ощущение, что 3-е предложение написано под диктовку. Плохо вяжется с остальными.


 
KilkennyCat ©   (2004-09-01 21:01) [64]


> nikkie ©   (01.09.04 18:59) [56]

еще вариант без goto.

 i := low(arr);
 repeat
   arr[i] := random(max);
   for j := low(arr) to i - 1 do if arr[j] = arr[i] then dec(i);
   inc(i);
 until i > high(arr);


 
nikkie ©   (2004-09-01 21:19) [65]

>KilkennyCat
только break надо добавить. чего в холостую цикл крутить.


 
KilkennyCat ©   (2004-09-01 21:20) [66]


> nikkie ©   (01.09.04 21:19) [65]

согласен. Хотел просто короче код :)
но на оду переменную все-таки меньше.


 
Сергей Суровцев ©   (2004-09-01 23:23) [67]

Дался вам этот goto...
Если он есть - значит им можно и нужно пользоваться. Злоупотреблять действительно не стоит, но априори зарекаться тоже глупо. Иногда именно его использование дает солидный прирост в скорости, тогда использую без зазрения совести. :))


 
Soft ©   (2004-09-02 03:25) [68]

Второй пример касается чистоты стиля -- вообще нет необходимости применять язык ассемблера. Помните, что когда Дейкстра посчитал goto вредным, он имел в виду привычку использовать goto для организации управления в неструктурированном коде 60-х годов. Идея заключалась в том, что меньше используя goto мы могли бы улучшить ясность. Идея не состояла в жертвовании ясностью избегая goto любой ценой. Представьте программу, которой нужно открыть порт, инициализировать его, инициализировать модем, установить соединение, зарегистрироваться (logon) и загрузить файл (download). Если что-то не так, в любом месте, нам нужно вернуться обратно в самое начало. Доморощенный структуралист мог бы написать нечто вроде:

 BOOL Done = FALSE;

 while(!Done)
  {
   if(OpenPort())
    {
     if(InitPort())
      {
       if(InitModem())
        {
         if(SetupConnection())
          {
           if(Logon())
            {
             if(Fetch())
              {
               Done = TRUE; // Ouch! Hit the right hand side!
              }
            }
          }
        }
      }
    }
  }


Что нам кажется просто глупым. Есть более понятная альтернатива, использующая то, что оператор && прекращается сразу, как только встречается выражение, принимающее значение FALSE -- "неправильное использование" языка, обычно запрещаемое в большинстве стандартов кодирования:

while(!(OpenPort()&&
       InitPort()&&
       InitModem()&&
       SetupConnection()&&
       Logon()&&
       Fetch()));


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

Start:  if(!OpenPort())goto Start;
        if(!InitPort())goto Start;
        if(!InitModem())goto Start;
        if(!SetupConnection())goto Start;
        if(!Logon())goto Start;
        if(!Fetch())goto Start;


Это в точности то, что позволяют нам делать специализированные скриптовые языки, разработанные для такого вида работ!

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

http://www.progstone.narod.ru/reciprocality/r0/Day4.html



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

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

Наверх




Память: 0.62 MB
Время: 0.039 c
3-1093170919
alextov
2004-08-22 14:35
2004.09.19
Подскаажите как загрузить изображение в БД


4-1091617684
dRake
2004-08-04 15:08
2004.09.19
Stay On Top


6-1089545483
AlexeyM
2004-07-11 15:31
2004.09.19
как сформировать и послать сообщение к PHP на сайте


4-1091426526
olookin
2004-08-02 10:02
2004.09.19
Ресурс для хранения проивзольных файлов


4-1091777370
Арт
2004-08-06 11:29
2004.09.19
как нажать кнопку "Далее"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский