Está en la página 1de 21

www.fisicaeingenieria.

es

Problemas resueltos de
programacin en C++
www.fisicaeingenieria.es
Luis Muoz Mato

2012

www.fisicaeingenieria.es

www.calculadorasonlines.es

1.- Escribir un programa que haga el producto de dos matrices 3x3. El programa debe
incluir un procedimiento que lea las matrices, una funcin que haga el producto y
otro procedimiento que escriba el resultado:
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
void leermatriz (float m[3][3])
{
int i,j;
for (i=1;i<=3;i++)
{
for (j=1;j<=3;j++)
{
cout<<"introducir el elemento "<<i<<","<<j<<endl;
cin>>m[i][j];
}
}
}
void producto_matrices (float a [3][3],float b[3][3],float p[3][3])
{
int i,j,k;
for (i=1;i<=3;i++)
{
p[i][j]=0;
for (j=1;j<=3;j++)
{
p[i][j]=p[i][j]+a[i][k]*b[k][j];
}
}
}
void escribir_matriz (float m[3][3])
{
int i,j;
for (i=1;i<=3;i++)
{
for (j=1;j<=3;j++)
{
cout<<m[i][j]<<" ";
}
cout<<endl;

}
}

int main()
{
float a[3][3];
leermatriz (a);
leermatriz (b);
producto_matrices (a,b,p);
escribir_matriz (p);
system("PAUSE");
return EXIT_SUCCESS;
}

2.- Dadas las coordenadas tridimensionales de tres puntos, debe construirse un


programa que haga el permetro del tringulo que forman. El programa debe incluir
una funcin para leer las coordenadas de los puntos y una funcin que haga el
permetro:
SOLUCIN
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
void leer_cordenadas (float p[3])
{
int i;
for (i=1;i<=3;i++)
{
cout<<"coordenada"<<i<<":";
cin>>p[i];
}
}
float distancia (float p1[3],float p2[3])
{
float dist;
dist=sqrt((p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])+(p1[3]p2[3])*(p1[3]-p2[3]));
return (dist);
}
int main(int argc, char *argv[])
{
float A[3],B[3],C[3];
float perimetro;
leer_cordenadas (A);
leer_cordenadas (B);
leer_cordenadas (C);
perimetro=distancia (A,B)+distancia (B,C)+distancia (C,A);
cout<<"El perimetro es:"<<perimetro<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

3.- Escribir un programa que haga una serie de Taylor de la funcin seno, sabiendo
que la funcin seno desarrollada en serie de Taylor tiene la forma
n
x 2 n +1
n
sin ( x ) = ( 1)
( 2n + 1)!
i =0
SOLUCIN
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int factorial (int n)
{
int fact,i;
fact=1;
for (i=1;i<=n;i++)
{
fact=fact*i;
}
return (fact);
}
int main()
{
float x;
float suma;
int i;
cout<<"x:";
cin>>x;
suma=0.0;
for (i=0;i<=100;i++)
{
suma=suma+pow(float (-1.0),float(i))*pow(x,float((2*i)+1))/factorial (2*i+1);
}
cout <<"el valor de la serie es:"<<suma;
system("PAUSE");
return EXIT_SUCCESS;
}

4.- Pasar un nmero a hexadecimal


Solucin
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int numero;
int cifras [32];
int i,j;
cout<<"Numero:";
cin>>numero;
i=1;
while (numero>=16)
{
cifras [i]=numero%16;
numero=numero/16;
i++;
}
cifras [i]=numero;
for (j=i;j>=1;j--)
{
cout<<cifras[j]<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}

5.- Escribir un programa que dados tres nmeros que representan 3 longitudes nos
diga si existe y un tringulo que tenga esas dimensiones ( Para que haya un tringulo
que tenga esas dimensiones, la suma de cualesquiera dos lados tiene que ser mayor
que el tercer lado)
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
float a,b,c;
bool d;
cout<<"lado a:";
cin>>a;
cout<<"lado b:";
cin>>b;
cout<<"lado c:";
cin>>c;
if (a+b>c && a+c>b && b+c>a)
{
cout<<"el triangulo existe"<<endl;
d=true;
}
else
{
cout<<"El triangulo no existe"<<endl;
d=false;
}
if (d==true)
{
if (a==b && b==c)
{
cout<<"el triangulo es equilatero"<<endl;
}
else if (a!=b && b!=c &&a!=c)
{
cout<<"El triangulo es escaleno"<<endl;
}

else
{
cout<<"el triangulo es isosceles"<<endl;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}

6.- Escribir un programa que me de el mximo comn divisor de dos nmeros


SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int a,b,i;
cout<<"numero mayor:"<<endl;
cin>>a;
cout<<"numero menor:"<<endl;
cin>>b;
for (i=b;i>=1;i--)
{
if (a%i==0 && b%i==0)
{
cout<<"El maximo comun divisor es:"<<i<<endl;
break;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}

7.- Escribir un programa que me de el mximo y el mnimo de un vector introducido


por el usuario por teclado. El programa debe incluir un procedimiento para leer el
vector y otro para el mximo y mnimo de un vector.
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
void leer_vector (int n,float v[])
{
int i;
for (i=1;i<=n;i++)
{
cout<<"Componente "<<i<<endl;
cin>>v[i];
}
}
float maximo (int n,float v[])
{
int i;
float max;
max=v[1];
for (i=1;i<=n;i++)
{
if (v[i]>max)
{
max=v[i];
}
}
return (max);
}
float minimo (int n,float v[])
{
int i;
float min;
min=v[1];
for (i=1;i<=n;i++)
{
if (v[i]<min)
{
min=v[i];
}

}
return (min);
}
int main()
{
int n;
cout<<"numero de componentes:"<<endl;
cin>>n;
float v[n];
leer_vector (n,v);
cout<<"el maximo es:"<<maximo (n,v)<<" el minimo es:"<<minimo (n,v)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

8.- Hacer un programa que cambie de unidades usando un switch case en concreto,
el usuario le proporcionar una longitud y la unidad en la que est medida
(centmetros, kilmetros, o pulgadas) y el programa pasar la cantidad introducida a
metros
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float l,resultado;
int opcion;
cout<<"Longitud:"<<endl;
cin>>l;
cout<<"Unidad:1.-cm 2.- pulgadas 3.- km"<<endl,
cin>>opcion;
switch (opcion)
{
case 1:
resultado=l/100;
cout<<"La longitud en metros es:"<<resultado<<endl;
break;
case 2:
resultado=l/254;
cout<<"La longitud en metros es:"<<resultado<<endl;
break;
case 3:
resultado=l*1000;
cout<<"La longitud en metros es:"<<resultado<<endl;
break;
default:
cout<<"ERROR"<<endl;
break;
}

system("PAUSE");
return EXIT_SUCCESS;
}

9.- Hacer una funcin que reciba un nmero entero y que devuelva el mismo nmero
convertido en entero largo
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
long int transformar (int n)
{
return (n);
}
int main()
{
system("PAUSE");
return EXIT_SUCCESS;
}

10.- Escribir una funcin que calcule el producto de la primera y de la ltima cifra de
un nmero entero:
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int numero,a,b,producto;
cout<<"Numero:"<<endl;
cin>>numero;
a=numero%10;
while (numero>10)
{
numero=numero/10;
}
b=numero;
producto=a*b;
cout<<"el resultado de multiplicar la primera por la ultima es:"<<producto<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

11.- Escribir un programa que dado un nmero decimal introducido por el usuario, lo
convierta en un nmero binario y lo almacene en un vector de enteros de 32 bits
SOLUCIN
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char *argv[])
{
bool a;
int i,suma,j;
int v[32],cifras [100];
for (i=31;i>=0;i--)
{
cout<<"componente "<<i<<endl;
cin>>v[i];
}
suma=0;
for (i=0;i<=31;i++)
{
suma=suma+v[i]*pow (2.0,double (i));
}
cout<<"El numero en decimal es:"<<suma<<endl;
j=1;
while (suma>10)
{
cifras [j]=suma%10;
j++;
suma=suma/10;
}
cifras [j]=suma;
for (i=1;i<=j;i++)
{
cout<<cifras [i]<<endl;
}
for (i=1;i<=j;i++)
{
if (cifras [i]==cifras [j+1-i])
{

a=true;
continue;
}
else
{
a=false;
cout<<"Numero no capicua"<<endl;
break;
}
}
if (a==true)
{
cout<<"Numero capicua"<<endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}

12.- Escribir un programa que dado un nmero binario (almacenado en un vector de


32 bits) lo convierta en un nmero entero y me diga si el nmero obtenido es
capica.
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char *argv[])
{
bool a;
int i,suma,j;
int v[32],cifras [100];
for (i=31;i>=0;i--)
{
cout<<"componente "<<i<<endl;
cin>>v[i];
}
suma=0;
for (i=0;i<=31;i++)
{
suma=suma+v[i]*pow (2.0,double (i));
}
cout<<"El numero en decimal es:"<<suma<<endl;
j=1;
while (suma>10)
{
cifras [j]=suma%10;
j++;
suma=suma/10;
}
cifras [j]=suma;
for (i=1;i<=j;i++)
{
cout<<cifras [i]<<endl;
}
for (i=1;i<=j;i++)
{
if (cifras [i]==cifras [j+1-i])
{
a=true;

continue;
}
else
{
a=false;
cout<<"Numero no capicua"<<endl;
break;
}
}
if (a==true)
{
cout<<"Numero capicua"<<endl;
}

system("PAUSE");
return EXIT_SUCCESS;
}

13.- Implementar un programa que me pregunte la dimensin de un a matriz y la


opcin a escoger: 1.- todos 1, 2.- todos 0 3.- todos las diagonales 1) y me imprima la
matriz seleccionada
SOLUCIN
#include <cstdlib>
#include <iostream>
using namespace std;
void matriz_cero (int t, int m[10][10])
{
int i,j;
for (i=1;i<=t;i++)
{
for (j=1;j<=t;j++)
{
m[i][j]=0;
}
}
}

void matriz_uno (int t, int m[10][10])


{
int i,j;
for (i=1;i<=t;i++)
{
for (j=1;j<=t;j++)
{
m[i][j]=1;
}
}
}

void matriz_diagonal (int t, int m[10][10])


{
int i,j;
for (i=1;i<=t;i++)
{
for (j=1;j<=t;j++)
{
if (i==j)
{
m[i][j]=1;

}
else if ((i+j)==(t+1))
{
m[i][j]=1;
}
else
{
m[i][j]=0;
}
}
}
}
void imprimir (int t,int m[10][10])
{
int i,j;
for (i=1;i<=t;i++)
{
for (j=1;j<=t;j++)
{
cout<<m[i][j]<<" ";
}
cout<<endl;
}
}

int main()
{
int t,opcion;
cout<<"Tamano:"<<endl;
cin>>t;
int m[10][10];
cout<<"tipo de matriz: 1.- Todos 1 2.- Todos 0 3.- Diagonal"<<endl;
cin>>opcion;
switch (opcion)
{
case 1:
matriz_uno(t,m);
imprimir (t,m);
break;
case 2:
matriz_cero(t,m);
imprimir (t,m);
break;
case 3:

matriz_diagonal (t,m);
imprimir (t,m);
break;
default:
break;
}

system("PAUSE");
return EXIT_SUCCESS;
}

También podría gustarte