Algoritmica en El Metodo de Restas Sucesivas
description
Transcript of 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
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.
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
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?
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.
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
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
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
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.
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.
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.
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.
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.
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.
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
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.
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
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
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';
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*/
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){
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;
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");
}
}
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;
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){
26
case 1:
return t;
break;
case 2:
return r;
break;
default:
printf("Error no se pudo hacer la operacion");
break;
}
return -1;
}
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).
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?
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).