Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
begin
if n=15 then
begin
a:=7200*56*99*12*13*14*15;
end
else
begin
if n=16 then
begin
a:=7200*56*99*12*13*14*15*16;
end
else
begin
if n=17 then
begin
a:=7200*56*99*12*13*14*15*16*17;
end
else
begin
if n=18 then
begin
a:=7200*56*99*12*13*14*15*16*17*18;
end
else
begin
if n=19 then
begin
a:=7200*56*99*12*13*14*15*16*17*18*19;
end
else
begin
if n=20 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19;
end
else
begin
if n=21 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21;
end
else
begin
if n=22 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22;
end
else
begin
if n=23 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23;
end
else
begin
if n=24 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24;
end
else
begin
if n=25 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25;
end
else
begin
if n=26 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26;
end
else
begin
if n=27 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27;
end
else
begin
if n=28 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28;
end
else
begin
if n=29 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29;
end
else
begin
if n=30 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29*30;
end
else
begin
if n=31 then
begin
Это аналог сишного свича с бряками. А вот аналога свича без бряков, в котором управление проваливается вниз на следующие ветки, в паскале нет.
P.S. Вот если честно - лучше бы и в си его не было. В 99% случаев нужен switch в котором ничего никуда не проваливается, как в паскале. А в том 1% случаев, где реально нужна сквозная передача управления (дафф девайсы и прочие извращения) - можно было бы вставить специальное слово типа nobreak или fall или в конце концов вставить тупое goto... Но теперь уже поздно что-то менять, и все сиподобные языки навсегда останутся с этой странной, исторически сложившейся, конструкцией...
А eth0, видимо, хотел написать как-то так:
switch (n) {
...
case 4: a *= 4;
case 3: a *= 3;
case 2: a *= 2;
}
P.S. О, пришла мысль, какое ключевое слово можно было бы использовать в такой реализации свича, но при этом не добавлять новых слов - continue!
// здесь ничего никуда не проваливается, как в старом добром паскале
switch (x) {
case 0: y = 5;
case 1: y = 42;
}
// а здесь мы явно указали, что хотим передать управление на следующую ветвь
switch (x) {
case 0: y *= 5; continue;
case 1: y *= 42;
}
Кстати это заодно решило бы проблему со скопами, из-за которой нельзя описывать переменные внутри свича не дописав туда пару бесполезных фигурных скобок. Данная проблема влияла бы только на блоки, которые связаны друг с другом при помощи continue, а остальные были бы красивы:
switch (x) {
case 0:
int y = x*2;
f(y);
case 1:
int y = x*3;
g(y);
}
Глава седьмая. Борманд стоял чуть поодаль от полки с надписью "Устройство Даффа" и яростно вертел в руках какую-то странную конструкцию. В его глазах блестели искорки, которые часто можно увидеть у людей, занимающихся каким-то интересным для них делом. Почесав взъерошенные волосы на лбу, Борманд спросил сам себя: "А если мы применим здесь continue? Примерно вот так.", и продолжил вертеть в руках странное устройство.
Тихо скрипнула дверь, и в комнату вошел Дефекейт Плюсплюс. Бросив краткий взгляд на пустующую полку, он укоризненно покачал головой и произнес: "Ты же так duff's device сломаешь! Покорми собак и ничего не трогай!".
Борманд поставил устройство на полку и вышел из комнаты вслед за Дефекейтом. С улицы доносился лай собак, охраняющих музей говнокода...
P.S.:
#pragma unroll(8)
for (size_t i=0; i<n; i++)
*to = *from++;
P.P.S. Забавно, писал название прагмы наугад, а гугл сказал, что такая уже есть в XL C/C++ и Keil, и работает именно так, как я себе и представлял.
К слову сказать, я не видел на сиплюс такого обилия говнокода, как в паскале. Сравниться может разве что пых и as3, в силу специфики рождения недопрограммистов из недоаниматоров.
Могу предположить, что на Pascal пишется много говнокода, но это в основном лабы, и такой код редко попадается на глаза. Но с другой стороны лабы пишутся и на C++, поэтому я все же склоняюсь к мысли, что на C++ говнокода больше в силу его популярности.
Проблема в длине кода и Паскаль выдает ошибку Переполнение а арифметической операции
P.S. Первый раз вижу такое ужасное вычисление факториала. Автор не мог до конца досчитать числа на калькуляторе и вбить их в виде строк?
Если правильно помню, синтаксис такой:
P.S. Вот если честно - лучше бы и в си его не было. В 99% случаев нужен switch в котором ничего никуда не проваливается, как в паскале. А в том 1% случаев, где реально нужна сквозная передача управления (дафф девайсы и прочие извращения) - можно было бы вставить специальное слово типа nobreak или fall или в конце концов вставить тупое goto... Но теперь уже поздно что-то менять, и все сиподобные языки навсегда останутся с этой странной, исторически сложившейся, конструкцией...
А eth0, видимо, хотел написать как-то так:
покорми собак и ничего не трогай!
Борманд стоял чуть поодаль от полки с надписью "Устройство Даффа" и яростно вертел в руках какую-то странную конструкцию. В его глазах блестели искорки, которые часто можно увидеть у людей, занимающихся каким-то интересным для них делом. Почесав взъерошенные волосы на лбу, Борманд спросил сам себя: "А если мы применим здесь continue? Примерно вот так.", и продолжил вертеть в руках странное устройство.
Тихо скрипнула дверь, и в комнату вошел Дефекейт Плюсплюс. Бросив краткий взгляд на пустующую полку, он укоризненно покачал головой и произнес: "Ты же так duff's device сломаешь! Покорми собак и ничего не трогай!".
Борманд поставил устройство на полку и вышел из комнаты вслед за Дефекейтом. С улицы доносился лай собак, охраняющих музей говнокода...
P.S.:P.P.S. Забавно, писал название прагмы наугад, а гугл сказал, что такая уже есть в XL C/C++ и Keil, и работает именно так, как я себе и представлял.
Ты все поломал.
Так начиналась моя первая пара по С++ в далеком 2007...
У вашего преподавателя мания величия... ...С++.
Неспроста в с++ есть два креста, ой не зря...
Pascal (337)
Могу предположить, что на Pascal пишется много говнокода, но это в основном лабы, и такой код редко попадается на глаза. Но с другой стороны лабы пишутся и на C++, поэтому я все же склоняюсь к мысли, что на C++ говнокода больше в силу его популярности.