Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con restas sucesivas (https://www.clubdelphi.com/foros/showthread.php?t=46797)

gerupc 08-08-2007 19:24:08

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.

Delphius 08-08-2007 19:34:51

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,

seoane 08-08-2007 19:42:48

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.

gerupc 08-08-2007 20:06:35

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.

egostar 08-08-2007 20:30:43

Y ya entrados la escuelita, porque no hacemos la prueba con el bucle REPEAT UNTIL:D

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.

Delphius 08-08-2007 20:44:47

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,

seoane 08-08-2007 20:54:56

Cita:

Empezado por egostar (Mensaje 221776)
Y ya entrados la escuelita, porque no hacemos la prueba con el bucle REPEAT UNTIL:D

Y si el dividendo es menor que el divisor. Obtendrías un cociente de 1 y un resto negativo :eek: :D

egostar 08-08-2007 20:57:28

Cita:

Empezado por seoane (Mensaje 221803)
Y si el dividendo es menor que el divisor. Obtendrías un cociente de 1 y un resto negativo :eek: :D

:D:D:D, ese tema viene en el siguiente capitulo, no se nos adelante niño genio.:D:D:D

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. :D

gerupc 09-08-2007 00:19:37

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 :confused:.

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.


La franja horaria es GMT +2. Ahora son las 20:48:02.

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