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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: 1 [2] 3
11  Programación / Programación C/C++ / Ayuda con la lectura de un fichero en: 21 Noviembre 2013, 03:57 am
Tengo un problema, tengo que hacer un programa que lea la informacion de unas matrices contenidas en un fichero, en el fichero esta el nombre de la matriz, cantidad de filas, cantidad de columnas y la forma de la matriz.
La informacion se encuentra separada por comas, a si que se me ocurrio usar fstream e ifstream por ser un archivo de entrada, y uso el metodo getline(fichero,palabra), pero al momento de bajar una linea (una vez que llega al final de una linea), el programa se desfasa y pareciera ser que toma el espacio en blanco, por que cuando mando a imprimir los datos leidos por el fichero, me imprime ademas de los numeros, los espacios en blanco, y no he podido encontrar solucion

El formato del fichero es asi

Código:
MATRIZ 1,
3,
3,
4,0,6
2,0,1
0,8,1
MATRIZ 2,
2,
2,
6,2,
0,4,
MATRIZ 3,
4,
2,
1,2,
3,0,
0,6,
7,0,
MATRIZ 4,
2,
4,
1,0,0,4,
5,6,0,8,
MATRIZ 5,
5,
5,
1,0,0,0,2,
0,3,0,4,5,
0,0,0,6,0,
7,8,0,0,0,
9,0,0,7,4,

12  Programación / Programación C/C++ / Ayuda en una lista contenedora en: 9 Octubre 2013, 02:54 am
Estaba haciendo un ejercicio con uso de punteros, arreglos y asignación dinámica, todo marchaba perfectamente pero con un pequeño error en la última parte y no se por que sera.

Mi ejercicio consiste en esto: Quiero crear una "lista" llamada Carpeta que contiene un arreglo de punteros a Alumno, cada alumno tiene nombre, rut (número de identificación en mi pais) y edad.

En el main cree en un ciclo for que solo agregue 3 alumnos, se pide ingresar por teclado el nombre, rut y edad y se agrega a la carpeta, todo marcha bien, el problema sucede cuando es hora de mostrar los resultados, una vez que termino de ingresar los datos, la última instrucción es desplegar los datos, pero hay un problema con el ciclo for, por que dentro de la función "desplegar" de Carpeta, hay un título que dice "Datos de los alumnos", eso lo imprime correctamente, pero llega al for y comienza el problema y no se por que sera. Ojalá me puedan ayudar.

Les pongo lo que me sale en la pantalla de comandos y el código.

Código:
Ingresando datos

Individuo 1
Ingrese nombre: Juan
Ingrese RUT: 1234
Ingrese edad: 15

Individuo 2
Ingrese nombre: Simon
Ingrese RUT: 4321
Ingrese edad: 17

Individuo 3
Ingrese nombre: Rodrigo
Ingrese RUT: 5678
Ingrese edad: 16

Datos de los alumnos

RUN FAILED (exit value 1,, total time: 36s)

Código
  1. #ifndef CARPETA_H
  2. #define CARPETA_H
  3. #include "Alumno.h"
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. class Carpeta {
  9. public:
  10.    Carpeta();
  11.    Carpeta(const Carpeta& orig);
  12.    virtual ~Carpeta();
  13.    void agregarAlumno(Alumno *a);
  14.    Alumno* getAlumno(string n);
  15.    void desplegar();
  16.    bool isFull();
  17.    bool isEmpty();
  18. private:
  19.    Alumno **alumnos;
  20.    int cantAlumnos;
  21. };
  22.  
  23. #endif /* CARPETA_H */
  24.  
  25.  

Código
  1. #include "Carpeta.h"
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. /*
  8.  * Constructor por defecto de la carpeta, planeado para un curso de 40 alumnos.
  9.  */
  10.  
  11. Carpeta::Carpeta() {
  12.  
  13.    this->alumnos = new Alumno*[40];
  14.    this->cantAlumnos = 0;
  15.  
  16. }
  17.  
  18. Carpeta::Carpeta(const Carpeta& orig) {    
  19. }
  20.  
  21. /*
  22.  * Destructor.
  23.  */
  24.  
  25. Carpeta::~Carpeta() {
  26.  
  27.    cout << "\nEliminando carpeta";
  28.    delete []alumnos;
  29.  
  30. }
  31.  
  32. /*
  33.  * Funcion que agrega un puntero a Alumno a la lista.
  34.  */
  35.  
  36. void Carpeta::agregarAlumno(Alumno *a){
  37.  
  38.    if(isFull()){
  39.  
  40.        cout << "\nEsta lleno";
  41.  
  42.    }else{
  43.  
  44.        alumnos[cantAlumnos];
  45.        cantAlumnos++;
  46.  
  47.    }
  48.  
  49. }
  50.  
  51. /*
  52.  * Funcion que devuelve un puntero a Alumno
  53.  */
  54.  
  55. Alumno* Carpeta::getAlumno(string nombre){
  56.  
  57.    if(isEmpty()){
  58.  
  59.        cout << "\nEsta vacio\n";
  60.  
  61.    }else{
  62.  
  63.        for(int i=0; i<cantAlumnos; i++){
  64.  
  65.            if(alumnos[i]->getNombre() == nombre){
  66.  
  67.                return alumnos[i];
  68.  
  69.            }
  70.        }
  71.    }
  72.  
  73. }
  74.  
  75. /*
  76.  * Funcion que verifica si la lista esta vacia.
  77.  */
  78.  
  79. bool Carpeta::isEmpty(){
  80.  
  81.    if(cantAlumnos == 0){
  82.  
  83.        return true;
  84.  
  85.    }else{
  86.  
  87.        return false;
  88.  
  89.    }
  90.  
  91. }
  92.  
  93. /*
  94.  * Funcion que verifica si la lista esta llena.
  95.  */
  96. bool Carpeta::isFull(){
  97.  
  98.    if(cantAlumnos == 40){
  99.  
  100.        return true;
  101.  
  102.    }else{
  103.  
  104.        return false;
  105.  
  106.    }
  107.  
  108. }
  109.  
  110. /*
  111.  * Funcion que despliega todos los alumnos de la lista.
  112.  */
  113.  
  114. void Carpeta::desplegar(){
  115.  
  116.    cout <<"\nDatos de los alumnos\n";
  117.  
  118.    for(int i=0; i<cantAlumnos; i++){
  119.  
  120.        cout <<"\nNombre: " << alumnos[i]->getNombre();
  121.        cout <<"\nRut: " << alumnos[i]->getRut();
  122.        cout <<"\nEdad: " << alumnos[i]->getRut();
  123.  
  124.    }
  125. }
  126.  
  127.  

Código
  1. #ifndef ALUMNO_H
  2. #define ALUMNO_H
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. class Alumno {
  8. public:
  9.    Alumno();
  10.    Alumno(string n, string r, int e);
  11.    Alumno(const Alumno& orig);
  12.    virtual ~Alumno();
  13.    string getNombre();
  14.    string getRut();
  15.    int getEdad();
  16. private:
  17.    string nombre;
  18.    string rut;
  19.    int edad;
  20. };
  21.  
  22. #endif /* ALUMNO_H */
  23.  
  24.  

Código
  1. #include "Alumno.h"
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Alumno::Alumno() {
  8. }
  9.  
  10. Alumno::Alumno(string n, string r, int e){
  11.  
  12.    this->nombre = n;
  13.    this->rut = r;
  14.    this->edad = e;
  15.  
  16. }
  17.  
  18. Alumno::Alumno(const Alumno& orig) {
  19.  
  20.    // Sin implementar.
  21.  
  22. }
  23.  
  24. Alumno::~Alumno() {
  25.  
  26.    cout << "\nEliminando alumno";
  27.  
  28. }
  29.  
  30. string Alumno::getNombre(){
  31.  
  32.    return nombre;
  33.  
  34. }
  35.  
  36. string Alumno::getRut(){
  37.  
  38.    return rut;
  39.  
  40. }
  41.  
  42. int Alumno::getEdad(){
  43.  
  44.    return edad;
  45.  
  46. }
  47.  
  48.  

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "Alumno.h"
  4. #include "Carpeta.h"
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. Carpeta carpetaAlumnos;
  10.  
  11. int main(int argc, char** argv) {
  12.  
  13.    string nombre;
  14.    string rut;
  15.    int edad;
  16.  
  17.    cout << "Ingresando datos\n";
  18.  
  19.    for(int i=0; i<3; i++){
  20.  
  21.        cout << "\nIndividuo " << i+1 << "\n";
  22.  
  23.        cout <<"Ingrese nombre: ";
  24.        getline(cin,nombre);
  25.  
  26.        cout <<"Ingrese RUT: ";
  27.        getline(cin,rut);
  28.  
  29.        cout <<"Ingrese edad: ";
  30.        cin >> edad;
  31.  
  32.        Alumno *alumno = new Alumno(nombre,rut,edad);
  33.        carpetaAlumnos.agregarAlumno(alumno);
  34.  
  35.        cin.ignore();
  36.  
  37.    }
  38.  
  39.    carpetaAlumnos.desplegar();
  40.  
  41.    return 0;
  42. }
  43.  
  44.  
13  Programación / Programación C/C++ / Lista enlazada, eliminando todos los nodos en C++ (¿ Estara bien ?) en: 28 Septiembre 2013, 23:05 pm
Solo hago esta pregunta para saber si esta bien, ya que soy novato aun, cree una lista enlazada simple, utilizando punteros para apuntar al nodo siguiente, utilizando POO.

El esquema de la lista es la siquiente

Head
  l
 \/
 O - O - O - ......................... - O - O - O - NULL

Ahora, cada vez que creo un nodo, lo hago de manera dinamica, sabiendo que no solamente debo borrar la lista cuando termine, si no tambien debo borrar todos los nodos de manera manual, pero no se si estara bien mi forma de borrar.

Todo funciona bien, pero no se si el metodo de eliminacion estara bien , mi objetivo es que se libere todo, y no queden en la memoria cuando termine el programa.

Código
  1. #ifndef LISTA_H
  2. #define LISTA_H
  3. #include "Nodo.h"
  4.  
  5. class Lista {
  6. public:
  7.    Lista();
  8.    Lista(const Lista& orig);
  9.    virtual ~Lista();
  10.    void setHead(int d);
  11.    Nodo* getHead();
  12.    bool isEmpty();
  13. private:
  14.    Nodo *head;
  15. };
  16.  
  17. #endif /* LISTA_H */
  18.  
  19.  

Código
  1. #include "Lista.h"
  2. #include "Nodo.h"
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Lista::Lista() {
  8.  
  9.    head = NULL;
  10.  
  11. }
  12.  
  13. Lista::Lista(const Lista& orig) {  
  14. }
  15.  
  16. /*
  17.  * Destructor de la lista. Borra uno por uno todos los Nodos que se asigno de for
  18.  * ma dinamica.
  19.  *
  20.  */
  21.  
  22. Lista::~Lista() {
  23.  
  24.    cout <<"\nBorrando lista, borrando todos los elementos...\n";
  25.  
  26.    Nodo *aux;
  27.  
  28.    while(head != NULL){
  29.  
  30.        aux = head->getSiguiente(); //Guardando la posicion del nodo siguiente
  31.        delete head; //Borrando lo que hay en la posicion de head
  32.        head = aux; //Head apunta al siguiente del Head anterior
  33.  
  34.    }
  35.  
  36. }
  37.  
  38. /*
  39.  * Funcion que agrega un nuvo Nodo en la lista, colocandolo en la cabeza.
  40.  */
  41.  
  42. void Lista::setHead(int d){
  43.  
  44.    Nodo *nuevo = new Nodo(d);
  45.  
  46.    if(isEmpty()){
  47.  
  48.        head = nuevo;
  49.  
  50.    }else{
  51.  
  52.        nuevo->setSiguiente(head);
  53.        head = nuevo;
  54.  
  55.    }
  56.  
  57. }
  58.  
  59. /*
  60.  * Funcion que obtiene el primer Nodo de la lista.
  61.  */
  62.  
  63. Nodo* Lista::getHead(){
  64.  
  65.    if(isEmpty()){
  66.  
  67.        cout << "\nLa pila esta vacia\n";
  68.  
  69.    }else{
  70.  
  71.        return head;
  72.  
  73.    }
  74.  
  75. }
  76.  
  77. /*
  78.  * Funcion que determina si la lista esta vacia o no lo esta.
  79.  */
  80.  
  81. bool Lista::isEmpty(){
  82.  
  83.    if(head == NULL){
  84.  
  85.        return true;
  86.  
  87.    }else{
  88.  
  89.        return false;
  90.  
  91.    }
  92.  
  93. }

Código
  1. #ifndef NODO_H
  2. #define NODO_H
  3.  
  4. class Nodo {
  5. public:
  6.    Nodo(int d);
  7.    Nodo(const Nodo& orig);
  8.    virtual ~Nodo();
  9.    void setSiguiente(Nodo *s);
  10.    int getDato();
  11.    Nodo* getSiguiente();
  12. private:
  13.    int dato;
  14.    Nodo *siguiente;
  15. };
  16.  
  17. #endif /* NODO_H */
  18.  
  19.  

Código
  1. #include "Nodo.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. Nodo::Nodo(int d) {
  7.  
  8.    dato = d;
  9.    siguiente = NULL;
  10. }
  11.  
  12. Nodo::Nodo(const Nodo& orig) {
  13. }
  14.  
  15. Nodo::~Nodo() {
  16.  
  17.    cout <<"\nDestruyendo nodo...\n";
  18.  
  19. }
  20.  
  21. /*
  22.  * Funcion que agregar el nodo siguiente
  23.  */
  24.  
  25. void Nodo::setSiguiente(Nodo *s){
  26.  
  27.    siguiente = s;
  28.  
  29. }
  30.  
  31. /*
  32.  * Funcion que obtiene el valor contenido del nodo.
  33.  */
  34.  
  35. int Nodo::getDato(){
  36.  
  37.    return dato;
  38.  
  39. }
  40.  
  41. /*
  42.  * Metodo que obtiene un puntero al siguiente Nodo.
  43.  */
  44.  
  45. Nodo* Nodo::getSiguiente(){
  46.  
  47.    return siguiente;
  48.  
  49. }
  50.  
  51.  

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "Lista.h"
  4. #include "Nodo.h"
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char** argv) {
  9.  
  10.    Lista lista;
  11.  
  12.    lista.setHead(10);
  13.    lista.setHead(9);
  14.    lista.setHead(8);
  15.    lista.setHead(7);
  16.    lista.setHead(6);
  17.    lista.setHead(5);
  18.    lista.setHead(4);
  19.    lista.setHead(3);
  20.    lista.setHead(2);
  21.    lista.setHead(1);
  22.    lista.setHead(0);
  23.  
  24.    //Obteniendo el primer nodo de la lista.
  25.  
  26.    Nodo *cabeza = lista.getHead();
  27.  
  28.    //Imprimiendo por pantalla los valores contenidos en cada nodo.
  29.  
  30.    while(cabeza != NULL){
  31.  
  32.        cout << cabeza->getDato() << endl;
  33.        cabeza = cabeza->getSiguiente();
  34.  
  35.    }
  36.  
  37.    return 0;
  38. }
  39.  
  40.  
14  Programación / Programación C/C++ / Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO) en: 21 Septiembre 2013, 10:15 am
Estoy tratando de crear un Pila Generica, que me pueda almacenar todo tipo de datos, por ejemplo, poder crear una pila de enteros, otra de doubles, otra de floats, etc, vi que es necesario usar templates, estaba siguiendo el ejemplo de un libro cuyo autor se llama "Ellis Horowitz" pero la verdad que no lo veo muy explicativo, se salta muchos pasos, estaba buscando en otro sitio pero no puedo resolver la duda, ojala alguien me ayude.
Se me olvido decir que en la clase Pila no me deja mensajes con el "cout", me detecta error, ¿ a que se debera ? Lo deje como comentario.

Bueno, en este foro mucha gente me ha sacado de apuros, se los agradezco, ojala tambien en esta pueda salir, saltar de Java a C++ me fue un poco dificil, ahora pongo el codigo

Lo que me sale en la ventana de comandos:

Código:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/repaso39.exe
make[2]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
mkdir -p build/Debug/Cygwin_4.x-Windows/_ext/931385675
rm -f build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o.d
g++    -c -g -MMD -MP -MF build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o.d -o build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o ../Repaso39/Pila.cpp
mkdir -p dist/Debug/Cygwin_4.x-Windows
g++     -o dist/Debug/Cygwin_4.x-Windows/repaso39 build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o  build/Debug/Cygwin_4.x-Windows/main.o
build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39/main.cpp:8: undefined reference to `Pila<int>::Pila(int)'
/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39/main.cpp:10: undefined reference to `Pila<int>::~Pila()'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:63: recipe for target `dist/Debug/Cygwin_4.x-Windows/repaso39.exe' failed
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/repaso39.exe] Error 1
make[2]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
nbproject/Makefile-Debug.mk:60: recipe for target `.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2,, total time: 5s)

Ahora el codigo

Código
  1. #include <cstdlib>
  2. #include "Pila.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char** argv) {
  7.  
  8.    Pila<int> pila(10); //Creando una pila de enteros de 10 espacios
  9.  
  10.    return 0;
  11. }
  12.  
  13.  

Código
  1. #ifndef PILA_H
  2. #define PILA_H
  3.  
  4. template <class T>
  5. class Pila {
  6. public:
  7.  
  8.    Pila(int t);
  9.    Pila(const Pila& orig);
  10.    virtual ~Pila();
  11.    void push(T e);
  12.    T pop();
  13.    bool isEmpty();
  14.    bool isFull();
  15.  
  16. private:
  17.  
  18.    int tam; // El tamanio del arreglo
  19.    int top; // La posicion del ultimo elemento
  20.    T *arreglo;
  21.  
  22. };
  23.  
  24. #endif /* PILA_H */
  25.  
  26.  

Código
  1. #include "Pila.h"
  2. #include <iostream>
  3.  
  4. template <class T>
  5. Pila<T>::Pila(int t) {
  6.  
  7.    this->tam = t;
  8.    this->top = -1;
  9.    this->arreglo = new T[tam];
  10.  
  11. }
  12.  
  13. template <class T>
  14. Pila<T>::Pila(const Pila& orig) {
  15.  
  16.    // Por implementar
  17.  
  18. }
  19.  
  20. template <class T>
  21. Pila<T>::~Pila() {
  22.  
  23.    delete []arreglo;
  24.  
  25. }
  26.  
  27. /*
  28.  * Funcion que agrega un elemento a la pila.
  29.  */
  30.  
  31. template <class T>
  32. void Pila<T>::push(T e){
  33.  
  34.    if(isFull()){
  35.  
  36.        //cout << "\nLa pila esta llena\n";
  37.  
  38.    }else{
  39.  
  40.        arreglo[++top] = e;
  41.  
  42.    }
  43.  
  44. }
  45.  
  46. /**
  47.  * Funcion que obtiene un elemento de la pila.
  48.  * @return El elemento que esta el tope de la pila.
  49.  */
  50.  
  51. template <class T>
  52. T Pila<T>::pop(){
  53.  
  54.    if(isEmpty()){
  55.  
  56.        //cout << "\nLa pila esta vacia\n";
  57.  
  58.    }else{
  59.  
  60.        return arreglo[top--];
  61.  
  62.    }
  63. }
  64.  
  65. /*
  66.  * Funcion que revisa si la pila esta vacia
  67.  */
  68.  
  69. template <class T>
  70. bool Pila<T>::isEmpty(){
  71.  
  72.    if(top == -1){
  73.  
  74.        return true;
  75.  
  76.    }
  77.  
  78. }
  79.  
  80. /*
  81.  * Funcion que revisa si la pila esta llena
  82.  */
  83.  
  84. template <class T>
  85. bool Pila<T>::isFull(){
  86.  
  87.    if(top == tam){
  88.  
  89.        return true;
  90.  
  91.    }
  92.  
  93. }
  94.  
  95.  
15  Programación / Programación C/C++ / Ayuda con punteros (en C++) (Actualizacion constante con nuevas preguntas) en: 17 Septiembre 2013, 03:24 am
Bueno, soy novato, espero que me puedan ayudar.

Estoy haciendo algunos ejercicios con punteros, cree una clase llamado "Auto" cuyos atributos son la marca, su patente (matricula) y el kilometraje, y en el main hice lo siguiente, cree 2 autos con asignacion automatica y 1 de forma dinamica, pero al momento de que se deben destruir al final del programa, me sale "RUN FAILED", ¿ a que se debera ?, yo en el destructor implemente de tal manera que informe de que se esta destruyendo el objeto.

Les dejo el codigo. Es probable que use este mismo tema para hacer consultas, mi proximo objetivo es practicar con listas enlazadas, ya tengo experiencia pero en Java, pero ahora quiero practicar con punteros.

NOTA 1: Cuando vean el codigo cuando el puntero auto3 apunta a auto2, ¿que sucede con los datos donde apuntaba auto3? , ¿ quedan para siempre en la memoria (a no ser que se reinicie) y tengo que usar delete ?

NOTA 2: Si tengo algun error o tienen una sugerencia, estaria agradecido que me lo dijeran.

Código:
Datos del auto 1

Marca:
Patente:
Kilometraje: 0

Datos del auto 2

Marca: Chevrolet
Patente: ASDF
Kilometraje: 300

Datos del auto3

Marca: Nissan
Patente: QWERT
Kilometraje: 500

Las direcciones de memoria de los autos son:

La direccion de memoria de auto 1 es: 0x22abe8
La direccion de memoria de auto 2 es: 0x22abd0
La direccion de memoria de auto 3 es: 0x22abcc

Ahora, auto3 va a apuntar a la direccion de auto2

La direccion de memoria de auto 3 es: 0x22abd0
La marca es: Chevrolet

Ahora, auto3 va a apuntar a la direccion de auto1

La direccion de memoria de auto 3 es: 0x22abe8
La marca es:


RUN FAILED (exit value 1,, total time: 734ms)




Código
  1. #include "Auto.h"
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Auto::Auto() {
  8.  
  9.    marca = "";
  10.    patente = "";
  11.    kilometraje = 0;
  12.  
  13. }
  14.  
  15. Auto::Auto(string m, string p, double k){
  16.  
  17.    marca = m;
  18.    patente = p;
  19.    kilometraje = k;
  20.  
  21. }
  22.  
  23. Auto::Auto(const Auto& orig) {
  24. }
  25.  
  26. Auto::~Auto() {
  27.  
  28.    cout <<"\nDestruyendo el auto ...";
  29.  
  30. }
  31.  
  32. string Auto::getMarca(){
  33.  
  34.    return marca;
  35.  
  36. }
  37.  
  38. string Auto::getPatente(){
  39.  
  40.    return patente;
  41.  
  42. }
  43.  
  44. double Auto::getKilometraje(){
  45.  
  46.    return kilometraje;
  47.  
  48. }
  49.  
  50.  

Código
  1. #ifndef AUTO_H
  2. #define AUTO_H
  3. #include <string>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. class Auto {
  9. public:
  10.    Auto();
  11.    Auto(string m, string p, double k);
  12.    Auto(const Auto& orig);
  13.    virtual ~Auto();
  14.    string getMarca();
  15.    string getPatente();
  16.    double getKilometraje();
  17. private:
  18.    string marca;
  19.    string patente;
  20.    double kilometraje;
  21. };
  22.  
  23. #endif /* AUTO_H */
  24.  
  25.  

Código
  1. #include <cstdlib>
  2. #include "Auto.h"
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char** argv) {
  8.  
  9.    Auto auto1;
  10.    Auto auto2("Chevrolet","ASDF",300);
  11.    Auto *auto3 = new Auto("Nissan","QWERT",500);
  12.  
  13.    cout <<"Datos del auto 1\n";
  14.    cout <<"\nMarca: " << auto1.getMarca();
  15.    cout <<"\nPatente: " << auto1.getPatente();
  16.    cout <<"\nKilometraje: " << auto1.getKilometraje();
  17.    cout <<"\n\n";
  18.  
  19.    cout <<"Datos del auto 2\n";
  20.    cout <<"\nMarca: " << auto2.getMarca();
  21.    cout <<"\nPatente: " << auto2.getPatente();
  22.    cout <<"\nKilometraje: " << auto2.getKilometraje();
  23.    cout <<"\n\n";
  24.  
  25.    cout <<"Datos del auto3\n";
  26.    cout <<"\nMarca: " << auto3->getMarca();
  27.    cout <<"\nPatente: " << auto3->getPatente();
  28.    cout <<"\nKilometraje: " <<auto3->getKilometraje();
  29.  
  30.    cout <<"\n\nLas direcciones de memoria de los autos son:\n";
  31.    cout <<"\nLa direccion de memoria de auto 1 es: " << &auto1;
  32.    cout <<"\nLa direccion de memoria de auto 2 es: " << &auto2;
  33.    cout <<"\nLa direccion de memoria de auto 3 es: " << &auto3;
  34.  
  35.    cout <<"\n\nAhora, auto3 va a apuntar a la direccion de auto2\n";
  36.    auto3 = &auto2;
  37.    cout <<"\nLa direccion de memoria de auto 3 es: "<< auto3;
  38.    cout <<"\nLa marca es: "<< auto3->getMarca();
  39.  
  40.    cout <<"\n\nAhora, auto3 va a apuntar a la direccion de auto1\n";
  41.    auto3 = &auto1;
  42.    cout <<"\nLa direccion de memoria de auto 3 es: "<< auto3;
  43.    cout <<"\nLa marca es: "<< auto3->getMarca();
  44.    cout <<"\n";
  45.  
  46.    delete auto3;
  47.  
  48.    return 0;
  49.  
  50. }
  51.  
  52.  
16  Programación / Programación C/C++ / Problema al crear arreglos de objetos en C++ en: 15 Septiembre 2013, 12:45 pm
Primero que nada, soy novato en C++, espero poder surgir con la ayuda :D

Bueno, resulta que estoy practicando lo que he aprendido en C++, aun tengo que dominar los punteros y la asignacion dinamica. Tambien en la creacion de arreglos, donde les explicare mi problema.

Cree una clase llamada "Persona", que tiene como atributos su nombre, su rut (en mi pais se refiere al numero de identificacion) y la edad.

Yo quiero crear un arreglo de personas, desde el main creo 3 personas y ademas, llamo a un metodo para que imprima los datos de cada persona, me funciona, pero no exactamente como queria, en el destructor yo implemente de tal manera que imprimiera un mensaje que confirmara que se esta borrando cada vez que se usa delete, es aqui donde sale mi problema, una vez que llene mi arreglo con personas, mando el arreglo a la funcion "desplegarDatos" para que imprimiera los datos de cada persona, pero me sale lo que escribi en el destructor justo al llamar a imprimir el arreglo, y ya cuando termino de imprimir, vuelve a imprimir el mensaje del destructor

¿ por que se imprimio al principio "borrando datos..." si no llame a delete, si el delete lo llamo cuando terminara de imprimir ?

Esto es lo que me sale en la ventana de comandos

Código:
Creando un arreglo de 3 personas
Borrando datos ...
Borrando datos ... // ¿ Por que sale esto al principio cuando deberia ser al final ?
Borrando datos ...

Desplegando datos de las personas


Nombre: Rodrigo
Rut: 132-K
Edad: 23

Nombre: Francisco
Rut: 342-L
Edad: 20

Nombre: Samuel
Rut: 345-P
Edad: 21

Borrando datos ...
Borrando datos ...
Borrando datos ...
RUN SUCCESSFUL (total time: 703ms)

Ahora lees dejo mi codigo

Código
  1. #include "Persona.h"
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Persona::Persona(string n, string r, int e) {
  8.  
  9.    nombre = n;
  10.    rut = r;
  11.    edad = e;
  12.  
  13. }
  14.  
  15. Persona::Persona(const Persona& orig) {
  16. }
  17.  
  18. Persona::Persona(){
  19.  
  20. }
  21.  
  22. Persona::~Persona() {
  23.  
  24.    cout <<"\nBorrando datos ...";
  25.  
  26. }
  27.  
  28. string Persona::getNombre(){
  29.  
  30.    return nombre;
  31.  
  32. }
  33.  
  34. string Persona::getRut(){
  35.  
  36.    return rut;
  37.  
  38. }
  39.  
  40. int Persona::getEdad(){
  41.  
  42.    return edad;
  43.  
  44. }
  45.  
  46.  

Código
  1. #ifndef PERSONA_H
  2. #define PERSONA_H
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. class Persona {
  8. public:
  9.    Persona(string nom, string r, int e);
  10.    Persona();
  11.    Persona(const Persona& orig);
  12.    virtual ~Persona();
  13.    string getNombre();
  14.    string getRut();
  15.    int getEdad();
  16. private:
  17.    string nombre;
  18.    string rut;
  19.    int edad;
  20. };
  21.  
  22. #endif /* PERSONA_H */
  23.  
  24.  

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "Persona.h"
  4.  
  5. using namespace std;
  6.  
  7. void desplegarDatos(Persona *arreglo){
  8.  
  9.    cout <<"\n\nDesplegando datos de las personas\n\n";
  10.  
  11.    for(int i=0; i<3; i++){
  12.  
  13.        cout <<"\nNombre: " << arreglo[i].getNombre();
  14.        cout <<"\nRut: " << arreglo[i].getRut();
  15.        cout <<"\nEdad: " << arreglo[i].getEdad();
  16.        cout <<"\n";
  17.  
  18.    }
  19.  
  20. }
  21.  
  22. int main(int argc, char** argv) {
  23.  
  24.    cout <<"Creando un arreglo de 3 personas";
  25.  
  26.    Persona *personas = new Persona[3];
  27.  
  28.    personas[0] = Persona("Rodrigo","132-K",23);
  29.    personas[1] = Persona("Francisco","342-L",20);
  30.    personas[2] = Persona("Samuel","345-P",21);
  31.  
  32.    desplegarDatos(personas);
  33.  
  34.    delete []personas;
  35.  
  36.    return 0;
  37. }
  38.  
  39.  
17  Programación / Programación C/C++ / Como enviar un fichero como parametro en C++ en: 1 Septiembre 2013, 05:58 am
Hola gente, soy novato en C++, me gustaría que me pudieran ayudar a como mandar por parametro un fichero que abro desde el main.
Lo que quiero es abrir el fichero desde el main, primero comprobar si todo marcha bien, si el fichero no se abrio, el programa avisa que fallo, de lo contrario, manda como parametro a una funcion que se encargara de leer el fichero dentro de un ciclo infinito hasta que no haya mas que extraer del archivo. El fichero tiene este formato

palabra1,palabra2,palabra3,..................................,palabraN

y quiero imprimir cada palabra x cada linea, por eso use getline(fichero,palabra,',');

Pero me salio un error gigante y no pudo funcionar como queria

Les dejo el codigo, estoy usando NetBeans 7.3

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. void leerFichero(ifstream fichero){
  9.  
  10.    string palabra;
  11.  
  12.    while(!fichero.eof()){
  13.  
  14.        getline(fichero,palabra,',');
  15.        cout <<palabra;
  16.  
  17.    }
  18.  
  19. }
  20.  
  21. int main(int argc, char** argv) {
  22.  
  23.    ifstream fichero("personal.txt");
  24.  
  25.    if(fichero.is_open()){
  26.  
  27.        leerFichero(fichero);
  28.  
  29.    }else{
  30.  
  31.        cout <<"\nNo se pudo abrir el fichero";
  32.  
  33.    }
  34.  
  35.    return 0;
  36. }
  37.  
  38.  
18  Foros Generales / Foro Libre / ¿ Son importantes las matemáticas en el hacking ? en: 14 Agosto 2013, 06:41 am
La pregunta es clara.

¿ Que tan importante son las matematicas en el hacking ?

Unos me dicen que es ideal para la criptografía, pero, ¿ que otros usos más tienen ?

Por ejemplo, quiero citar algunas matemáticas para que me ayuden en que se usan, supongo que muchos son expertos en el area, espero que me ayuden porfavor.

- Algebra Lineal

- Calculo

- Probabilidades y estadística

- Lenguajes formales

- [[Ingrese otra aquí]]

19  Programación / Java / ¿ Como puedo hacer esto en mi videojuego ? (Mario) en: 3 Agosto 2013, 13:40 pm
Estoy creando un juego que simula el Mario World, lo hice por medio de clases (por el momento no quiero poner el codigo todavia), el programa consta de una clase que se llama Mario (el jugador), otra que se llama Control que hereda de un JFrame, es aqui donde se implementa el control por teclado y el menu, y tambien una superclase Escenario que hereda de JPanel y dentro de cada Escenario tiene un wallpaper y "agrega" objetos de la clase Tile (que contiene un sprite y un booleano que indica si es solido o no, para que Mario camine).

Bueno, el problema es lo siguiente, yo implemente en la clase Control un Timer que llama a actionPerformed cada 1 segundo, la razon de esto es para que funcione el cronometro del juego, pero el problema es que cuando llamo a repaint para que actualice, la pantalla "pestañea", y aun no encuentro la solucion, se ve realmente molesto para la vista estar jugando mientras la pantalla pestañea.

Tambien tengo otra duda ¿Como podria "correr" la pantalla cada vez que Mario avanza hacia adelante ? Por que "mas al fondo" cree unas montañas pero no se como correr la vista hacia las montañas.

Aqui una imagen del juego, aun tengo que corregir el sprite de mario

20  Programación / Programación C/C++ / ¿ Programar en C en Nintendo, Super Nintendo y Nintendo 64 ? en: 3 Agosto 2013, 02:08 am
Hola, viendo que muchos son expertos en el area, me gustaría que me ayudaran, lo que pasa es que yo he programado en C, se lo relacionado a la programación estructurada, uso de punteros, direccion de memoria, etc, pero ahora quiero dar un paso hacia adelante, me gustaría programar en esas consolas de Nintendo, como la NES, SNES y Nintendo 64, estuve investigando y en NES y SNES se usa lenguaje Ensamblador dependiendo de la arquitectura de la consola, pero el año pasado encontre un blog de que existe una libreria para programar en C para el NES y SNES, pero lamentablemente se me perdio ese blog, por eso, si hay un experto o lo haya hecho antes, me gustaría que me guiaran por donde empezar y aprender.
Páginas: 1 [2] 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines