1. Aspectos generales 2. Parte 1

Anuncio
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 13
Sebastian Sotela Golcher
B16455
1.
Nota: 100
Aspectos generales
En este laboratorio se empezo a usar C. Es un lenguaje muy parecido a Java. Hay que tener presente que
las variables se declaran, se debe usar brackets y punto y comas. Ademas es un lenguaje compilado. Para la
entrada y salida del sistema se debe importar la biblioteca stdio. El manejo de el printf y el scanf me parecio mas
complicado que el de python. Sin embargo el control de flujo parece ser mas sencillo, teniendo mas posibilidades
de estas. A continuacion se agrega el codigo implementado en los programas bien comentado:
2.
Parte 1
# include < s t d i o . h> / / B i b l i o t e c a de e n t r a d a y s a l i d a
/ / d e f i n e e l programa p r i n c i p a l
i n t main ( ) {
/ / Declara l a s v a r i a b l e s d e l programa
f l o a t x1 , y1 , x2 , y2 , m, b ;
/ / imprime una s o l i c i t u d a l u s u a r i o
p r i n t f ( " D i g i t e l a coordenada x de P1 \ n " ) ;
/ / s a l v a e l v a l o r i n t r o d u c i d o en l a t e r m i n a l en l a v a r i a b l e con ampersand
s c a n f ( " %f " ,& x1 ) ;
/ / imprime una s o l i c i t u d a l u s u a r i o
p r i n t f ( " D i g i t e l a coordenada y de P1 \ n " ) ;
/ / s a l v a e l v a l o r i n t r o d u c i d o en l a t e r m i n a l en l a v a r i a b l e con ampersand
s c a n f ( " %f " ,& y1 ) ;
/ / imprime una s o l i c i t u d a l u s u a r i o
p r i n t f ( " D i g i t e l a coordenada x de P2 \ n " ) ;
/ / s a l v a e l v a l o r i n t r o d u c i d o en l a t e r m i n a l en l a v a r i a b l e con ampersand
s c a n f ( " %f " ,& x2 ) ;
/ / imprime una s o l i c i t u d a l u s u a r i o
p r i n t f ( " D i g i t e l a coordenada y de P2 \ n " ) ;
/ / s a l v a e l v a l o r i n t r o d u c i d o en l a t e r m i n a l en l a v a r i a b l e con ampersand
s c a n f ( " %f " ,& y2 ) ;
/ / s i x1 es i g u a l a x2 l a r e c t a no e x i s t e , por l o que se imprime un e r r o r
i f ( x1==x2 ) {
p r i n t f ( " E r r o r : l o s puntos i n t r o d u c i d o s son e l mismo o t i e n e n l a misma
preimagen \ n " ) ;
}
/ / s i l o s puntos son d i f e r e n t e s y no t i e n e n l a misma preimagen se procede con
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 13
Sebastian Sotela Golcher
B16455
/ / e l programa
else {
/ / c a l c u l a l a p e n d i e n t e de una r e c t a
m = ( y2−y1 ) / ( x2−x1 ) ;
/ / c a l c u l a l a i n t e r s e c c i o n de l a r e c t a con e l e j e " y "
b = y1 − m∗x1 ;
/ / Imprime l a ecuacion de l a r e c t a
p r i n t f ( " La ecuacion de l a r e c t a e n t r e l o s dos puntos es \ n y = %f x +
%f \ n " ,m, b ) ;
}
/ / e l main siempre debe r e t o r n a r un v a l o r para saber s i se r e a l i z o e l programa
return 0;
}
3.
Parte 2
# include < s t d i o . h> / / B i b l i o t e c a de e n t r a d a y s a l i d a
/ ∗ d e f i n e una f u n c i o n que devuelve un v a l o r f l o t a n t e
c a l c u l a l a p e n d i e n t e de una r e c t a ∗ /
f l o a t p e n d i e n t e ( f l o a t x1 , f l o a t y1 , f l o a t x2 , f l o a t y2 ) {
/ / f o r m u l a de l a p e n d i e n t e de una r e c t a
f l o a t m = ( y2−y1 ) / ( x2−x1 ) ;
/ / regresa m
r e t u r n m;
}
/ ∗ d e f i n e una f u n c i o n que devuelve un v a l o r f l o t a n t e
c a l c u l a l a i n t e r s e c c i o n de una r e c t a con e l e j e y ∗ /
f l o a t i n t e r s e c c i o n ( f l o a t x1 , f l o a t y1 , f l o a t m) {
/ / f o r m u l a i n t e r s e c c i o n de una r e c t a
f l o a t b = y1−m∗x1 ;
/ / devuelve b
return b ;
}
/ / programa p r i n c i p a l
i n t main ( ) {
/ / d e c l a r a l a s v a r i a b l e s d e l programa
f l o a t x1 , y1 , x2 , y2 , m, b ;
/ / Se s o l i c i t a a l u s u s a r i o una coordenada x
p r i n t f ( " D i g i t e l a coordenada x de P1 \ n " ) ;
s c a n f ( " %f " ,& x1 ) ;
/ / Se s o l i c i t a a l u s u s a r i o una coordenada y
p r i n t f ( " D i g i t e l a coordenada y de P1 \ n " ) ;
s c a n f ( " %f " ,& y1 ) ;
/ / Se s o l i c i t a a l u s u s a r i o o t r a coordenada x
p r i n t f ( " D i g i t e l a coordenada x de P2 \ n " ) ;
s c a n f ( " %f " ,& x2 ) ;
/ / Se s o l i c i t a a l u s u s a r i o o t r a coordenada y
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 13
Sebastian Sotela Golcher
B16455
p r i n t f ( " D i g i t e l a coordenada y de P2 \ n " ) ;
s c a n f ( " %f " ,& y2 ) ;
/ / s i x1 es i g u a l a x2 l a r e c t a no e x i s t e , por l o que se imprime un e r r o r
i f ( x1==x2 ) {
p r i n t f ( " E r r o r : l o s puntos i n t r o d u c i d o s son e l mismo o t i e n e n l a misma
preimagen \ n " ) ;
}
/ / s i l o s puntos son d i f e r e n t e s y no t i e n e n l a misma preimagen se procede con
/ / e l programa
else {
/ / se e j e c u t a n l a s f u n c i o n e s y se l e asignan a l a s v a r i a b l e s
m = p e n d i e n t e ( x1 , y1 , x2 , y2 ) ;
b = i n t e r s e c c i o n ( x1 , y1 ,m) ;
/ / Imprime l a ecuacion de l a r e c t a
p r i n t f ( " La ecuacion de l a r e c t a e n t r e l o s dos puntos es \ n y = %f x +
%f \ n " ,m, b ) ;
}
/ / devuelve cero s i e l programa se e j e c u t a
return 0;
}
4.
Parte 3
# include < s t d i o . h> / / B i b l i o t e c a de e n t r a d a y s a l i d a
# include <math . h> / / B i b l i o t e c a de f u n c i o n e s matematicas
/ / d e f i n e una f u n c i o n que no devuelve nada pero r e a l i z a c i e r t a s acciones
/ / l o que hace es c a l c u l a r e i m p r i m i r todos l o s d i v i s o r e s de un e n t e r o
void d i v i s o r e s ( i n t x ) {
/ / imprime un t i t u l o comentario para l a f u n c i o n
p r i n t f ( " Los d i v i s o r e s de %d son \ n " , x ) ;
/ / se i t e r a a t r a v e s de l o s p o s i b l e s d i v i s o r e s d e l numero
f o r ( i n t d i v i s o r = 1 ; d i v i s o r <=x ; d i v i s o r + + ) {
/ / s i e l modulo es cero se imprime e l v a l o r d e l d i v i s o r
i f ( x %d i v i s o r == 0 ) {
p r i n t f ( " %d \ n " , d i v i s o r ) ;
}
/ / s i no es cero se c o n t i n u a i t e r a n d o
else {
continue ;
}
}
}
/ / programa p r i n c i p a l
i n t main ( ) {
/ / declara la variable x
int x ;
/ / r e a l i z a l a s i g u i e n t e accion . . .
do {
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 13
Sebastian Sotela Golcher
B16455
/ / s o l i c i t a a l u s u a r i o un numero
p r i n t f ( " D i g i t e un e n t e r o p o s i t i v o para s a c a r l e l o s d i v i s o r e s o 0 para
s a l i r \n" ) ;
s c a n f ( " %d " ,& x ) ;
/ / s i se i n t r o d u c e un v a l o r n e g a t i v o se imprime un e r r o r y f i n a l i z a e l
/ / programa
i f ( x <0){
p r i n t f ( " E r r o r : x debe s e r un numero e n t e r o p o s i t i v o \ n " ) ;
break ;
}
/ / se procede con e l programa s i x es p o s i t i v o
else {
/ / e j e c u t a e l metodo d i v i s o r e s
divisores (x ) ;
}
}
/ / . . . s i x es i g u a l a 0 se s a l e d e l c i c l o
while ( x ! = 0 ) ;
/ / devuelve 0 s i e l programa s i e l programa f u n c i o n a
return 0;
}
5.
Parte 4
# include < s t d i o . h> / / B i b l i o t e c a de e n t r a d a y s a l i d a
# include <math . h> / / B i b l i o t e c a de f u n c i o n e s matematicas
/ / D e f i n e una f u n c i o n que c a l c u l a
i n t MCD( i n t a , i n t b ) {
/ / Para que x siempre sea
int x , y ;
i f ( a<b ) {
y=a ;
x=b ;
}
else {
x=a ;
y=b ;
}
/ / f o r m u l a para e l maximo
/ / caso base
i f ( y ==0){
return x ;
}
/ / caso r e c u r s i v o
else i f ( x>y & y > 0 ) {
/ / recibe a " y " y
MCD( y , x %y ) ;
}
e l maximo comun d i v i s o r
e l numero mayor y l a f o r m u l a no cambie
comun d i v i s o r usando r e c u r s i v i d a d
e l modulo de " x " e n t r e " y "
Universidad de Costa Rica
Facultad de Ingenieria
Escuela de Ingenieria Electrica
Programacion Bajo Plataformas Abiertas IE-0117
I CICLO 2012
Laboratorio 13
Sebastian Sotela Golcher
B16455
}
/ / programa p r i n c i p a l
i n t main ( ) {
/ / d e c l a r a l a s v a r i a b l e s d e l programa
i n t x , y , max ;
/ / S o l i c i t a a l u s u a r i o v a r i a b l e s de manera i n t e r a c t i v a
/ / p r i m e r numero
p r i n t f ( " Este es un programa que c a l c u l a e l maximo comun d i v i s o r de dos numeros
\ n D i g i t e un e n t e r o p o s i t i v o \ nx= " ) ;
s c a n f ( " %d " ,& x ) ;
/ / segundo numero
p r i n t f ( " D i g i t e un e n t e r o p o s i t i v o \ ny= " ) ;
s c a n f ( " %d " ,& y ) ;
/ / V e r i f i c a que " x " y " y " sean p o s i t i v o s para c o n t i n u a r
i f ( x>0 & y > 0 ) {
/ / se emplea l a f u n c i o n maximo comun d i v i s o r
max=MCD( x , y ) ;
/ / se imprime e l r e s u l t a d o
p r i n t f ( " E l maximo comun d i v i s o r es \ n %d \ n " , max ) ;
}
/ / s i no son p o s i t i v o s se imprime un e r r o r y f i n a l i z a e l programa
else {
p r i n t f ( " E r r o r : Debe i n t r o d u c i r dos numeros e n t e r o s p o s i t i v o s \ n " ) ;
}
/ / devuelve cero s i e l programa f u n c i o n a
return 0;
}
Descargar