Dev - C++ - ayuda listas y matrices c++

 
Vista:

ayuda listas y matrices c++

Publicado por ximenaB (2 intervenciones) el 16/02/2023 15:20:19
Cuando quiero mostrar las sumas puestas en la lista (opcion 3) se crea un bucle infinito

#include <iostream>
#define M 3
#define F 10

using namespace std; //ventas de procductos
struct nodo{
float dato;
struct nodo *sig;
};

bool carga(float mat[F][M], int&, int&);
void total(float mat[F][M], int&, nodo *&lista);
void mostrarLista(nodo *lista);

int main(int argc, char *argv[]) {
int contF=0;
int contTotal=0;
char opc;
bool x;
float mat[F][M];
struct nodo *lista=nullptr;

do{
cout<<"\t""-REGISTRO DE VENTAS-""\t"<<endl;
cout<<"1. Realizar UNA venta."<<endl;
cout<<"2. Calcular totales."<<endl;
cout<<"3. Muestra."<<endl;
cout<<"F. Finalizar."<<endl;
cin>>opc;
cout<<endl;
fflush(stdin);

switch(opc){
case '1':
if(contF<F){
x=carga(mat, contF, contTotal);
if(x==true){
cout<<"Carga exitosa: TRUE "<<contTotal<<endl;
contF=contF+1;
}
else{
cout<<"No hay mas espacio en la matriz: FALSO"<<endl;
}
}
cout<<endl;
system("pause");
break;
case '2':
total(mat, contTotal, lista);
cout<<endl;
system("pause");
break;
case '3':
mostrarLista(lista);
cout<<endl;
system("pause");
break;
}
system("cls");
}while(opc!='F' && opc != 'f');

return 0;
}

bool carga(float mat[][M], int& contadorF, int& contadorT){
bool x;
float codigo, precio, cantidad;

if(contadorF<F){
contadorT=contadorT+1;
for(int j=0;j<M;j++){

switch (j){
case 0: //0) INGRESO DE CODIGO
cout<<"Ingrese CODIGO (valor entre 60 y 500): "<<endl; //
cin>>codigo;

while((codigo<60) or (codigo>500)){
cout<<"ERROR. Debe ser entre 60 y 500. Vuelva aingresar: "<<endl;
cin>>codigo;
};

for(int i=0;i<F;i++){
while(codigo == mat[i][0] ){
cout<<"ERROR. Codigo repetido. Vuelva ingresar: "<<endl;
cin>>codigo;
}
}
mat[contadorF][0]=codigo;
break;
case 1: //1)INGRESO DE PRECIO
cout<<"Ingrese el precio unitario: "<<endl;
cin>>precio;
while(precio<=0){
cout<<"ERROR. El precio debe ser un valor positivo."<<endl;
cin>>precio;
}
mat[contadorF][1]=precio;
break;
case 2: //2)INGRESO DE cantidad
cout<<"Ingrese la cantidad: "<<endl;
cin>>cantidad;
while(cantidad<=0){
cout<<"ERROR. La cantidad debe ser un valor positivo."<<endl;
cin>>cantidad;
}
mat[contadorF][2]=cantidad;
break;
}

}
x=true;
}
else{
x=false;
}

return x;
}

void total(float mat[F][M],int& contTotal , nodo *&lista){
nodo *Aux=new struct nodo;
float suma=0;
cout<<"Cargas hechas: "<<contTotal<<endl;


for(int i=0;i<contTotal;i++){
suma = mat[i][1]*mat[i][2];
cout<<suma<<endl;

Aux->dato=suma; //2)cargo los datos que quiero

Aux->sig=nullptr; //como el nodo está suelto, y no tenemos otro nodo al que apuntar, no tiene puntero asigando a otro elemento
//3)por el momento lo dejo en NULL. al elemento siguiente

//AQUI PASAMOS A INTEGRAR ELEMENTOS A LA LISTA:
if(lista==nullptr){ //si pLista= esta VACIA, entonces...

lista=Aux; //pAux sera el primer elemento de la lista
lista->sig=nullptr; //pone el puntero al próximo elemento en NULL porque la lista esta vacia(apunta a NULL)
}
else //si pLista= NO ESTÁ VACIA, entonces...
{
//ya hay al menos UN elemento en la lista, cargo el nuevo elemento AL INICIO, no al final
Aux->sig=lista; //enlazo el nodo creado con el principio de la lista ya existente (apunto al elemento que ya estaba)
lista=Aux; //el nodo creado pasa a ser el inicio de la lista

}

}
cout<<"Suma exitosa"<<endl;
}

void mostrarLista(nodo *lista){
struct nodo *actual = new nodo();
actual=lista; //osea, a la primera posicion de la lista

while(actual != nullptr){
cout<<actual->dato<<" ";
actual=actual->sig;
};
}
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