Quiero que los expertos resuelvan una pregunta de programación en C con puntuaciones altas. Esta pregunta es realmente difícil para mí.
Compruebe si este programa funciona
Clase de números aleatorios: random.h
#include lt; math.hgt;
#include lt;time.hgt;
#define IM1 2147483563
#define IM2 2147483399
#define AM (1.0/IM1)
#definir IMM1 (IM1-1)
#definir IA1 40014
#definir IA2 40692
#definir IQ1 53668
#definir IQ2 52774
#define IR1 12211
#define IR2 3791
#define NTAB 32
#define NDIV (1 IMM1 /NTAB )
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
unsigned int seed=0 //seed es la semilla, para establecerse como una variable global
void mysrand(long int i) //Semilla de inicialización
{
seed = -i; p >}
largo a[1];
clase myrandom
{
público:
doble ran1 (long *idum)
{
int j;
long k
static long idum2=123456789; >
static long iy=0;
static long iv[NTAB];
float temp;
if (*idum lt; = 0)
{
if (-(*idum) lt; 1) *idum=1;
else *idum = -(*idum); p >
idum2=(*idum);
for (j=NTAB 7; jgt; =0; j--)
{
k =(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum lt; 0) * idum = IM1;
if (j lt; NTAB) iv[j] = *idum;
}
iy=iv[0]; p >
}
k=(*idum)/IQ1
*idum=IA1*(*idum-k*IQ1)-k*IR1; >
if (*idum lt; 0) *idum = IM1;
k=idum2/IQ2
idum2=IA2*(idum2-k*IQ2)-k; * IR2;
si
(idum2 lt; 0) idum2 = IM2;
j=iy/NDIV
iy=iv[j]-idum2
iv[j] = *idum;
if (iy lt; 1) iy = IMM1;
if ((temp=AM*iy) gt; RNMX) return RNMX; p> else return temp;
}
};
Clase de matriz: Matrix.h
#include stdio.hgt; ;
#include lt;iostream.hgt;
#include lt;vectorgt
#include "random.h"
usando el espacio de nombres std;
matriz de clases
{
público:
outmatrix()
{ p>
p>
int c=2, d=2, m=0, n=1 // La matriz predeterminada es una distribución uniforme entre dos filas y dos columnas (0, 1)<; /p>
mysrand(time(0)); //Inicialización
a[0]=seed; //Inicialización, nota: no estoy usando la función de números aleatorios que viene con C, pero es una función autoescrita, estas dos líneas son la inicialización de números aleatorios, la posición y el número no se pueden cambiar, la variable "a" solo se puede usar para números aleatorios, ¡¡¡no puedes usarla!!!
myrandom ran;
int panduan=0;
coutlt;lt;"Si utiliza el número predeterminado de filas y columnas, presione 0; de lo contrario, presione 1"lt ;lt;endl;
cingt;gt; panduan;
if(panduan==1)
{
coutlt;lt ;"Ingrese el número de filas y columnas en la matriz"lt;lt;endl;
p>
gt; gt;
vectorlt; vectorlt; doublet; gt; tdmatrix(d, vectorlt; doublet; (c)) //Definir una matriz dinámica bidimensional
panduan=0; p>
for(int i=0;ilt;d;i)//Ingrese el rango distribuido uniformemente de cada columna
{
coutlt;lt;"Presione 0 para utilizar el valor predeterminado para una distribución uniforme; de lo contrario, presione 1"lt;lt;endl;
cingt;gt; panduan;
if(panduan==1)
{
coutlt;lt;"Ingrese "lt;lt;i 1lt;lt;" Los límites izquierdo y derecho de la distribución promedio de la columna"lt;lt;endl;
cingt;gt;mgt;gt;n;
}
for(int j= 0; jlt; c; j )
{
tdmatrix[i][j]=m ran.ran1(a)*(n-m);
}
panduan=0;
}
// coutlt;
lt;"estoy aquí"lt;lt;endl;
panduan=0;
//
coutlt;lt;"Si se guarda en la carpeta predeterminada Por favor presione 0, de lo contrario presione 1"lt;lt;endl;
cingt;gt;panduan;
if (panduan==0)
{
char str[]="d:\\matrix.txt";
freopen(str, "w", stdout);
}< / p>
else if(panduan==1)
{
char str[100];
coutlt;lt;"Ingrese para guardar Ruta y nombre de archivo, como por ejemplo: d:\\\\"lt;lt;"matrix.txt"lt;lt;endl;
cingt;gt;str;
freopen (cadena, "w", salida estándar);
}
vectorlt; doblete; tdmatrix1(c, vectorlt; doblete; (d)); >
para(i=0;ilt;c;i)
{
para(int j=0;jlt;d;j)
{
tdmatrix1[i][j]=tdmatrix[j][i];
coutlt;lt;tdmatrix1[i][j]lt;lt;" ";
}
coutlt;lt;endl;
}
}
};
Programa de prueba:
#include "matrix.h"
void main()
{
matrix ma;
p>
ma.outmatrix();
}
El programa correspondiente ha sido enviado a tu correo electrónico, compruébalo
Mi correo electrónico: hu_hu605@163.com