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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оператор goto, Забыл как пользоваться 
:(
    Опции темы
p0s0l
Дата 10.10.2004, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Хотя, признаться, есть исключение...Если прога скомпилирована для реального режима, то при переполнении стека ничего не произойдёт критичного, т.к. никакой проверки в этом режиме не происходит: просто когда в стек занесут 64кб данных, заполнение пойдёт заново...



--------------------
С уважением, г-н Посол.
PM   Вверх
Pakshin A. S.
Дата 10.10.2004, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А как насчет этого:
Код

begin
port[$300]:=1;
Exec('C:\MyProg.exe') {Точно не помню, но суть запуск exe-файла}
end.

PM   Вверх
Girder
Дата 10.10.2004, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



Pakshin A. S. приведу два примера, но без goto.

1)
Код
if (R=0)or(R2=0) then
begin
 ...
end;

2)
Код
if (R and R2)=0 then
begin
 ...
end;

В чем разница и если она? ответь... просто интересно лично твое мнение.

Забыл добавить smile.gif :
-вариант 1: R и R2 - есть бит;
-вариант 2: R и R2 - размерностью больше чем один бит.

Это сообщение отредактировал(а) Girder - 11.10.2004, 02:09


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Chingachguk
Дата 10.10.2004, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Girder

Прими мое уважение за хороший анализ целесообразности применения goto. Большинство людей где-то услышали эту "аксиому" - типа goto это ацтой и повторяют это не задумываясь - а собственно почему ?

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




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
NightGoblin
Дата 11.10.2004, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А, по-моему, если кто-то по ночам зажигает звезды, значит, это кому-нибудь нужно...

Или goto просто забыли убрать из C++ за ненадобностью?...

Согласен, читаемость он ухудшает. Согласен, почти всегда без него можно обойтись. Но иногда (подчеркиваю - иногда, даже редко) возникают такие ситуации, что писать "кошерный" код без единого goto оборачивается существенной потерей производительности. Да и читаемость ухудшить можно и без всяких goto - неужели вам не попадались программы, нечитаемые из-за одного только форматирования?
Добавлено @ 06:00
Zzz, извини, но я поддержу тех, кто сказал, что это надуманная и ненужная задача. Зачем кому-то понадобилось делать что-то без циклов?... Думаю, все же полезнее будет обсудить использование goto в реальных ситуациях...



--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
gray_k
Дата 11.10.2004, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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





--------------------
С уважением.
Gray.
PM MAIL   Вверх
Girder
Дата 11.10.2004, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



ИМХО:
- Хорошо сказано!
Цитата
Оператор GOTO не плох сам по себе, а плох в неподходящем месте



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Sail
Дата 19.10.2004, 20:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Гото иногда все-таки стоит использовать, например, когда надо брейкнуться сразу из 2х вложенных циклов.
Пусть надо найти в 2Д-массиве индексы первого нулевого элемента.
Имхо следующий код с гото читабельнее:

Код


var a:array[0..99,0..99]of integer;
i,j:integer;

...

for i:=0 to 99 do
   for j:=0 to 99 do begin
       if a[i,j]=0 then goto bre;
   end;
bre:

  Вверх
Sun
Дата 20.10.2004, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

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



Цитата(Sail @ 19.10.2004, 17:53)
Гото иногда все-таки стоит использовать, например, когда надо брейкнуться сразу из 2х вложенных циклов.

В Java в таких случаях я просто ставлю return, для выхода из функции.


--------------------
Account removed
PM MAIL   Вверх
Pakshin A. S.
Дата 20.10.2004, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Sail @ 19.10.2004, 21:53)
Гото иногда все-таки стоит использовать, например, когда надо брейкнуться сразу из 2х вложенных циклов.
Пусть надо найти в 2Д-массиве индексы первого нулевого элемента.
Имхо следующий код с гото читабельнее:


Код


Код
var a:array[0..99,0..99]of integer;
i,j:integer;

...

for i:=0 to 99 do
for j:=0 to 99 do begin
  if a[i,j]=0 then goto bre;
end;
bre:


:D :) :D Классический вариант!!!

Код

var
a: array of integer;
i,j:integer;
begin
<...>
i:=0;
j:=0;
while (a[i,j]<>0) and (i<=Len_i) do
 begin
  while (a[i,j]<>0) and (j<=Len_j) do
   inc(j);
  if a[i,j]<>0
   then
    inc(i);
 end;
end;

А где тут Label & GoTo :D
PM   Вверх
Chingachguk
Дата 20.10.2004, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
А где тут Label & GoTo


Не знаю, но ошибка тут точно есть :)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 20.10.2004, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Точно! :stena
Не дописал
Код
<>0
then
 begin
  inc(i);
  j:=0;
 end

PM   Вверх
Дрон
Дата 20.10.2004, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Pakshin A. S.
В твоём коде аж три проверки a[i,j]<>0, а в коде с goto только одна.
Как же быть с быстродействием проги? :)
Добавлено @ 22:47
Да и действительно, с goto текст кода гораздо читабельнее и компактней (в этом примере с массивом, а не вообще :) ).

ЗЫ: Сам я goto не использовал уже года два :)

Это сообщение отредактировал(а) Дрон - 20.10.2004, 22:48


--------------------
Да. Именно так.
PM   Вверх
Chingachguk
Дата 21.10.2004, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
Как же быть с быстродействием проги?


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


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 21.10.2004, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Дрон

Надо же чем-то иногда жертвовать, тем более при современных скоростях...
Представь: гонимся за быстродействием, поэтому везде пизаем GoTo и т. п. -> Получаем полнейший бред при чтении, допустим одной процедуры (очень большой), т. к. тама где-то с десяток переходов по ходу действия процедуры и несколько переходов назад... ;-)
PM   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

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


 




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


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

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