Salve a tutti,
Devo scrivere un metodo in c++ che : dato un albero binario di ricerca, in cui sono inseriti, come in una mappa(STL):
chiave=> Numero Identità alunno;
valore=> Alunno;
mi restituisca il numero di volte in cui compare un alunno il cui numero di identità comincia per 3;
Ho provato a scrivere questo ma non funziona (mi restituisce sempre 0) :
è in spagnolo dunque izq => sinistra; der=>destra; miRaiz = nodo radice albero binario;codice:/** * Funzione che ritorna il numero dei DNI (num. identità alunni) che cominciano per 3 (chiama a cuentaDNI3Aux). * * @return Numero di DNI che cominciano per 3. */ unsigned ABB::cuentaDNI3() const { return cuentaDNI3Aux(miRaiz); } /** * Funzione ausiliare di cuentaDNI3. * * @param raiz Nodo radice * */ unsigned ABB::cuentaDNI3Aux(ABB::PtrNodoBin raiz) const{ int count; if(raiz==NULL) count=0; else { if (raiz->clave[0]==3) count = 1 + cuentaDNI3Aux(raiz->izq) + cuentaDNI3Aux(raiz->der); cout << "\n"; cout << "He encontrado " << count << " DNI que comienzan por 3" << endl; } return count; }
Altra cosa :
il modo di inserire il numero di DNI dovrebbe essere aleatorio... perchè invece mi calcola sempre DNI che cominiciano per 5 e maggiori?
Di seguito il metodo per la creazione dei DNI e il Main() per la prova :
classe alunno :
main() :codice:/** * Implementacion de la clase Alumno * Curso 2015/2016 */ #include "alumno.h" #include <iostream> #include <fstream> #include <string> #include <cstdlib> #include <sstream> using namespace std; // Nombres de ejemplo string Alumno::list_nombre[] = { "Javier", "Jorge", "Angel", "Raul", "Jose", "Inigo", "Jose Antonio", "Julio", "Beatriz", "Ismael", "Oliver", "Carlos", "Alberto", "Francisco Manuel", "Lluis Carles" }; // Apellidos de ejemplo string Alumno::list_apellido[] = { "Albaladejo" , "Albiach" , "Aldana" , "Alonso" , "Anda" , "Andres" , "Angel" , "Aranda" , "Bernal" , "Bonell" , "Calderon" , "Chakkour" , "Contreras" , "Correa" , "Dacasa" }; /** * Constructor Alumno. * Genera un alumno con datos aleatorios excepto el curso, que se pasa como parametro. * @param curs curso del alumno */ Alumno::Alumno(unsigned curs): curso(curs) { unsigned num = rand() % 100000000; stringstream s; s << num; string letra; letra.push_back( rand() % (90-65+1) + 65 ); // A 65, Z 90 dni = s.str() + letra; nombre = list_nombre[ rand() % NUM_NOMBRE]; apellidos = list_apellido[ rand() % NUM_NOMBRE]; telefono = rand() % 100000000 + 600000000; } /** * Escribe el alumno en un stream de salida * @param out Stream de salida * @param alu alumno a escribir */ ostream & operator<<(ostream & out, const Alumno & alu) { const string tab = " "; out << "==================================" << endl; out << tab << "DNI: " << alu.dni << endl; out << tab << "Nombre: " << alu.nombre << tab << alu.apellidos << endl;; out << tab << "Curso: " << alu.curso; out << tab << "Telefono: " << alu.telefono << endl; out << "==================================" << endl; return out; }
il metodo inorden oltre a scorrere l'albero secondo una scansione inorder ... lo stampa ordinato.codice:int main() { ABB arbol; int i = 0; string dni; Alumno al_aux; for (int i=0; i<1000; i++){ Alumno al_aux(rand()); arbol.insertar(al_aux.getDNI(),al_aux); } arbol.inorden(cout); cout << endl; }

Rispondi quotando
