Algoritmica en El Metodo de Restas Sucesivas
Algoritmica en El Metodo de Restas Sucesivas
Algoritmica en El Metodo de Restas Sucesivas
Facultad de Ingeniería
Programa en lenguaje C
Agosto de 2010.
1
Índice
Índice 2
Hipótesis 5
Objetivos 6
Esquema 7
1. Estructuras de Control. 9
1.1. Definición.
2. La División. 11
2.1 Definición.
2.2 Componentes.
5.1.1 Pseudocódigo
5.2.1 Pseudocódigo
5.3.1 Pseudocódigo
7. Obtención de Resultados. 27
8. Conclusiones 28
Fuentes Documentales 29
3
Planteamiento del Problema
“Un programa puede ser escrito utilizando tres tipos de estructuras de control,
Secuenciales, selectivas y repetitivas o iterativas”
4
Hipótesis.
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
6
Esquema
1. Estructuras de Control.
1.1. Definición.
2. La División.
2.1 Definición.
2.2 Componentes.
5.1.1 Pseudocódigo
7
5.2 Algoritmo para la estructura de control “Para”
5.2.1 Pseudocódigo
5.3.1 Pseudocódigo
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”.
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.
Son aquellas en las que una instrucción sigue a otra de forma continua.
9
1.4.3 La Estructura de Control “Repite”
10
2. La División.
2.1 Definición.
2.2 Componentes.
11
4) Cuando el divisor d es menor que el dividendo D el residuo R es mayor o igual
a cero.
12
3. Obtención de un Modelo Matemático de la división.
Sujeto a
En donde
R(t) es el residuo.
D = es el dividendo.
d = divisor.
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.
4Rs: Terminar.
14
5. Adaptación del Algoritmo General a los Algoritmos Específicos
M4: Terminar.
5.1.1 Pseudocódigo
Inicia
Asignar 0 a t, 0 a r
Leer M
Leer N
r=M – t*N
15
si r es mayor o igual a 0 entonces
incrementar en 1 a t
fin si
fin mientras
Termina
4R: Terminar.
5.2.1 Pseudocódigo
Inicia
16
Asignar 0 a t, 0 a r
Leer M
Leer N
r=M – t*N
incrementar en 1 a t
fin repite
Termina
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.
2P: Hacer R =D
17
3P: Incrementar en 1 a t.
6P: Terminar.
Este algoritmo cumple con las características requeridas por la estructura de control
“Para”.
5.3.1 Pseudocódigo
Inicia
Asignar 0 a t y 0 a r
Leer M
Leer N
incrementar en 1 a t
decrementar a r en N
fin para
Termina
18
6. Implementación de los Algoritmos Obtenidos.
/*
2010
*/
#include<stdio.h>
#define COCIENTE 1
#define RESIDUO 2
/*Programa principal*/
main(){
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");
/*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':
scanf("%d",&m);
scanf("%d",&n);
/*Validaciones de entradas */
if(n<=m){
20
c=M(n,m,COCIENTE);
}else if(n>m){
r=m;
c=0;
}else if(n==0){
c=0;
r=0;
break;
case 'P':
scanf("%d",&m);
scanf("%d",&n);
/*Validaciones de entradas */
if(n<=m){
c=P(n,m,COCIENTE);
}else if(n>m){
21
r=m;
c=0;
}else if(n==0){
c=0;
r=0;
break;
case 'R':
printf("\n\nAlgoritmo R(Repite)\n\n");
scanf("%d",&m);
scanf("%d",&n);
/*Validaciones de entradas */
if(n<=m){
c=R(n,m,COCIENTE);
}else if(n>m){
r=m;
c=0;
22
}else if(n==0){
c=0;
r=0;
break;
case 'S':
exit(0);
break;
}else{
23
exit(0);
/*Algortimos codifiacdos*/
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;
return -1;
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:
break;
return -1;
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:
break;
return -1;
26
7. Obtención de Resultados.
Los tres arrojan las mismas salidas dadas las mismas entradas.
27
8. Conclusiones
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.
¿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
29