INFORMATICA I -TERCER PARCIAL RECUPERATORIO Grupo 1 Tema 1 Hacer un procedimiento en lenguaje C al que se le pasan dos variables de tipo double y un número entero. Si el número entero es distinto de cero, el mayor de los valores se devuelve en la primera variable, si el número entero es igual a cero se devuelve el menor en la primer variable. Hacer un programa en C al que se le ingresan tres valores reales a las respectivas variables y luego mediante el llamado al procedimiento se los muestra de menor a mayor. Solución //--------------------------------------------------------------------------#pragma hdrstop //--------------------------------------------------------------------------#include <stdio.h> #include <stdlib.h> #pragma argsused void cp( double* pa, double * pb, int n ) { double x; if( n > 0 ) { if( (* pa) > (* pb) ) { x=*pa; *pa = *pb; *pb = x; } } else if( *pa < *pb ) { x=*pa; *pa = *pb; *pb = x; } } main() { double a, b, c; printf("entre a "); scanf("%lf", &a ); printf("entre b "); scanf("%lf", &b ); printf("entre c "); scanf("%lf", &c ); cp(&a, &b, 1); cp(&a, &c, 1); cp(&b, &c, 1); printf("%lf %lf %lf\n", a, b, c ); getchar(); getchar(); } //--------------------------------------------------------------------------- Tema 2 Construir una función llamada sumapares a la que se le pasa como parámetro un número entero positivo y devuelve un valor double que representa la suma de todos los números pares menores que dicho número inclusive él mismo. Por ejemplo si se le pasa el número 12 a la función sumapares esta devolverá 42 o sea el resultado de 12+10+8+6+4+2. Se pide hacer un programa en lenguaje C al que se le ingresan números aleatorios enteros entre 20 y 50 a un vector de 20 números enteros y se llena otro vector de del mismo tamaño pero de números reales con el resultado del llamado a la función sumapares. Finalmente se deberán mostrar ambos vectores. Solución //--------------------------------------------------------------------------#pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #include <stdio.h> #include <stdlib.h> #define CANT 20 double sumapares( int n ) { double suma=0; while( n > 0 ) { if( n%2 == 0 ) { suma+=n; } n--; } return suma; } main() { int a[CANT], i; double b[CANT]; randomize(); for( i = 0; i < CANT; i++ ) { a[i] = random(51)+20; b[i] = sumapares(a[i]); printf( "%d\t%lf\n", a[i], b[i] ); } getchar(); } //--------------------------------------------------------------------------- Tema 3 Construir una unión llamada nrosreales en la que se pueda almacenar cualquiera de los dos tipos reales. Hacer un programa en lenguaje C en el que se declare la unión y se usen tres instancias de la misma. En la primera se guarda un valor de tipo float en la segunda uno de tipo double y en la tercera como double el resultado del producto de las dos primeras. Solución //--------------------------------------------------------------------------#pragma hdrstop //--------------------------------------------------------------------------#include <stdio.h> #pragma argsused union nrosreales { double d; float f; }; main() { union nrosreales a, b, c; printf ("entre a "); scanf( "%f", &a.f ); printf ("entre b "); scanf( "%lf", &b.d ); getchar(); c.d = a.f * b.d; printf("%lf\n", c.d ); getchar(); } //--------------------------------------------------------------------------- ---------------------------------------------------------- INFORMATICA I -TERCER PARCIAL RECUPERATORIO Grupo 2 Tema 1 Construir un procedimiento en lenguaje C tal que muestre n términos de un vector de números enteros. Construir un programa en lenguaje C donde se ingresan números aleatorios a un vector de 20 términos y se van mostrando todos los números a medida que se vayan ingresando mediante llamadas sucesivas al procedimiento construido. Solución //--------------------------------------------------------------------------#pragma hdrstop //--------------------------------------------------------------------------#include <stdio.h> #include <stdlib.h> #define CANT 20 #pragma argsused void mostrar( int * a, int n ) { int i; for( i = 0; i < n; i++ ) { printf("%d\t", a[i] ); } printf("\n" ); } main() { int a[CANT], i; for( i = 0; i < CANT; i++ ) { a[i] = random(500); mostrar(a, i); } getchar(); } //--------------------------------------------------------------------------- Tema 2 Hacer una función en lenguaje C a la que se le pasan dos valores de tipo double. Esta devuelve 1 si el primer valor es mayor que el segundo, cero si son iguales y -1 si el segundo es mayor que el primero. Hacer un programa en C al que se le ingresan tres valores reales a sus respectivas variables y luego se los muestra de mayor a menor llamando a la función creada. Solución //--------------------------------------------------------------------------#pragma hdrstop #include <stdio.h> #include <stdlib.h> //--------------------------------------------------------------------------#pragma argsused int probar( double a, double b) { if( a > b ) { return 1; } else if ( a < b ) { return -1; } return 0; } main() { double a, b, c, aux; printf( "entre a "); scanf( "%lf", &a); printf( "entre b "); scanf( "%lf", &b); printf( "entre c "); scanf( "%lf", &c); getchar(); if( probar(a,b) < 0 ) { aux = a; a = b; b = aux; } if( probar(a, c) < 0 ) { aux = a; a = c; c = aux; } if( probar(b, c) < 0 ) { aux = b; b = c; c = aux; } printf( "%lf %lf %lf\n", a, b, c ); getchar(); } //--------------------------------------------------------------------------- Tema 3 Hacer un programa en C que declare una unión consistente en dos vectores uno entero de 20 elementos y otro real de 20 elementos. Declarar tres instancias de la unión, llenar en la primera el vector de números enteros, en la otra el vector de números reales y la tercera el vector real con el producto de las otras dos. Mostrarlos. Solución //--------------------------------------------------------------------------pragma hdrstop //--------------------------------------------------------------------------#include <stdio.h> #include <stdlib.h> union vect20 { int a[20]; double d[20]; }; #pragma argsused main() { union vect20 v, w, x; int i; for( i = 0; i < 20; i++ ) { v.a[i] = random(100); w.d[i] = random(100); x.d[i] = v.a[i]* w.d[i]; printf( "%d\t%lf\t%lf\n", v.a[i], w.d[i], x.d[i] ); } getchar(); } //---------------------------------------------------------------------------