Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/12/2011, 09:50
pyromiyuve
 
Fecha de Ingreso: diciembre-2011
Mensajes: 21
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Respuesta: Problema para terminar y compilar un proyecto

Elimine la clase myString::Mostrarr y cree la clase Caracter., pero me sigue dando error en la funcion void myString::Insertar cuando compilo, siendo la clase Vehiculos la que me da la mayoria de los errores....Mi nuevo codigo del proyecto es este:
Código C++:
Ver original
  1. #include<stdio.h>
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. //Variables Globales
  6.  
  7. int Capital=20;
  8.  
  9. int cantidadItems(char* c){ //Funcion que devuelve un Entero y se encarga de calcula cuantos repuestos disponemos
  10.     int i=0;int k=0;
  11.     do{
  12.         if(*(c+i)==' '){
  13.             k++;
  14.         }
  15.         i++;
  16.     }while(*(c+i)!=('\0'));
  17.    
  18.     return(k+1);
  19. };
  20.  
  21. int cant(char* c, int k){
  22.     do{
  23.         k++;
  24.     }while((*(c+k)!=('\0')) && (*(c+k)!=(' ')));
  25.    
  26.     return(k);
  27. };
  28.  
  29. //LISTA DE ORDEN
  30. class Lista{
  31.     class Nodo{
  32.         char orden;
  33.         Nodo *siguiente;
  34.         public:
  35.             Nodo(char orden){
  36.                 this->orden = orden;
  37.                 siguiente = NULL;
  38.             }
  39.            
  40.             char get_orden(){
  41.                 return orden;
  42.             }
  43.            
  44.             void set_siguiente(Nodo *n){
  45.                 siguiente = n;
  46.             }
  47.            
  48.             Nodo* get_siguiente(){
  49.                 return siguiente;
  50.             }
  51.     };
  52.    
  53.     Nodo *head;
  54.     int cantidad;
  55.     typedef Nodo* Posicion;
  56.     public:
  57.         Posicion p;
  58.         char caracter;
  59.         Lista(){
  60.             head = NULL;
  61.             cantidad = 0;
  62.         }
  63.        
  64.         void insertar(Posicion p, char orden){
  65.             Nodo *nuevo = new Nodo(orden);
  66.             if(nuevo!=NULL){//COMPRUEBO QUE HAYA MEMORIA
  67.                 if(head==NULL){
  68.                     head = nuevo;
  69.                     cantidad++;
  70.                 }else{
  71.                     Nodo* r = head;
  72.                     while(r->get_siguiente()!=p){
  73.                         r = r->get_siguiente();
  74.                     }
  75.                    
  76.                     if(p==NULL){
  77.                         r->set_siguiente(nuevo);
  78.                     }else{
  79.                         nuevo->set_siguiente(r->get_siguiente());
  80.                         r->set_siguiente(nuevo);
  81.                     }
  82.                 }
  83.             }
  84.         }
  85.        
  86.         Posicion fin(){
  87.             Nodo *r = head;
  88.             while(r->get_siguiente()!=NULL){
  89.                 r = r->get_siguiente();
  90.             }return r;
  91.         }
  92.        
  93.         Posicion primero(){
  94.             if(head!=NULL){
  95.                 return head;
  96.             }else{
  97.                 return fin();
  98.             }
  99.         }
  100.        
  101.         Posicion siguiente(Posicion p){
  102.             return p->get_siguiente();
  103.         }
  104.        
  105.         char acceder(Posicion p){
  106.             return p->get_orden();
  107.         }
  108.        
  109.         bool esVacia(){
  110.             return head==NULL;
  111.         }
  112. };
  113.  
  114. //CAMBIA EL STRING DE C++ POR LA IMPLEMENTACION DE TU STRING, ES DECIR CAMBIALO POR MYSTRING
  115. class Vehiculo{
  116.     public:
  117.     string placa;
  118.     char puerta;
  119.     int averiado;
  120.     int contador;
  121.     char *Item;
  122.     Vehiculo *siguiente;
  123.     public:
  124.         Vehiculo(char placa, char puerta, int averiado, char *Item){
  125.             this->placa = placa;//this es un puntero que se referencia a si mismo, es decir a mi clase!
  126.             this->puerta = puerta;
  127.             this->averiado = averiado;
  128.             this ->Item = Item;
  129.             contador=0;
  130.         }
  131.        
  132.         string get_placa(){
  133.             return placa;
  134.         }
  135.        
  136.         char get_puerta(){
  137.             return puerta;
  138.         }
  139.        
  140.         int get_averiado(){
  141.             return averiado;
  142.         }
  143.         char* get_Item(){
  144.             return Item;
  145.         }
  146.        
  147.        
  148. };
  149.  
  150. class Cola{
  151.     class Nodo{
  152.         Vehiculo *v;
  153.         Nodo *siguiente;
  154.         public:
  155.             Nodo(Vehiculo *v){
  156.                 this->v = v;
  157.                 siguiente = NULL;
  158.             }
  159.            
  160.             Vehiculo* get_v(){
  161.                 return v;
  162.             }
  163.            
  164.             void set_siguiente(Nodo *n){
  165.                 siguiente = n;
  166.             }
  167.            
  168.             Nodo* get_siguiente(){
  169.                 return siguiente;
  170.             }
  171.     };
  172.    
  173.     Nodo *pri, *ult;
  174.     public:
  175.         Cola(){
  176.             pri = ult = NULL;
  177.         }
  178.        
  179.         Vehiculo* primero(){
  180.             return pri->get_v();
  181.         }
  182.        
  183.         void encolar(Vehiculo* v){
  184.             Nodo *nuevo = new Nodo(v);
  185.             if(ult==NULL){
  186.                 pri = ult = nuevo;
  187.             }else{
  188.                 ult->set_siguiente(nuevo);
  189.                 ult = nuevo;
  190.             }
  191.         }
  192.        
  193.         void desencolar(){
  194.             Nodo *aux = pri;
  195.             pri = pri->get_siguiente();
  196.             delete aux;
  197.             if(pri==NULL)
  198.                 ult = NULL;
  199.         }
  200.        
  201.         bool esVacia(){
  202.             return pri==NULL;
  203.         }
  204. };
  205.  
  206. class Caracter{
  207.  
  208.     public:
  209.  
  210.     char caracter;
  211.  
  212.     Caracter* sig;
  213.  
  214.     public:
  215.  
  216.     Caracter(){
  217.  
  218.         sig=NULL;
  219.  
  220.     }  
  221.  
  222. };
  223.  
  224. class myString{
  225.     public:
  226.         Caracter *primero;
  227.         Caracter *ultimo;
  228.         Caracter *aux;
  229.         int contador;
  230.        
  231.     public:
  232.         myString(){;
  233.             primero = NULL;
  234.             ultimo = NULL;
  235.             aux = NULL;
  236.             contador = 0;
  237. }
  238.  
  239.     void Insertar (char c);
  240.    
  241. };
  242.  
  243.  void myString::Insertar(char c){
  244.  
  245.     Caracter* nuevo= new Caracter();
  246.     nuevo->caracter=aux;
  247.     if(primero==NULL && ultimo==NULL){
  248.         primero=nuevo;
  249.         ultimo=nuevo;
  250.     }else{
  251.         ultimo->sig=nuevo;
  252.         ultimo=nuevo;
  253.         contador++; //revisar no estoy segura de si hace falta
  254.     }
  255. };
  256.  
  257. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  258. class Repuestos{ //Pila donde voy a guardar los Repuestos
  259.     public:
  260.         Vehiculo *ultimo;
  261.         Vehiculo *aux;
  262.         Vehiculo *tope;
  263.         int contador;//cantidad de carros que entran
  264.         public:
  265.         Repuestos(){
  266.             tope=NULL;
  267.             contador=0;
  268.             ultimo=NULL;
  269.             aux=NULL;
  270.         }
  271.         void Insertar(char placa[], char puerta, char averiado, char* item, int contador);
  272.         void Reparar(int i);
  273.         void Mostrar(int i);
  274.     void Usados(int i);
  275. };
  276.  
  277. void Repuestos::Usados(char placa[], char puerta, char averiado ,char* item,int contador){// FALTA por resolver!!!!!!!!!!!!
  278.  
  279.     int Ing=Capital;
  280.     int egreso=0;
  281.     int ingreso=0;
  282.     int c;
  283.    
  284.    
  285.     if(ultimo->averiado=='0'){ // se repara y factura a la vez
  286.        
  287.             egreso=((ultimo->contador)*1); //Contador indica la cantidad de repuestos a reparar en el carro que esta siendo atendido
  288.             ingreso=((ultimo->contador)*0);
  289.             Capital +=(ingreso-egreso); //Indica la ganancia obtenida por Liam tras la reparacion del carro atendido
  290.            
  291.         };
  292.          
  293.     aux=ultimo;
  294.     ultimo=aux->siguiente;//eliminacion del carro: se libera el nodo
  295.     cout<<"Vehiculo "<<i<<": ";
  296.    
  297.     for(k=0;k<10;k++)
  298.     {
  299.         cout<<aux->placa[k];
  300.     }
  301.     cout<<"\n"<<-1*(egreso)<<"\n"<<ingreso<<endl;
  302.    
  303.     //apilamos FALTA POR REVISAR Y TERMINAR DE HACER!!!!
  304.  
  305.     Vehiculo *aux;
  306.     aux->siguiente=ultimo;
  307.     ultimo=aux;
  308. };
  309.  
  310.  
  311.  
  312.  
  313. void Repuestos::Insertar(char placa[], char puerta, char averiado ,char* item,int contador){
  314.   Vehiculo* nuevo=new Vehiculo();
  315.    int k=0;
  316.    
  317.    for(k=0;k<10;k++){
  318.         nuevo->placa[k]=placa[k];
  319.     };
  320.    
  321.    nuevo->puerta = puerta;
  322.    nuevo->averiado = averiado;
  323.    nuevo->Item = item; 
  324.    nuevo->contador = contador;
  325.     //se empiezan ha armar los Repuestos
  326.     if(ultimo==NULL){
  327.         ultimo=nuevo;
  328.     }else{
  329.         nuevo->siguiente=ultimo;
  330.         ultimo=nuevo;
  331.     }; 
  332.    
  333.     contador++; //cantidad de carros
  334. };
  335.  
  336. void Repuestos::Mostrar(int i){ //Muestra la placa del ultimo carro en insertar repuestos
  337.     int k;
  338.     for(k=0;k<10;k++){
  339.         cout<<aux->placa[k];
  340.     }  
  341. };
  342.    
  343. void Repuestos::Reparar(int i){
  344.  
  345.     int Ing=Capital;
  346.     int egreso=0;
  347.     int ingreso=0;
  348.     int k;
  349.    
  350.    
  351.     if(ultimo->averiado=='1'){ // se repara y factura a la vez
  352.        
  353.             egreso=((ultimo->contador)*2); //Contador indica la cantidad de repuestos a reparar en el carro que esta siendo atendido
  354.             ingreso=((ultimo->contador)*3);
  355.             Capital +=(ingreso-egreso); //Indica la ganancia obtenida por Liam tras la reparacion del carro atendido
  356.            
  357.        
  358.     }else if((Ing-ultimo->contador)>0){ //si averiado es igual a cero verificamos si tenemos capital para comprar
  359.             Capital-=ultimo->contador; //en caso de que el capital sea positivo, se pueda comprar.Se realiza una sustraccion al ingreso ingreso neto de Liam
  360.             egreso=ultimo->contador;
  361.         };
  362.          
  363.     aux=ultimo;
  364.     ultimo=aux->siguiente;//eliminacion logica
  365.     cout<<"Vehiculo "<<i<<": ";
  366.    
  367.     for(k=0;k<10;k++)
  368.     {
  369.         cout<<aux->placa[k];
  370.     }
  371.     cout<<"\n"<<-1*(egreso)<<"\n"<<ingreso<<endl;
  372.      
  373.      //desapilamos
  374.  
  375.     delete(aux);//eliminacion del carro atendido
  376. };
  377.  
  378. // MENU PRINCIPAL DEL PROGRAMA
  379. int main(){
  380.     int n,i,k;
  381.     char *c=NULL;//entrada
  382.     char placa[10];
  383.     char puerta;
  384.     char averiado;
  385.     char aux;
  386.     char *items=NULL;
  387.     char orden;
  388.     Repuestos A;
  389.     Repuestos B;
  390.     Vehiculo *v;
  391.     myString string;
  392.    
  393.     Cola *puertaA = new Cola(), *puertaB = new Cola();
  394.  
  395.     Lista *lorden = new Lista();
  396.  
  397.     cin>>n; //cantidad de vehiculos a ingresar
  398.     cin.ignore();
  399.     for(i=0;i<n;i++)
  400.     {
  401.         fflush(stdin); //fflush limpia el buffer de entrada de datos, sirve para cuando se necesita tomar muchos datos seguidos y se generan saltos de línea automáticos que se guardan en este buffer
  402.         c=new char[15];
  403.         cin.getline(c,15);
  404.         k=0;
  405.         do{
  406.             placa[k]=*c;     //calcula la cantidad de atributos necesarios para la placa
  407.             k++; c++;        //placa
  408.         }while(*c!=' ');
  409.        
  410.         while(k<10){
  411.             placa[k]=' '; //si la placa posee menos de 10 elementos alfanumericos,se completan los espacios con "vacio"
  412.             k++;
  413.         }    
  414.            
  415.         puerta=(*(c+1)); //calcula el atributo: puerta
  416.         averiado=(*(c+3));  //calcula el atributo: averiado    
  417.    
  418.        
  419.         fflush(stdin); //fflush limpia el buffer de entrada de datos, sirve para cuando se necesita tomar muchos datos seguidos y se generan saltos de línea automáticos que se guardan en este buffer
  420.         items=new char[1002];
  421.         cin.getline(items,1002);
  422.         k=cantidadItems(items);
  423.         v = new Vehiculo(placa,puerta,averiado);
  424.  
  425.         if(puerta=='A' || puerta=='a') //Insertamos teniendo en cuenta la puerta
  426.         {
  427.                
  428.             puertaA->encolar(v);
  429.  
  430.             A.Insertar(placa,puerta,averiado,items,k);
  431.        
  432.            
  433.         }
  434.         else if(puerta=='B' || puerta=='b')
  435.         {          
  436.            
  437.             puertaB->encolar(v);
  438.  
  439.             B.Insertar(placa,puerta,averiado,items,k);
  440.            
  441.         }
  442.     }  
  443.     for(i=0;i<n;i++){
  444.         cin>>aux;
  445.         string.Insertar(aux);
  446.     }
  447.     string.aux=string.primero;
  448.     for(i=0;i<n;i++){
  449.  
  450.         lorden->insertar(NULL,orden);
  451.  
  452.         if(string.aux->caracter=='A' || string.aux->caracter=='a'){
  453.             if(A.ultimo!=NULL){
  454.                 A.Reparar(i+1);
  455.                
  456.             }else{
  457.                 B.Reparar(i+1);
  458.                
  459.             }  
  460.         }else if(puerta=='B' || puerta=='b'){
  461.             if(B.ultimo!=NULL){
  462.                 B.Reparar(i+1);
  463.                
  464.             }else{
  465.                 A.Reparar(i+1);
  466.            
  467.                 }  
  468.         }
  469.         string.aux=string.aux->sig;
  470.     }
  471.     cout<<Capital<<endl;
  472.  
  473.     delete puertaA, puertaB, v, lorden;
  474. return 0;
  475. };

Saludos

Última edición por pyromiyuve; 23/12/2011 a las 10:24 Razón: añadir unos detalles y modificar el codigo publicado