elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 25
31  Programación / Programación C/C++ / [SRC] [C++] (Archivo de TEXTO) MiniAgenda en: 29 Julio 2010, 03:59 am
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
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class Agenda{
  8.        char name[30];
  9.        int age;
  10.    public:
  11.        int contar();
  12.        void extraer(Agenda* Persona);
  13.        void ordenar(Agenda* Persona);
  14.        void agregaralfi(const char* nombre, int edad);
  15.        const char* getname();
  16.        int getage();
  17.        void set(char*,int);
  18. };
  19.  
  20. int main(int argc, char *argv[])
  21. {
  22.    int op;
  23.    do{
  24.        cout<<"1.Ingresar una persona a la agenda"<<endl;
  25.        cout<<"2.Ver todas las personas de la agenda"<<endl;
  26.        cout<<"3.Ordenar agenda"<<endl;
  27.        cout<<"4. Salir"<<endl;
  28.        cin>>op;
  29.  
  30.        if (op == 1){
  31.            char aux[30];
  32.            int ageaux;
  33.            cin.ignore();
  34.            cout<<"Ingrese el nombre: ";
  35.            cin.getline(aux,30);
  36.            cout<<"Ingrese la edad: ";
  37.            cin>>ageaux;
  38.            Agenda persona;
  39.            persona.agregaralfi((const char*)aux,ageaux);
  40.        }
  41.        else if (op == 2){
  42.            Agenda *persona;
  43.            int x=persona->contar();
  44.            if (x > 0){
  45.                persona= new Agenda [x];
  46.                persona->extraer(persona);
  47.                for (int i=0;i<x;i++)
  48.                    cout<<persona[i].getname()<<persona[i].getage()<<endl;
  49.            }
  50.            else if (x==0)
  51.            cout<<"No hay personas"<<endl;
  52.            else
  53.            cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
  54.  
  55.            delete[] persona;
  56.        }
  57.        else if (op == 3){
  58.            Agenda *persona;
  59.            int x=persona->contar();
  60.            if (x > 0){
  61.                persona= new Agenda [x];
  62.                persona->extraer(persona);
  63.                persona->ordenar(persona);
  64.                for (int i=0;i<x;i++){
  65.                    cout<<persona[i].getname()<<persona[i].getage()<<endl;
  66.                    persona[i].agregaralfi(persona[i].getname(),persona[i].getage());
  67.                }
  68.            }
  69.            else if (x==0) cout<<"La agenda no tiene personas"<<endl;
  70.            else cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
  71.        }
  72.        cout<<"\n\n\n";
  73.    }while (op != 4);
  74.  
  75.    cin.get();
  76.    return EXIT_SUCCESS;
  77. }
  78.  
  79. void Agenda::extraer(Agenda* Persona){
  80.    ifstream ent("Agenda.txt");
  81.    if (!ent){
  82.        cout<<"Error al abrir el archivo, compruebe su existencia"<<endl;
  83.        return;
  84.    }
  85.    for (int i=0;i<contar();i++){
  86.        ent.getline(Persona[i].name,30,':');
  87.        ent>>Persona[i].age;
  88.        ent.ignore();
  89.    }
  90.    ent.close();  
  91. }
  92.  
  93. int Agenda::contar(){
  94.    ifstream ent("Agenda.txt");
  95.      if (!ent){
  96.        return -1;
  97.    }
  98.    int c=0;
  99.    while (ent) if (ent.get() == '\n') c++;
  100.    ent.close();
  101.    return c;
  102. }
  103.  
  104. void Agenda::ordenar(Agenda* Persona){
  105.    int c=contar();
  106.    ofstream sal("Agenda.txt");
  107.    sal.close();
  108.    for (int i=0;i<c-1;i++)
  109.        for (int j=i+1;j<c;j++)
  110.        if (strcmp(Persona[i].getname(), Persona[j].getname()) > 0){
  111.            Agenda AUX=Persona[i];
  112.            Persona[i]=Persona[j];
  113.            Persona[j]=AUX;
  114.        }
  115. }
  116.  
  117. void Agenda::agregaralfi(const char* nombre, int edad){
  118.    ofstream sal("Agenda.txt", ios::out | ios::app | ios::ate);
  119.    if (!sal) exit(1);
  120.    sal.setf(ios::left);
  121.    sal.width(29);
  122.    sal<<nombre<<':'<<edad<<endl;
  123.    sal.close();
  124. }
  125.  
  126. void Agenda::set(char nombre[], int edad){
  127.    strcpy(this->name,nombre);
  128.    this->age=edad;    
  129. }
  130.  
  131. const char* Agenda::getname(){
  132.    return this->name;
  133.    }
  134.  
  135. int Agenda::getage(){
  136.    int x=this->age;
  137.    return x;
  138.    }
  139.  

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  Programación / Programación C/C++ / Re: PROBLEMA con la funcion miembro getline() e ignore() en: 27 Julio 2010, 04:26 am
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  Programación / Programación C/C++ / Re: PROBLEMA con la funcion miembro getline() e ignore() en: 27 Julio 2010, 03:59 am
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  Programación / Programación C/C++ / Re: PROBLEMA con la funcion miembro getline() e ignore() en: 27 Julio 2010, 02:31 am
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
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. struct person{
  9.    char name[30];
  10.    int age;
  11. };
  12.  
  13. void extraer(person* Persona);
  14. int contar();
  15. void ordenar(person* Persona);
  16. void agregaralfi(person *Persona);
  17.  
  18. int main()
  19. {
  20.    int op;
  21.    do{
  22.        cout<<"1.Ingresar una persona al archivo"<<endl;
  23.        cout<<"2.Ver todas las personas del archivo"<<endl;
  24.        cout<<"3.Salir"<<endl;
  25.        cin>>op;
  26.  
  27.        if (op == 1){
  28.            person *Persona, aux;
  29.            Persona= new person [contar()+1];
  30.            cin.ignore();
  31.            cout<<"Ingrese el nombre: ";
  32.            cin.getline(aux.name,30);  //Aca lee los 30-1 caracteres y no hay problemas...
  33.            cout<<"Ingrese la edad: ";
  34.            cin>>aux.age;                  //con esta lectura con cin, no dices que al leer los 30-1 caracteres habran errores?
  35.            extraer(Persona);      //Me faltaba esto por eso mostraba esas loqueras
  36.            Persona[contar()]= aux;
  37.            agregaralfi(Persona);
  38.            delete[] Persona;
  39.        }
  40.        else if (op == 2){
  41.            person *Persona;
  42.            Persona= new person [contar()];
  43.            extraer(Persona);
  44.            for (int i=0;i<contar();i++){
  45.                cout<<Persona[i].name<<Persona[i].age<<endl;
  46.                cout<<strlen(Persona[i].name)<<endl;}
  47.            delete[] Persona;
  48.        }
  49.        cout<<"\n\n\n";
  50.    }while (op != 3);
  51.  
  52.  
  53.  
  54.    system("PAUSE");
  55.    return EXIT_SUCCESS;
  56. }
  57.  
  58. void extraer(person* Persona){
  59.    ifstream ent("Agenda.txt");
  60.    int c=contar();
  61.  
  62.    for (int i=0;i<c;i++){
  63.        ent.getline(Persona[i].name,30,':');
  64.        ent>>Persona[i].age;
  65.        ent.ignore();
  66.    }
  67.  
  68.    ent.close();
  69. }
  70.  
  71. int contar(){
  72.    ifstream ent("Agenda.txt");
  73.    int c=0;
  74.    while (ent) if (ent.get() == '\n') c++;
  75.    ent.close();
  76.    return c;
  77. }
  78.  
  79. void ordenar(person* Persona){
  80.    int c=contar();
  81.    for (int i=0;i<c-1;i++)
  82.        for (int j=i+1;j<c;j++)
  83.        if (Persona[i].name > Persona[j].name){
  84.            person AUX=Persona[i];
  85.            Persona[i]=Persona[j];
  86.            Persona[j]=AUX;
  87.        }
  88. }
  89.  
  90. void agregaralfi(person *Persona){
  91.    int c=contar()+1;
  92.    ofstream sal("Agenda.txt",ios::app);
  93.    for (int i=0;i<c;i++)
  94.        sal<<setiosflags(ios::left)<<setw(29)<<Persona[i].name<<':'<<Persona[i].age<<endl;
  95.    sal.close();
  96. }
  97.  

Saludos...
35  Foros Generales / Foro Libre / Re: Sonido solo para jovenes en: 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  Programación / Programación C/C++ / Re: PROBLEMA con la funcion miembro getline() e ignore() en: 27 Julio 2010, 01:50 am
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
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. struct person{
  8.    char name[30];
  9.    int age;
  10. };
  11.  
  12. void extraer(person* Persona);
  13. int contar();
  14. void ordenar(person* Persona);
  15. void agregaralfi(person *Persona);
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.    int op;
  20.    do{
  21.        cout<<"1.Ingresar una persona al archivo"<<endl;
  22.        cout<<"2.Ver todas las personas del archivo"<<endl;
  23.        cout<<"3.Salir"<<endl;
  24.        cin>>op;
  25.  
  26.        if (op == 1){
  27.            person *Persona, aux;
  28.            Persona= new person [contar()+1];
  29.            cin.ignore();
  30.            cout<<"Ingrese el nombre: ";
  31.            cin.getline(aux.name,30);
  32.            cout<<"Ingrese la edad: ";
  33.            cin>>aux.age;
  34.            Persona[contar()]= aux;
  35.            agregaralfi(Persona);
  36.            delete[] Persona;
  37.        }
  38.        else if (op == 2){
  39.            person *Persona;
  40.            Persona= new person [contar()];
  41.            extraer(Persona);
  42.            for (int i=0;i<contar();i++)
  43.                cout<<Persona[i].name<<Persona[i].age<<endl;
  44.            delete[] Persona;
  45.        }
  46.        cout<<"\n\n\n";
  47.    }while (op != 3);
  48.  
  49.  
  50.  
  51.    cin.get();
  52.    return EXIT_SUCCESS;
  53. }
  54.  
  55. void extraer(person* Persona){
  56.    ifstream ent("Agenda.txt");
  57.    int c=contar();
  58.  
  59.    for (int i=0;i<c;i++){
  60.        ent.getline(Persona[i].name,31,':');
  61.        ent>>Persona[i].age;
  62.        ent.ignore();
  63.    }
  64.  
  65.    ent.close();
  66. }
  67.  
  68. int contar(){
  69.    ifstream ent("Agenda.txt");
  70.    int c=0;
  71.    while (ent) if (ent.get() == '\n') c++;
  72.    ent.close();
  73.    return c;
  74. }
  75.  
  76. void ordenar(person* Persona){
  77.    int c=contar();
  78.    for (int i=0;i<c-1;i++)
  79.        for (int j=i+1;j<c;j++)
  80.        if (Persona[i].name > Persona[j].name){
  81.            person AUX=Persona[i];
  82.            Persona[i]=Persona[j];
  83.            Persona[j]=AUX;
  84.        }
  85. }
  86.  
  87. void agregaralfi(person *Persona){
  88.    int c=contar()+1;
  89.    ofstream sal("Agenda.txt",ios::app);
  90.    for (int i=0;i<c;i++)
  91.        sal<<Persona[i].name<<':'<<Persona[i].age<<endl;
  92.    sal.close();
  93. }
  94.  

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

Saludos...
37  Programación / Programación C/C++ / Re: quitar espacios en cadena ? en: 26 Julio 2010, 23:27 pm
Weno metete en la pagina saca uno y nos ponemos a hacerlo horita ando pariendo con archivos  :xD...
38  Programación / Programación C/C++ / Re: quitar espacios en cadena ? en: 26 Julio 2010, 23:22 pm
Si quieres ver ejercicios dificiles mira los de "las olimpiedas informaticas españolas" eso si es feo  :xD

Saludos...
39  Programación / Programación C/C++ / Re: quitar espacios en cadena ? en: 26 Julio 2010, 21:11 pm
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  Programación / Programación C/C++ / Re: quitar espacios en cadena ? en: 26 Julio 2010, 20:24 pm
Es como dice Leo strchr()...

Y esa solucion que te dieron ta muy wena  :xD

Saludos...
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 25
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines