Ejercicios del Recuperatorio del Primer Parcial RESUELTOS

Anuncio
INFORMATICA II – RECUPERATORIO PRIMER PARCIAL
Ejercicio 1
Construir un programa en C o C++ que realice lo siguiente:
a) Ingresar un entero sin signo.
b) Mediante operaciones binarias generar otro valor sin signo tal que el bit menos significativo pase a ser el más significativo y
así sucesivamente. Por ejemplo: si el número ingresado es 001011 el nuevo valor quedará 110100.
Respuesta
#include <iostream.h>
#include <stdio.h>
main()
{
unsigned a, b, c,d;
int i;
cout<<"entre valor ";
cin>>a;
printf("\n%x\n", a );
b = a;
c = 1;
d = 0;
i = sizeof(unsigned)*8-1;
while(b != 0 )
{
c = c & b;
c <<= i;
d |= c;
c = 1;
b >>=1;
i--;
}
printf("%x\n", d );
}
Ejercicio 2
Se tiene un archivo donde hay guardados una cierta cantidad de registros donde cada uno contiene:
a)
b)
Un vector de 20 números reales.
Un número real que tiene guardado el promedio de los 20 números del vector.
Se pide:
Leer cada registro en una estructura, calcular el promedio del vector y luego mostrar si el
promedio calculado coincide o no con el número real leído del archivo.
Respuesta
struct registro
{
double a[20];
double prom;
};
main()
{
FILE * f;
struct registro r;
double promedio;
int n, i;
f = fopen( "datos.dat", "rb" );
if( f != NULL )
{
do
{
n = fread( &r, sizeof(r), 1 , f );
if( n != 0 )
{
promedio = 0;
for( i = 0; i < 20; i++ )
{
promedio += r.a[i];
}
promedio /= i;
if( promedio == r.prom )
{
printf("promedios coinciden\n");
}
}
}while( n != 0 );
fclose(f);
//continúa al lado
}
}
Ejercicio 3
Se tiene el siguiente código.
void cambiar( int &a, int & b )
{
//hacer el cambio de variables aquí
}
main()
{
void *x, *y;
int i, j;
x = &i;
y = &j;
cout << “entre i ”; cin>>i;
cout << “entre j “; cin >>j;
cambiar( /*poner los parámetros x e y
indireccionando x e y adecuadamente*/);
}
Respuesta
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <iostream.h>
//--------------------------------------------------------------------------#pragma argsused
void cambiar( int &a, int &b )
{
int aux;
aux = a;
a = b;
b = aux;
}
main()
{
void *x, * y;
int *w, * z;
int i, j;
x = &i;
y = &j;
cout << "entre i "; cin>>i;
cout << "entre j "; cin>>j;
w = (int *)x;
z = (int *)y;
cambiar( *w, *z);
cout <<i<<" "<<j<<endl;
}
//--------------------------------------------------------------------------Ejercicio 4
Se tiene el siguiente código:
//definición de las estructuras
struct punto
{
double x, y;
};
struct triangulo
{
punto a, b, c;
};
double superficie ( triangulo t )
{
double mab, alfaab;
double mh, alfah;
double cab, ch;
double area;
punto corte;
//mab el coeficiente angular de la recta ab
y = mx+c e yh = mh x + ch
cab = t.a.y - mab * t.a.x; //c de la recta ab
ch = t.c.y - mh * t.c.x; //c de la altura
//ahora hallamos la intersección de la recta que pasa por c
// con ab
corte.x = (ch - cab ) / ( mab - mh );
corte.y = mh * corte.x + ch;
//ahora hallamos el área = b * h /2 sería la distancia ab
//por la distancia c corte
area = sqrt( pow((t.b.x - t.a.x ), 2 ) + pow((t.b.y - t.a.y ), 2 ) );
area *= sqrt( pow((corte.x - t.c.x), 2 ) + pow((corte.y - t.c.y), 2 ) );
area /= 2;
return area;
}
Se pide:
a) Convertir la estructura triangulo en una clase teniendo
mab = (t.b.y - t.a.y) / (t.b.x - t.a.x );
alfaab = atan( mab );
alfah = alfaab + M_PI / 2.0;
mh = tan( alfah );
b)
como método la función superficie. Los puntos deben
poder ser vistos desde una aplicación.
Construir una aplicación que se ingresen dos triángulos e
indique cuál área es mayor.
Respuesta
doubletriangulo::superficie(void);
{
//comonosepasaparámetro(triangulot)solamentebastaconcopiarelcódigoyeliminartodoslost.
doublemab,alfaab;
doublemh,alfah;
doublecab,ch;
doublearea;
puntocorte;
//mabelcoeficienteangulardelarectaab
mab=(b.y-a.y)/(b.x-a.x);
alfaab=atan(mab);
alfah=alfaab+M_PI/2.0;
mh=tan(alfah);
y=mx+ceyh=mhx+ch
cab=a.y-mab*a.x;//cdelarectaab
ch=c.y-mh*c.x;//cdelaaltura
//ahorahallamoslainterseccióndelarectaquepasaporc
//conab
corte.x=(ch-cab)/(mab-mh);
corte.y=mh*corte.x+ch;
//ahorahallamoselárea=b*h/2seríaladistanciaab
//porladistanciaccorte
area=sqrt(pow((b.x-a.x),2)+pow((b.y-a.y),2));
area*=sqrt(pow((corte.x-c.x),2)+pow((corte.y-c.y),2));
area/=2;
returnarea;
}
//******************************************************************************
main()
{
triangulot1,t2;
cout<<"ingresexdelpuntoadeltriángulo1";cin>>t1.a.x;
cout<<"ingreseydelpuntoadeltriángulo1";cin>>t1.a.y;
cout<<"ingresexdelpuntobdeltriángulo1";cin>>t1.b.x;
cout<<"ingreseydelpuntobdeltriángulo1";cin>>t1.b.y;
cout<<"ingresexdelpuntocdeltriángulo1";cin>>t1.c.x;
cout<<"ingreseydelpuntocdeltriángulo1";cin>>t1.c.y;
cout<<"ingresexdelpuntoadeltriángulo2";cin>>t1.a.x;
cout<<"ingreseydelpuntoadeltriángulo2";cin>>t1.a.y;
cout<<"ingresexdelpuntobdeltriángulo2";cin>>t1.b.x;
cout<<"ingreseydelpuntobdeltriángulo2";cin>>t1.b.y;
cout<<"ingresexdelpuntocdeltriángulo2";cin>>t1.c.x;
cout<<"ingreseydelpuntocdeltriángulo2";cin>>t1.c.y;
if(t1.superficie()>t2.superficie())
{
cout<<"elprimeroesmayorqueelsegundo"<<endl;
}
elseif(t1.superficie()<t2.superficie())
{
cout<<"elsegundoesmayorqueelprimero"<<endl;
}
else
{
cout<<"losdostriangulostienenelmismoarea"<<endl;
}
}
Descargar