CASE3 NO FUNCIONA BIE AYUDA

Dudas sobre el C/C++ en general
Responder
Mensaje
Autor
Pieromental
Mensajes: 3
Registrado: 07/07/2018 12:35 am

CASE3 NO FUNCIONA BIE AYUDA

#1 Mensaje por Pieromental » 01/11/2019 11:16 pm

POR FAVOR NECESITO AYUDA , EL CASO NUMERO 3 EL CUAL ME PIDE LANZAR UN REPORTE DEPENDIENDO DE LA MARCA QUE ELIJA FUNCIONA PERO LUEGO SE CUELGA SEÑANLANDOME QUE COMETIUNA VIOLACION AL CODIGO. NECESITO SU APOYO ... LES ADJUNTO MI CODIGO

Código: Seleccionar todo

/*Desarrollar un programa  que oermita gestionr los vehuiculos que comercializa una empresa
los cuales puid3esn ser autos camionetas y combis
el programa debe registarr los siguientes datos:
PARA autos: Srie de morto (numero ), marca,  modelo(char) y tipo(automatico o mecanico)
PARA Camioneata : Serie del motor , marca modelo tipo( abierta cerrada),
numero de psaajeros y tipo de traccion (simple o doble).
PARA combi: Sreie ,marca, modelo y cantidad de asientos.


La empresa comercializa las siguientes marcas : Toyota , Nissan y Chevrole , el prgram,a


1.-Registrar una venta de vehiculo
2.- Listado de todos los vehiculos (marca , modelo y numero de serie)
3.- Elegir una marca y mostrar los modelos y numero de serie
4.- Listado de marcas : nombre , cantidad de vehiculos y el precio mas caro de un vehiculo en e


*/
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#define MAX 10
#define DELTA 2
char *opciones[] = {"REGISTRO VENTA VEHICULO", "LISTAR VENTAS",
							"LISTADO POR MARCAS", "LISTADO GENERAL POR MARCAS",
      					"Recorrer por monto mayor",
      					"Reporte estadistico por especialidad",
                     "Listar medicos por especialidad",
                     "Reporte Geriatras Hombres",
                     "Reporte Cardio Mujer menor a 40",
                     "Reporte Pediatras o Gastroenterologos menores a 35",
      					"Salir"};
#define CARRO 1
#define CAMIONETA 2
#define COMBI 3

char *carros[] = {"AUTO", "CAMIONETA","COMBI"};
char *marcas[] = {"NISSAN", "TOYOTA","CHEVROLET"};
char *tipoX[] = {"AUTOMATICO", "MECANICO"};
char *tipoY[] = {"ABIERTO", "CERRADO"};
char *tipoZ[] = {"SIMPLE", "DOBLE"};

int leerEntero(char *msje, int min, int max,char *error){
	int num;
   do{
		cout<<msje; cin>>num;
      if(num<min||num>max){
      	cout<<error<<endl;
      }
   }while(num<min || num>max);
   return num;
}
int leerOpcion(char **opciones, char *msje, int cantidad, char *error){

	int op;
   for(int i=0;i<cantidad;++i){
   	cout << (i+1) << ".- " << opciones[i] << endl;
   }
   op = leerEntero(msje, 1, cantidad, error);

   return op;
}
class Carro{
private:
   float precio;                          //Al nombre de persona solo lo puede llamar la misma clase persona
	int marca;
   int disenio;
   char modelo[MAX];
   int serie;
   int tipo;
   int tipo2;
   int nropas;
public:
 float getPrecio(){
     return this->precio;
 }
 int getMarca(){
     return this->marca;
 }
 int getPlaca(){
     return this->serie;
 }
 void getModelo(char *modelo){

     strcpy(modelo,this->modelo);
 }
 void getMARCA(int &i){

     i=this->marca;
 }
 void leer(){
      cout<<"DISENIO:"<<endl;
      this->disenio=leerOpcion(carros,"Elige Opcion:  ",3,"Opcion Invalida");
      cout<<"SERIE MOTOR: ";cin>>this->serie;
      cout<<"MARCA:"<<endl;
      this->marca=leerOpcion(marcas,"Elige Opcion: ",3,"Opcion Invalida");
      cout<<"MODELO: ";cin>>this->modelo;
      if(disenio == CARRO){
         cout<<"TIPO:"<<endl;
         this->tipo=leerOpcion(tipoX,"Elige Opcion: ",2,"Opcion Invalida");
      }
      if(disenio == CAMIONETA){
         cout<<"TIPO:"<<endl;
         this->tipo=leerOpcion(tipoY,"Elige Opcion: ",2,"Opcion Invalida");
         cout<<"TIPO DE TRACCION:"<<endl;
         this->tipo2=leerOpcion(tipoZ,"Elige Opcion: ",2,"Opcion Invalida");
         cout<<"N.PASAJEROS: ";cin>>nropas;
      }
       if(disenio == COMBI){
         cout<<"CANTIDAD DE ASIENTOS: ";cin>>nropas;
      }
      cout<<"PRECIO: ";cin>>precio;
   }
 void mostrar();
};
void Carro::mostrar(){
	cout<<"DISENIO: "<<carros[this->disenio-1]<<endl;
   cout<<"SERIE MOTOR: "<<this->serie<<endl;
   cout<<"MARCA: "<<marcas[this->marca-1]<<endl;
   cout<<"MODELO: "<<modelo;
   if(this->disenio== CAMIONETA){
    cout<<"TIPO: "<<tipoY[this->tipo-1]<<endl;
    cout<<"TIPO TRACCION: "<<tipoZ[this->tipo2-1]<<endl;
    cout<<"N.PASAJEROS: "<<nropas<<endl;
   }
   if(this->disenio == CARRO){
      cout<<"TIPO: "<<tipoX[this->tipo-1]<<endl;
   }
   if (this->disenio==COMBI){
      cout<<"CANTIDAD DE ASIENTOS: "<<nropas<<endl;
   }
   cout<<"PRECIO: "<<precio<<endl;
}
class Listamoviles{
private:
	int total;
   int n;
   Carro * data;
public:
  int getN(){
      return this->n;
  }
  Carro & getCarro(int i){
     return this->data[i];
  }
  void agregar(Carro &carro){
		if( this->n == this->total){
      	this->crecer();
      }
      this->data[this->n] = carro;
      this->n++;
   }
private:
	void crecer(){
   	Carro *aux;
      this->total += DELTA;
      aux = new Carro[this->total];
      if( this->n > 0){
      	for( int i=0; i<this->n; i++){
         	aux[i] = this->data[i];
         }
         delete []this->data;
      }
      this->data = aux;
   }
};
Listamoviles Lista;

void CASE1(){
	Carro carro;
   carro.leer();
   Lista.agregar(carro);
}
void CASE2(){
  char modelo[MAX*3];
  if(Lista.getN()!=0){
     cout<<"\tLISTA DE VENTAS"<<endl;
     for(int i=0;i<Lista.getN();i++){
         Carro &carro=Lista.getCarro(i);
         cout<<"\nVENTA NRO "<<(i+1)<<endl;
         cout<<"\nMARCA: "<<marcas[carro.getMarca()-1]<<endl;
         carro.getModelo(modelo);
         cout<<"MODELO: "<<modelo<<endl;
         cout<<"NRO SERIE: "<<carro.getPlaca()<<endl;
         cout<<"**********************"<<endl;
     }
  }
  else{
    cout<<"NO SE HAN REGISTRADO VENTAS"<<endl;
  }
}
void CASE3(){
  int marcaux;
  char modelo[MAX*3];
  if(Lista.getN()!=0){
     cout<<"\tLISTADO DE VENTAS POR MARCA"<<endl;
     cout<<"MARCAS: "<<endl;
     marcaux=leerOpcion(marcas,"Elige Opcion",3,"Opcion no Valida");
     for(int i=0;Lista.getN();i++){
         Carro &carro=Lista.getCarro(i);
         int marcaux2;
         carro.getMARCA(marcaux2);
          if(marcaux2 == marcaux){
            cout<<"RESULTADO NRO "<<i+1<<endl;
            carro.getModelo(modelo);
            cout<<"MODELO: "<<modelo<<endl;
            cout<<"SERIE: "<<carro.getPlaca()<<endl;
            cout<<"**********************"<<endl;
         }
     }
  }
  else{
     cout<<"NO HAY VENTAS REGISTRADAS"<<endl;
  }
}
void CASE4(){
 if(Lista.getN()!=0){

    cout<<"\tLISTADO GENERAL POR MARCAS"<<endl;
    int cont=0;
    float mayor=0;
    for(int i=0;i<3;i++){
        cout<<"MARCA NRO "<<(i+1)<<": "<<marcas[i]<<endl;
        for(int j=0;j<Lista.getN();j++){
            Carro &carro=Lista.getCarro(i);
            if(carro.getMarca()==i+1){
               cont++;
               if(carro.getPrecio()>mayor){
                  mayor=carro.getPrecio();
               }
            }
        }
        if(cont != 0){
           cout<<"CANT VEHICULOS: "<<cont<<endl;
           cout<<"PRECIO MAYOR: "<<mayor<<endl;
           cont = 0;
           mayor=0;
        }
        else{
           cout<<"VENTA DE MARCA AUN NO REGISTRADA"<<endl;
        }
       cout<<"**********************"<<endl;
    }
 }
 else{
   cout<<"NO HAY VENTAS REGISTRADAS"<<endl;
 }
}
void main(){
   int op;
   do{
   	op = leerOpcion(opciones, "Opcion : ", 11, "Opcion no valida");
      clrscr();
      switch(op){
      case 1: CASE1(); break;
      case 2: CASE2();break;
      case 3: CASE3();break;
      case 4: CASE4();break;
     }
     getch();
     clrscr();
   }while(op < 11);

}

dehm
Mensajes: 328
Registrado: 29/04/2011 7:31 am

Re: CASE3 NO FUNCIONA BIE AYUDA

#2 Mensaje por dehm » 07/11/2019 12:58 am

Hola:

Así mirando muy por encima....¿por qué usas referencias para esas funciones?

Me refiero a :

Código: Seleccionar todo

Carro &carro=Lista.getCarro(i);
Y el método;

Código: Seleccionar todo

Carro & getCarro(int i){
     return this->data[i];
  }
Aprendiendo

Avatar de Usuario
kiko66
Mensajes: 34
Registrado: 11/10/2019 10:51 am

Re: CASE3 NO FUNCIONA BIE AYUDA

#3 Mensaje por kiko66 » 09/11/2019 12:44 am

hola piero,
lo primero decirte que en un foro las letras mayusculas es
sinonimo de gritar, y hablar a gritos no es la mejor manera de conocer gente

por lo que veo el for donde pides el numero de carros no se decrementa ni lo
comparas con i por lo que el bucle no acaba nunca

seria cambiar:

Código: Seleccionar todo

for(int i=0;Lista.getN();i++){
por:

Código: Seleccionar todo

for(int i=0; i<Lista.getN() ;i++){
en el caso de que el numero que devuelve Lista.getN sea el numero de vehiculos :)

creo que te equivocas en la manera de nombrar de algunas funciones,
porque el nombre no deja claro lo que hace:

por ej

Código: Seleccionar todo

 int getMarca(){
     return this->marca;
 }

 void getMARCA(int &i){
     i=this->marca;
 }
queda ma claro si pones:

Código: Seleccionar todo

 int dameMarca(){
     return this->marca;
 }

 void ponMarca(int &marca){
     marca=this->marca;
 }
de hecho en el case3 usas getMARCA y getModelo de manera equivocada en:

Código: Seleccionar todo

     marcaux=leerOpcion(marcas,"Elige Opcion",3,"Opcion no Valida");
     for(int i=0;Lista.getN();i++){
         // se supone que aqui carro esta referenciando un objeto de clase Carro
         Carro &carro=Lista.getCarro(i);
         int marcaux2;
         carro.getMARCA(marcaux2);
          if(marcaux2 == marcaux){
            cout<<"RESULTADO NRO "<<i+1<<endl;
            carro.getModelo(modelo);
            cout<<"MODELO: "<<modelo<<endl;
donde podrias poner:

Código: Seleccionar todo

     marca_elegida=leerOpcion(marcas,"Elige Opcion",3,"Opcion no Valida");
     for(int i=0; i<Lista.getN() ;i++){
         Carro &carro=Lista.getCarro(i);     
          if(marca_elegida == carro.dameMarca()){
            cout<<"RESULTADO NRO "<<i+1<<endl;
            cout<<"MODELO: "<<carro.dameModelo()<<endl;
a primera vista es lo que he encontrado.

me ha parecido curiosa la funcion leeOpcion, le he hecho unos cambios a ver si te gusta :idea:

la idea es poner un centinela que avise del final de array:

Código: Seleccionar todo

#include <string.h>
#include <iostream>
using namespace std;

// enumero los temas a elegir
typedef enum {menu, carros, marcas, cierre, capota, traccion} e_tema;

int elige(e_tema tema){

   const char *_menu[] = {  
                        "REGISTRO VENTA VEHICULO",
                        "LISTAR VENTAS",
                        "LISTADO POR MARCAS",
                        "LISTADO GENERAL POR MARCAS",
                        "Recorrer por monto mayor",
                        "Reporte estadistico por especialidad",
                        "Listar medicos por especialidad",
                        "Reporte Geriatras Hombres",
                        "Reporte Cardio Mujer menor a 40",
                        "Reporte Pediatras o Gastroenterologos menores a 35",
                        "Salir",
                        "x"};

   const char* _carros[]   = {"AUTO", "CAMIONETA", "COMBI", "x"};
   const char* _marcas[]   = {"NISSAN", "TOYOTA", "CHEVROLET", "x"};
   const char* _cierre[]   = {"AUTOMATICO", "MECANICO", "x"};
   const char* _capota[]   = {"ABIERTO", "CERRADO", "x"};
   const char* _traccion[] = {"SIMPLE", "DOBLE", "x"};

   int opcion;                // es la opcion que elegida del tema indicado
   int n_opciones;            // es el numero de opcines a elegir
   const char** ptema;        // puntero con el tema a visualizar
   const char* salir="x";     // si lee esta cadena termina el bucle

   switch (tema){             // cargo en el punterotema el tema a visualizar
      case menu    : ptema=_menu;     break;
      case carros  : ptema=_carros;   break;      
      case marcas  : ptema=_marcas;   break;      
      case cierre  : ptema=_cierre;   break;      
      case capota  : ptema=_capota;   break;      
      case traccion: ptema=_traccion; break;      
   }

   // visualizo y cuento las opciones que tiene el tema
   for(n_opciones=0; strcmp(salir,ptema[n_opciones]) ;n_opciones++){
      cout.width(2);
      cout.fill(' ');
      cout << (n_opciones+1) << ".- " << ptema[n_opciones] << endl;
   }
   
   // se requiere que la opcion sea el indice y ahora apunta a indice+1
   opcion--; 

   // pido la opcion a elegir y controlo que sea una opcion valida
   while(1){
      cout<<"Elige Opcion:  "; 
      cin>>opcion;
      if(opcion<1 || opcion>n_opciones) cout<<"Opcion Invalida"<<endl;
      else break;
   }; 
   return opcion;
}

// ahora se llama a elige solo con el parametro del tema a elegir
int main(void){

   cout <<"\nhas elegido la opcion: " <<elige(menu)     <<endl<<endl;
   cout <<"\nhas elegido la opcion: " <<elige(carros)   <<endl<<endl;
   cout <<"\nhas elegido la opcion: " <<elige(marcas)   <<endl<<endl;
   cout <<"\nhas elegido la opcion: " <<elige(cierre)   <<endl<<endl;
   cout <<"\nhas elegido la opcion: " <<elige(capota)   <<endl<<endl;
   cout <<"\nhas elegido la opcion: " <<elige(traccion) <<endl<<endl;

   return 0;
}
espero te vaya bien con el programa :wink:

suerte

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 5 invitados