Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Números impares desde 1 hasta 1000

Hola, necesito ayuda con el siguiente ejercicio:
Escribe un programa que imprima en un objeto Memo los números impares desde 1 hasta 1000.

Este es el código que he construido:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var c,n1,n2:Integer;
    a,b:Integer;
    i:Integer;
begin
Memo1.Lines.Clear;
Memo1.Text:='Numeros impares';
if n1then
begin
 a:=1;
 b:=1000;
 end
else
begin
  a:=1000;
  b:=1;
end;
 For i:=a to b do
begin
  c:=1;
  while c<=1000 do
begin
  Memo1.Lines.Add(
  IntToStr(n1)+'  '+IntToStr(n2)+FloatToStr(i mod c)!=0;
end;
  Memo1.Lines.Add('          ');
 end;
end;

Me dice que el operador de relación != es ilegal.

De antemano gracias por su ayuda.
Saludos.
Responder Con Cita
  #2  
Antiguo 22-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para empezar, copia y pega correctamente tu código, pues ese código seguro que no te compila.
Después revisa esa línea que te da error, mezclando texto con números, al mismo tiempo que haces una comparación/validación

Y para futuras preguntas, recuerda poner títulos descriptivos al problema que tienes, y no pongas el enunciado de la tarea que te han encomendado.
¿Has leído ya nuestra guía de estilo?
Responder Con Cita
  #3  
Antiguo 22-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Es que así esta mi código y perdón por no hacer bien el título.
Responder Con Cita
  #4  
Antiguo 22-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Voy a dejarte el siguiente código con el animo de que le tomes amor a la herramienta y no sólo se quede en que pudiste resolver la tarea, lo estoy haciendo sin Delphi a la mano sin embargo lee bien los comentarios y compara con el código que enviaste para que veas lo que estabas haciendo errado y cómo puedes mejorar tu producción de código, un abrazo:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  i :Integer;
begin
   Memo1.Text:='Numeros impares'; //Al usar la propiedad Text reemplazas todo el texto que tenías, por eso 
                                                     //no necesitas Clear acá
   for i := 1 to 1000 do //Recorremos los números que necesitas evaluar, del 1 al 1000
   begin
      if ((i mod 2) <> 0) then //Los números divididos por 2 cuyo residuo es 0, son pares.
        Memo1.Lines.Add(IntToStr(i));
   end;
end;

Espero te sirva de ayuda y compartas con nosotros la calificación... de o de la profe .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 23-04-2017 a las 04:33:08. Razón: Es impar, no par como estaba saliendo
Responder Con Cita
  #5  
Antiguo 22-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Muchas gracias jhonny me fue de gran ayuda tu código, y si ya vi cuales eran mis errores.

De nuevo muchas gracias y Saludos.
Responder Con Cita
  #6  
Antiguo 23-04-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jhonny Ver Mensaje
Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  i :Integer;
begin
   Memo1.Text:='Numeros impares'; //Al usar la propiedad Text reemplazas todo el texto que tenías, por eso 
                                                     //no necesitas Clear acá
   for i := 1 to 1000 do //Recorremos los números que necesitas evaluar, del 1 al 1000
   begin
      if ((i mod 2) = 0) then //Los números divididos por 2 cuyo residuo es 0, son pares.
        Memo1.Lines.Add(IntToStr(i));
   end;
end;
Yo creo que podemos evitarnos el condicional:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  i :Integer;
begin
   Memo1.Text:='Numeros impares';
                                                    
   for i := 0 to 499 do
   begin
        Memo1.Lines.Add(IntToStr(2*i + 1));
   end;
end;


LineComment Saludos

Última edición por roman fecha: 23-04-2017 a las 00:25:44.
Responder Con Cita
  #7  
Antiguo 23-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Yo creo que podemos evitarnos el condicional:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  i :Integer;
begin
   Memo1.Text:='Numeros impares';
                                                    
   for i := 0 to 499 do
   begin
        Memo1.Lines.Add(IntToStr(2*i + 1));
   end;
end;


LineComment Saludos

¡Estupendo!, al ver que has reducido el tiempo de ejecución a la mitad usando ingenio puro. Sólo resta mejorar aún más la velocidad de ejecución, aprovechando las nuevas herramientas, sin ser algo perfecto porque faltaría el tema del ordenamiento (aunque en el ejercicio no piden que sea ordenado)... así:

Agregando al uses las unidades System.Threading y System.SyncObjs...

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  vCS: TCriticalSection;
  vStringList: TStringList;
begin
  vStringList := TStringList.Create;
  try
    vCS := TCriticalSection.Create;

    TParallel.&For(0, 499,
      procedure(pI: Integer)
      begin
        vCS.Acquire;
        vStringList.Add((2 * pI + 1).ToString);
        vCS.Release;
      end);

    Memo1.Text := 'Numeros impares';
    Memo1.Lines.AddStrings(vStringList);
  finally
    vCS.DisposeOf;
    vStringList.DisposeOf;
  end;
end;

Ejecutando este mismo ejercicio hasta 10000 en lugar de 1000, en mi maquina con el método anterior se demoró 3150 milisegundos en promedio, sin embargo con el segundo método 295 milisegundos en promedio.

O cuando lo subí a 100000 el promedio con el ejercicio anterior fue de 33843 milisegundos, mientras que con el segundo ha sido de 2900 milisegundos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 23-04-2017 a las 06:56:43.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar números impares de un listbox a otro ale4132 Varios 5 17-12-2012 19:33:10
Consulta Desde->Hasta Luis M. Firebird e Interbase 6 30-07-2008 19:40:34
1000 Mil M 0011 1110 1000 3e8 sakuragi La Taberna 29 05-03-2008 18:28:56
Poner puntos a los números mayores de 999 y hasta 1M Pedro-Juan Trucos 2 26-12-2007 19:13:08
Factorial hasta 1000 Cheswar Varios 29 21-09-2007 20:43:27


La franja horaria es GMT +2. Ahora son las 04:00:36.


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