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
1  Programación / Programación C/C++ / Ayuda con esta función en C en: 4 Abril 2020, 18:07 pm
Esta función me da error al abrir el fichero y no entiendo muy bien por qué, si alguien me puede ayudar un poco se lo agradecería eternamente :p
Código
  1. /*
  2.  * función base de los consumidores
  3.  * - cada consumidor va volcando línea a línea el contenido del buffer
  4.  *   en el fichero cuyo nombre se le pasa como parámetro
  5.  */
  6. void *consumidor(void *arg)
  7. {
  8.    int fin = 0;
  9.    char *s = arg, *b;
  10.    pthread_t id;
  11.    FILE *f;
  12.  
  13.    f = fopen(s, "w");
  14.  
  15.    if (f == NULL)
  16.    {
  17.        perror("Error abriendo fichero.\n");
  18.        exit(1);
  19.    }
  20.  
  21.    id = pthread_self();
  22.  
  23.   while(fin != 1)
  24.   {
  25.       if (buf_vacio(buf))
  26.       {
  27.           pthread_cond_wait(&cond_prod, &mtx);
  28.       }
  29.       else if (buf_vacio(buf) && terminar == 1)
  30.       {
  31.           fin = 1;
  32.       }
  33.       else
  34.       {
  35.          b = buf_quitar(buf);
  36.          fputs(b, f);
  37.          pthread_cond_wait(&cond_prod, &mtx);
  38.    }
  39.   }
  40.  
  41.   fclose(f);
  42.   printf("Consumidor %lu: fichero de salida: '%s'.\n", id, (char *) s);
  43.  
  44.    return (void *) 1;
  45. }
2  Programación / Programación C/C++ / Segmentation Fault ayuda en: 22 Marzo 2020, 17:24 pm
Buenas, antes de nada pedir perdón por el tocho de código. Tengo que arreglar un segmentation fault en mi programa pero no veo el error. Teóricamente el archivo que contiene el main no se puede modificar, pero creo que el error viene dado por acceder a un std::vector. También sospecho de la función asignValores(), pero no sé por qué podría fallar. Estos son los archivos implicados (acepto cualquier consejo a parte de el propio error).

Persona.h
Código:
#ifndef persona_H
#define persona_H
#include <iostream>
#include <string>
using namespace std;
class Persona
{
public:
Persona();
bool asignarValores(string, string, string, char, int, int, int);
bool setID(string);
bool setApellidos(string);
bool setNombre(string);
bool setSexo(char);
bool setEdad(int);
bool setEstatura(int);
bool setPeso(int);
string getID();
string getApellidos();
string getNombre();
char getSexo();
int getEdad();
int getEstatura();
int getPeso();
bool validarSexo(char);
bool validarEdad(int);
bool validarEstatura(int);
bool validarPeso(int);
friend ostream& operator<<(ostream&, Persona);

private:
string id;
string apellidos;
string nombre;
char sexo;
int edad;
int estatura;
int peso;

};
 
#endif

Persona.cpp
Código:
#include "persona.h"
#include <string>
Persona::Persona()
{
setID("Desconocido");
setApellidos("Desconocido");
setNombre("Desconocido");
setSexo('0');
setEdad(0);
setEstatura(0);
setPeso(0);
}

bool Persona :: asignarValores(string nid, string ap, string nom, char s, int e, int h, int w)
{
bool ok = false;

setID(nid);
setApellidos(ap);
setNombre(nom);
setSexo(s);
setEdad(e);
setEstatura(h);
setPeso(w);
ok = true;


return ok;
}

bool Persona :: setID(string nid)
{
id = nid;
return true;
}

bool Persona :: setApellidos(string ap)
{
apellidos = ap;
return true;
}

bool Persona :: setNombre(string nom)
{
nombre = nom;
return true;
}

bool Persona :: setSexo(char s)
{
bool ok = false;

if (validarSexo(s))
{
sexo = s;
ok = true;
}

return ok;
}

bool Persona :: setEdad(int e)
{
bool ok = false;

if(validarEdad(e))
{
edad = e;
ok = true;
}

return ok;
}

bool Persona :: setEstatura(int h)
{
bool ok = false;

if(validarEstatura(h))
{
estatura = h;
ok = true;
}

return ok;
}

bool Persona :: setPeso(int w)
{
bool ok = false;

if(validarPeso(w))
{
peso = w;
ok = true;
}

return ok;
}

string Persona :: getID()
{
return id;
}

string Persona :: getApellidos()
{
return apellidos;
}

string Persona :: getNombre()
{
return nombre;
}

char Persona :: getSexo()
{
return sexo;
}

int Persona :: getEdad()
{
return edad;
}

int Persona :: getEstatura()
{
return estatura;
}

int Persona :: getPeso()
{
return peso;
}

bool Persona :: validarSexo(char s)
{
bool ok = false;

if(s == 'M' || s == 'H' || s == 'O')
ok = true;

return ok;
}

bool Persona :: validarEdad(int e)
{
bool ok = false;

if(e >= 15 && e <= 100)
ok = true;

return ok;
}

bool Persona :: validarEstatura(int h)
{
bool ok = false;

if(h >= 30 && h <= 250)
ok = true;

return ok;
}

bool Persona :: validarPeso(int w)
{
bool ok = false;

if(w >= 25 && w <= 300)
ok = true;

return ok;
}

ostream& operator<<(ostream& out, Persona p)
{
out << p.getID() << ";";
out << p.getApellidos() << ";";
out << p.getNombre() << ";";
out << p.getSexo() << ";";
out << p.getEdad() << ";";
out << p.getEstatura() << ";";
out << p.getPeso() << endl << endl;

return out;
}

Estudiante.h
Código:
#ifndef estudiante_H
#define estudiante_H
#include <iostream>
#include <string>
#include "persona.h"
using namespace std;

class Estudiante: public Persona
{
public:
Estudiante();
bool asignarValores(string, string, string, char, int, int, int, string, int);
bool setTitulacion(string);
bool setCurso(int);
bool setID(string);
string getTitulacion();
int getCurso();
friend ostream& operator<<(ostream&, Estudiante);

private:
string titulacion;
int curso;
bool validarID(string);
bool validarCurso(int);
};

#endif

Estudiante.cpp
Código:
#include "persona.h"
#include "estudiante.h"
#include <string>

Estudiante :: Estudiante()
{
setID("Desconocido");
setApellidos("Desconocido");
setNombre("Desconocido");
setSexo('0');
setEdad(0);
setEstatura(0);
setPeso(0);
setTitulacion("Desconocido");
setCurso(0);
}

bool Estudiante :: asignarValores (string id2, string ap, string nom, char s, int a, int h, int w, string tit, int c)
{
bool ok = false;

setID(id2);
setApellidos(ap);
setNombre(nom);
setSexo(s);
setEdad(a);
setEstatura(h);
setPeso(w);
setTitulacion(tit);
setCurso(c);
ok = true;

return ok;
}

bool Estudiante :: setTitulacion(string tit)
{
titulacion = tit;

return true;
}

bool Estudiante :: setCurso(int c)
{
bool ok = false;

if (validarCurso(c))
{
setCurso(c);
ok = true;
}

return ok;
}

bool Estudiante :: setID(string id2)
{
bool ok = false;

if (validarID(id2))
{
Persona::setID(id2);
ok = true;
}

return ok;
}

string Estudiante :: getTitulacion()
{
return titulacion;
}

int Estudiante :: getCurso()
{
return curso;
}

ostream& operator<<(ostream& out, Estudiante e)
{
out << e.getID() << ";";
out << e.getApellidos() << ";";
out << e.getNombre() << ";";
out << e.getSexo() << ";";
out << e.getEdad() << ";";
out << e.getEstatura() << ";";
out << e.getPeso() << ";";
out << e.getTitulacion() << ";" << e.getCurso() << endl << endl;

return out;
}

bool Estudiante :: validarID(string id2)
{
bool ok = false;

if (id2[0] >= 'A' && id2[0] <= 'Z' && id2[1] >= 'A' && id2[1] <= 'Z')
ok = true;

return ok;
}

bool Estudiante :: validarCurso(int c)
{
bool ok = false;

if(c <= 4 && c >= 1)
ok = true;

return ok;
}

main.cpp
Código:
#include <iostream>
#include <fstream>
#include <vector>
#include "estudiante.h"

using namespace std;

/*
 * Prototipos de las funciones empleadas,
 * implementadas despues de main()
 */
string ExtraerToken(string&);
bool StrToestudiante (string, Estudiante&);
vector<Estudiante> LeerFichero(string);
Estudiante MasAlto (vector<Estudiante>);
Estudiante MasBajo (vector<Estudiante>);
Estudiante MasJoven (vector<Estudiante>);
Estudiante MasViejo (vector<Estudiante>);
unsigned int NumEstudiantesCurso (vector<Estudiante>, int c);

/*
 * Programa principal
 */
int main ()
{
    const string NOMBRE = "personal.dat"; //Nombre del archivo de datos
    vector<Estudiante> misestudiantes; //Vector para almacenar estudiantes leidos
   
    cout << endl << "Leyendo archivo ... ";
    misestudiantes = LeerFichero(NOMBRE);
    cout << "Fin." << endl;
    cout << endl;
    cout << "*** Num. estudiantes correctamente leidos: " << misestudiantes.size() << " ***" << endl;
    cout << endl;
    cout << "1. Estudiante mas ALTO:" << endl;
cout << MasAlto(misestudiantes) << endl;
    cout << endl;
cout << "2. Estudiante mas BAJO:" << endl;
cout << MasBajo(misestudiantes) << endl;
    cout << endl;
    cout << "3. Estudiante mas JOVEN:" << endl;
cout << MasJoven(misestudiantes) << endl;
    cout << endl;
    cout << "4. Estudiante mas VIEJO:" << endl;
cout << MasViejo(misestudiantes) << endl;
    cout << endl;
cout << "5. Estudiantes por curso:" << endl;
for (unsigned int i = 1; i <= 4; i++)
cout << "\tCurso " << i << " = " << NumEstudiantesCurso(misestudiantes,i) << endl;

return 0;
}

/**********************************************************************/ /**
 *
 *  Extraer 1 token de información de la cadena separada por ';'
 *  El token es eliminado de la cadena de entrada
 *
 *  @param [in,out]  s  Cadena de datos
 *
 *  @return  string con el token extraido
 *
 */ /**********************************************************************/
string ExtraerToken(string & s)
{
    string res="";
    size_t pos;
   
    pos = s.find(";");
    if ( pos != string::npos )
    {
        res = s.substr(0,pos);
        s.erase(0,pos+1);
    }
    else
    {
        res = s;
        s = "";
    }
       
    return res;
}

/**********************************************************************/ /**
 *
 *  Asignar valores a un objeto Estudiante a partir de
 *  una línea de texto con datos separados por ';'
 *
 *  @param [in]  texto  Linea de texto
 *  @param [in,out]  est  Estudiante modificado
 *
 *  @retval  true   Ha sido posible asignar correctamente valores.
 *  @retval  false  No ha sido posible asignar correctamente valores.
 *
 */ /**********************************************************************/
bool StrToEstudiante (string texto, Estudiante& est)
{
    string dato;
    unsigned int campo;
    string id, a, n;
    char s;
    int e, h, w;
    string tit;
    int curs;
    bool ok = true;
   
    campo = 0;
    while ( ok && campo < 9 )
    {
        dato = ExtraerToken(texto);
        if ( dato.length() != 0 )
        {
            switch ( campo )
            {
                case 0: id = dato; break;
                case 1: a = dato; break;
                case 2: n = dato; break;
                case 3: s = dato[0]; break;
                case 4: e = stoi(dato); break;
                case 5: h = stoi(dato); break;
                case 6: w = stoi(dato); break;
                case 7: tit = dato; break;
                case 8:
                curs = stoi(dato);
                ok = est.asignarValores(id,a,n,s,e,h,w,tit,curs);
                break;
            }
            campo++;
        }
        else
            ok = false;
    }
    return ok;
}

/**********************************************************************/ /**
 *
 *  Leer fichero de datos, devuelve vector de Estudiantes
 *
 *  @param [in]  nom  Nombre del fichero
 *
 *  @return  vector de Estudiantes
 *
 */ /**********************************************************************/
vector<Estudiante> LeerFichero(string nom)
{
    ifstream fich_in;
    vector<Estudiante> v;
    string linea;
   
    fich_in.open (nom);
   
    if (fich_in)
    {
        while ( getline(fich_in, linea) )
        {
            Estudiante e;
            if ( StrToEstudiante(linea,e) )
                v.push_back(e);
        }
           
        fich_in.close ();
    }
    else
    cerr << "LeerFichero: Error al abrir el archivo de datos." << endl;

    return v;
}

/**********************************************************************/ /**
 *
 *  Determina el estudiante más alto de un vector de Estudiantes
 *
 *  @param [in]  v  Vector de Estudiantes
 *
 *  @return  Estudiante de mayor estatura (el primero del vector)
 *
 */ /**********************************************************************/
Estudiante MasAlto (vector<Estudiante> v)
{
unsigned int max;
Estudiante e;
if ( v.size() > 0 )
{
max = 0;
for (unsigned int i=0; i < v.size(); i++)
if (v[i].getEstatura() > v[max].getEstatura())
max = i;
e = v[max];
}
return e;
}

/**********************************************************************/ /**
 *
 *  Determina el estudiante más bajo de un vector de Estudiantes
 *
 *  @param [in]  v  Vector de Estudiantes
 *
 *  @return  Estudiante de menor estatura (el primero del vector)
 *
 */ /**********************************************************************/
Estudiante MasBajo (vector<Estudiante> v)
{
unsigned int min;
Estudiante e;
if ( v.size() > 0 )
{
min = 0;
for (unsigned int i=0; i < v.size(); i++)
if (v[i].getEstatura() < v[min].getEstatura())
min = i;
e = v[min];
}
return e;
}

/**********************************************************************/ /**
 *
 *  Determina el estudiante más joven de un vector de Estudiantes
 *
 *  @param [in]  v  Vector de Estudiantes
 *
 *  @return  Estudiante de menor edad (el primero del vector)
 *
 */ /**********************************************************************/
Estudiante MasJoven (vector<Estudiante> v)
{
unsigned int min;
Estudiante e;
if ( v.size() > 0 )
{
min = 0;
for (unsigned int i=0; i < v.size(); i++)
if (v[i].getEdad() < v[min].getEdad())
min = i;
e = v[min];
}
return e;
}

/**********************************************************************/ /**
 *
 *  Determina el estudiante más viejo de un vector de Estudiantes
 *
 *  @param [in]  v  Vector de Estudiantes
 *
 *  @return  Estudiante de mayor edad (el primero del vector)
 *
 */ /**********************************************************************/
Estudiante MasViejo (vector<Estudiante> v)
{
unsigned int max;
Estudiante e;
if ( v.size() > 0 )
{
max = 0;
for (unsigned int i=0; i < v.size(); i++)
if (v[i].getEdad() > v[max].getEdad())
max = i;
e = v[max];
}
return e;
}

/**********************************************************************/ /**
 *
 *  Determina el nº de estudiantes de un curso de un vector de Estudiantes
 *
 *  @param [in]  v  Vector de Estudiantes
 *  @param [in]  c  Curso a buscar
 *
 *  @return  número de estudiantes en el curso c
 *
 */ /**********************************************************************/
unsigned int NumEstudiantesCurso (vector<Estudiante> v, int c)
{
unsigned int num = 0;

for (unsigned int i=0; i < v.size(); i++)
if ( v[i].getCurso() == c )
num++;
return num;
}
3  Programación / Programación C/C++ / Clase pila estática en: 29 Octubre 2019, 12:46 pm
Buenas, necesito implementar una clase pila estática, aunque la pila ne sí no es un array, sino un puntero a un array de enteros. El problema es que no sé cómo implementar la función copiar. Tengo un constructor de copia declarado como : Pila(const Pila&), y una sobrecarga del = tal que así const Pila& operator= (const Pila&);

Entonces, la cabecera de la función copiar debería de ser void Copiar(const Pila &), pero al intentar utilizar = para asignar las posiciones de la pila que le paso por referencia a otra y así realizar la copia me dice que al ser const no lo puede modificar (obviamente, pero es que solo estoy leyendo, no he cambiado nada). Luego viene el problema de que no puedo desapilar sobre la que paso por referencia, menudo lío llevo xD:

También me gustaría que alguien me explicara la recursividad con un ejemplo que no fuera el factorial xD. Tengo que implementar de manera recursiva una función que devuelva el tamaño de la pila, pero solo le paso por argumento una pila, no lo entiendo. Lo único que se me ocurre es poner en el caso base i = 0, y en el caso recursivo después de cada llamada a la función i++, pero no sé si funcionaría como en prolog.
4  Programación / Programación C/C++ / Colocar una expresión aritmética en un vector en: 15 Abril 2019, 15:06 pm
Buenas, ya tengo arreglado el código de las notaciones, pero revisando el resto del programa, me he dado cuenta de que hice una cosa mal. Mi intención era guardar en un vector cada elemento de una expresión aritmética, pero lo que estaba haciendo en realidad era guardar toda la expresión en un elemento:

Código:
void Expresion :: SetExp (string x)
{
    infija.push_back(x); // infija es un vector de la clase Expresion
}

Lo que yo había pensado era recorrer el string x carácter a carácter con un bucle, pero eso tiene un inconveniente, y es que para números mayores de una cifra estaría mal el algoritmo. Entonces, tengo esto:

Código:
void Expresion :: SetExp (string x)
{
    unsigned int i, j = 0;
    for (i = 0; x[i] < x.length(); i++)
    {
         while (isdigit(c[j]))
         {
              /* aquí hacer algo de tal forma que se guarden todos los numeros, que es lo
               que vengo a preguntar. Se me ha ocurrido crear una string vacía e ir
               guardando los numeros ahí para al salir del bucle while almacenarlo en el
               vector, pero no sé cómo hacerlo realmente. Ahora que pienso esto necesitaría
               además, antes del while, un if con la misma condición para realizar el
               guardado correctamente. Como véis tengo una idea más o menos clara pero
               no lo sé implementar*/
         }
         j = 0;
         infija.push_back[x[i]]
5  Programación / Programación C/C++ / Ayuda con la conversión de notación infija a postfija en: 14 Abril 2019, 19:36 pm
Buenas, tengo un código que supuestamente pasa una expresión aritmética escrita con notación infija a postfija, pero la realidad es que no hace nada, o eso parece:

Código:
void Expresion :: ConvertirEnPostfija ()
{
    Pila p;
   
    string chara, aux;
   
    for (unsigned int i = 0; i < infija.size(); i++)
    {
       
        chara = infija[i];
       
        if (chara == "(")
        {
            p.Apilar(chara); 
}

else
if (chara == ")")
{
p.CimaPila(aux);
while (!(p.PilaVacia() && aux == "("))
        {
        p.Desapilar();
        postfija.push_back(aux);
        p.CimaPila(aux);
}

if (aux == "(")
   p.Desapilar();
   
else
cerr << "ERROR";     
}

else
if (chara == "+" || chara == "-" || chara == "*" || chara == "/" || chara == ")")
{
p.CimaPila(aux);

while (!p.PilaVacia() && !(chara == "(" && aux >= chara))
{
p.Desapilar();
postfija.push_back(aux);
p.CimaPila(aux);
}

p.Apilar(chara);
}

else
   postfija.push_back(chara);
     
while (!p.PilaVacia())
    {
          p.CimaPila(aux);
p.Desapilar();
postfija.push_back(aux);   
    }
    }
     
    return;
}

También necesito ayuda para que deje introducir la expresión con espacios en blanco, ya que usando "cin" salta al último caso del switch en el main, pero el getline me da error.
Código:
switch (opcion) 
{

case 1:
cin >> aritmetica;
exp.PonerExpresion(aritmetica); 
break;


/*Mas opciones que no vienen al caso*/

case 0:
cout << "fin del programa." // salta directamente aquí
break;

default:
            cout << "Opcion no valida" << endl;
}
6  Programación / Programación C/C++ / Me ayudais con esta funcion? en: 9 Enero 2019, 19:24 pm
Buenas, se supone que esta funcion tiene que mostrar los libros de una struct entre dos fechas introducidas por el usuario:

Código
  1. void MostrarLibrosFechas (Libros libros)
  2.    {
  3.        Fecha fm, fM;
  4.        Libro lib;
  5.        int i = 1;
  6.  
  7.        cout << "Escribe la fecha menor: " << endl << endl;
  8.  
  9.        fm = PedirFecha ();
  10.  
  11.        cout << "Escribe la fecha mayor: " << endl << endl;
  12.  
  13.        fM = PedirFecha ();
  14.  
  15.        for (int j = 0; j <= libros.num; j++)
  16.        {
  17.            if (fm.anyo >= libros.vect[j].fecha.anyo && fM.anyo <= libros.vect[j].fecha.anyo)
  18.            {
  19.            cout << "Libro " << i << " : " << endl << endl;
  20.                lib = libros.vect[j];
  21.                MostrarLibro (lib);
  22.  
  23.                i++;
  24.            }
  25.  
  26.            else if (fm.anyo == libros.vect[j].fecha.anyo)
  27.            {
  28.                if (fm.mes >= libros.vect[j].fecha.mes)
  29.                {
  30.                    cout << "Libro " << i << " : " << endl << endl;
  31.                    lib = libros.vect[j];
  32.                    MostrarLibro (lib);
  33.  
  34.                    i++;
  35.                }
  36.  
  37.                else if (fm.mes == libros.vect[j].fecha.mes)
  38.                {
  39.                    if (fm.dia >= libros.vect[j].fecha.dia)
  40.                    {
  41.                    cout << "Libro " << i << " : " << endl << endl;
  42.                        lib = libros.vect[j];
  43.                        MostrarLibro (lib);
  44.  
  45.                        i++;
  46.                    }
  47.                }
  48.            }
  49.  
  50.            else if (fM.anyo == libros.vect[j].fecha.anyo)
  51.            {
  52.                if (fM.mes <= libros.vect[j].fecha.mes)
  53.                {
  54.                        cout << "Libro " << i << " : " << endl << endl;
  55.                        lib = libros.vect[j];
  56.                        MostrarLibro (lib);
  57.  
  58.                        i++;
  59.                }
  60.  
  61.                else if (fM.mes == libros.vect[j].fecha.mes)
  62.                {
  63.                    if (fM.dia <= libros.vect[j].fecha.dia)
  64.                    {
  65.                    cout << "Libro " << i << " : " << endl << endl;
  66.                        lib = libros.vect[j];
  67.                        MostrarLibro (lib);
  68.  
  69.                        i++;
  70.                    }
  71.                }
  72.            }
  73.     }
  74.  
  75.     return;
  76. }
  77.  

Por si alguien lo quiere ver, los struct son:

Código
  1. struct Fecha
  2. {
  3.    int dia,mes,anyo;
  4.    };
  5.  
  6. struct Libro
  7. {
  8. Fecha fecha;
  9.    string titulo, autor;
  10.    float precio;
  11.    };
  12.  
  13.    const string NOM_FICH="PracticaFinal_opcion1.libros.dat";
  14.    const int MAX=2000;
  15.    typedef Libro VecLibros[MAX];
  16.  
  17.    struct Libros
  18. {
  19.    int num;
  20.    VecLibros vect;
  21.    };
  22.  

La funcion PedirFecha()

Código:
Fecha PedirFecha ()
    {
        Fecha fecha;
        
        cout << " Dia: ";
        cin >> fecha.dia;
        cout << endl;
        cout << " Mes: ";
        cin >> fecha.mes;
        cout << endl;
        cout << " Anyo: ";
        cin >> fecha.anyo;
        cout << endl;
        
        return fecha;
    }

Y por ultimo la funcion MostrarLibro:

Código:
void MostrarLibro (Libro libro)
{
     cout << "  Titulo del libro:";
        cout << libro.titulo;
        cout << endl;
        cout << "  Nombre del autor:";
        cout << libro.autor;
        cout << endl;
        cout << "  Precio de adquisicion:";
        cout << libro.precio;
        cout << endl;
        cout << "    Dia de compra:";
        cout << libro.fecha.dia;
        cout << endl;
        cout << "    Mes de compra:";
        cout << libro.fecha.mes;
        cout << endl;
        cout << "    Anyo de compra:";
        cout << libro.fecha.anyo << endl << endl;
        
        return;
    }
7  Programación / Programación C/C++ / ¿Cómo leo datos de un fichero para guardarlos en un vector? en: 2 Enero 2019, 20:12 pm
Buenas, tengo un vector de tipo "struct", y necesito leer un fichero y que me guarde los datos en un vector. Asumo que tiene que ser algo de este estilo:

Código:
        Libro libro; //es mi struct
string nom_fichero = PracticaFinal_opcion1.libros.dat;

ifstream f;

f.open(nom_fichero);

if (f)
{
while (f >> ??) // el "??" indica que no sé que poner para que lea hasta el fin del fichero. NO PUEDO USAR .eof //
{
//aquí irían la propia lectura
}
}

Gracias :D
8  Programación / Programación C/C++ / Guardar una frase en los elementos de un vector en: 8 Diciembre 2018, 17:39 pm
Buenas, debo de realizar este ejercicio (lo del título es una supuesta forma correcta pero que no sé implementar). El programa debe de pedir una frase al usuario (hasta ahí todo bien), y luego mostrar las palabras que la componen de forma enumerada (y ahí está el problema xD). Debo de usar la librería <string>, como es lógico, y todas las funciones asociadas. Un banco de pruebas sería el siguiente:

Citar
Dame frase: Esto es una prueba
1 -> Esto
2 -> es
3 -> una
4 -> prueba
9  Programación / Programación C/C++ / ¿Por qué no va este código? en: 24 Noviembre 2018, 17:56 pm
Muy buenas, no entiendo por qué en este código solo se opera bien la primera vez que se realiza el bucle.

Código:
#include <iostream>
using namespace std;

int main ()
{
int num = 1;
int suma = 0;
int div = 1;

cout << "Este programa nos dice si un numero entero introducido por teclado es perfecto, abundante o deficiente." << endl << endl;

while (num != 0)
{
cout << "Dame un numero (introduce 0 para salir): ";
cin >> num;

for (div = 1; div < num; div++)
{
if ((num % div) == 0)
{
suma = suma + div;
cout << suma;
}
}

if (num == 0)
{
cout << "";
}

else if (suma == num)
{
cout << "El numero " << num << " es perfecto." << endl << endl;
}

else if (suma > num)
{
cout << "El numero " << num << " es abundante." << endl << endl;
}

else
{
cout << "El numero " << num << " es deficiente." << endl << endl;
}

}

return 0;
}
10  Programación / Programación C/C++ / Ayuda con bucle for en: 22 Octubre 2018, 17:18 pm
Buenas tengo el siguiente código:

Código:
#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
int j1;
int i = 0;
int n;
int vic = 0;
int der = 0;

cin >> n;

for (i = 0; i == n; i++)
{
j1 = 1 + rand() % (51 - 1);

if (j1 > 0 && j1 < 25)
{
vic ++;
}
else
{
der++;
}
}

cout << vic;
cout << endl;
cout << der;

return 0;
}

Pretende generar un numero aleatorio 'n' veces, y dependiendo del rango en el que esté contenido se sumará a las variables 'vic' o 'der'. La cuestión es que siempre me devuelve 0 en ambas. ¿El valor de las variables no se guarda al salir del bucle? En ese caso, ¿cómo sería el programa que planteo? ¿O estoy haciendo algo mal y no me doy cuenta?

Como podreis notar soy muy principante en esto.

Muchas gracias.
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines