Hola miren tengo que hacer un programa que calcule la desviacion estandar usando vectores tipo contenedor... o bien este tipo de dato "vector<vector >" aca hice un codigo pero aun no se en que este fallando si alguien podria analizar el codigo y corregir o decirme los errores os agradeceria un monton :
Porque al compilar me vota un montooon de errores.... creo que estoy usando mal el tipo de dato vector<vector>
Código:
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <cstdlib>
using namespace std;
unsigned leerdato(){
double n;
try{
cout<<"Numero de elementos ";
cin>>n;
if(fmod(n,1)!=0) throw 1;
if (n<0) throw 2;
}catch (int e){
switch(e){
case 1: cout<<"El numero debe ser entero"<<endl; break;
case 2: cout<<"El numero debe ser positivo"<<endl; break;
}
return leerdato();
}
return (unsigned) n;
}
void leerlim(double &li, double &ls){
try{
cout<<"Limites inferior y superior: ";
cin>>li>>ls;
if(li>=ls) throw 1;
}catch (int e){
cout<<"El limite inferior debe ser menor al superior !"<<endl;
leerlim(li,ls);
}
}
vector< vector<int> > &randMatE(unsigned n, int li, int ls){
unsigned j; int d=ls-li;
vector< vector<int> > *a;
a= new vector<vector<int> >(n);
for (j=0; j<n; j++){
(*a)[j]=(int)((double)rand()/RAND_MAX*d+li);
}
return *a;
}
void mostrarVector(vector<vector <double> > x,unsigned n) {
unsigned i;
for(i=0;i<n;i++) {
cout<<setw(8)<<setprecision(5)<< x[i];
if((i+1)%10==0) cout<<endl;}
cout<<endl;
}
double promedio(vector<vector<double> >x, unsigned n) {
double s=0;
if(n==0) throw" ¡Error! Vector vacío.";
for(unsigned i=0;i<n;i++) s+=x[i];
return s/n;
}
double dstd(vector<vector <double> >x, unsigned n) {
double s=0;
double prom=promedio(x,n);
if(n==1) throw"¡Error! No existe desviación estándar";
for(unsigned i=0;i<n;i++) s+=(prom-x[i])*(prom-x[i]);
return sqrt(s/(n-1));
}
void mostrardesv(vector<vector <double> >x){
cout<<"La desviacion resultante es = "<<dstd(x)<<endl;
}
int main(){
unsigned n; double li,ls;
vector < vector<double> > x;
cout<<"***** Desviación estándar *****"<<endl;
uno:
n=leerdato();
if (n==0) goto dos;
leerlim(li,ls);
x=randMatE(n,li,ls);
mostrarVector(x,n);
mostrardesv(x);
goto uno;
dos:
cout<<"Programa terminado";
return 0;
}