Autor Tópico: As piores e mais divertidas peças de programação  (Lida 1065 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
As piores e mais divertidas peças de programação
« Online: 31 de Agosto de 2008, 10:37:50 »
Já que tem um certo número de programadores / analistas de sistemas e afins, seria divertido falar das coisas mais absurdas que a gente já viu.

Eu já tenho feito muita besteira na vida, mas também vi absurdos que nem bebendo tubaína com pimenta-do-reino se me ocorreriam.

Para inaugurar a série...

...eu já vi um programa em C que tinha um GOTO. Isso mesmo. Programa em C. Com um GOTO ! E isso rodou em mais de 10 000 estações DOS/Windows, quem sabe roda em muitas delas ainda... :)
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: As piores e mais divertidas peças de programação
« Resposta #1 Online: 01 de Setembro de 2008, 00:26:17 »
Assim que lembrar de uma, eu conto aqui.
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: As piores e mais divertidas peças de programação
« Resposta #2 Online: 01 de Setembro de 2008, 00:36:43 »
Ah!

Estávamos aprendendo técnicas de lista ligada e recebemos o exercício de encontrar palavras "vizinhas" num dicionário com palavras de três letras. O programa deveria supor que o dicionário está em ordem alfabética.

Vai um amigo meu fazer o programa e pra testar, ele cria outro programa pra fazer o dicionário. Pra isso, ele cria seqüências de três caracteres aleatórios. Faz isso 50 mil vezes. Depois, ele faz um programa que usa o bubblesort para organizar o dicionário.

Ele não entendia por que o programa de sort dele estava demorando tanto nem poor que o programa de achar vizinhos demorava mais ainda. O pior caso apra os dois programas é quando há repetição de valores. Agora, calculem: em média, quantas vezes uma palavra de tr6es eltras deve se repetir numa lista de 50 mil palavras de três letras?
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline gogorongon

  • Nível 30
  • *
  • Mensagens: 1.834
  • Sexo: Masculino
  • Não.
Re: As piores e mais divertidas peças de programação
« Resposta #3 Online: 01 de Setembro de 2008, 18:33:54 »
...eu já vi um programa em C que tinha um GOTO. Isso mesmo. Programa em C. Com um GOTO !
Preconceito contra goto é uma coisa retardada que é difundida pelo meio acadêmico. Existem casos excepcionais em que o uso de goto é válido.
Código: [Selecionar]
if (r_drawwater)
{
// r_wateralpha*10: 1&2=25% 3&4=33% 5&6=50% 7&8&9=66%
if (r_wateralpha.value <= 0.25) // 25%
{
teste = ((((int)r_turb_pdest-(int)d_viewbuffer) / screenwidth)+1) & 1;
if (teste) // 25% transparency
{
stipple:
if (!(((int)r_turb_pdest + teste) & 1)) // if we are in the wrong pixel,
{
if (r_turb_spancount == 1)
goto end_of_loop;
// advance one pixel
*r_turb_pdest++;
izi += izistep;
pz++;
r_turb_s += r_turb_sstep;
r_turb_t += r_turb_tstep;
r_turb_spancount = (r_turb_spancount/2); // -1
}
else
r_turb_spancount = (r_turb_spancount+1)/2;
// multiply steps by 2
r_turb_sstep*=2;
r_turb_tstep*=2;
do
{
#define sturb2 (((r_turb_s + r_turb_turb[(r_turb_t>>16)&(CYCLE-1)])>>16)&63)
#define tturb2 (((r_turb_t + r_turb_turb[(r_turb_s>>16)&(CYCLE-1)])>>16)&63)
if (*pz <= (izi >> 16))
*r_turb_pdest = *(r_turb_pbase + (tturb2<<6) + sturb2);
// advance two pixels
r_turb_pdest += 2;
pz += 2;
izi += izistep2;
r_turb_s += r_turb_sstep;
r_turb_t += r_turb_tstep;
}
while (--r_turb_spancount > 0);
}
}
else if (r_wateralpha.value < 0.66 || !alphamap) // 50%
{
teste = ((((int)r_turb_pdest-(int)d_viewbuffer) / screenwidth)+1) & 1;
goto stipple;
}
}
Não é possível fazer esse tipo de redirecionamento de fluxo de instruções de outro modo, pelo menos não de um modo tão eficiente. E não, não vou nem tentar explicar o código. É de uma engine de Quake.
« Última modificação: 01 de Setembro de 2008, 18:36:07 por Kasimier »

Offline Moro

  • Nível Máximo
  • *
  • Mensagens: 20.984
Re: As piores e mais divertidas peças de programação
« Resposta #4 Online: 01 de Setembro de 2008, 20:07:20 »
Kasimier

Esse caso pode ser facilmente trocado. Os dois gotos

O 1, sobe a condição (r_turb_spancount == 1)
para a disjunção anterior e e coloca um else if... ou o que parece mais provável (não achei end_of_loop) sobe duas

Em baixo, o goto stipple pode configurar um while. Eu nunca precisei de goto, só em ASM e vendo hoje poderia te-los substituidos
“If an ideology is peaceful, we will see its extremists and literalists as the most peaceful people on earth, that's called common sense.”

Faisal Saeed Al Mutar


"To claim that someone is not motivated by what they say is motivating them, means you know what motivates them better than they do."

Peter Boghossian

Sacred cows make the best hamburgers

I'm not convinced that faith can move mountains, but I've seen what it can do to skyscrapers."  --William Gascoyne

Offline gogorongon

  • Nível 30
  • *
  • Mensagens: 1.834
  • Sexo: Masculino
  • Não.
Re: As piores e mais divertidas peças de programação
« Resposta #5 Online: 01 de Setembro de 2008, 20:31:52 »
O 1, sobe a condição (r_turb_spancount == 1)
para a disjunção anterior e e coloca um else if... ou o que parece mais provável (não achei end_of_loop) sobe duas
O end_of_loop fica mais pra baixo no código, esqueci de incluir. Mas ele não sai do loop, ele vai pras últimas linhas do loop, onde tem variáveis que precisam ser atualizadas antes do próximo ciclo:
Código: [Selecionar]
end_of_loop:
r_turb_s = snext;
r_turb_t = tnext;
} while (count > 0);

E esse loop ainda está aninhado dentro de outro.

Em baixo, o goto stipple pode configurar um while.
Não configura.

Eu nunca precisei de goto, só em ASM e vendo hoje poderia te-los substituidos
Sim, é raríssimo ter que usar isso. Mas pode acontecer.

Offline Moro

  • Nível Máximo
  • *
  • Mensagens: 20.984
Re: As piores e mais divertidas peças de programação
« Resposta #6 Online: 01 de Setembro de 2008, 20:38:40 »
Bueno, eu acho que configura... passa o código aí que nóis tenta
“If an ideology is peaceful, we will see its extremists and literalists as the most peaceful people on earth, that's called common sense.”

Faisal Saeed Al Mutar


"To claim that someone is not motivated by what they say is motivating them, means you know what motivates them better than they do."

Peter Boghossian

Sacred cows make the best hamburgers

I'm not convinced that faith can move mountains, but I've seen what it can do to skyscrapers."  --William Gascoyne

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: As piores e mais divertidas peças de programação
« Resposta #7 Online: 01 de Setembro de 2008, 20:43:36 »
Otimizando quake! Yay!

Vamos fazer um server do CC depois? :)
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline gogorongon

  • Nível 30
  • *
  • Mensagens: 1.834
  • Sexo: Masculino
  • Não.
Re: As piores e mais divertidas peças de programação
« Resposta #8 Online: 06 de Setembro de 2008, 12:16:07 »
Otimizando quake! Yay!

Vamos fazer um server do CC depois? :)
Tá, vou fazer algo a respeito.

Ando precisando treinar minhas habilidades.

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: As piores e mais divertidas peças de programação
« Resposta #9 Online: 06 de Setembro de 2008, 12:27:57 »
...eu já vi um programa em C que tinha um GOTO. Isso mesmo. Programa em C. Com um GOTO !

Preconceito contra goto é uma coisa retardada que é difundida pelo meio acadêmico. Existem casos excepcionais em que o uso de goto é válido.

Eu nunca fui do meio acadêmico.

Bom, tente dar manutenção nesse código e seja feliz.
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: As piores e mais divertidas peças de programação
« Resposta #10 Online: 06 de Setembro de 2008, 12:30:31 »
Por outro lado, assembler é oooooutro papo. C é programação estruturada. programação estruturada e GOTO é como corridas de motos, com butijões de gás na garupa :)
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline gogorongon

  • Nível 30
  • *
  • Mensagens: 1.834
  • Sexo: Masculino
  • Não.
Re: As piores e mais divertidas peças de programação
« Resposta #11 Online: 06 de Setembro de 2008, 13:03:39 »
Eu nunca fui do meio acadêmico.
Não quis dizer que você é, mas que você pode ter aprendido isso com algum professor. Já discuti sobre isso com quase todos os professores da minha faculdade.

Bom, tente dar manutenção nesse código e seja feliz.
Eu escrevi esse trecho do código desse jeito justamente pra facilitar a manutenção, assim uso o mesmo código pros dois casos invés de ficar copiando todas as alterações de um lugar pra outro, e sem perder velocidade.

Só tem dois goto nesse código, goto só atrapalha a manutenção quando tem vários e faz a gente se perder.
« Última modificação: 06 de Setembro de 2008, 13:05:48 por Kasimier »

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: As piores e mais divertidas peças de programação
« Resposta #12 Online: 06 de Setembro de 2008, 13:22:17 »
Eu não aprendi C na faculdade, aprendi trabalhando em '89 no velho DigiRede.

Quanto ao código, ele é super fenomenal.
Desculpa, é verdade, eu ainda não sou tão genial quanto você. Um dia chego lá.
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline Moro

  • Nível Máximo
  • *
  • Mensagens: 20.984
Re: As piores e mais divertidas peças de programação
« Resposta #13 Online: 06 de Setembro de 2008, 13:44:13 »
goto plenamente substituivel em qualquer programação estruturada.
“If an ideology is peaceful, we will see its extremists and literalists as the most peaceful people on earth, that's called common sense.”

Faisal Saeed Al Mutar


"To claim that someone is not motivated by what they say is motivating them, means you know what motivates them better than they do."

Peter Boghossian

Sacred cows make the best hamburgers

I'm not convinced that faith can move mountains, but I've seen what it can do to skyscrapers."  --William Gascoyne

Offline gogorongon

  • Nível 30
  • *
  • Mensagens: 1.834
  • Sexo: Masculino
  • Não.
Re: As piores e mais divertidas peças de programação
« Resposta #14 Online: 06 de Setembro de 2008, 13:51:15 »
Quanto ao código, ele é super fenomenal.
Desculpa, é verdade, eu ainda não sou tão genial quanto você. Um dia chego lá.
Talvez você não tenha percebido, mas por mais agressividade que eu ponha nos meus argumentos eu não gosto de ser agressivo com as pessoas em si.

Offline FZapp

  • Administradores
  • Nível Máximo
  • *
  • Mensagens: 6.943
  • Sexo: Masculino
  • El Inodoro Pereyra
    • JVMC
Re: As piores e mais divertidas peças de programação
« Resposta #15 Online: 06 de Setembro de 2008, 13:59:04 »
Não, ainda não percebi. Mas vou me esforçar.
--
Si hemos de salvar o no,
de esto naides nos responde;
derecho ande el sol se esconde
tierra adentro hay que tirar;
algun día hemos de llegar...
despues sabremos a dónde.

"Why do you necessarily have to be wrong just because a few million people think you are?" Frank Zappa

Offline Eremita

  • Nível 38
  • *
  • Mensagens: 3.833
  • Sexo: Masculino
  • Ecce.
Re: As piores e mais divertidas peças de programação
« Resposta #16 Online: 06 de Setembro de 2008, 21:22:06 »
Ah!

Estávamos aprendendo técnicas de lista ligada e recebemos o exercício de encontrar palavras "vizinhas" num dicionário com palavras de três letras. O programa deveria supor que o dicionário está em ordem alfabética.

Vai um amigo meu fazer o programa e pra testar, ele cria outro programa pra fazer o dicionário. Pra isso, ele cria seqüências de três caracteres aleatórios. Faz isso 50 mil vezes. Depois, ele faz um programa que usa o bubblesort para organizar o dicionário.

Ele não entendia por que o programa de sort dele estava demorando tanto nem poor que o programa de achar vizinhos demorava mais ainda. O pior caso apra os dois programas é quando há repetição de valores. Agora, calculem: em média, quantas vezes uma palavra de tr6es eltras deve se repetir numa lista de 50 mil palavras de três letras?

26³ = 17576; em média, cada palavra era repetida 2,8 vezes. Porra, gerar palavras aleatoriamente é válido, mas... se ele queria exaurir todas as possibilidades, por que não criou um programa sistemático para tal? Que gerasse já na ordem: aaa, aab, aac... zzw, zzy, zzz? E se ele quer imitar um dicionário real, bastava depois retirar aleatoriamente mais da metade das palavras! [E olha que isso ainda é uma decisão burra, mas eficiente: não gera palavras repetidas.]
Latebra optima insania est.

Offline SnowRaptor

  • Nível Máximo
  • *
  • Mensagens: 17.962
  • Sexo: Masculino
Re: As piores e mais divertidas peças de programação
« Resposta #17 Online: 06 de Setembro de 2008, 21:44:21 »
A gente fez uma piada dizendo que ele tinha desenvolvido um algoritmo de ordenação: o Foziesort:

while (não ordenado)
{
    reordenar aleatoriamente
}
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Churrumino

  • Nível 08
  • *
  • Mensagens: 83
  • Sexo: Masculino
Re: As piores e mais divertidas peças de programação
« Resposta #18 Online: 07 de Setembro de 2008, 16:09:57 »
Testando se o número é par ou ímpar:

j = 0;
i = n;
while (n > 2) {
    n--;
    j++;
}
if ((j % 2) == 0)
    printf ("O número é par");
else
    printf ("O número é ímpar");

Offline Luis Dantas

  • Nível Máximo
  • *
  • Mensagens: 15.195
  • Sexo: Masculino
  • Morituri Delendi
    • DantasWiki
Re: As piores e mais divertidas peças de programação
« Resposta #19 Online: 07 de Setembro de 2008, 16:23:38 »
Santo cochilo, Batman!
Wiki experimental | http://luisdantas.zip.net
The stanza uttered by a teacher is reborn in the scholar who repeats the word

Em 18 de janeiro de 2010, ainda não vejo motivo para postar aqui. Estou nos fóruns Ateus do Brasil, Realidade, RV.  Se a Moderação reconquistar meu respeito, eu volto.  Questão de coerência.

 

Do NOT follow this link or you will be banned from the site!