Tengo que hacer un programa que organiza los partidos del mundial, debe estar hecho en c++ en el programa llamado ZinjaI, mi problema viene al momento de verificar que los datos son correctos. Y tengo problema con una verificación que me dá un error lógico, me estoy volviendo loco y tengo que entregar el programa terminado completamente para mañana a la noche.
Donde se produce el error lo marqué con amarillo.
#include <iostream>
using namespace std;
int Rex(char arreglo[16],char nombre, int pos){//la función de la validación de datos de los equipos
int i,posicion;
i=1;
while(i<=pos && arreglo!=nombre){//esto es para realizar una búsqueda linial, fijarce en el apunte del tema 5(arreglos)
i=i+1;
}
if(i<=pos && arreglo==nombre)
posicion=i;
else{
posicion=0;//si se repite un nombre sale 0
}
return(posicion);
}
int Numgrup(char Grup[], char nom, int pos){//funcion de los grupos
int a; int i ; int fun,fan;//choriso de variables auxiliares
a=1; i=1; fan=1;fun=0;
for(i=1;i<=pos;++i){//esta estructura la saqué de internet: https://foro.elhacker.net/programacion_cc/contar_elementos_de_un_vector-t446962.0.html
if(Grup==nom){//me pareció interesante para tratar de resolver este problema, estoy tabajando en ello
a++;
if(a<5)
fan=a;
else{
fan=0;
}
}
}
fun=fan;
return(fun);
}
void CargadeDatos(char grupo[16], char todos_equipos[16]){//subprograma de subida de datos
int Ind, bandera, banderaA, banderaB, banderaC, banderaD, verdad, grup;//Ind:el índice del arreglo
verdad=0;
for (Ind=1;Ind<=16;++Ind){
do{//repetir para los equipos
cout<<"Ingrese nombre del equipo n° "<<Ind<<" :";
cin>>todos_equipos[Ind];
bandera=Rex(todos_equipos,todos_equipos[Ind],Ind-1);//subprograma para verificar que ningun equipo tenga el mismo nombre
if(bandera!=0){//bandera es el resultado de la funcion
cout<<"Nombre de equipo no disponible"<<endl;
}
} while(todos_equipos[Ind]!=' '&& bandera!=0);
do{//repetir para los grupos
cout<<"Ingrese grupo al que pertenece el equipo (A,B,C ó D): ";
cin>>grupo[Ind];
if(grupo[Ind]=='A'|| grupo[Ind]=='B' || grupo[Ind]=='C' || grupo[Ind]=='D'){
verdad=1;}
else{
cout<<"Ingrese nombre de grupo válido."<<endl;
}
if(grupo[Ind]=='A'){//invoco para cada uno de los grupos
banderaA=Numgrup(grupo,grupo[Ind],Ind-1);//Numgrup función para verificar que no haya mas de 4 equipos por grupos, funcionando !!!
cout<<banderaA<<endl;
if(banderaA==0){
cout<<"El grupo A se encuentra lleno"<<endl;
}
}
if(grupo[Ind]=='B'){
banderaB=Numgrup(grupo,grupo[Ind],Ind-1);
cout<<banderaB<<endl;
if(banderaB==0){
cout<<"El grupo B encuentra lleno"<<endl;
}
}
if(grupo[Ind]=='C'){
banderaC=Numgrup(grupo,grupo[Ind],Ind-1);
cout<<banderaA<<endl;
if(banderaC==0){
cout<<"El grupo C se encuentra lleno"<<endl;
}
}
if(grupo[Ind]=='D'){
banderaD=Numgrup(grupo,grupo[Ind],Ind-1);
cout<<banderaA<<endl;
if(banderaD==0){
cout<<"El grupo D se encuentra lleno"<<endl;
}
}
if(banderaA!=0 && banderaB!=0 && banderaC!=0 && banderaD!=0){//EROR LÓGICO, si una bandera vale 0, todo el si es falso y salta el sino con grup=0, y salta el repetir.
grup=1;
}
else{
grup=0;
}
cout<<grup<<endl;
} while(verdad!=1 && grup!=1);
}
}
int main(){//programa
//acá nombré todas las operaciones que hay que realizar
char grupo[16], todos_equipos[16];//subida de los grupos y el nombre de los equipos respectivamente
int grupoA[6][6],grupoB[6][6],grupoC[6][6],grupoD[6][6];//esto es el resultado de los partidos (cosa no realizada,
int octavos[4][4],semifinal[2][2],Final[1][1],Tercerlugar[1][1];//resultados de partidos
CargadeDatos(grupo,todos_equipos);//subprograma: procedimiento de subida de datos
return 0;
}
Donde se produce el error lo marqué con amarillo.
#include <iostream>
using namespace std;
int Rex(char arreglo[16],char nombre, int pos){//la función de la validación de datos de los equipos
int i,posicion;
i=1;
while(i<=pos && arreglo!=nombre){//esto es para realizar una búsqueda linial, fijarce en el apunte del tema 5(arreglos)
i=i+1;
}
if(i<=pos && arreglo==nombre)
posicion=i;
else{
posicion=0;//si se repite un nombre sale 0
}
return(posicion);
}
int Numgrup(char Grup[], char nom, int pos){//funcion de los grupos
int a; int i ; int fun,fan;//choriso de variables auxiliares
a=1; i=1; fan=1;fun=0;
for(i=1;i<=pos;++i){//esta estructura la saqué de internet: https://foro.elhacker.net/programacion_cc/contar_elementos_de_un_vector-t446962.0.html
if(Grup==nom){//me pareció interesante para tratar de resolver este problema, estoy tabajando en ello
a++;
if(a<5)
fan=a;
else{
fan=0;
}
}
}
fun=fan;
return(fun);
}
void CargadeDatos(char grupo[16], char todos_equipos[16]){//subprograma de subida de datos
int Ind, bandera, banderaA, banderaB, banderaC, banderaD, verdad, grup;//Ind:el índice del arreglo
verdad=0;
for (Ind=1;Ind<=16;++Ind){
do{//repetir para los equipos
cout<<"Ingrese nombre del equipo n° "<<Ind<<" :";
cin>>todos_equipos[Ind];
bandera=Rex(todos_equipos,todos_equipos[Ind],Ind-1);//subprograma para verificar que ningun equipo tenga el mismo nombre
if(bandera!=0){//bandera es el resultado de la funcion
cout<<"Nombre de equipo no disponible"<<endl;
}
} while(todos_equipos[Ind]!=' '&& bandera!=0);
do{//repetir para los grupos
cout<<"Ingrese grupo al que pertenece el equipo (A,B,C ó D): ";
cin>>grupo[Ind];
if(grupo[Ind]=='A'|| grupo[Ind]=='B' || grupo[Ind]=='C' || grupo[Ind]=='D'){
verdad=1;}
else{
cout<<"Ingrese nombre de grupo válido."<<endl;
}
if(grupo[Ind]=='A'){//invoco para cada uno de los grupos
banderaA=Numgrup(grupo,grupo[Ind],Ind-1);//Numgrup función para verificar que no haya mas de 4 equipos por grupos, funcionando !!!
cout<<banderaA<<endl;
if(banderaA==0){
cout<<"El grupo A se encuentra lleno"<<endl;
}
}
if(grupo[Ind]=='B'){
banderaB=Numgrup(grupo,grupo[Ind],Ind-1);
cout<<banderaB<<endl;
if(banderaB==0){
cout<<"El grupo B encuentra lleno"<<endl;
}
}
if(grupo[Ind]=='C'){
banderaC=Numgrup(grupo,grupo[Ind],Ind-1);
cout<<banderaA<<endl;
if(banderaC==0){
cout<<"El grupo C se encuentra lleno"<<endl;
}
}
if(grupo[Ind]=='D'){
banderaD=Numgrup(grupo,grupo[Ind],Ind-1);
cout<<banderaA<<endl;
if(banderaD==0){
cout<<"El grupo D se encuentra lleno"<<endl;
}
}
if(banderaA!=0 && banderaB!=0 && banderaC!=0 && banderaD!=0){//EROR LÓGICO, si una bandera vale 0, todo el si es falso y salta el sino con grup=0, y salta el repetir.
grup=1;
}
else{
grup=0;
}
cout<<grup<<endl;
} while(verdad!=1 && grup!=1);
}
}
int main(){//programa
//acá nombré todas las operaciones que hay que realizar
char grupo[16], todos_equipos[16];//subida de los grupos y el nombre de los equipos respectivamente
int grupoA[6][6],grupoB[6][6],grupoC[6][6],grupoD[6][6];//esto es el resultado de los partidos (cosa no realizada,
int octavos[4][4],semifinal[2][2],Final[1][1],Tercerlugar[1][1];//resultados de partidos
CargadeDatos(grupo,todos_equipos);//subprograma: procedimiento de subida de datos
return 0;
}