Dev - C++ - Ayuda por favor, Pasar de C a C++

 
Vista:
Imágen de perfil de Gabriel
Val: 3
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda por favor, Pasar de C a C++

Publicado por Gabriel (1 intervención) el 09/01/2021 08:39:18
Buen día, por favor serian tan amables de ayudarme con este código, trate de pasarlo de c a c++pero no pude ya que al ejecutarlo me salen errores, muchas gracias de ante mano. Es el ejercicio de las ocho reinas y recién estoy tratando de aprender todo, igualmente agradecería sus conejos que tenga buen fin de semana.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
// Problema de las N reinas
// ------------------------
 
// Algoritmo recursivo
//
// 0. Obviamente, colocaremos una reina en cada fila
//
// 1. Se coloca una reina en una casilla de su fila y,
//    a continuación, se intentan colocar las reinas restantes.
//
// 2. Si las demás reinas no se pueden colocar con éxito,
//    probamos a colocar la reina actual en otra columna.
//
// Caso base: Cuando no quedan reinas por colocar.
 
 
#include <stdio.h>
#include <stdlib.h>
 
// Constantes simbólicas
 
#define TRUE  1
#define FALSE 0
 
 
// Comprobar si una reina está bien colocada
// -----------------------------------------
// La reina de la fila i está bien colocada si no está
// en la columna ni en la misma diagonal que cualquiera
// de las reinas de las filas anteriores
//
// Parámetros
//   fila   - Fila de la reina cuya posición queremos validar
//   reinas - Vector con las posiciones de las reinas
//   n      - Número de reinas
 
 
int comprobar (int fila, int reinas[], int n)
{
  int i;
 
  for (i=0; i<fila; i++)
      if (  ( reinas[i]==reinas[fila] )                      // Misma columna
         || ( abs(fila-i) == abs(reinas[fila]-reinas[i]) ) ) // Misma diagonal
         return FALSE;
 
  return TRUE;
}
 
 
// Colocación de una reina
// -----------------------
// Parámetros
//   fila   - Fila de la reina que queremos colocar
//   reinas - Vector con las posiciones de las reinas
//   n      - Número de reinas
// Resultado
//   TRUE si se coloca correctamente la reina
//   FALSE si no se ha podido colocar la reina
 
int colocarReina (int fila, int reinas[], int n)
{
  int ok = FALSE;
 
  if (fila<n) {
 
     // Quedan reinas por colocar
 
     while ((reinas[fila]<n-1) && !ok) {
 
           // Colocamos la reina en la siguiente columna
 
           reinas[fila]++;
 
           // Comprobamos si la posición
           // de la reina actual es válida
 
           if (comprobar(fila,reinas,n)) {
 
              // Si es así, intentamos colocar
              // las reinas restantes
 
              ok = colocarReina (fila+1, reinas, n);
           }
     }
 
     if (!ok) {
        // Si no se han podido colocar las demás reinas
        // con la reina actual donde está, la quitamos
        reinas[fila] = -1;
     }
 
  } else {
 
     // No quedan reinas por colocar (caso base)
 
     ok = TRUE;
  }
 
  return ok;
}
 
 
 
// Mostrar el tablero con las reinas
// ---------------------------------
// Parámetros:
//   reinas - Vector con las posiciones de las distintas reinas
//   n      - Número de reinas
 
void mostrarTablero (int reinas[], int n)
{
  int i,j;
 
  for (i=0; i<n; i++) {
 
      for (j=0; j<n; j++) {
 
          if (reinas[i]==j)
             printf("#");
          else
             printf("-");
      }
 
      printf(" %d %d\n",i,reinas[i]);
  }
}
 
// Mostrar información acerca del uso del programa
// -----------------------------------------------
// Parámetro:
//   programa - Nombre del programa
 
void mostrarAyuda (char *programa)
{
  printf("Uso del programa:\n");
  printf("\n");
  printf("  %s <n>\n", programa);
  printf("\n");
  printf("donde <n> es el número de reinas que deseamos colocar (un mínimo de 4).\n");
  printf("\n");
}
 
// Programa principal
// ------------------
 
void main (int argc, char *argv[])
{
  int *reinas;  // Vector con las posiciones de las reinas de cada fila
  int nreinas;  // Número de reinas
  int i;        // Contador
 
 
  // Leer número de reinas
  // (parámetro del programa)
 
  nreinas = -1;
 
  if (argc==2)
     nreinas = atoi(argv[1]);
 
 
  // Colocar las reinas en el tablero
 
  if (nreinas>0) {
 
      // Crear vector dinámicamente
 
      reinas = (int*) malloc ( nreinas*sizeof(int) );
 
      // Inicializar vector:
      // (inicialmente, ninguna reina está colocada)
 
      for (i=0; i<nreinas; i++)
          reinas[i] = -1;
 
      // Colocar reinas (algoritmo recursivo)
 
      colocarReina(0,reinas,nreinas);
 
      // Mostrar resultado
 
      mostrarTablero(reinas,nreinas);
 
      // Liberar memoria
 
      free (reinas);
 
  } else {
 
      mostrarAyuda(argv[0]);
 
  }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda por favor, Pasar de C a C++

Publicado por Rodrigo (538 intervenciones) el 09/01/2021 14:36:00
Que errores salen?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar