informatica ii – primer parcial - Catedras de Informática I y II

Anuncio
INFORMATICAII–PRIMERPARCIAL
Ejercicio 1
Se tiene un archivo binario llamado “datos” que posee información que responden a la siguiente
estructura:
struct data
Se pide:
{
a. Ingresar un número entero que representa la posición de un juego
int nro;
de datos.
double valor;
b. Levantar los datos en dicha posición a una instancia de la
char detalle[30];
estructura y mostrarlos.
};
c. Modificarlos utilizando la estructura y volverlos a guardar en la
misma posición.
SOLUCION
#pragma hdrstop
#include <stdio.h>
//--------------------------------------------------------------------------struct data
{
int nro;
double valor;
char detalle[30];
};
#pragma argsused
main()
{
FILE * f;
int pos;
data xdatos;
f = fopen( "datos", "r+b" );
if( f )
{
printf("Entre posicion " );
scanf("%d", &pos );
fseek( f, sizeof(data)*(pos-1), SEEK_SET );
fread( &xdatos, sizeof(data), 1, f );
printf( "nro %d\nvalor %lf\n, detalle %s\n");
printf( "nuevos valores\n" );
printf("nro ");scanf("%d", &xdatos.nro);
printf("valor ");scanf("%lf", &xdatos.valor);
printf("detalle " ); gets(xdatos.detalle );
fseek( f, sizeof(data)*(pos-1), SEEK_SET );
fwrite( &xdatos, sizeof(xdatos), 1, f );
fclose(f);
}
}
Ejercicio 2
Se tiene el siguiente código:
#include <iostream.h>
int comparevalores( void * a, void * b )
{
//esta función devuelve
//1 si el valor contenido en a es mayor que el valor contenido en b
//0 si son iguales
//-1 si el valor contenido en a es menor que el valor contenido en b.
}
main()
{
double * a, double * b;
int n;
cout << "entre terminos ";
cin >> n;
//alocar en memoria dinámica espacio para n términos para los vectores a y b
//llenarlos con números aleatorios comprendidos entre 0.00 y 99.99
//comparar término a término los dos vectores llamando a la función compararvalores() y mostrar
//si cada término de a es mayor menor o igual a cada término de b.
}
Realizar lo que está comentado dentro del programa.
SOLUCION
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#pragma hdrstop
#pragma argsused
int comparevalores( void * a, void * b )
{
double x, y;
x = *((double *) a);
y = *((double *) b);
if( x >y )
{
return 1;
}
if( x < y )
{
return -1;
}
return 0;
}
main()
{
}
double *a, *b;
int i,n, r;
cout << "entre terminos ";
cin >> n;
a = new double[n];
b = new double[n];
randomize();
for( i = 0; i < n; i++ )
{
a[i] = (double)random(10000)/100.00;
b[i] = (double)random(10000)/100.00;
printf( "%lf\t%lf ", a[i], b[i] );
r = comparevalores(&a[i], &b[i]);
if( r > 0 )
{
printf("a[%d] es mayor que b[%d]\n", i, i );
}
else if( r < 0 )
{
printf("a[%d] es menor que b[%d]\n", i, i );
}
else
{
printf("Son Iguales\n" );
}
}
delete []a;
delete []b;
system("pause");
Ejercicio 3
Construir el siguiente algoritmo:
Ingresar cuatro valores de tipo unsigned char. (Sugerencia: cin>>).
Mediante operaciones binarias copiarlos a una variable de tipo int de modo que el primer byte ingresado
sea el menos significativo y el cuarto el más significativo.
Mostrar el resultado como un valor hexadecimal.
SOLUCION
#pragma hdrstop
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#pragma argsused
main()
{
unsigned char c;
unsigned d, x;
int i, n = sizeof( unsigned char )*8;
d = 0;
for( i = 0; i < 4; i++ )
{
printf("entre valor %d ", i+1);
cin >>c;
x=0;
x |= c;
x <<= n * i;
d |= x;
}
}
printf("%x\n", d );
system("pause" );
Ejercicio 4
Se tiene el siguiente código:
class fuerza
{
};
main()
{
fuerza f1, f2(150,30), f3, f4;
double prodesc;
f1.modulo()=180.23;
f1.angulo()=-32.2;
f3 = f1 + f2;
//f1 + f2 da la resultante de componer
//los vectores y se asigna a f3
prodesc = f1 * f2; //producto escalar
f4 = f2 ^ f3; //producto vectorial
Este código utiliza la clase fuerza que representa una
fuerza definida por su intensidad en kilos y por su ángulo
al origen en grados sexagesimales.
Se pide implementar la clase fuerza SIN DESARROLLARLA
(declararla únicamente) con los atributos y métodos
necesarios para que pueda utilizarse en el programa.
NOTA. TODOS LOS ATRIBUTOS NO PODRAN SER
ACCEDIDOS DESDE EL PROGRAMA.
}
SOLUCION
class fuerza
{
private:
double ang, mod;
public:
fuerza();
fuerza(double m, double a );
double & modulo(void);
double & angulo(void);
fuerza operator=(fuerza f); // no es necesario pero se considera bien
fuerza operator + (fuerza f );
double operator * (fuerza f );
fuerza operator ^ (fuerza f );
};
Ejercicio 5
En clase se implementó la clase lista con los siguientes métodos y atributos.
struct nodo {
class lista
void vaciar(void);
int dato;
{
int & operator[](int pos);
struct nodo *sig;
private :
int cantidad(void)
};
struct nodo *h;
void eliminar( int pos);
int cant;
void insertar( int pos, int
public:
x);
lista();
lista(lista &l);
void agregar(int d);
lista operator=(lista l);
void achicar();
lista operator +(lista l);
~lista();
};
UTILIZANDO la clase lista construir un programa en C++ que realice lo siguiente:
a. Crear una lista enlazada e ingresar 10 valores aleatorios.
b. Leer el primer término de la lista, mostrarlo y luego eliminarlo.
c. Repetir el paso b hasta que la misma quede vacía.
Solución
#pragma hdrstop
#include "classlista.h"
#include <stdlib.h>
#include <iostream.h>
main()
{
lista l;
int i;
int x;
randomize();
for( i = 0; i < 10; i++ )
{
x = random(1000);
l.agregar(x);
}
while( !l.cantidad() > 0)
{
x = l[0];
l.eliminar(0);
printf( "%d\t", x );
}
printf("\n\n" );
}
Descargar