• Viernes 17 de Mayo de 2024, 01:57

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - akutalu

Páginas: [1]
1
C/C++ / Correccion de errores de divide y venceras
« en: Lunes 9 de Marzo de 2009, 13:08 »
Buenas, he hecho un programa utilizando el algoritmo de divide y venceras, pero al compilar tengo errores en las funciones y nose corregirlos. me podeis ayudar? gracias


Código: C++
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5.  
  6. void formarTabla(int tabla[][100], const int &primero, const int &ultimo);
  7. void completarTabla(int tabla, int eqInf, int eqSup, int diaInf, int diaSup, int eqInic);
  8.  
  9. main (){
  10.  
  11.    int ultimo=0, medio=0;
  12.  
  13.     do{
  14.         cout<<"Introduzca el numero de jugadores"<<endl;
  15.         cin>>ultimo;
  16.        
  17.         if (ultimo<=1)
  18.             cout<< "ERROR!! El número de jugadores debe ser mayor que 1"<<endl;
  19.        
  20.     }while (ultimo<=1);
  21.  
  22.     //dias=ultimo-1; fila=ultimo+1; colum=ultimo            
  23.      
  24.                 //Declaracion de la tabla
  25.                 int tabla[ultimo+1][ultimo];
  26.                
  27.                 //Dias
  28.                 for (int i=0; i<=ultimo-1; i++)
  29.                     tabla[0][i]=i;          
  30.                    
  31.                 //Jugadores
  32.                 for (int j=1; j<=ultimo; j++)
  33.                     tabla[j][0]=j;    
  34.                    
  35.                 //Inicializa la tabla a 0 para evitar errores
  36.                 for (int f=1; f<ultimo+1; f++)
  37.                     for (int c=1; c<ultimo; c++){
  38.                         tabla[f][c]=0;
  39.                         tabla[f][c]=0;
  40.                     }
  41.                    
  42.  
  43.                        
  44.                 formarTabla(tabla,1,ultimo);
  45.                
  46.                
  47.                 cout<<endl<<"      Jugador t t Dia"<<endl<<endl;
  48.            
  49.                 //mostrar la tabla
  50.                 for (int f1=0; f1<ultimo+1; f1++){
  51.                     for (int c1=0; c1<ultimo; c1++)
  52.                         cout<<"t "<<tabla[f1][c1];
  53.                     cout<<endl<<endl;
  54.                 }
  55.                    
  56.    
  57.  
  58.  
  59. cout<<ultimo<<endl;
  60.  
  61. system ("pause");
  62. }
  63.  
  64.  
  65.  
  66. void formarTabla(int tabla[][100], const int &primero, const int & ultimo){
  67.    
  68.     if (ultimo - primero ==1){ //caso base
  69.         cout<<"caso base"<<endl;
  70.                    
  71.         tabla[primero][1]= ultimo;
  72.         tabla[ultimo][1]= primero;
  73.     }
  74.     else {      //caso recursivo
  75.                
  76.         cout<<"caso recursivo"<<endl;
  77.         int medio=(primero+ultimo)/2;
  78.                    
  79.         /*primera subsolución: participantes de 1 a 2k-1*/                                                
  80.         formarTabla(tabla,primero,medio);
  81.         /*segunda subsolución: participantes de 2k-1+1 a 2k*/                                      
  82.         formarTabla(tabla,medio+1,ultimo);
  83.                  
  84.         /*completa la tabla de los participantes de la primera subsolución con los de la segunda*/
  85.         completarTabla(tabla, primero, medio, medio, ultimo-1, medio+1);
  86.         /*completa la tabla de los participantes de la segunda subsolución con los de la primera*/
  87.         completarTabla(tabla, medio+1, ultimo, medio, ultimo-1, primero);
  88.     }
  89.    
  90. }
  91.  
  92. void CompletarTabla(int tabla, int eqInf, int eqSup, int diaInf, int diaSup, int eqInic){
  93.    
  94.     for (int j=diaInf;  j <= diaSup; j++)
  95.       tabla[eqInf][j]= (eqInic + j - diaInf);
  96.  
  97.  
  98.     for (int i = eqInf + 1; i <= eqSup; i++) {
  99.       /*Intercambio de contrincante*/
  100.       tabla[i][diaInf] = tabla[i-1][diaSup]; //el último contrincante de i-1 es ahora el primer contrincante de i
  101.       for (int j = diaInf + 1;  j <= diaSup; j++)
  102.          /*rotación de los contrincantes*/
  103.          tabla[i][j] = tabla[i-1][j-1]; //el contrincante de ayer de i-1, es el contrincante de hoy para i
  104.      
  105.     }
  106. }
  107.  

Páginas: [1]