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