Este documento presenta los resultados de una práctica sobre la traducción de demostraciones matemáticas y algoritmos a programas computacionales. Se desarrollaron programas para implementar el algoritmo de la división, resolver ecuaciones diofánticas y realizar cambios de base numérica. El documento describe el análisis, diseño, desarrollo y pruebas de cada programa, así como las conclusiones de los estudiantes sobre la importancia de entender los algoritmos y su traducción a lenguajes de programación.
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
Algoritmos de división, ecuaciones y cambio de base en C
1. INSTITUTO POLITÉCNICO NACIONAL
Práctica 2:
Demostraciones y Programas
Flores Garcia Ruben Irving, Gómez Garduño Jorge Billy, Jiménez
Fuentes Jesús Saidh, Juarez Royal Juan Jesus y Martinez Marco
Antonio
Instituto Politécnico Nacional- ESCUELA SUPERIOR DE COMPUTO.
Matematicas Discretas. Grupo 1CM2. México D.F
1 Objetivo General
Comprender la analogía entre el razonamiento matemático para hacer una
demostración y el razonamiento secuencial para desarrollar un algoritmo com-
putacional.
2 Objetivos particulares
1. Reforzar los conocimientos sobre el algoritmo de la división, el máximo
común divisor y el cambio de base.
2. Comprobar que la generalidad de una demostración se traduce en un
programa libre de errores lógicos.
3. Traducir un algoritmo de lenguaje matemático aun lenguaje computa-
cional.
1
2. INSTITUTO POLITÉCNICO NACIONAL
3 Desarrollo del Algoritmo de la División
3.1 Análisis
Se desarrollara una aplicación que para dos enteros a y b con b = 0, se encon-
trara q y r tales que a = bq+r con 0 ≤ r < |b|. No se debe utilizar el operador
/ ni el operador %. El usuario proporcionará al programa los valores de a y b.
Desúés mostrará los enteros encontrados en la forma a = bq + r. Ejemplo.-
Si el usuario introduce a = 47, b = −5, entonces el programa mostrará la
leyenda "47 = (−5)(−9) + 2"
3.2 Diseño
Pseudocodigo
Declara variable
Int s;
Int g;
Int a;
Int b;
Int f;
Int r;
Int suma;
Int p;
Declara proceso
s = sqrt(a ∗ a);
f = sqrt(b ∗ b);
g = s − f;
dop = p + 1;
suma = f ∗ p;
while(suma <= g);
r = s − suma;
Muestra el resultado
cout << p;
cout << f;
cout << g;
cout << suma;
2
3. INSTITUTO POLITÉCNICO NACIONAL
cout << ”dameelvalordea = ” << a;
cout << ”dameelvalordeb = ” << b;
cout << ”dameelvalordeq = ” << q;
cout << ”dameelvalorder = ” << r;
return0;
3.3 Desarrollo
Programa hecho en C++.
3
4. INSTITUTO POLITÉCNICO NACIONAL
3.4 Pruebas
Como se muestra en la imagen, te pide que introduzcas el dato a, el cual en
este caso le dimos un valor de 77.
Después le damos Enter y como se muestra en la imagen, te pide el dato b,
el cual le asignamos un valor de 8.
Después le volvemos a dar Enter y como se muestra en la imagen el
programa buscara un múltiplo de b=8 el cual se acerque en números
enteros al valor de a=77, en este caso fue el 9 el cual será q y lo que falte
para que de 77 será r en este caso r=5 y así a = bq + r.
4
5. INSTITUTO POLITÉCNICO NACIONAL
4 Desarrollo de Ecuaciones Diofánticas
4.1 Análisis
Se desarrollara una aplicación que decida si la ecuación ax + by = c, donde
a, b, c ∈ Z, tiene soluciones en los enteros o no. A estas ecuaciones se les
conoce como ecuaciones diofánticas. El usuario proporcionará al programa
los valores de los coeficientes a, b y del termino independiente c. Desúés,
comunicará al usuario si la ecuación tiene o no soluciones enteras ustificndo
su respuesta. Ejemplo.- Si el usuario introduce a = 16, b = −20yc = −6,
entonces el programa mostrará la leyenda "La ecuación 16x − 20y = −6 no
tiene soluciones en los enteros pues (16, -20)=4 y 4 no divide a 6"
4.2 Diseño
Diagrama de Flujo
5
7. INSTITUTO POLITÉCNICO NACIONAL
printf("Resolucion de ecuaciones diofanticas de la forma n”);
printf(”ax + by = cnn”);
printf(”Introduzcaloscoeficientes.”);
printf(”a = ”); scanf(”%ld”, &a);
printf(”b = ”); scanf(”%ld”, &b);
printf(”c = ”); scanf(”%ld”, &c);
d=mcd(a,b);
if (c%d == 0)
{
printf("La ecuacion %ldx + %ldy = %ld tiene soluciones en los enteros pues
(%ld, %ld) = %ld y %ld divide a %ld. n”, a, b, c, a, b, d, d, c);
}
elseif(c%d! = 0)
{
printf(”Laecuacion%ldx+%ldy=%ldnotienesolucionesenlosenterospues(%ld,%ld)=%ldy%ldnodi
}
return 0;
}
int mcd(int a,int b)
{
int cociente,resto=1;
if (a<b) {
cociente=a;
a=b;
b=cociente;
}
while (resto!=0) {
7
10. INSTITUTO POLITÉCNICO NACIONAL
5 Desarrollo de Cambio de Base
5.1 Análisis
Se desarrollara una aplicación que muestre la representación de un entero
z ≥ 0 en una base b con 2 ≤ b ≤ 16. El usuario proporcionará al programa
los valores del entero z y de la base b en la que sera representado. después
mostrará la secuencia que representa al entero z en la base b. Ejemplo.- Si el
usuario introduce z = 984yb = 16, entonces el programa mostrará la leyenda
"3D8 representa al entero 984 en base 16".
5.2 Diseño
Diagrama de Flujo
10
11. INSTITUTO POLITÉCNICO NACIONAL
Diagrama hecho en Microsoft Visio
5.3 Desarrollo
Codigo
#include <stdio.h>
#include<stdlib.h>
int leer(void);
void division(int, int);
int a[20];
11
12. INSTITUTO POLITÉCNICO NACIONAL
int main()
{
int b, z, i;
clrscr();
printf("nnDaelnumeroenteroz = ”);
z = leer();
printf(”nDalabasealaquesedeseaconvertirb = ”);
b = leer();
printf(”nnt”);
if(b <= 16)
{
division(z, b);
}
else
printf(”nnLabaseesincorrecta”);
getch();
}
int leer(void)
{
int a;
scanf("%d", &a);
return(a);
}
void division(int z, int b)
{
int i, div, j, q;
div=1;
q=z;
for(i=1;div>0;i++)
{
div=z/b;
a[i]=z-(div*b);
z=div;
}
12
14. INSTITUTO POLITÉCNICO NACIONAL
Fig.9
Fig.10
6 Conclusiones
Rubén Irving Flores García:
Hay veces que en el desarrollo de varios programas que generalmente lidi-
amos en la escuela, tenemos que ver la manera mas sencilla de terminarlosa
con pocas lineas de texto, es por eso que usando un poco de logica, induc-
ción podemos generar algoritmos para determinar la solucion al problema.
En esta práctica aprendimos a generar tres algoritmos no muy dificiles que
seguramente para materias del tercer y cuarto semestre nos pueda ser util el
saber un cambio de base, especialmente trabajaremos con hexadecimal. Tra-
bajamos con pseudocodigos y diagramas de flujo para ver detalladamente el
comportamiento de nuestro programa y que no fallara la logica, es por eso
que creo que cuando tengamos proyectos no sera muy dificil expresar progra-
mas de cualquier forma.
Jesús Saidh Jiménez Fuentes:
La importancia de entender, comprender y aplicar un algoritmo es de gran
importancia. Un algoritmo nos puede llevar a resolver problemas de man-
era general siempre y cuando sea correctamente aplicado, así como proce-
sos computacionales. Cuando un algoritmo se va a traducir a un lenguaje
14
15. INSTITUTO POLITÉCNICO NACIONAL
computacional es importante entenderlo a la perfección, pues al programarlo
pueden aparecer inconsistencias a la hora de ejecutarlo. Un algoritmo es gen-
eral cuando se puede ingresar distintos valores, el algoritmo se aplicará, dará
el resultado si es el caso y si los números están dentro del dominio válido de
los valores del algoritmo. En este caso se aplicaron 3 algoritmos que fueron
necesarios ser entendidos para poder programarlos y comprobar en qué casos
el aplicable y en cuáles no.
Jorge Billy Gómez Garduño:
Tras realizar la práctica llevamos 3 ejercicios de razonamiento matemáticos
a algoritmos computaciones. No solo se facilita el proceso, además es eficaz
y rápido que realizar estos de forma escrita. Se aprendió de forma práctica
la utilización de dos materias importantes para la carrera cursada.
Juan Jesus Juarez Royal:
Puedo concluir que estos 3 temas: Algoritmo de la división, Ecuaciones
Diofánticas y Cambio de Base nos sirven de mucha ayuda ya que sabiendo
sobre cada tema puedes pasarlo a programación y así hacer muy fácil re-
solver ejercicios sobre estos temas, por ejemplo en el caso del algoritmo de
la división podemos dividir 2 números y saber su cociente y su residuo con
solo insertándolos en el programa, con las Ecuaciones Diofánticas podemos
resolver cualquier ecuación de 2 variables y así saber si la ecuación será con
números enteros o con decimal y por ultimo en el caso de Cambio de Base
podemos convertir cualquier a numero que este en decimal a cualquier base
que queramos es muy gratificante esto ya que facilita muchas cosas.
Marco Antonio Martinez:
La practica fue buena porque mostró que para programar se debe pensar
diferente que a la hora de resolver un problema matemático como matemático,
pues así puedes valerte de muchas herramientas matemáticas que en la pro-
gramación no puedes por falta de conocimiento de los problemas que se em-
plearan. Ayudo también a interpretar algoritmos en forma de lenguaje de
programación y volvernos mas ágiles en este cambio de lenguajes.
15