Имели.
Читать такие проги тяжко.
Вот прога на ком1 - уже 10 тысяч строк. И там будут, скажем, 20 гоуту. Вы как листинг будете смотреть?
Я уж молчу о падении эффективности исполняемого файла.
Другие языки программирования и технологии
Те кто против goto просто не имели дело с серьёзными сложными алгоритмами?
Необходимость в goto есть следствие своеобразия синтаксиса. Использование такой конструкции означает лень "городить огород" из дополнительных строк кода. "сложные алгоритмы" с goto лишь результат лености автора.
В Пайтона при уровне вложенности 3/4 уже потребность оформить функционал в def и трава не расти. Просто потому, что длинные строки перестают быть читаемыми
А с другой стороны, компилятор не в состоянии произвести оптимизацию кода, как и ассемблеровских вставок
Так что подобного рода алгоритмы некрасивы, а потому не оптимальны
В Пайтона при уровне вложенности 3/4 уже потребность оформить функционал в def и трава не расти. Просто потому, что длинные строки перестают быть читаемыми
А с другой стороны, компилятор не в состоянии произвести оптимизацию кода, как и ассемблеровских вставок
Так что подобного рода алгоритмы некрасивы, а потому не оптимальны
Код пишется для людей, а не для машин, а твои goto его усложняют. Особенно в сложных алгоритмах.
если брать высокоуровневые яп, то там оно не нужно априори, в визуальном редакторе типа flowcode до 6 версии есть места, где без него никак.. в асме - без него никак
Некоторые вещи с goto получаются проще, да ещё, пожалуй, элегантнее. Например, выход из внутренних циклов, как вон при решении трансцендентного уравнения:
#include <vector>
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
double f(double x)
{ return log(x) - 1 / x; }
int main()
{
int i, j, k, l; double x, h = 1e-4, d = 2 * h;
vector <double> X; string digit[10] =
{"₀", "₁", "₂", "₃", "₄", "₅", "₆", "₇", "₈", "₉"},
blue = "\033[34m", green = "\033[32m",
yellow = "\033[33m", biruse = "\033[36m",
magenta = "\033[35m", red = "\033[31m";
vector <unsigned> chislo; cout << fixed;
for (i = 0; i < 27; i++) cout << green << '=';
while (true) { cout << blue << "\nX₀: " << red;
cin >> x; X.push_back(x); for (i = 0; i < 27; i++)
cout << yellow << "—"; cout << endl; for (i = 1;; i++)
{ x -= f(x) * d / (f(x + h) - f(x - h));
for (j = X.size() - 1; j >= 0; j--)
if (x == X[j]) goto end;
X.push_back(x); k = i; l = 0;
while (k) { chislo.push_back(k % 10);
k /= 10; l++; } cout << biruse << 'X';
for (j = chislo.size() - 1; j >= 0; j--)
cout << digit[chislo[j]];
cout << magenta << setprecision(16)
<< setw(26 - l) << x << endl; chislo.clear(); }
end: X.clear(); for (i = 0; i < 27; i++)
cout << green << '='; }
}
Трансцендентные уравнения типа cos(x)=x, ln(x)+sin(x)=0 и т.д. почему-то очень часто любят задавать некоторые преподаватели программирования.
Ещё в ЯВУ есть где-то примерно пара случаев, когда оператор goto действительно полезен, но вся его полезность на этом заканчивается...
#include <vector>
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
double f(double x)
{ return log(x) - 1 / x; }
int main()
{
int i, j, k, l; double x, h = 1e-4, d = 2 * h;
vector <double> X; string digit[10] =
{"₀", "₁", "₂", "₃", "₄", "₅", "₆", "₇", "₈", "₉"},
blue = "\033[34m", green = "\033[32m",
yellow = "\033[33m", biruse = "\033[36m",
magenta = "\033[35m", red = "\033[31m";
vector <unsigned> chislo; cout << fixed;
for (i = 0; i < 27; i++) cout << green << '=';
while (true) { cout << blue << "\nX₀: " << red;
cin >> x; X.push_back(x); for (i = 0; i < 27; i++)
cout << yellow << "—"; cout << endl; for (i = 1;; i++)
{ x -= f(x) * d / (f(x + h) - f(x - h));
for (j = X.size() - 1; j >= 0; j--)
if (x == X[j]) goto end;
X.push_back(x); k = i; l = 0;
while (k) { chislo.push_back(k % 10);
k /= 10; l++; } cout << biruse << 'X';
for (j = chislo.size() - 1; j >= 0; j--)
cout << digit[chislo[j]];
cout << magenta << setprecision(16)
<< setw(26 - l) << x << endl; chislo.clear(); }
end: X.clear(); for (i = 0; i < 27; i++)
cout << green << '='; }
}
Трансцендентные уравнения типа cos(x)=x, ln(x)+sin(x)=0 и т.д. почему-то очень часто любят задавать некоторые преподаватели программирования.
Ещё в ЯВУ есть где-то примерно пара случаев, когда оператор goto действительно полезен, но вся его полезность на этом заканчивается...
Дело вкуса и мастерства. Проверять код да еще и с метками достаточно тяжело. Другое дело, что бывают случаи, когда без goto не обойтись.
нет
Имели
Похожие вопросы
- Люди которые против goto утверждают что оно мешает чтению, и как пример приводят СОТНЮ goto в функции. И что-же....
- [C++] Сложный алгоритм :(
- Почему программирование на первый взгляд такое сложное? Потому что многие не умеют составлять алгоритмы?
- паскаль, как работать с оператором goto, как ставить метки, чтобы при операции goto 1,
- Правда ли что ни одна действительно серьезная программа не обходится без безусловных переходов GOTO?
- Подскажите кто помнит QB (Бэйсик)Что значат операторы: DIM, FOR...NEXT, STEP, GOTO...
- Почему goto нехороший стиль программирования ?
- Почему все так ненавидят Goto?
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Как ответ на эту задачу записать в паскале, либо просто в алгоритм?
Для этого существуют программисты.