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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Suma de números pares que hay entre dos números

Hola necesito ayuda con el siguiente ejercicio:
Escribe un programa que calcule la suma de los números pares que hay entre dos números dados como entrada. Usa la instrucción de ciclo while-do o repeat-until.
De antemano muchas gracias.
Saludos.
Responder Con Cita
  #2  
Antiguo 21-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Y cual es tu duda?
Responder Con Cita
  #3  
Antiguo 21-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
[AgustinOrtu], es que no se como empezar el ejercicio.
Responder Con Cita
  #4  
Antiguo 21-04-2017
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.231
Poder: 20
ElKurgan Va camino a la fama
A lo mejor te sirve esto:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  n1,n2,c,codigo:Integer;
  i: Integer;
  desde, hasta: integer;
  suma: Integer;
begin
  Memo1.Lines.Clear;
  val(Edit1.Text,n1,codigo);
  val(Edit2.Text,n2,codigo);
  if n1 < n2 then
  begin
    desde := n1;
    hasta := n2;
  end
  else
  begin
    desde := n2;
    hasta := n1;
  end;

  Memo1.Lines.Add(
    Format('Numeros Pares entre %0:d y %1:d', [desde, hasta]));

  i := desde;
  Suma := 0;
  repeat
    if (i mod 2) = 0 then
    begin
      Memo1.Lines.Add(Format('%d', [i]));
      Suma := Suma + i;
    end;
    i := i + 1;
  until i > hasta;
  Memo1.Lines.Add('--------------------');
  Memo1.Lines.Add(format('Total suma: %d', [Suma]));
end;
Un saludo
Responder Con Cita
  #5  
Antiguo 21-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
HolaElKurgan, tengo uma duda, que signsignifica lo siguiente:
Código Delphi [-]
Memo1.Lines.Add(
    Format('Numeros Pares entre %0:d y %1:d', [desde, hasta]));

  i := desde;
  Suma := 0;
  repeat
    if (i mod 2) = 0 then
    begin
      Memo1.Lines.Add(Format('%d', [i]));
      Suma := Suma + i;
    end;
    i := i + 1;
  until i > hasta;
  Memo1.Lines.Add('--------------------');
  Memo1.Lines.Add(format('Total suma: %d', [Suma]));
end;

Principalmente lo de los %.
Gracias y saludos.
Responder Con Cita
  #6  
Antiguo 21-04-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Daniel2622 Ver Mensaje
HolaElKurgan, tengo uma duda, que signsignifica lo siguiente:
...
Principalmente lo de los %.
.
[ Format command ]

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 21-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
Prueba éste:

Código Delphi [-]
function SumaPares(N, M: Integer): Integer;
begin
  while Random(2) = 0 do;

  if (N mod 2 = 1) then Inc(N);
  if (M mod 2 = 1) then Dec(M);

  Result := Round(((Sqr(M + 1) - 1) - (Sqr(N - 1) - 1))/4);
end;



LineComment Saludos
Responder Con Cita
  #8  
Antiguo 22-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Gracias [El Kurgan], me fue de gran ayuda tu código.
Saludos.
Responder Con Cita
  #9  
Antiguo 23-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Esta opción requiere menor potencia de cálculo:
Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);
  Result:= ((m - n) div 2 + (m - n) mod 2) * ((n + m) div 2);
end;

Saludos.
Responder Con Cita
  #10  
Antiguo 24-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 escafandra Ver Mensaje
Esta opción requiere menor potencia de cálculo:
Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);
  Result:= ((m - n) div 2 + (m - n) mod 2) * ((n + m) div 2);
end;

Saludos.
Je, je, sí, pero es que el ejercicio pedía el uso de while-do o repeat-until. De ahí la línea que habia puesto:

Código Delphi [-]
while Random(2) = 0 do;



LineComment Saludos
Responder Con Cita
  #11  
Antiguo 24-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 escafandra Ver Mensaje
Esta opción requiere menor potencia de cálculo:
Código Delphi [-]
Result:= ((m - n) div 2 + (m - n) mod 2) * ((n + m) div 2);
Por cierto, que está muy bonita esta fórmula. Originalmente la que había obtenido yo era ésta:

Código Delphi [-]
(m - n + 2)*(m + n)/4;

y al tratar de hacerla más simétrica fue que obtuve los cuadrados. Pero la tuya los evita y queda mejor

LineComment Saludos
Responder Con Cita
  #12  
Antiguo 24-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
Rizando el rizo

escafandra, creo que tu fórmula:

Cita:
Empezado por escafandra Ver Mensaje
Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);

  Result:= ((m - n) div 2 + (m - n) mod 2) * ((n + m) div 2);
end;
puede aún ser más sencilla. Debido a los dos condicionales, n y m siempre son impares y por tanto (n + m) y (n - m) siempre son pares. Entonces (m - n) mod 2 siempre es cero y se reduce a ((m - n) div 2) * ((n + m) div 2) y como los términos son pares el div coincide con la división normal, así que podemos ponerlo como

(m - n)*(m + n)/4 = (m - n)*(m + n) div 4

o sea:

Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);

  Result := (m - n)*(m + n) div 4;
end;

LineComment Saludos
Responder Con Cita
  #13  
Antiguo 25-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Rizando el rizo

escafandra, creo que tu fórmula:



puede aún ser más sencilla. Debido a los dos condicionales, n y m siempre son impares y por tanto (n + m) y (n - m) siempre son pares. Entonces (m - n) mod 2 siempre es cero y se reduce a ((m - n) div 2) * ((n + m) div 2) y como los términos son pares el div coincide con la división normal, así que podemos ponerlo como

(m - n)*(m + n)/4 = (m - n)*(m + n) div 4

o sea:
Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);

  Result := (m - n)*(m + n) div 4;
end;

LineComment Saludos
Efectivamente roman sale una fórmula bastante redonda y sabiendo que suma por diferencia es diferencia de cuadrados, no lo aplicaremos para no desbordar rápidamente los enteros (en caso de límites más amplios). Ya puestos y con ese fin, usamos la API de Windows

Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);
  Result:= MulDiv(m-n, n+m, 4);
end;

Saludos.

Última edición por escafandra fecha: 25-04-2017 a las 01:00:50.
Responder Con Cita
  #14  
Antiguo 25-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Estos matematicos locos...
Responder Con Cita
  #15  
Antiguo 25-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
Estupendo,

Cita:
Empezado por escafandra Ver Mensaje
Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);
  Result:= MulDiv(m-n, n+m, 4);
end;
Ya nada más para satisfacer al maestro:

Código Delphi [-]
function SumaPares(n, m: Integer): Integer;
begin
  while false do;

  if(n mod 2 = 0) then dec(n);
  if(m mod 2 = 0) then inc(m);
  Result:= MulDiv(m-n, n+m, 4);
end;



LineComment Saludos
Responder Con Cita
  #16  
Antiguo 25-04-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.220
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ElKurgan Ver Mensaje
A lo mejor te sirve esto:
Es posible que sea una opción fácil (sobre todo para la persona que está pidiendo ayuda con los deberes -o al menos esa sensación de da a mi-), pero tal vez deberíamos plantearnos si esta es la solución "adecuada" para un caso como este.

En los últimos días están saliendo varios hilos como este, y creo que tenemos que tener cuidado con las soluciones que ofrecemos.

No se si me explico claramente.

NOTA: No se trata de NO ayudar, en este caso a Daniel2622, ya que al final la utilidad del foro es esa, pero tampoco estamos para "hacerle los deberes a nadie".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #17  
Antiguo 25-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
NOTA: No se trata de NO ayudar, en este caso a Daniel2622, ya que al final la utilidad del foro es esa, pero tampoco estamos para "hacerle los deberes a nadie".
Totalmente de acuerdo. De hecho no estamos ayudando, estamos haciendo mal a la persona. Por eso mi pregunta en estos casos es siempre la misma:

Cita:
Empezado por AgustinOrtu
Y cual es tu duda?
Responder Con Cita
  #18  
Antiguo 26-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
En realidad el hilo se ha derivado hacia disquisiciones y trucos matemáticos que nada tienen que ver con la propuesta del ejercicio, que claramente no pretendía la deriva ofrecida. De forma que hemos pasado un buen rato.

Saludos.
Responder Con Cita
  #19  
Antiguo 26-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
Coincido. Pequeño reto:

Hallar la fórmula ahora para la suma de impares entre dos números dados

LineComment Saludos
Responder Con Cita
  #20  
Antiguo 26-04-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.220
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
Totalmente de acuerdo. De hecho no estamos ayudando, estamos haciendo mal a la persona. Por eso mi pregunta en estos casos es siempre la misma:
+1
Totalmente de acuerdo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Números aleatorios decimales entre 0 y 1 LuisAlf:: Varios 2 30-04-2011 01:59:56
Comparar 2 numeros jzginez OOP 6 18-02-2010 02:41:11
Numeros a letras citlalliDgp Varios 6 19-03-2009 08:14:54
Los numeros del Pasaporte / DNI seoane Trucos 0 08-06-2006 14:31:59
equivalencia entre tipos de numeros kikodelphi MS SQL Server 4 14-12-2005 12:59:55


La franja horaria es GMT +2. Ahora son las 09:51:20.


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