Algoritmica en El Metodo de Restas Sucesivas

29
Universidad Autónoma del Estado de México Facultad de Ingeniería Agosto de 2010. Programa en lenguaje C Cociente y Residuo de una División Gabriel González Palma

description

un trabajo simple sobre el metodo de restas sucesivas en la division aplicando el paradigma de la programacion estructurada aplicando los tres tipos de estructuras de control iterativas.

Transcript of Algoritmica en El Metodo de Restas Sucesivas

Page 1: Algoritmica en El Metodo de Restas Sucesivas

1

Universidad Autónoma del Estado de México

Facultad de Ingeniería

Agosto de 2010.

Programa en lenguaje C

Cociente y Residuo de una División

Gabriel González Palma

Page 2: Algoritmica en El Metodo de Restas Sucesivas

2

Índice

Índice 2

Planteamiento del Problema 4

Hipótesis 5

Objetivos 6

Esquema 7

1. Estructuras de Control. 9

1.1. Definición.

1.2. Estructuras secuenciales.

1.3. Estructuras Selectivas.

1.4. Estructuras repetitivas.

1.4.1 la estructura de control “Mientras”

1.4.2 la estructura de control “Para”

1.4.3 la estructura de control “Repite”

2. La División. 11

2.1 Definición.

2.2 Componentes.

2.3 Reglas matemáticas comunes en la división.

2.4 Método de Restas sucesivas.

3. Obtención de un Modelo Matemático de la división. 13

3.1 Algunas demostraciones.

Page 3: Algoritmica en El Metodo de Restas Sucesivas

3

4. Obtención de un algoritmo General. 14

5. Adaptación del Algoritmo General a los Algoritmos Específicos 15

5.1 Algoritmo para la estructura de control “Mientras”

5.1.1 Pseudocódigo

5.2 Algoritmo para la estructura de control “Para”

5.2.1 Pseudocódigo

5.3 Algoritmo para la estructura de control “Repite”

5.3.1 Pseudocódigo

6. Implementación de los Algoritmos Obtenidos. 19

7. Obtención de Resultados. 27

8. Conclusiones 28

Fuentes Documentales 29

Page 4: Algoritmica en El Metodo de Restas Sucesivas

4

Planteamiento del Problema

La programación estructurada ha sido planteada como un conjunto de técnicas de

programación, las cuales utiliza un número ilimitado de estructuras de control esto

hace que los programas escritos sean más fáciles de escribir, verificar leer y

mantener.

Un elemento importante dentro de la programación estructurada es este teorema:

“Un programa puede ser escrito utilizando tres tipos de estructuras de control,

Secuenciales, selectivas y repetitivas o iterativas”

De acuerdo a lo anterior existen tres tipos de estructuras de control en el paradigma

estructurado de programación la cuales se describen de la forma siguiente:

Estructuras Secuenciales, Estructuras Selectivas, Estructuras Repetitivas y

dentro de las repetitivas están “Mientras” , “Para” , “Repite” .

Por otro lado, la división es un procedimiento algorítmico por el cual se obtiene a

partir de dos números llamados divisor (d) y dividendo (D) otra constante llamada

cociente (C) y otro llamado residuo (R) los cuales cumplen la siguiente regla.

Considerando los datos anteriormente mencionados entonces se puede plantear la

siguiente cuestión:

Dados dos números enteros M y N entonces:

¿Existe un algoritmo programable para cada uno de los tres tipos de

estructuras de control iterativas (Para, mientras y Repite) del paradigma

estructurado por el cual se puede saber el cociente y el residuo en la relación

de los números M y N?

Page 5: Algoritmica en El Metodo de Restas Sucesivas

5

Hipótesis.

Si existe un algoritmo programable para cada una de las estructuras de control

iterativas para saber el residuo y el cociente de la relación de dos números enteros M

y N.

Page 6: Algoritmica en El Metodo de Restas Sucesivas

6

Objetivos

Objetivo General

Obtener tres programas tal que dados dos números enteros M y N, calcular su

cociente y su residuo utilizando las estructuras de control “para”, “mientras” y “repite”.

Objetivos Específicos

Definir un modelo matemático para la realización de un algoritmo para la obtención

de cociente y su residuo en la división de números enteros

Obtención de un algoritmo general para la obtención de cociente y su residuo en la

división de números enteros

Adaptar el algoritmo general en pseudocódigo, que calcule su cociente y su residuo,

empleando la estructura de control mientras.

Adaptar el algoritmo general en pseudocódigo, que calcule su cociente y su residuo,

empleando la estructura de control repite.

Adaptar el algoritmo general pseudocódigo, que calcule su cociente y su residuo,

empleando la estructura de control para.

Programar en un lenguaje de programación cualquiera el algoritmo obtenido

Page 7: Algoritmica en El Metodo de Restas Sucesivas

7

Esquema

1. Estructuras de Control.

1.1. Definición.

1.2. Estructuras secuenciales.

1.3. Estructuras Selectivas.

1.4. Estructuras repetitivas.

1.4.1 la estructura de control “Mientras”

1.4.2 la estructura de control “Para”

1.4.3 la estructura de control “Repite”

2. La División.

2.1 Definición.

2.2 Componentes.

2.3 Reglas matemáticas comunes en la división.

2.4 Método de Restas sucesivas.

3. Obtención de un Modelo Matemático de la división.

3.1 Algunas demostraciones.

4. Obtención de un algoritmo General.

5. Adaptación del Algoritmo General a los Algoritmos Específicos

5.1 Algoritmo para la estructura de control “Mientras”

5.1.1 Pseudocódigo

Page 8: Algoritmica en El Metodo de Restas Sucesivas

8

5.2 Algoritmo para la estructura de control “Para”

5.2.1 Pseudocódigo

5.3 Algoritmo para la estructura de control “Repite”

5.3.1 Pseudocódigo

6. Implementación de los Algoritmos Obtenidos.

7. Obtención de Resultados.

8. Conclusiones

Page 9: Algoritmica en El Metodo de Restas Sucesivas

9

1. Estructuras de Control.

1.1. Definición

Las estructuras de control según Álvarez (2004) son las que “controlan la ejecución de otras instrucciones”. Existen tres tipos elementales de estructuras de control:

1. Secuenciales 2. Selectivas (alternativas) 3. Iterativas (repetitivas).

Estas son capaces de encausar el flujo de un programa lo que hace que los errores

en un programa en el paradigma estructurado reduzca sus errores y sea

comprensible, además de que es fácilmente mantenible.

1.2. Estructuras secuenciales.

Son aquellas en las que una instrucción sigue a otra de forma continua.

1.3. Estructuras Selectivas.

Se utilizan para tomar decisiones y pueden ser simples, dobles y anidadas, y

múltiples.

1.4. Estructuras repetitivas.

Repiten la ejecución de un cierto bloque de instrucciones. Existen tres

estructuras repetitivas elementales que son:

1.4.1 La Estructura de Control “Mientras”

Es aquella que se ejecuta mientras una condición sea verdadera.

1.4.2 La Estructura de Control “Para”

Es la estructura que ejecuta un bloque de instrucciones un número definido de

veces.

Page 10: Algoritmica en El Metodo de Restas Sucesivas

10

1.4.3 La Estructura de Control “Repite”

Es aquella estructura de control que se repite mientras una condición sea

falsa. Es similar a la estructura mientras solo que esta tiene la peculiaridad de

que al menos ejecuta una vez el bloque de instrucciones.

Page 11: Algoritmica en El Metodo de Restas Sucesivas

11

2. La División.

2.1 Definición.

La división es una operación aritmética de descomposición que consiste en averiguar cuántas veces un número (el divisor) está contenido en otro número (el dividendo). La división es una operación matemática, específicamente, de aritmética elemental, inversa de la multiplicación y puede considerarse también como una resta repetida.

Según su resto, las divisiones se clasifican como exactas si su resto es cero ó inexacto cuando no lo es.

Al resultado entero de la división se denomina cociente y si la división no es exacta, es decir, el divisor no está contenido un número exacto de veces en el dividendo, la operación tendrá un resto o residuo (wikipedia.org, 2010).

2.2 Componentes.

1. Divisor: Es el numero que divide o descompone al número llamado

Dividendo.

2. Dividendo: Es el numero que se descompone según sea el número de veces

que contenga al divisor.

3. Cociente: es el número entero de veces que contiene el dividendo al divisor

4. Residuo: es el sobrante de la resta final de la división.

2.3 Reglas matemáticas comunes en la división.

1) El dividendo es igual a la suma del cociente multiplicado por el divisor más el

residuo.

2) El residuo de la relación de números iguales es 0 y el cociente es 1.

3) El cociente de la relación de un numero y cero tiende a infinito por tanto es

incalculable.

Page 12: Algoritmica en El Metodo de Restas Sucesivas

12

4) Cuando el divisor d es menor que el dividendo D el residuo R es mayor o igual

a cero.

5) El residuo R es siempre mayor o igual a cero.

6) Cuando el divisor d es mayor que el dividendo D entonces el cociente C es

igual a cero y el residuo R es igual al dividendo.

7) El cociente multiplicado por el divisor debe ser siempre menor al Dividendo

8) Cuando el divisor y el producto entre el cociente y el divisor son iguales

entonces el residuo siempre es 0 y el cociente es 1 (ver 2).

2.4 Método de Restas sucesivas.

El método de restas sucesivas sirve para obtener el cociente y el residuo de la

relación de números. Este consiste en restar sucesivamente el divisor del dividendo

hasta obtener un resultado menor que el divisor, que será el resto de la división; el

número de restas efectuadas será el cociente.

Page 13: Algoritmica en El Metodo de Restas Sucesivas

13

3. Obtención de un Modelo Matemático de la división.

Sea una función que cambia en un tiempo t:

Sujeto a

En donde

R(t) es el residuo.

D = es el dividendo.

d = divisor.

t = es el cociente o el tiempo actual de la operación.

La restricción debajo de la función delimita a la misma de tal forma que R tiende a

cero mientras t tiende a D/d.

Page 14: Algoritmica en El Metodo de Restas Sucesivas

14

4. Obtención de un Algoritmo General.

Ya hemos obtenido un modelo que nos permite visualizar los alcances de nuestro

algoritmo. Así pues podemos definir lo siguiente.

Algoritmo Rs (Restas Sucesivas por Evaluación de Función).

Dados dos enteros M y N donde M fungirá como dividendo y N como divisor

entonces según lo definido anteriormente, el modelo quedaría de la siguiente forma:

Y el algoritmo quedaría de la siguiente forma.

1Rs: Inicializar t y R en Cero ir a 2Rs.

2Rs: Hacer R igual a M – t*N, incrementar en 1 a t si r es mayor o igual a 0.

Si Ir 1Rs o en otro caso ir a 2Rs.

3Rs: Retornar el valor de R o el valor t según sea el caso e ir a 3Rs

4Rs: Terminar.

Page 15: Algoritmica en El Metodo de Restas Sucesivas

15

5. Adaptación del Algoritmo General a los Algoritmos Específicos

5.1 Algoritmo para la estructura de control “Mientras”

El algoritmo para la estructura “Mientras” es el mismo general obtenido. Vid. Infra

Cap. 4

Algoritmo M (Restas Sucesivas por Evaluación de Función).

M1: Inicializar t y R en Cero ir a M2.

M2: Hacer R igual a M – t*N, si r es menor o igual a 0 incrementar en 1 a t.

Si Ir a M2 o en otro caso ir a M3.

M3: Retornar el valor de R o el valor t según sea el caso e ir a 4M

M4: Terminar.

Este algoritmo respeta el principio de la estructura Mientras que es la repetición de

un proceso mientras una condición sea verdadera.

5.1.1 Pseudocódigo

Inicia

Enteros t,r, M,N.

Asignar 0 a t, 0 a r

Escribe “Introduce Divisor y Dividendo”

Leer M

Leer N

Mientras t*N menor o igual a M

r=M – t*N

Page 16: Algoritmica en El Metodo de Restas Sucesivas

16

si r es mayor o igual a 0 entonces

incrementar en 1 a t

fin si

fin mientras

Escribe “El Cociente es ” , t, ”y el residuo es”,r

Termina

5.2 Algoritmo para la estructura de control “Repite”

Sabemos que existen restricciones fundamentales dentro de la operación aritmética

de la división vid. Infra capitulo 2. Una de ellas menciona que si el divisor es menor

al dividendo entonces el residuo será mayor o igual a cero, esto implica que al menos

una vez podemos calcular el residuo. Por lo tanto el algoritmo para la estructura

repite será la siguiente.

Algoritmo R (Restas Sucesivas por Evaluación de Función).

1R: Inicializar t y R en Cero e ir a 2R.

2R: Hacer R igual a M – t*N, incrementar en 1 a t.

Si Ir a 3Rs o en otro caso ir a 2R.

3R: Retornar el valor de R o el valor t menos 1 según sea el caso e ir a 4R

4R: Terminar.

Este algoritmo respeta el principio de la estructura Repite que es la iteración de un

proceso mientras una condición sea falsa.

5.2.1 Pseudocódigo

Inicia

Enteros t,r, M,N.

Page 17: Algoritmica en El Metodo de Restas Sucesivas

17

Asignar 0 a t, 0 a r

Escribe “Introduce Divisor y Dividendo”

Leer M

Leer N

Repite Mientras r sea mayor o igual a 0

r=M – t*N

incrementar en 1 a t

fin repite

Escribe “El Cociente es ” , t, ”y el residuo es”,r

Termina

5.3 Algoritmo para la estructura de control “Para”

El algoritmo para la estructura para es una excepción del algoritmo general obtenido,

ya que con las reglas de la división (Vid. Infra Capitulo 2) existe mucha

incertidumbre en cuanto al número de veces que se debe repetir la acción sin

embargo existe una forma de calcular las cantidades deseadas.

Entonces por la regla 6 sabemos que el divisor multiplicado por el cociente no debe

ser mayor al dividendo lo que implica que el divisor no es mayor al dividendo, por

tanto se sabe que el valor máximo que se tiene en el residuo es el divisor y el valor

mínimo de este es mayor o igual a cero. Ahora, al residuo se le restan C veces el

dividendo así pues se tiene que, para obtener el cociente se debe contar en número

de veces que esta condición es verdadera por lo tanto el algoritmo quedaría de la

siguiente forma.

Algoritmo P (Restas Sucesivas por Conteo).

1P: Inicializar t y R en Cero e ir a 2P.

2P: Hacer R =D

Page 18: Algoritmica en El Metodo de Restas Sucesivas

18

3P: Incrementar en 1 a t.

4P: Decrementar R en N veces e ir a 3P. Si R menor o igual a 0 ir a 5P

5P: Retornar el valor de R o el valor t según sea el caso e ir a 6P

6P: Terminar.

Este algoritmo cumple con las características requeridas por la estructura de control

“Para”.

5.3.1 Pseudocódigo

Inicia

Enteros t,r, M,N.

Asignar 0 a t y 0 a r

Escribe “Introduce Divisor y Dividendo”

Leer M

Leer N

Para r igual a M repite hasta que r sea menor o igual a 0

incrementar en 1 a t

decrementar a r en N

fin para

Escribe “El Cociente es ” , t, ”y el residuo es”,r

Termina

Page 19: Algoritmica en El Metodo de Restas Sucesivas

19

6. Implementación de los Algoritmos Obtenidos.

/*

Universidad Autonoma Del Estado de Mexico

Programa que calcula el cociente y el residuo de la relacion de dos numero

enteros

Gabriel Gonzalez Palma

2010

*/

#include<stdio.h>

#define COCIENTE 1

#define RESIDUO 2

int M(int Divisor, int Dividendo, int opcion);/*declaraciones de funciones*/

int R(int Divisor, int Dividendo, int opcion);

int P(int Divisor, int Dividendo, int opcion);

/*Programa principal*/

main(){

char opcion; /*declaraciones de variables*/

int c,r,m,n;

c=0;

r=0;

opcion='\0';

Page 20: Algoritmica en El Metodo de Restas Sucesivas

20

printf("Programa qu calcula el Residuo y el cociente de una division dados dos

numero enteros\n\n");

printf("Que algortimo desea ejecuatar? oprima \n M(Mientras) \n P(Para) \n

R(repite)\n\n");

printf("Oprima S para Salir\n\n");

/*Menu Principal*/

while(opcion!='S'){

c=0;

r=0;

opcion=getch();

opcion=toupper(opcion);

if(opcion=='M'|| opcion=='P'||opcion=='R'||opcion=='S'){

switch(opcion){

case 'M':

printf("\n\nAlgoritmo M(Mientras)\n\n ");

printf("Quien es el dividendo>> ");

scanf("%d",&m);

printf("Quien es el divisor>> ");

scanf("%d",&n);

/*Validaciones de entradas */

if(n<=m){

r=M(n,m,RESIDUO);/*llammaos a la funcion codificada del algortimo

aplicado a la estructura Mientras*/

Page 21: Algoritmica en El Metodo de Restas Sucesivas

21

c=M(n,m,COCIENTE);

}else if(n>m){

r=m;

c=0;

}else if(n==0){

printf("\n\nError Matematico: No se puede calcular una division entre

cero");

c=0;

r=0;

}

printf("\n\n Cociente %d y residuo %d de %d/%d",c,r,m,n);

break;

case 'P':

printf("\n\nAlgoritmo P(Para)\n\n ");

printf("Quien es el dividendo>> ");

scanf("%d",&m);

printf("Quien es el divisor>> ");

scanf("%d",&n);

/*Validaciones de entradas */

if(n<=m){

r=P(n,m,RESIDUO);/*llammaos a la funcion codificada del algortimo

aplicado a la estructura Para*/

c=P(n,m,COCIENTE);

}else if(n>m){

Page 22: Algoritmica en El Metodo de Restas Sucesivas

22

r=m;

c=0;

}else if(n==0){

printf("\n\nError Matematico: No se puede calcular una division entre

cero");

c=0;

r=0;

}

printf("\n\n Cociente %d y residuo %d de %d/%d",c,r,m,n);

break;

case 'R':

printf("\n\nAlgoritmo R(Repite)\n\n");

printf("Quien es el dividendo>> ");

scanf("%d",&m);

printf("Quien es el divisor>> ");

scanf("%d",&n);

/*Validaciones de entradas */

if(n<=m){

r=R(n,m,RESIDUO);/*llammaos a la funcion codificada del algortimo

aplicado a la estructura Repite*/

c=R(n,m,COCIENTE);

}else if(n>m){

r=m;

c=0;

Page 23: Algoritmica en El Metodo de Restas Sucesivas

23

}else if(n==0){

printf("\n\nError Matematico: No se puede calcular una division entre

cero");

c=0;

r=0;

}

printf("\n\n Cociente %d y residuo %d de %d/%d",c,r,m,n);

break;

case 'S':

exit(0);

break;

}

printf("\n\nElija otra opcion");

}else{

printf("\n Error: Opcion incorrecta elija de nuevo\n");

}

}

Page 24: Algoritmica en El Metodo de Restas Sucesivas

24

exit(0);

}

/*Algortimos codifiacdos*/

int M(int Divisor, int Dividendo, int opcion){

int t, r;

t=0;

while(Divisor*t<=Dividendo){

r=Dividendo-Divisor*t;

t++;

}

if(opcion==1)

return t-1;

else if(opcion==2)return r;

else printf("Error no se pudo hacer la operacion");

return -1;

}

int R(int Divisor, int Dividendo, int opcion){

int t, r;

Page 25: Algoritmica en El Metodo de Restas Sucesivas

25

t=0;

do{

r=Dividendo-Divisor*t;

t++;

}while(Dividendo>=t*Divisor);

switch(opcion){

case 1:

return t-1;

break;

case 2:

return r;

break;

default:

printf("Error no se pudo hacer la operacion");

break;

}

return -1;

}

int P(int Divisor, int Dividendo, int opcion){

int t, r;

t=0;

for(r=Dividendo;r>0;r=r-Divisor){

t++;

}

switch(opcion){

Page 26: Algoritmica en El Metodo de Restas Sucesivas

26

case 1:

return t;

break;

case 2:

return r;

break;

default:

printf("Error no se pudo hacer la operacion");

break;

}

return -1;

}

Page 27: Algoritmica en El Metodo de Restas Sucesivas

27

7. Obtención de Resultados.

El tiempo de los tres algoritmos es proporcional entre sí.

Los tres arrojan las mismas salidas dadas las mismas entradas.

El tiempo de ejecución se incrementa respecto a la diferencia entre el divisor y el

dividendo (a mayor diferencia mayor tiempo).

Page 28: Algoritmica en El Metodo de Restas Sucesivas

28

8. Conclusiones

Se llego a la conclusión de que si existen los algoritmos para calcular el cociente y el

residuo para su implementación en cada una de las estructuras de control repetitivas

del paradigma estructurado por lo que se comprobó la hipótesis.

Los algoritmos obtenidos son eficientes para casos en que el divisor es proporcional

al dividendo, pero cuando hay casos extremos es decir un divisor muy pequeño y un

dividendo muy grande los algoritmos son más lentos.

Se ha formulado otra pregunta muy interesante sobre el punto anterior.

¿Existe una forma de saber un número cercano al dividendo para que los algoritmos

funcionen de forma más eficiente en casos extremos?

Page 29: Algoritmica en El Metodo de Restas Sucesivas

29

Fuentes Documentales

Alvarez, Lissette (2004). “Estructuras de Control”, Venezuela, Versión 1.0,

Disponible en prof.usb.ve/mvillasa/compcient/estructuras.pdf

Wikipedia.org (2010). “División (matemática)”, Estados unidos, Versión 1.0,

Disponible en http://es.wikipedia.org/wiki/Divisi%C3%B3n_(matem%C3%A1tica).