Solución

Anuncio
Practica Calificada Grupo A
Programación en C++
Ejercicio 1
#include <iostream.h>
#include <math.h>
float *PedirPuntos(int &num);
void DistanciasEntrePuntos(float *,int);
void main()
{
float *v;
int num;
v = PedirPuntos(num);
//aqui crear el vector
DistanciasEntrePuntos(v,num);
delete [] v;
//liberar memoria
}
float *PedirPuntos(int &num)
{
float *vec;
cout << "Num. de Puntos:?";
cin >> num;
vec = new float[num*2];
for (int i=0;i<num*2;i+=2){
cout << "Dar Punto "<<i/2+1<<"(x,y):?";
cin >> vec[i] >> vec[i+1];
}
return vec;
}
void DistanciasEntrePuntos(float *v,int num)
{
int I,J;
float menor=1e10;
float d,x2,x1,y2,y1;
for (int i=0;i<num-1;i++){
x1=v[i*2]; y1=v[i*2+1];
for (int j=i+1;j<num;j++){
x2=v[j*2]; y2=v[j*2+1];
d = sqrt( pow(x2-x1,2.0) + pow(y2-y1,2.0) );
if (menor > d) {
menor=d;
I=i; J=j;
}
cout << "\tDist. ("<<v[i*2]<<","<<v[i*2+1];
cout << " y "<<v[j*2]<<","<<v[j*2+1]<<"): "<< d << endl;
}
}
cout << "\nLa menor distancia es:" << menor << endl;
cout << "Entre los puntos ("<<v[I*2]<<","<<v[I*2+1];
cout << " y "<<v[J*2]<<","<<v[J*2+1]<<")"<<endl<<endl;
}
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Pág. 1
Practica Calificada Grupo A
Programación en C++
Ejercicio 2
#include <iostream.h>
#include <math.h>
void PolarToCartesianas(float r, float ang,float &x, float &y);
void CartesianasToPolar(float x, float y, float &r, float &ang);
void main()
{
int opc;
char ch;
float x,y,r,ang;
while(true){
cout << "** Menu **"<<endl;
cout << "1. Cartesianas a Polares "<<endl;
cout << "2. Polares a Cartesianas"<<endl;
cout << "3. Salir"<<endl;
cout << "\tOpcion:?";
cin >> opc;
if (opc==3) { cout << "Adios..\n"; break;}
else if (opc==1){
cout << "\nDar x,y:? ";
cin >> x >> ch >>y;
CartesianasToPolar(x,y,r,ang);
cout << ">> R:"<< r << " Ang:" << ang << endl<<endl;
}
else if (opc==2){
cout << "\nDar r,ang:? ";
cin >> r >> ch >>ang;
PolarToCartesianas(r,ang,x,y);
cout << ">> X:"<< x << " Y:" << y << endl<<endl;
}
}
}
void PolarToCartesianas(float r, float ang,float &x, float &y)
{
ang = ang*3.141592/180;
x = r*cos(ang);
y = r*sin(ang);
}
void CartesianasToPolar(float x, float y, float &r, float &ang)
{
r = sqrt( x*x + y*y );
ang = atan(y/x)*180/3.141592;
}
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Pág. 2
Practica Calificada Grupo A
Programación en C++
Ejercicio 3
#include <iostream.h>
#include <string.h>
char *PideTexto();
void ContarVocales(char *, int []);
void Imprime(int []);
void main()
{
char *texto;
int Num[5];
texto = PideTexto();
ContarVocales(texto,Num);
Imprime(Num);
delete [] texto; //libera memoria
}
char *PideTexto()
{
char tmp[180];
cout << "Escriba el texto:\n>>";
cin.getline(tmp,180);
char *t = new char[ strlen(tmp)+1];
strcpy(t,tmp);
return t;
}
void ContarVocales(char *t, int Num[])
{
char min[]={'a','e','i','o','u'};
char may[]={'A','E','I','O','U'};
int len=strlen(t);
for (int i=0;i<5;i++) Num[i]=0;
for (i=0;i<len;i++){
for (int j=0;j<5;j++)
if ( t[i]==min[j] || t[i]==may[j]) Num[j]++;
}
}
void Imprime(int Num[])
{
char ch[]={'a','e','i','o','u'};
cout << "\nVocales repetidas:\n";
for (int i=0;i<5;i++){
cout << "Vocal " << ch[i] << ": " << Num[i]<<endl;
}
}
Escuela Superior de Ingenieros – Tecnun – Universidad de Navarra
Pág. 3
Descargar