INFORMATICA II – PRIMER PARCIAL Tema 1 Se tiene un archivo denominado “cheques.dat” donde cada registro fue guardado mediante la siguiente estructura: struct cheque { int nro; char banco[35]; double importe; char fecha[8]; }; Se sabe que el archivo contiene miles de cheques guardados y se quiere recuperar y mostrar los registros del archivo que van del 1000 al 1500. Se pide: Levantar los datos guardados a una estructura como la indicada que deberá ser alocada en la memoria dinámica y mostrarlos en la pantalla. #include <stdio.h> #include <memory.h> struct cheque { int nro; char banco[35]; double importe; char fecha[8]; } main() { FILE * f; struct *cheque chk; int n = 1000; f = fopen("cheques.dat", "rb"); if( f != NULL ) { } } chk = (cheque *)malloc( sizeof(cheque) ); fseek(f, (n-1) * sizeof(cheque), SEEK_SET); while( n < 1500 && !feof(f) ) { fread( chk, sizeof(cheque), 1, f ); printf( "Numero %d\nBanco %s\nImporte %lf\nFecha %s\n\n", chk->nro, chk->banco, chk->importe, chk->fecha); n++; } fclose(f); free(chk); Ejercicio 2 Hacer un ejercicio en C o C++ que realice lo siguiente: a. b. c. d. Entrar un número sin signo Mostrar su valor en formato hexadecimal y, mediante operaciones binarias en forma binaria. Hallar el complemento binario a 2. Mostrar su valor en formato hexadecimal y, mediante operaciones binarias en forma binaria. #include <stdio.h> void mostrarbinario(unsigned int x ) { unsigned int y = 1; int i; y <<= (sizeof(unsigned int) * 8 - 1) ; for( i = 0; i < sizeof(unsigned int) * 8; i++ ) { if( y & x ) { printf("1"); } else { printf("0"); } y>>=1; } printf("\n"); } main() { unsigned int x, z; printf("Ingrese valor "); scanf("%u", &x ); printf("%x\n", x ); mostrarbinario(x); z = ~x + 1; printf("%x\n", z ); mostrarbinario(z); } Ejercicio 3 Definir una clase que represente un vector matemático (módulo, dirección y sentido) definido por dos puntos utilizando objetos de la clase punto abajo indicada (NO DESARROLLAR LA CLASE PUNTO) class punto { public: double x,y; |v| punto(){x=y=0;} double distancia(punto p); b double distancia();//distancia al orígen }; El vector tiene como extremo el punto a y como origen el punto b. La clase a construir tendrá como: a Atributos. Dos objetos punto y estarán encapsulados. Métodos: Método para modificar y visualizar las coordenadas de los puntos. Módulo: Definido como la distancia entre los puntos a y b . Argumento: El ángulo que forma el vector con el eje de las x. Producto escalar de dos vectores mediante la sobrecarga del operador *. El producto escalar se define como el producto de los módulos de los vectores por el coseno del ángulo comprendido entre ellos según la siguiente fórmula: m.n = m . n . cos(arg(m) − arg(n)) //archivo de cabecera #ifndef VECTORMAT_H #define VECTORMAT_H #include <cmath> class punto { public: double x,y; punto(){x=y=0.0;} double distancia(void){return sqrt(pow(x,2)+pow(y,2));} double distancia(punto p); }; class vectormat { private: punto pa,pb; public: }; #endif punto & a(void){return pa;} punto & b(void){return pb;} double modulo(void){return pa.distancia(pb);} double argumento(void); double operator * (vectormat v); //archivo .cpp #include "vectormat.h" double vectormat::argumento(void) { double arg; arg = (pa.y - pb.y)/( pa.x - pb.x ); return atan(arg); } double vectormat::operator * (vectormat v) { double mod = modulo() * v.modulo(); double arg = argumento() - v.argumento(); return mod * cos(arg); } Ejercicio 4 Se tiene el siguiente código: #include <iostream.h> #include <math.h> double sexagesimal(double rad) { return 180 * rad/M_PI; } double radianes(double sx) { return sx* M_PI/180; } double pi(void) { return atan(1)*4; } int main() { double (*trigfunc)(double); double x; } Utilizando la variable de puntero trigfunc llamar a todas las funciones posibles y mostrar el resultado de un valor de x ingresado por consola. #include <iostream> #include <cmath> using namespace std; double sexagesimal(double rad) { return 180 * rad/M_PI; } double radianes(double sx) { return sx* M_PI/180; } double pi(void) { return atan(1)*4; } int main() { double (*trigfunc)(double); double x; cout << "entre x "; cin >>x; trigfunc = radianes; x = trigfunc(x); cout << x << endl; trigfunc = sexagesimal; x = sexagesimal(x); cout << x << endl; return 0; }