Necesito ayuda en una aplicación sobre una tabla de fichas creada en C y C++

Hola, he hecho un programa pero no me funciona correctamente pero no donde esta el fallo. El programa consiste en una tabla de 7x7 en la cual hay una fichas y tengo que decir si hay o no fichas alrededor de una coordenada que tienes que poner. El programa que utilizo para hacerlo es el " Dev-C++ ".
Hay cosas escritas en catalan,si algo no lo entiendes preguntamelo. Muchas gracias.
aqui te pongo todo lo que es el programa:
#include <iostream>
using namespace std;
void omplir (char mat[7][7]){
int i,j;
for (j=0; j<7; j++){
for (i=0; i<7; i++){
if ( (i==3 and j==3) or ((i<2 or i>4) and (j<2 or j>4)) ){
mat[j] = '·';
}
else {
mat[j] = 'O';
}
}
}
}
void mostrar_taula (char m[7][7]){
int i,j;
cout << " 0123456" << endl;
for (j=0; j<7; j++){
cout << j;
for (i=0; i<7; i++){
cout << m[j];
}
cout << endl;
}
cout << endl;
}
bool dins_limits (int a, int b){
bool i;
if ((a>=0 and a<=6) and (b>=0 and b<=6)){
i = true;
}
else{
i = false;
}
return (i);
}
bool te_veins (char mat[7][7], int i, int j){
bool a;
if (( mat[j-1] = 'O') or ( mat[i-1][j] = 'O') or (mat [j+1] = 'O')
or (mat [i+1][j] = 'O') or (mat[i-1][j-1] = 'O')
or (mat[i+1][j+1] = 'O') or (mat[i+1][j-1] = 'O')
or (mat[i-1][j+1] = 'O')){
a = true;
}
else {
a = false;
}
return (a);
}
int main () {
int i, j;
int fin;
bool te_veins;
char m[7][7];
bool dins_limits;
omplir(m);
mostrar_taula(m);
do{
cout << endl << "Digui una fila...";
cin >> i;
cout << endl << "Digui una columna...";
cin >> j;
}while (!dins_limits(i, j));
if ( m[j] != te_veins ){
cout << "no te veins" << endl;
}
else {
cout << "te veins" << endl;
}
cin >> fin;
}

1 Respuesta

Respuesta
1
Ahora le revise la logica de tu codigo y lo corregi. ahi te va.
#include <iostream>
using namespace std;
void omplir (char mat[7][7]){
int i,j;
for (j=0; j<7; j++){
for (i=0; i<7; i++){
if ((i==3&&j==3)||(i<2||i>4)&&(j<2||j>4)){
mat[j] = '·';
}else{
mat[j] = 'O';
}
}
}
}
void mostrar_taula (char m[7][7]){
int i,j;
cout << " 0123456" << endl;
for (j=0; j<7; j++){
cout << j;
for (i=0; i<7; i++){
cout << m[j];
}
cout << endl;
}
cout << endl;
}
bool dins_limits (int a, int b){
if ((a>=0 && a<=6) && (b>=0 && b<=6)){
return true;
}else{
return false;
}
}
bool te_veins (char mat[7][7], int i, int j){
if (( mat[j-1] == 'O') || ( mat[i-1][j] == 'O') || (mat [j+1] == 'O')
|| (mat [i+1][j] == 'O') || (mat[i-1][j-1] == 'O')
|| (mat[i+1][j+1] == 'O') || (mat[i+1][j-1] == 'O')
|| (mat[i-1][j+1] == 'O')){
return true;
}else{
return false;
}
}
int main (){
int i, j;
int fin;
char m[7][7];
omplir(m);
mostrar_taula(m);
do{
cout << endl << "Digui una fila...";
cin >> i;
cout << endl << "Digui una columna...";
cin >> j;
}while (!dins_limits(i,j));
if (!te_veins(m,i,j)){
cout << "no te veins" << endl;
}else{
cout << "te veins" << endl;
}
cin >> fin;
}
hola de nuevo, el problema no era eso y mas o menos se por deonde debe estar pero no lo veo, es por la parte del "int main" en el momento de poner las coordenadas, no me respeta los limites que hay en la funcio "dins_limits", bueno si no lo sabes es igual
primero que nada te recomiendo que tabules tus sentencias y lo documentes, El principal problema con tu codigo esta en las condiciones (and en c++ es && y or es ||). Bueno la sintaxis corregida es la siguiente, pero debes probar la logica y el funcionamiento del programa.
#include <iostream>
using namespace std;
void omplir (char mat[7][7]){
int i,j;
for (j=0; j<7; j++){
for (i=0; i<7; i++){
if ((i==3&&j==3)||(i<2||i>4)&&(j<2||j>4)){
mat[j] = '·';
}else{
mat[j] = 'O';
}
}
}
}
void mostrar_taula (char m[7][7]){
int i,j;
cout << " 0123456" << endl;
for (j=0; j<7; j++){
cout << j;
for (i=0; i<7; i++){
cout << m[j];
}
cout << endl;
}
cout << endl;
}
bool dins_limits (int a, int b){
bool i;
if ((a>=0 && a<=6) && (b>=0 && b<=6)){
i = true;
}else{
i = false;
}
return (i);
}
bool te_veins (char mat[7][7], int i, int j){
bool a;
if (( mat[j-1] == 'O') || ( mat[i-1][j] == 'O') || (mat [j+1] == 'O')
|| (mat [i+1][j] = 'O') || (mat[i-1][j-1] = 'O')
|| (mat[i+1][j+1] = 'O') || (mat[i+1][j-1] = 'O')
|| (mat[i-1][j+1] = 'O')){
a = true;
}else{
a = false;
}
return (a);
}
int main (){
int i, j;
int fin;
bool te_veins;
char m[7][7];
bool dins_limits;
omplir(m);
mostrar_taula(m);
do{
cout << endl << "Digui una fila...";
cin >> i;
cout << endl << "Digui una columna...";
cin >> j;
}while (!dins_limits);
if ( m[j] != te_veins ){
cout << "no te veins" << endl;
}else{
cout << "te veins" << endl;
}
cin >> fin;
}
Suerte, ojala te sirva.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas