Herramientas computacionales de Cómputo Científico   Dra. Elisa Schaeffer.
Antecedentes Actualmente estoy estudiando un trabajo acerca de la política WEEE que es usada en la Unión Europea. El modelo matemático (1)  desarrollado emplea la siguiente restricción: Donde d ij  es la distancia entre el nodo i y el nodo j,  es una variable binaria que vale 1 si tanto el nodo y como el nodo j están pertenecen a la misma compañía k y D funciona como una “big M” (representa una cantidad muy grande) .
Antecedentes. Se puede asignar cualquier valor a D, pero para un mejor desempeño de los métodos de solución, se desea que ese valor sea “realista”. Como se asignarán nodos a diferentes territorios y se desea saber que tan dispersos son, esa D se puede cambiar por la máxima distancia entre dos vértices. El programa que desarrolle calcula la mayor distancia de una instancia. El programa esta codificado en C++ y posteriormente se crea un archivo  ejecutable.
Procedimiento.
Programa en C++ Como se tienen varias instancias, cada una en un archivo en el mismo formato, el archivo de lectura  de las instancias leerá la información en una estructura, de la cual se obtendrá la mayor distancia.  #include  "stdio.h" #include  "stdlib.h“ #include  "string.h" #include  "iostream“  Librerías y declaración de variables  #include  "fstream"  // sirve para abrir flujo de archivos using namespace std; ofstream fp; int f,c;
Programa en C++ struct P_ARCHIVO{ int filas; float matriz1[ 100 ][ 5 ]; int filas2; int alado; float matricilla[ 20 ][ 20 ]; Clases en la estructura float parametros[ 3 ]; float matrizota[ 100 ][ 100 ]; };
Programa en C++ int visualizar(P_ARCHIVO &A){ //Esto sirve para visualizar el archivo leido int oper =  0 ; float max = A.matrizota[ 0 ][ 0 ]; printf (&quot;%d\n&quot;, A.filas); for(f= 0 ;f<A.filas;f++)    Función visualizar   {for(c= 0 ;c< 5 ;c++)  {printf (&quot;%f &quot; ,A.matriz1[f][c]);   }   printf( &quot;\n&quot; ); }
Programa en C++ printf( &quot;%d &quot; ,A.filas2); printf( &quot;%d\n&quot; ,A.alado);  for(f= 0 ;f<A.filas2;f++) {for(c= 0 ;c< 3 ;c++) {printf( &quot;%f &quot; ,A.matricilla[f][c]);    }  printf( &quot;\n&quot; ); } printf( &quot;%f &quot; ,A.parametros[ 0 ]);  printf( &quot;%f &quot; ,A.parametros[ 1 ]); printf( &quot;%f\n&quot; ,A.parametros[ 2 ]);
Programa en C++ printf( &quot;%f &quot; ,A.parametros[0]); printf( &quot;%f &quot; ,A.parametros[1]); printf( &quot;%f\n&quot; ,A.parametros[2]); for(f= 0 ;f<A.filas;f++) {for(c= 0 ;c<A.filas;c++) {printf( &quot;%f &quot; ,A.matrizota[f][c]);    if (max < A.matrizota[f][c])   {max = A.matrizota[f][c]; oper +=  1 ; } } }printf( &quot;La mayor distancia es: %5.2f, y las comparaciones hechas fueron %d&quot; , max, oper); }
Programa en C++ int main(int argc, char ** argv){ P_ARCHIVO A;  // se va a tener acceso a la structura P_ARCHIVO con el caracter A FILE *pArch; pArch = fopen(argv[ 1 ], &quot;r&quot; ); if(!pArch)  { cout <<  &quot;\nNo existe el archivo\n&quot; ; exit( 0 );  }  else{  //Esto lee el primero renglon = al numero de filas  fscanf(pArch, &quot;%d&quot; ,&A.filas); //Esto lee la primer matriz de la estructura for(f= 0 ;f<A.filas;f++){    for(c= 0 ;c< 5 ;c++){  //creo que son 5 columnas siempre fscanf(pArch, &quot;%f&quot; ,&A.matriz1[f][c]); } }
Programa en C++ //Esto lee el valor despues de la primer matriz que son los renglones de la segunda matriz fscanf(pArch, &quot;%d&quot; ,&A.filas2); fscanf(pArch, &quot;%d&quot; ,&A.alado);  //esto lee el valor a lado del valor anterior que son los arcos o algo asi //Esto lee la segunda matriz la matricilla for(f= 0 ;f<A.filas2;f++) {for(c= 0 ;c< 3 ;c++)   //creo que son 3 columnas siempre {fscanf(pArch, &quot;%f&quot; ,&A.matricilla[f][c]); } } //Esto lee las clavecillas esas que son 3  fscanf(pArch, &quot;%f&quot; ,&A.parametros[ 0 ]);   fscanf(pArch, &quot;%f&quot; ,&A.parametros[ 1 ]);   fscanf(pArch, &quot;%f&quot; ,&A.parametros[ 2 ]);
Programa en C++ //Esto lee la matrizota for(f= 0 ;f<A.filas;f++) {for(c= 0 ;c<A.filas;c++) {fscanf(pArch, &quot;%f&quot; ,&A.matrizota[ f ][ c ]); } } fclose(pArch); } visualizar(A); return  0 ; }
Archivo mio_Diana.sh #!/bin/bash echo   &quot;Numero de unidades basicas: &quot; read n=$REPLY for   j   in  2 3 4 ; do for  x   in  0 1 2 3 4 ; do . / prueba3  &quot;data&quot; $n &quot;_&quot; $j &quot;_&quot; $x  >  &quot;resultado&quot; $n &quot;_&quot; $j &quot;_&quot; $x done done
Instrucciones en la pantalla

Tarea 1 bash

  • 1.
    Herramientas computacionales deCómputo Científico Dra. Elisa Schaeffer.
  • 2.
    Antecedentes Actualmente estoyestudiando un trabajo acerca de la política WEEE que es usada en la Unión Europea. El modelo matemático (1) desarrollado emplea la siguiente restricción: Donde d ij es la distancia entre el nodo i y el nodo j, es una variable binaria que vale 1 si tanto el nodo y como el nodo j están pertenecen a la misma compañía k y D funciona como una “big M” (representa una cantidad muy grande) .
  • 3.
    Antecedentes. Se puedeasignar cualquier valor a D, pero para un mejor desempeño de los métodos de solución, se desea que ese valor sea “realista”. Como se asignarán nodos a diferentes territorios y se desea saber que tan dispersos son, esa D se puede cambiar por la máxima distancia entre dos vértices. El programa que desarrolle calcula la mayor distancia de una instancia. El programa esta codificado en C++ y posteriormente se crea un archivo ejecutable.
  • 4.
  • 5.
    Programa en C++Como se tienen varias instancias, cada una en un archivo en el mismo formato, el archivo de lectura de las instancias leerá la información en una estructura, de la cual se obtendrá la mayor distancia. #include &quot;stdio.h&quot; #include &quot;stdlib.h“ #include &quot;string.h&quot; #include &quot;iostream“ Librerías y declaración de variables #include &quot;fstream&quot; // sirve para abrir flujo de archivos using namespace std; ofstream fp; int f,c;
  • 6.
    Programa en C++struct P_ARCHIVO{ int filas; float matriz1[ 100 ][ 5 ]; int filas2; int alado; float matricilla[ 20 ][ 20 ]; Clases en la estructura float parametros[ 3 ]; float matrizota[ 100 ][ 100 ]; };
  • 7.
    Programa en C++int visualizar(P_ARCHIVO &A){ //Esto sirve para visualizar el archivo leido int oper = 0 ; float max = A.matrizota[ 0 ][ 0 ]; printf (&quot;%d\n&quot;, A.filas); for(f= 0 ;f<A.filas;f++) Función visualizar {for(c= 0 ;c< 5 ;c++) {printf (&quot;%f &quot; ,A.matriz1[f][c]); } printf( &quot;\n&quot; ); }
  • 8.
    Programa en C++printf( &quot;%d &quot; ,A.filas2); printf( &quot;%d\n&quot; ,A.alado); for(f= 0 ;f<A.filas2;f++) {for(c= 0 ;c< 3 ;c++) {printf( &quot;%f &quot; ,A.matricilla[f][c]); } printf( &quot;\n&quot; ); } printf( &quot;%f &quot; ,A.parametros[ 0 ]); printf( &quot;%f &quot; ,A.parametros[ 1 ]); printf( &quot;%f\n&quot; ,A.parametros[ 2 ]);
  • 9.
    Programa en C++printf( &quot;%f &quot; ,A.parametros[0]); printf( &quot;%f &quot; ,A.parametros[1]); printf( &quot;%f\n&quot; ,A.parametros[2]); for(f= 0 ;f<A.filas;f++) {for(c= 0 ;c<A.filas;c++) {printf( &quot;%f &quot; ,A.matrizota[f][c]); if (max < A.matrizota[f][c]) {max = A.matrizota[f][c]; oper += 1 ; } } }printf( &quot;La mayor distancia es: %5.2f, y las comparaciones hechas fueron %d&quot; , max, oper); }
  • 10.
    Programa en C++int main(int argc, char ** argv){ P_ARCHIVO A; // se va a tener acceso a la structura P_ARCHIVO con el caracter A FILE *pArch; pArch = fopen(argv[ 1 ], &quot;r&quot; ); if(!pArch) { cout << &quot;\nNo existe el archivo\n&quot; ; exit( 0 ); } else{ //Esto lee el primero renglon = al numero de filas fscanf(pArch, &quot;%d&quot; ,&A.filas); //Esto lee la primer matriz de la estructura for(f= 0 ;f<A.filas;f++){ for(c= 0 ;c< 5 ;c++){ //creo que son 5 columnas siempre fscanf(pArch, &quot;%f&quot; ,&A.matriz1[f][c]); } }
  • 11.
    Programa en C++//Esto lee el valor despues de la primer matriz que son los renglones de la segunda matriz fscanf(pArch, &quot;%d&quot; ,&A.filas2); fscanf(pArch, &quot;%d&quot; ,&A.alado); //esto lee el valor a lado del valor anterior que son los arcos o algo asi //Esto lee la segunda matriz la matricilla for(f= 0 ;f<A.filas2;f++) {for(c= 0 ;c< 3 ;c++) //creo que son 3 columnas siempre {fscanf(pArch, &quot;%f&quot; ,&A.matricilla[f][c]); } } //Esto lee las clavecillas esas que son 3 fscanf(pArch, &quot;%f&quot; ,&A.parametros[ 0 ]); fscanf(pArch, &quot;%f&quot; ,&A.parametros[ 1 ]); fscanf(pArch, &quot;%f&quot; ,&A.parametros[ 2 ]);
  • 12.
    Programa en C++//Esto lee la matrizota for(f= 0 ;f<A.filas;f++) {for(c= 0 ;c<A.filas;c++) {fscanf(pArch, &quot;%f&quot; ,&A.matrizota[ f ][ c ]); } } fclose(pArch); } visualizar(A); return 0 ; }
  • 13.
    Archivo mio_Diana.sh #!/bin/bashecho &quot;Numero de unidades basicas: &quot; read n=$REPLY for j in 2 3 4 ; do for x in 0 1 2 3 4 ; do . / prueba3 &quot;data&quot; $n &quot;_&quot; $j &quot;_&quot; $x > &quot;resultado&quot; $n &quot;_&quot; $j &quot;_&quot; $x done done
  • 14.