//--------------------------------------------------------------------------- #include #include #include //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int** generaMatriz(int n,int m,int min,int max) { int i,j; int **resp; resp = new int*[n]; for(i = 0; i < n; i++) { resp[i] = new int[m]; for(j = 0; j < m; j++) resp[i][j] = random(max - min + 1) + min; } return resp; } //--------------------------------------------------------------------------- int* generaVectorAleatorioSinRepeticion(int largo) { int i,count; int *usado,*resp; resp = new int[largo]; usado = new int[largo]; for(i = 0; i < largo; i++) usado[i] = 0; for(i = 0; i < largo; i++) { count = random(largo); while( usado[count] == 1 ) { count = (count+1)%largo; } usado[count] = 1; resp[count] = i; } delete[] usado; return resp; } //--------------------------------------------------------------------------- void generaCaso(char archivo[],int n,int m,int min,int max) { FILE *output; int **matriz; int *array; int i,j; output = fopen(archivo,"w+t"); fprintf(output,"%d %d\n",n,m); matriz = generaMatriz(n,m,min,max); for(i = 0; i < n; i++) { for(j = 0; j < m; j++) fprintf(output,"%d ",matriz[i][j]); fprintf(output,"\n"); } array = generaVectorAleatorioSinRepeticion(m); for(i = 0; i < m; i++) fprintf(output,"%d ",array[i]); delete[] array; for(i = 0; i < n; i++) delete[] matriz[i]; delete[] matriz; fclose(output); } //--------------------------------------------------------------------------- int main(void) { randomize(); /// matriz es la matriz de valores en donde guardaremos los valores /// de las calificaciones en desorden. /// orden es el arreglo que contiene los valores de orden correcto. FILE *input,*output; int **matriz,*orden; int i,j,n,m; //generaCaso("input9.txt",300,300,0,10); /// Abrimos el archivo de entrada. input = fopen("input.txt","r+t"); /// Leemos los valores de n y m y damos memoria a los arreglos mientras leemos. fscanf(input,"%d %d",&n,&m); matriz = new int*[n]; orden = new int[m]; for(i = 0; i < n; i++) { matriz[i] = new int[m]; for(j = 0; j < m; j++) fscanf(input,"%d",&matriz[i][j]); } for(i = 0; i < m; i++) fscanf(input,"%d",&orden[i]); /// Cerramos el archivo de entrada. fclose(input); /// Abrimos el archivo de salida. output = fopen("output.txt","w+t"); /// Imprimimos la matriz con el orden correcto. for(i = 0; i < n; i++) { for(j = 0; j < m; j++) fprintf(output,"%d ", matriz[i][orden[j]]); fprintf(output,"\n"); } /// Cerramos el archivo de salida y liberamos memoria. fclose(output); for(i = 0; i < n; i++) delete[] matriz[i]; delete[] matriz; delete[] orden; return 0; } //---------------------------------------------------------------------------