Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - .:BlackCoder:.

#31
Wenas... Aca dejo un code de una MiniAgenda que estuve haciendo, guarda Un nombre y un numero que en este caso es una edad pero el cambio para que guarde un tlf es minimo... Gracias a littlehorse y Leo Gutierrez por sus consejos  :xD:

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

class Agenda{
        char name[30];
        int age;
    public:
        int contar();
        void extraer(Agenda* Persona);
        void ordenar(Agenda* Persona);
        void agregaralfi(const char* nombre, int edad);
        const char* getname();
        int getage();
        void set(char*,int);
};

int main(int argc, char *argv[])
{
    int op;
    do{
        cout<<"1.Ingresar una persona a la agenda"<<endl;
        cout<<"2.Ver todas las personas de la agenda"<<endl;
        cout<<"3.Ordenar agenda"<<endl;
        cout<<"4. Salir"<<endl;
        cin>>op;
       
        if (op == 1){
            char aux[30];
            int ageaux;
            cin.ignore();
            cout<<"Ingrese el nombre: ";
            cin.getline(aux,30);
            cout<<"Ingrese la edad: ";
            cin>>ageaux;
            Agenda persona;
            persona.agregaralfi((const char*)aux,ageaux);
        }
        else if (op == 2){
            Agenda *persona;
            int x=persona->contar();
            if (x > 0){
                persona= new Agenda [x];
                persona->extraer(persona);
                for (int i=0;i<x;i++)
                    cout<<persona[i].getname()<<persona[i].getage()<<endl;
            }
            else if (x==0)
            cout<<"No hay personas"<<endl;
            else
            cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;

            delete[] persona;
        }
        else if (op == 3){
            Agenda *persona;
            int x=persona->contar();
            if (x > 0){
                persona= new Agenda [x];
                persona->extraer(persona);
                persona->ordenar(persona);
                for (int i=0;i<x;i++){
                    cout<<persona[i].getname()<<persona[i].getage()<<endl;
                    persona[i].agregaralfi(persona[i].getname(),persona[i].getage());
                }
            }
            else if (x==0) cout<<"La agenda no tiene personas"<<endl;
            else cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
        }
        cout<<"\n\n\n";
    }while (op != 4);
   
    cin.get();
    return EXIT_SUCCESS;
}

void Agenda::extraer(Agenda* Persona){
    ifstream ent("Agenda.txt");
    if (!ent){
        cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
        return;
    }
    for (int i=0;i<contar();i++){
        ent.getline(Persona[i].name,30,':');
        ent>>Persona[i].age;
        ent.ignore();
    }
    ent.close(); 
}

int Agenda::contar(){
    ifstream ent("Agenda.txt");
      if (!ent){
        return -1;
    }
    int c=0;
    while (ent) if (ent.get() == '\n') c++;
    ent.close();
    return c;
}

void Agenda::ordenar(Agenda* Persona){
    int c=contar();
    ofstream sal("Agenda.txt");
    sal.close();
    for (int i=0;i<c-1;i++)
        for (int j=i+1;j<c;j++)
        if (strcmp(Persona[i].getname(), Persona[j].getname()) > 0){
            Agenda AUX=Persona[i];
            Persona[i]=Persona[j];
            Persona[j]=AUX;
        }
}

void Agenda::agregaralfi(const char* nombre, int edad){
    ofstream sal("Agenda.txt", ios::out | ios::app | ios::ate);
    if (!sal) exit(1);
    sal.setf(ios::left);
    sal.width(29);
    sal<<nombre<<':'<<edad<<endl;
    sal.close();
}

void Agenda::set(char nombre[], int edad){
    strcpy(this->name,nombre);
    this->age=edad;   
}

const char* Agenda::getname(){
    return this->name;
    }

int Agenda::getage(){
    int x=this->age;
    return x;
    }


Estare ausente un tiempo pero cuando vuelva vere las criticas y/u observaciones... Saludos....

PD: Alguien por ahi lo hizo con sobrecarga de operadores y me dijo que lo queria postear (ayer), le dije que esperara un poco hasta que yo creara el post y aca esta... Do it  :xD
#32
La verdad que aunque me gusta C++ no soy bueno con la POO  :xD pero voy a intentarlo... y lo de los nombre ya lo sabia pero todo empezo desde una cadena person  :xD Ya voy a ver si hago algo orientado a objetos... aunque como es que vas a meter esas funciones como miembros? tu pensaste en que person sea una struct miembro de una clase? o que la clase sea person?...

Saludos
#33
Ok... Algo mas? Ya modifique un par de cosas, como por ejemplo le agregue un manipulador para darle formato sin tener que precionar espacios  :xD Luego le agrego un par de funciones...

Saludos...
#34
Me imagino que el pedu esta en agregaralfi()... Estoy casi seguro, horita voy a comer, luego le doy y le doy otra vez  :xD ya estuve toda la tarde en eso, que me ciente otro rato no quiere decir nada... :laugh:

EDITO:

Mmmm el problema era una tonteria aca esta el code, lo hire editando poco a poco, se esperan criticas, consejos, ordenes  :xD lo que sirva:

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

struct person{
   char name[30];
   int age;
};

void extraer(person* Persona);
int contar();
void ordenar(person* Persona);
void agregaralfi(person *Persona);

int main()
{
   int op;
   do{
       cout<<"1.Ingresar una persona al archivo"<<endl;
       cout<<"2.Ver todas las personas del archivo"<<endl;
       cout<<"3.Salir"<<endl;
       cin>>op;
       
       if (op == 1){
           person *Persona, aux;
           Persona= new person [contar()+1];
           cin.ignore();
           cout<<"Ingrese el nombre: ";
           cin.getline(aux.name,30);  //Aca lee los 30-1 caracteres y no hay problemas...
           cout<<"Ingrese la edad: ";
           cin>>aux.age;                  //con esta lectura con cin, no dices que al leer los 30-1 caracteres habran errores?
           extraer(Persona);      //Me faltaba esto por eso mostraba esas loqueras
           Persona[contar()]= aux;
           agregaralfi(Persona);
           delete[] Persona;
       }
       else if (op == 2){
           person *Persona;
           Persona= new person [contar()];
           extraer(Persona);
           for (int i=0;i<contar();i++){
               cout<<Persona[i].name<<Persona[i].age<<endl;
               cout<<strlen(Persona[i].name)<<endl;}
           delete[] Persona;
       }
       cout<<"\n\n\n";
   }while (op != 3);
   
   
 
   system("PAUSE");
   return EXIT_SUCCESS;
}

void extraer(person* Persona){
   ifstream ent("Agenda.txt");
   int c=contar();
   
   for (int i=0;i<c;i++){
       ent.getline(Persona[i].name,30,':');
       ent>>Persona[i].age;
       ent.ignore();
   }

   ent.close();
}

int contar(){
   ifstream ent("Agenda.txt");
   int c=0;
   while (ent) if (ent.get() == '\n') c++;
   ent.close();
   return c;
}

void ordenar(person* Persona){
   int c=contar();
   for (int i=0;i<c-1;i++)
       for (int j=i+1;j<c;j++)
       if (Persona[i].name > Persona[j].name){
           person AUX=Persona[i];
           Persona[i]=Persona[j];
           Persona[j]=AUX;
       }
}

void agregaralfi(person *Persona){
   int c=contar()+1;
   ofstream sal("Agenda.txt",ios::app);
   for (int i=0;i<c;i++)
       sal<<setiosflags(ios::left)<<setw(29)<<Persona[i].name<<':'<<Persona[i].age<<endl;
   sal.close();
}


Saludos...
#35
Foro Libre / Re: Sonido solo para jovenes
27 Julio 2010, 02:05 AM
Yo tengo 18 y no escucho un coñ :o  :laugh: :laugh: Debe ser el extres y la musica a todo volumen mas tarde pruebo otra vez  :xD

Saludos...
#36
Jumm ahora me doy cuenta que toy grave  :xD cuando getline setea el failbit las operaciones siguientes fallan? Eso no lo tengo claro, crei q setear el failbit no tenia importancia, que solo era para cuando uno quiera verificar errores y todo eso...

Weno lo que viene es un code larguito  :xD pero pes como siempre quise hacer algo mas complejo, Agregar y quitar "registros" (Noten las comillas) a un archivo, pero de TEXTO, y ya se que lo ideal segun casi todos es que sea binario, pero pes lo quiero hacer en forma texto... en el fichero se deben ver mas o menos asi los registros:

Pedro Perez                  :18
Maria Rodriguez              :34
Ana Vergara                  :55

Un nombre completado con espacios para conseguir 29 caracteres mas ':' para... ni se para que digamos que para complicarme mas  :xD y un entero que segun yo es la edad... mas su respectivo fin de linea...

Tengo este code, con una funcion contar() que cuenta los "registros", una funcion extraer() que los extrae e ingresa  en un vector de estructuras, otra ordenar() que ordena el vector de registros y otra agregaralfi() que pes agregar los registros al ficheros: El code funciona mas o menos xD: el problema es que despues de agregar a una persona me aparecio:

Pedro Perez                  :18
Maria Rodriguez              :34
Ana Vergara                  :55
Ð>:0
:0
:0
Antonio Mendoza              :10

:xD Pero hace alguito el pobre code, esta muy feo y obviamente se puede mejorar pero quiero empezar por reparar esos simbolos extraños.... Aca lo dejo:

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

struct person{
    char name[30];
    int age;
};

void extraer(person* Persona);
int contar();
void ordenar(person* Persona);
void agregaralfi(person *Persona);

int main(int argc, char *argv[])
{
    int op;
    do{
        cout<<"1.Ingresar una persona al archivo"<<endl;
        cout<<"2.Ver todas las personas del archivo"<<endl;
        cout<<"3.Salir"<<endl;
        cin>>op;
       
        if (op == 1){
            person *Persona, aux;
            Persona= new person [contar()+1];
            cin.ignore();
            cout<<"Ingrese el nombre: ";
            cin.getline(aux.name,30);
            cout<<"Ingrese la edad: ";
            cin>>aux.age;
            Persona[contar()]= aux;
            agregaralfi(Persona);
            delete[] Persona;
        }
        else if (op == 2){
            person *Persona;
            Persona= new person [contar()];
            extraer(Persona);
            for (int i=0;i<contar();i++)
                cout<<Persona[i].name<<Persona[i].age<<endl;
            delete[] Persona;
        }
        cout<<"\n\n\n";
    }while (op != 3);
   
   
   
    cin.get();
    return EXIT_SUCCESS;
}

void extraer(person* Persona){
    ifstream ent("Agenda.txt");
    int c=contar();
   
    for (int i=0;i<c;i++){
        ent.getline(Persona[i].name,31,':');
        ent>>Persona[i].age;
        ent.ignore();
    }

    ent.close();
}

int contar(){
    ifstream ent("Agenda.txt");
    int c=0;
    while (ent) if (ent.get() == '\n') c++;
    ent.close();
    return c;
}

void ordenar(person* Persona){
    int c=contar();
    for (int i=0;i<c-1;i++)
        for (int j=i+1;j<c;j++)
        if (Persona[i].name > Persona[j].name){
            person AUX=Persona[i];
            Persona[i]=Persona[j];
            Persona[j]=AUX;
        }
}

void agregaralfi(person *Persona){
    int c=contar()+1;
    ofstream sal("Agenda.txt",ios::app);
    for (int i=0;i<c;i++)
        sal<<Persona[i].name<<':'<<Persona[i].age<<endl;
    sal.close();
}


Muchas gracias littlehorse, disculpa la molestia y pes espero tu ayuda para luego si fortalecer el code...

Saludos...
#37
Weno metete en la pagina saca uno y nos ponemos a hacerlo horita ando pariendo con archivos  :xD...
#38
Si quieres ver ejercicios dificiles mira los de "las olimpiedas informaticas españolas" eso si es feo  :xD

Saludos...
#39
Pes porque es un puntero jeje le das la direccion de la cadena pero "cortada" Y en ese malloc() creo que falta el casting... ademas estas dandole espacio de mas a aux... lo mejor seria contar los espacios y restarcelos a strlen(s)....

Saludos...

PD: Mas o menos eso es lo que yo habia pensado...
#40
Es como dice Leo strchr()...

Y esa solucion que te dieron ta muy wena  :xD

Saludos...