Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > La Taberna
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
El problema FizzBuzz

Propongo realizar este problema:

Cita:
Escribe, en el lenguaje de programación que desees, un programa que muestre en pantalla los números del 1 al 100, sustituyendo los múltiplos de 3 por el palabro “Fizz” y, a su vez, los múltiplos de 5 por “Buzz”. Para los guarismos que, al tiempo, son múltiplos de 3 y 5, utiliza el combinado “FizzBuzz”.
No hagas trampas y controla el tiempo que tardas en hacerlo.
Responder Con Cita
  #2  
Antiguo 12-02-2012
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
Hola.

sería algo así?

Código Delphi [-]
var
  i
  ,OldVal: Integer;
  NewVal: Extended;
  Str: String;
begin

   OldVal := EdtInput.Value;  //TIntEdit

   for i := 1 to OldVal do
   begin
      Str:='';

     NewVal := i / 3;

     if round(NewVal) = NewVal then
        Str:= 'Fizz';

        NewVal:= i / 5;

       if  round(NewVal) = NewVal then
        Str:= Str+'Buzz';

       if Str = '' then
        Str:= IntToStr(i);

       MmOutput.Lines.Add(Str); //TMemo
     end;
 end;
Responder Con Cita
  #3  
Antiguo 12-02-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Ummmmmmm.... ¿esto tiene trampa?

Si lo he entendido bien el código sería este:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
n: SmallInt;
m: Currency;
begin
  for N:=1 to 100 do begin
    if (N mod 3= 0) and (N mod 5=0) then begin
      ListBox1.Items.Add('FizzBuzz');
    end else if (N mod 3= 0) then begin
      ListBox1.Items.Add('Fizz');
    end else if (N mod 5= 0) then begin
      ListBox1.Items.Add('Buzz');
    end else begin
      ListBox1.Items.Add(IntToStr(N));
    end;
  end;
end;

el resultado sería este:



y el tiempo ha sido dos minutillos y pico. ¿Es mucho?
__________________
Be water my friend.

Última edición por newtron fecha: 12-02-2012 a las 09:48:30. Razón: Le había puesto a todas las lineas el número delante y he visto después que no era así exactamente
Responder Con Cita
  #4  
Antiguo 12-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Esto es un problema que piden en algunas ocasiones las empresas que buscan programadores, se trata de ver cómo lo hacen, el tiempo que necesitan para hacerlo, la optimización, "los detalles", etc.
Por ejemplo, está más optimizado para el bucle usar un smallint que un integer, incluso mejor todavía un byte, si fuese posible.
No son necesarios decimales, así que se pueden usar tipos de datos acorde a eso.
Si el programa hace lo mismo pero con muchas menos líneas, es otro buen punto a favor.
También dicen que si se tarda al menos 10 minutos es que ese programador no es válido, sin embargo, tiempos de menos de 3 minutos es un programador muy recomendable.
No quiere decir que porque tenga menos líneas va a ser mejor, puede ser un código muy ofuscado y no convenga a la empresa, puede ser más recomendable algo intermedio.
En fin, que depende de para qué empresa, puede ser más interesante uno u otro.
Desde luego que newtron, para no ser programador, ha tardado muy poco
Por poner un par de ejemplos:

Programador 1:
Código:
public class FizzBuzz
{
      public static void main(String [] args)
    {
          int k;
          for(int i=1; i=100; i++)
        {
            k = 0;
              if(i%3==0)
            {
                k = 1;
            }
              if(i%5==0)
            {
                k = k + 2;
            }
              switch(k)
            {
                case 1:
                    System.out.println("Fizz");
                    break;
                case 2:
                    System.out.println("Buzz");
                    break;
                case 3:
                    System.out.println("FizzBuzz");
                    break;
                default:
                    System.out.println(i);
            }
        }
    }
}
Programador 2:
Código:
for(int i=0;i<100;printf(i%3==0?i%5==0?"Fizzbuzz":"FIZZ":i%5==0?"BUZZ":"%i",i++));
Hay diferencias, ¿no creen?

Última edición por Casimiro Notevi fecha: 29-06-2012 a las 00:38:17.
Responder Con Cita
  #5  
Antiguo 12-02-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
[/code]Programador 2:
Código:
for(int i=0;i100;printf(i%3==0?i%5==0?"Fizzbuzz":"FIZZ":i%5==0?"BUZZ":"%i",i++));
Hay diferencias, ¿no creen?
Ya me ha entrado una depresión... me iré a llorar a alguna esquina.
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 12-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si tu código está muy bien, y lo has hecho rapidísimo, está muy bien, la verdad.

El código ese en lenguaje c es como lo hubiese hecho yo, seguramente, pero queda demasiado "ofuscado" para uso normal, depende de para qué puesto de trabajo optara, habría hecho casi lo mismo que has escrito tú, en delphi.
Responder Con Cita
  #7  
Antiguo 12-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Por ejemplo, está más optimizado para el bucle usar un smallint que un integer, incluso mejor todavía un byte, si fuese posible.
Discrepo totalmente. En realidad esto de las optimizaciones dependerá del lenguaje, del compilador y la arquitectura de la computadora en donde se compila.
En Delphi y a 32 bits, es mucho más efectivo hacer un for sobre un integer que sobre un Byte o un SmallInt.
Internamente el byte como SmallInt trabajan sobre el tipo integer, dejando en cero lo bytes restantes, y cuando se utilizan estos tipos se hacen conversiones indirectas desde y hacia el tipo integer.
El tamaño del integer corresponde justo al tamaño del registro de la CPU y las micro-operaciones para el for se valen de éstos registros... son bien aceleradas.
Utilizar byte o smallint simplemente lo hace más lento ya que debe hacer estas conversiones que le malgastan unos ciclos, y por apenas un byte no vale la pena intentar ahorrarse memoria en tipos numéricos menores... ¡porque no te la ahorras!

Cita:
Empezado por Casimiro Notevi Ver Mensaje
No son necesarios decimales, así que se pueden usar tipos de datos acorde a eso.
Si alguien pretendiera utilizar un tipo de dato real, sea de punto fijo o flotante, para este ejercicio es un semerendo tonto; por no decir algo más pesado Si no hay siquiera alguna pizca de referencia o indicio de que se requiera de números reales, ¿quien se pondría a agregar variables de estos tipos?
Discúlpame por mi falta de tacto, pero creo que hasta un recién iniciado se da cuenta.... hay que ser muy bestia.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 12-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Era sólo un ejemplo por darlo a entender

Creo que necesitas otras vacaciones, amigo Delphius



p.d.: aunque está bien la aclaración, por supuesto.
Responder Con Cita
  #9  
Antiguo 12-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Era sólo un ejemplo por darlo a entender

Creo que necesitas otras vacaciones, amigo Delphius

p.d.: aunque está bien la aclaración, por supuesto.
¿Tu crees? Y ya decía yo en FB si era válido tomarse unas vacaciones para descansar de las vacaciones Esto me pasa por llevarme parte del trabajo conmigo... y a NewDelphius. Ese cuate me está llevando por mal camino

Bueno, es que el ejercicio es muy elemental... mientras no te avientes retos como los de Al y de Roman, estamos bien.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 12-02-2012
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
Hola.

Aún siendo de el grupo de los "bestias" sé que algo nuevo aprendí.
Responder Con Cita
  #11  
Antiguo 12-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por beginner01 Ver Mensaje
Hola. Aún siendo de el grupo de los "bestias" sé que algo nuevo aprendí.
Pues sí, siempre se aprende algo nuevo
Responder Con Cita
  #12  
Antiguo 13-02-2012
Avatar de Julián
Julián Julián is offline
Merodeador
 
Registrado: may 2003
Ubicación: en mi casa
Posts: 2.019
Poder: 10
Julián Va por buen camino
con Javascript
Código:
<script>
for(i=1;i<101;i++){document.write(((i%3==0&&i%5==0)?'FizzBuzz':(i%3==0)?'Fizz':(i%5==0)?'Buzz':i)+'<br />');}
</script>
__________________
"la única iglesia que ilumina es la que arde"
Anonimo
Responder Con Cita
  #13  
Antiguo 13-02-2012
Avatar de Julián
Julián Julián is offline
Merodeador
 
Registrado: may 2003
Ubicación: en mi casa
Posts: 2.019
Poder: 10
Julián Va por buen camino
Versión 2:
Código:
<script>
for(i=1;i<101;i++){x='';if(!(i%3))x+='Fizz';if(!(i%5))x+='Buzz';document.write(((x)?x:i)+'<br />');}
</script>
__________________
"la única iglesia que ilumina es la que arde"
Anonimo
Responder Con Cita
  #14  
Antiguo 13-02-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Un lenguaje que inventé hace un tiempo y que, por fin, le he encontrado una aplicación (si aceptan un presupuesto que he hecho, claro ):

Código:
  0
  @
    1 +
    DUP 3 %
    0 = IF
      "fizz" CALL:WRITE
    FI
    DUP 5 %
    0 = IF
      "buzz" CALL:WRITE
    FI
    DUP DUP 3 % SWAP 5 %
    0 = SWAP 0 = & IF
      DUP CALL:WRITE
    FI
    "" CALL:WRITELN
    DUP 100 < IF
      RET
    FI
"Ahora vas y lo cascas"

Explicación:

Este lenguaje es, en realidad, el "Ensamblador" de una máquina virtual basada en pilas, al estilo FORTH. DUP duplica el elemento en la cima de la pila, mientras que SWAP intercambia los dos valores de la cima. Los operadores extraen uno o dos elementos de la pila, lo operan y lo devuelven a la pila; y son los normales (+, -, >, <...) siendo "%" el cálculo del resto en una división entera. "CALL" llama a una rutina (WRITE y WRITELN en este caso). @ apila en la pila de código (separada de la pila de datos, como en FORTH) la dirección de dicha arroba, mientras que RET desapila la cima de la pila de código en el registro de ejecución.

Vamos, muy sencillo.

El código puede optimizarse duplicando e intercambiando los resultados de las operaciones (que en principio es más rápido que calcular el módulo y hacer comparaciones), pero entonces ya te lías...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 13-02-2012 a las 11:16:20.
Responder Con Cita
  #15  
Antiguo 13-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Vamos, muy sencillo.
Sí, ya se ve que es muy sencillo
Responder Con Cita
  #16  
Antiguo 13-02-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Ya dije en otro sitio lo de que sencillo no significa fácil y tal... De todas formas, a los que les guste el Ensamblador deberían entenderlo puesto que, aunque casi todos los microprocesadores están basados en registros, el manejo de pilas está al orden del día. Es más, casi todas las instrucciones de mi lenguaje tienen correspondencia directa con instrucciones ensamblador de casi cualquier micro, aunque eso de usar dos pilas separadas, una para datos y otra para direcciones de retorno, puede dar algún que otro dolor de cabeza.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #17  
Antiguo 13-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No, si no es que me parezca complicado, es sólo que no me veo programando una gestión de stock de almacenes con ese lenguaje
Responder Con Cita
  #18  
Antiguo 13-02-2012
Avatar de Julián
Julián Julián is offline
Merodeador
 
Registrado: may 2003
Ubicación: en mi casa
Posts: 2.019
Poder: 10
Julián Va por buen camino
Y digo yo.. ¿pa que lo haces a pilas puediendolo hacer a corriente? XDD
__________________
"la única iglesia que ilumina es la que arde"
Anonimo
Responder Con Cita
  #19  
Antiguo 13-02-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
... el manejo de pilas está al orden del día...
Oyes, pues yo pensaba que estabas hablando de pilas de lavar.
__________________
Be water my friend.
Responder Con Cita
  #20  
Antiguo 13-02-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Que vivan las palabras polisémicas.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:37:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi