string& Evaluador::aPosfija(const string& expInfija) { int posP; Pila operadores; string caracTemp; string h = expInfija; int pos = 0; string res = ""; string temp = ""; posP = h.find_first_of("p"); //recorrer la string h = h + ")"; operadores.push("("); while (!operadores.empty()) { caracTemp = h[pos]; //caso que sea un parentesis izquierdo if (caracTemp == "(") { operadores.push(caracTemp); pos++; } //caso que sea un operador como *,+,- else if (caracTemp == "*" || caracTemp == "+" || caracTemp == "-") { while (prioridades(operadores.top()) >= prioridades(caracTemp)) { // puede existir un error res = res + operadores.top(); operadores.pop(); } operadores.push(caracTemp); pos++; } //caso de parentesis derecho else if (caracTemp == ")") { temp = operadores.top(); while (temp != "(") { res = res + temp; operadores.pop(); temp = operadores.top(); } operadores.pop(); pos++; } //caso que sea un p# else { if (caracTemp == "p" && pos != posP) { res = res + ","; } res = res + caracTemp; pos++; } } *posfija = res; return *posfija; }
Cola * invertirCola(Cola *ori) { Pila *inc = new Pila(); while (!ori->isEmpty()) { inc->push(ori->dequeue()); } Cola *out = new Cola(); while (!inc->isEmpty()) { out->enqueue(inc->pop()); } return out; }
int main(int argc, char *argv[]) { Immagine I1("ME", "800x120"); Immagine I2("ME", "600x120"); Fotografia F1("ME", "200x120", 1,"Monti",false); Fotografia F2("ME", "600x120", 2,"Mare",false); Fotografia F3("ME", "200x1800", 3,"Laura",false); Fotografia F4("ME", "100x1800", 4,"Cielo stellato",false); Fotografia F; // esempio di polimorfismo //************************************************* Immagine * vet[5]; vet[0]=&I1; vet[1]=&F1; vet[2]=&F2; vet[3]=&I2; vet[4]=&F3; cout << "chiamata alla funzione virtuale (print):" << endl; for(int i=0; i<5; i++){ vet[i]->print(); //binding dinamico cout << "\n "; } cout << "\n "; system("PAUSE"); //************************************************* // test della pila //************************************************** Pila P; // test funzione push cout << "inserimento:" << endl; if(P.push(F1)) cout << "inserimento riuscito"<< endl; else cout << "Pila piena"<< endl; if(P.push(F2)) cout << "inserimento riuscito"<< endl; else cout << "Pila piena"<< endl; if(P.push(F3)) cout << "inserimento riuscito"<< endl; else cout << "Pila piena"<< endl; if(P.push(F4)) cout << "inserimento riuscito"<< endl; else cout << "Pila piena"<< endl; // test funzioni visualizza, top e empty cout << "contenuto della pila:" << endl; if(!P.empty()) P.visualizza(); else cout << "Pila vuota!"<< endl; if(!P.empty()) { P.top(F); cout << "elemento di testa:" << F.getID() << ": " << F.getS() << endl; } else cout << "Pila vuota!"<< endl; system("PAUSE"); // test funzioni sposta, ricerca, swap. Gestione dell'eccezione. cout << "sposto in testa l'elemento di chiave 1:" << endl; try{ P.sposta(1); } catch (const bad_event & e) { cout << e.what() << endl; } cout <<"provoco il lancio dell'eccezione:" << endl; try{ P.sposta(999); } catch (const bad_event & e) { cout << e.what() << endl; } cout << "contenuto della pila:" << endl; if(!P.empty()) P.visualizza(); else cout << "Pila vuota!"<< endl; system("PAUSE"); // test funzione pop cout << "eliminazione:" << endl; if(P.pop(F)) cout << "eliminazione riuscita"<< endl; else cout << "Pila vuota"<< endl; cout << "contenuto della pila:" << endl; if(!P.empty()) P.visualizza(); else cout << "Pila vuota!"<< endl; system("PAUSE"); // test STAMPA su file cout << "stampo il contenuto della pila su file di testo." << endl; ofstream myfile; char nomefile[30]; cout << "inserire il nome del file: "; cin.getline(nomefile,30); myfile.open(nomefile, ios::out); if(!myfile) cout << "operazione non riuscita!!!!" << endl; else { // P.stampa(myfile); myfile << P; myfile.close(); } system("PAUSE"); // test LETTURA da file Pila mypila2; ifstream myfile2; char nomefile2[30]; cout << "inserire il nome del file: "; cin.getline(nomefile2,30); myfile2.open(nomefile2, ios::in); if(!myfile2) cout << "operazione non riuscita!!!!" << endl; else { myfile2>>mypila2; myfile2.close(); } cout << "stampo il contenuto della pila letta da file di testo." << endl; cout << mypila2 << endl; system("PAUSE"); cout << "svuoto la pila." << endl; if(P.pop(F)) cout << "eliminazione riuscita"<< endl; else cout << "Pila vuota"<< endl; if(P.pop(F)) cout << "eliminazione riuscita"<< endl; else cout << "Pila vuota"<< endl; if(P.pop(F)) cout << "eliminazione riuscita"<< endl; else cout << "Pila vuota"<< endl; if(P.pop(F)) cout << "eliminazione riuscita"<< endl; else cout << "Pila vuota"<< endl; system("PAUSE"); return 0; }
int main(int argc, char **argv) { srand(time(NULL)); string s[30] = { "Diego", "Maria", "Juan", "Andres", "Pedro", "Luis", "Juana", "Siria", "Roberto", "Siria", "Sebastian", "Ricardo", "Aria", "Andrey", "Chris", "Jose", "Ana", "Tyler", "Alberto", "Carolina", "Catalina", "Leonardo", "Walter", "Helen", "Silvia", "Monse", "Camila", "Carlos", "Aracely", "Mario" }; Pila p; for (int w = 0; w < 10; ++w) { Persona* p1 = new Persona(rand() % 1000, s[rand() % 30], rand() % 100); ElementoPersona *p11 = new ElementoPersona(p1); p.push(p11); } cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl; cout << endl; cout << "Pila de personas" << endl; cout << endl; cout << p << endl; cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Haciendo PEEK" << endl; cout << endl; p.peek(); cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Haciedno POP" << endl; cout << endl; p.pop(); cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Imprimiendo Pila despues del POP" << endl; cout << endl; cout << p << endl; Pila p2; for (int h = 0; h < 10; ++h) { ElementoInt *p22 = new ElementoInt(rand() % 1000); p2.push(p22); } cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl; cout << endl; cout << "Pila de Enteros" << endl; cout << endl; cout << p2 << endl; cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Haciendo PEEK" << endl; cout << endl; p2.peek(); cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Haciedno POP" << endl; cout << endl; p2.pop(); cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Imprimiendo Pila despues del POP" << endl; cout << endl; cout << p2 << endl; Pila p3; for (int g = 0; g < 10; ++g) { ElementoDouble *p33 = new ElementoDouble(rand() % 1000); p3.push(p33); } cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl; cout << endl; cout << "Pila de Doubles" << endl; cout << endl; cout << p3 << endl; cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Haciendo PEEK" << endl; cout << endl; p3.peek(); cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Haciedno POP" << endl; cout << endl; p3.pop(); cout << "--------------------------------------------------------" << endl; cout << endl; cout << "Imprimiendo Pila despues del POP" << endl; cout << endl; cout << p3 << endl; system("pause"); return 0; }