Вы находитесь на странице: 1из 29

Universidad Autónoma del Estado de México

Facultad de Ingeniería

Programa en lenguaje C

Cociente y Residuo de una División


Gabriel González Palma

Agosto de 2010.
1
Í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.


2
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

3
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?

4
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.

5
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

6
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

7
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

8
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.

9
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.

10
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.

11
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.

12
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.

13
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.

14
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

15
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.

16
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

17
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

18
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';

19
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*/

20
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){

21
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;

22
}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");

23
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;

24
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){

25
case 1:

return t;

break;

case 2:

return r;

break;

default:

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

break;

return -1;

26
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).

27
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?

28
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).

29

Вам также может понравиться