Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Exclamation Problema con restas sucesivas

Hola,

haciendo unos ejercicios en Delphi, me he bloqueado en el siguiente:

Realizar un programa que nos permita calcular el cociente y el resto de la división de dos números enteros utilizando únicamente operaciones de suma y resta:La división se realizara a través de restas sucesivas.

12 / 3 = 12 – 3 = 9 1º resta
9 - 3 = 6 2º resta
6 - 3 = 3 3º resta
3 - 3 = 0 4º resta
cociente = 4 resto = 0

El resto, sé como conseguirlo mediante el bucle:

Código Delphi [-]
for i: 1 to cociente do
      Begin
          dividendo := dividendo - divisor;
      End;

Pero claro, el problema es que para ello necesito tener antes el valor del cociente, lo cual sería:

Código Delphi [-]
cociente := dividendo / divisor;

Pero como el enunciado dice que lo he de hallar mediante sumas y restas, no sé como, si con algún bucle, o no sé.

A ver si alguine me puede echar una mano.

Gracias por las futuras respuestas ;-)

Un saludo,

Geru.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #2  
Antiguo 08-08-2007
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
Hola gerupc,

¿Y no bastaría con transformar a ese FOR en un WHILE?
Una pista: No te diste cuenta de que el resto en una división como mínimo es cero y cuanto mucho menor al divisor.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 08-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos a ver si llegamos a la solución juntos:

Lo primero es darte cuenta de que existen mas tipos de bucles que el for, por ejemplo el while, que en este caso es perfecto
Código Delphi [-]
  While Condicion do
  begin

  end;

Ahora pensemos cual es la "Condicion" que nos indica que tenemos que parar. Si te fijas veras que tenemos que parar de restar en el momento en que el dividendo es menor que el divisor.

Pues bien:
Código Delphi [-]
  While Dividendo >= Divisor do
  begin
    Dividendo:= Dividendo - Divisor;
  end;

Ahora solo nos falta obtener el cociente, eso es facil, solo tenemos que contar el nuemro de vueltas que da el bucle:
Código Delphi [-]
cociente:= 0;
While Dividendo >= Divisor do
  begin
    Dividendo:= Dividendo - Divisor;
    cociente:= cociente + 1;
  end;

¿Que te parece?

Ahora todo junto:
Código Delphi [-]
var
  Dividendo, Divisor, Cociente: Integer;
begin
  Dividendo:= 13;
  Divisor:= 3;
  //
  cociente:= 0;
  while Dividendo >= Divisor do
  begin
    Dividendo:= Dividendo - Divisor;
    cociente:= cociente + 1;
  end;
  //
  Writeln('El cociente es: ',cociente);
  Writeln('El resto es: ',Dividendo);
end.
Responder Con Cita
  #4  
Antiguo 08-08-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Smile

Hola,

no sabeis cuanto os lo agradezco.

Seoane, muchísimas gracias por tu respuesta, te lo has trabajo muchísimo y has dado en un punto clave; tenía mal asimilado el concepto del bucle While. Y yo que pensaba que lo entendía perfectamente...

Ahora sí, todo perfecto, muchísimas gracias!!

:-) :-) :-) :-)

Un saludo,

Geru.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #5  
Antiguo 08-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Y ya entrados la escuelita, porque no hacemos la prueba con el bucle REPEAT UNTIL

Código Delphi [-]
 
var
  Dividendo, Divisor, Cociente: Integer;
begin
  Dividendo:= 13;
  Divisor:= 3;
  cociente:= 0;
  REPEAT
    Dividendo:= Dividendo - Divisor;
    cociente:= cociente + 1;
  UNTIL Dividendo < Divisor 
  Writeln('El cociente es: ',cociente);
  Writeln('El resto es: ',Dividendo);
end.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 08-08-2007
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
No pude evitarlo... tuve que meter código.
Y ya que estamos... si se desea algo más "elaborado":

Código Delphi [-]
function DivisionEntera(Dividendo, Divisor: integer; var Resto: integer): integer;
begin
  result := 0;
  if Divisor = 0
     then begin
            ShowMessage('Error. División por cero');
            exit;
          end;
  Resto := Dividendo;
  while resto >= Divisor do
    begin
      Resto := resto - Divisor;
      inc(Result);
    end;
end;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 08-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Y ya entrados la escuelita, porque no hacemos la prueba con el bucle REPEAT UNTIL
Y si el dividendo es menor que el divisor. Obtendrías un cociente de 1 y un resto negativo
Responder Con Cita
  #8  
Antiguo 08-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por seoane Ver Mensaje
Y si el dividendo es menor que el divisor. Obtendrías un cociente de 1 y un resto negativo
, ese tema viene en el siguiente capitulo, no se nos adelante niño genio.

Salud OS

Edito: En todo caso que le parece si la corrección se la dejamos al niño gerupc, digo si es que le interesa aprender algo más.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 08-08-2007 a las 22:11:27.
Responder Con Cita
  #9  
Antiguo 09-08-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Unhappy

Aupa!

Pues he estado un buen rato intentando con varias cosas....pero no lo consigo (el hacer que el bucle repeat no acepte un dividendo menor que el divisor).

He intentado con IF-THEN, haciendo:

Código Delphi [-]
 
if dividendo < divisor then
write('Error')
else
write(.........)// resultado

Pero como sabreis, nada .

EDITO:: Ahora me surge el siguiente problema, tengo que presentar las soluciones así:

Introduce el dividendo: 12
Introduce el divisor: 3
El cociente de 12 entre 3 es 4 y su resto es 0


Claro, el problema está en el dividendo, cómo me si el resto es 2 me aparece en el resultado final, como resto, tanto como dividendo.
A ver si me podeis ayudar :-)

Un saludo,

Geru.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto

Última edición por gerupc fecha: 09-08-2007 a las 01:30:23.
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
Problema con producto a través de sumas sucesivas. gerupc Varios 5 07-08-2007 22:12:44


La franja horaria es GMT +2. Ahora son las 12:09:04.


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