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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 [2] 3 4
11  Programación / Programación C/C++ / Hacer dos comprobaciones en un WHILE con funciones en: 5 Noviembre 2015, 04:46 am
Hola, gracias por guiarme todo este tiempo.
Tengo un nuevo problema con mi programa.

Mi código:
Código:
#include <iostream>
#include <fstream>  // Librería para el manejo de archivos
#include <string>   // Librería para el manejo de strings
#include <stdlib.h> // Librería para el uso de system("cls");
#include <ctype.h>  // Librería para clasificar y transformar caracteres individuales

using namespace std;

bool ValidarNumeroIngresado(string NumeroLetras);
bool ValidarPalabra(int NumeroLetras, fstream &FicheroPalabras);

int main()
{
    //Declaración de variables
    fstream FicheroPalabras;
    string NumeroLetras, Palabra;

/*  Creamos el fichero con las palabras a adivinar
------------------------------------------------------------------------*/
    cout << "Creando fichero con palabras..." << endl;
    FicheroPalabras.open("palabras.txt", ios::out);
    FicheroPalabras << "baloncesto\n";
    FicheroPalabras << "beisbol\n";
    FicheroPalabras << "futbol\n";
    FicheroPalabras << "golf\n";
    FicheroPalabras << "rugby\n";
    FicheroPalabras << "tenis\n";
    FicheroPalabras << "boxeo\n";
    FicheroPalabras << "sumo\n";
    FicheroPalabras << "judo\n";
    FicheroPalabras << "nascar\n";
    FicheroPalabras << "atletismo\n";
    FicheroPalabras << "caminata\n";
    FicheroPalabras << "ciclismo\n";
    FicheroPalabras << "esgrima\n";
    FicheroPalabras << "natacion\n";
    FicheroPalabras << "polo\n";
    FicheroPalabras << "clavados\n";
    FicheroPalabras << "remo\n";
    FicheroPalabras << "vela\n";
    FicheroPalabras << "ajedrez";
    FicheroPalabras.close();
    cout << "Fichero creado exitosamente..." << endl;

/*  Header del programa
------------------------------------------------------------------------*/
    cout << "\nJuego de El Ahorcado\n--------------------" << endl;
    cout << "Tema: Deportes\n" << endl;

/*  Content del programa
------------------------------------------------------------------------*/
    do
    {
        cout << "N\243mero de letras de la palabra: ";
        getline(cin, NumeroLetras);
    } while(ValidarNumeroIngresado(NumeroLetras) && ValidarPalabra(atoi(NumeroLetras.c_str()), FicheroPalabras));

    return 0;
}

/*  Validar el número ingresado
------------------------------------------------------------------------*/
bool ValidarNumeroIngresado(string NumeroLetras)
{
    /*
        La función "isdigit" revisa que todos los caracteres de la cadena sean números.
        Esta función perternece a la Librería <ctype.h>.
    */

    if (isdigit(NumeroLetras[0]))
    {
        cout << "\n\tEnhorabuena!, n\243mero v\240lido...\n" << endl;
        return false;
    }

    else
    {
        cout << "\n\tError!, n\243mero inv\240lido...\n" << endl;
        return true;
    }
}

/*  Validar que exista una palabra con el número de letras ingresado
------------------------------------------------------------------------*/
bool ValidarPalabra(int NumeroLetras, fstream &FicheroPalabras)
{
    string Palabra;
    bool PalabraEncontrada = true;

    FicheroPalabras.open("palabras.txt", ios::in);

    while (PalabraEncontrada)
    {
        if (FicheroPalabras.eof())
        {
            PalabraEncontrada = false;
            cout << "Error!, no hay palabras de " << NumeroLetras << " letras en el juego..." << endl;
            return true;
        }

        else
        {
            getline(FicheroPalabras, Palabra);

            if (Palabra.size() == NumeroLetras)
            {
                PalabraEncontrada = false;
                cout << "Palabra de " << NumeroLetras << " letras encontrada..." << endl;
                return false;
            }
        }
    }

    FicheroPalabras.close();
}

Debo replicar el juego de EL AHORCADO.

Pasos que hago:
  • Pido el número de letras que debe tener la palabra a adivinar.
  • Con la función "ValidarNumeroIngresado" valido que el dato ingresado sea un número y no cualquier otra cosa.
  • Con la función "ValidarPalabra" valido que exista una palabra con esa cantidad de letras.

Entonces, quiero que el programa siga pidiendo el número de letras siempre y cuando:
  • El dato ingresado no sea un número.
  • Exista una palabra con la cantidad de letras.

Cómo hago esas dos validaciones dentro del WHILE?, no se me ocurre otra cosa y he dado mucha cabeza en este asunto.
Pensé que me iba a funcionar la forma que tengo, pero no funciona.

Alguna ayuda por favor de alguien con experiencia en estos casos?.

Ahora mismo el programa funciona, pero no me muestra los mensajes de que si encontró o no una palabra con esa cantidad de letras (segunda validación en el WHILE), estoy pensando que el programa esta obviando esa parte.

Ayuda por favor :(
12  Programación / Programación C/C++ / Validar solo números en un INT en C++ en: 5 Noviembre 2015, 03:27 am
Código:
int NumeroLetras;

do
    {
        cout << "\nN\243mero de letras de la palabra: ";
        cin >> NumeroLetras;
    } while(ValidarNumeroIngresado(NumeroLetras));

/*  Validar el número ingresado
------------------------------------------------------------------------*/
int ValidarNumeroIngresado(int NumeroLetras)
{
    if (NumeroLetras < 48 || NumeroLetras > 57)
        return 0;

    else
        return 1;
}

Hola, me deje llevar por la tabla del codigo ASCHII, si se ingresa algo fuera de ese rango, no es considerado un número, pero no funciona.

Alguien sabe mi error?.
Investigué en Google y encuentro muchas formas diferentes, pero para serles sincero no las entiendo.

Espero puedan ayudarme chicos..
13  Programación / Programación C/C++ / Pasar fichero a una función en: 3 Noviembre 2015, 21:39 pm
Hola,
Cómo paso un fichero a una función para luego, poder abrirlo y trabajar con el dentro de la funcion?

Tengo esto:
    fstream FicheroPalabras;

    do
    {
        cout << "\nN\243mero de letras de la palabra: ";
        cin >> NumeroLetras;
    } while (ValidarLetra(NumeroLetras));

Función:
int ValidarLetra(int NumeroLetras)

Sería ValidarLetra(int NumeroLetras, FicheroPalabras), o cómo es?
14  Programación / Programación C/C++ / múltiplos del primer número que sean menores que el segundo en: 15 Abril 2015, 03:02 am
Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    //Declaración de variables
    int liNumero1, liNumero2, liContador;

    //Entrada de datos
    do
    {
        printf("Ingrese n%cmero 1: ", 163);
        scanf("%d", &liNumero1);

        if (liNumero1 <= 0)
            printf("\n\tError!, debe ingresar un valor mayor que 0.\n\n");
    } while (liNumero1 <= 0);

    do
    {
        printf("Ingrese n%cmero 2: ", 163);
        scanf("%d", &liNumero2);

        if (liNumero2 <= liNumero1)
            printf("\n\tError!, debe ingresar un valor mayor que el anterior.\n\n");
    } while (liNumero2 <= liNumero1);

    //Procesamiento
    for (liContador = 1; liContador <= liNumero2; liContador++)
    {
        if (liNumero1 % liContador == 0)
        {
            if (liNumero1 % liContador < liNumero2)
                printf("%d", liContador);
        }
    }

    //Salida de datos

    return 0;
}

Hola, necesito hacer esto:

Dados dos números naturales, calcule e imprima los múltiplos del primer número que sean menores que el segundo.

No logro hacerlo, a lo mejor no se cómo sacar los múltiplos y printearlos correctamente, pueden ayudarme, debo printear todos los múltiplos del primer número que sean menores que el segundo número ingresado.

Espero que me ayuden, saludos!!!
15  Programación / Programación C/C++ / Re: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose en: 6 Abril 2015, 22:45 pm
Ya veo.
Pero, independientemente de todo eso, esta bien hecho el método de hacer que el programa se repita?, hize algo mal o esta todo bien?.
16  Programación / Programación C/C++ / Re: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose en: 6 Abril 2015, 22:21 pm
Hola,
entiendo tu punto de vista pero, si lo envio al menu automaticamente, el usuario no podra ver el resultado de la accion que hizo.

Supongamos que eligio la opcion 1 (añadir elemento), el ingresa el numero 5, luego lo envia al menu y ya?, o sea, no podra ver su numero agregado en el arreglo.

Entiendes?....
no sé si estoy mal......
17  Programación / Programación C/C++ / Re: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose en: 6 Abril 2015, 18:56 pm
Hize unos cambios, creo que lo logré, me gustaría que lo probaran y me digan sus opiniones y qué cosas puedo mejorar.

Código:
#include <stdio.h>
#include <stdlib.h>

/*
Tema V. Funciones

22. Escriba un programa en el cual haciendo uso de arreglos se puedan manipular conjuntos de números enteros donde se ofrezcan los siguientes servicios:

a)Insertar un elemento en el conjunto.
b)Eliminar un elemento  del conjunto.
c)Determinar si un elemento es miembro o no en el conjunto.
d)Unión de conjuntos.
e)Intersección de conjuntos.
*/

//Declaración de prototipos
int RepetirPrograma(void);
int MenuPrincipal(size_t TamanoArreglo);
void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo);
void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo);

int main()
{
    //Declaración de variables
    int liRepetirPrograma,
        laiArreglo[] = {5,8,2,3,1,4,6,9,7,10}, liElemento;

    do
    {
        //Procesamiento
        switch (MenuPrincipal(sizeof (laiArreglo) / sizeof (int)))
        {
            case 1:
                system("cls");
                printf("1. Insertar un elemento en el conjunto");
                printf("\n--------------------------------------");
                printf("\nIngrese el elemento: ");
                scanf("%d", &liElemento);
                InsertarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
                MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
                liRepetirPrograma = RepetirPrograma();
                break;
            case 2:
                system("cls");
                printf("2. Eliminar un elemento del conjunto");
                printf("\n------------------------------------");
                printf("\nIngrese el elemento: ");
                scanf("%d", &liElemento);
                EliminarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
                MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
                liRepetirPrograma = RepetirPrograma();
                break;
            case 3:
                system("cls");
                printf("3. Determinar si un elemento es miembro o no en el conjunto");
                printf("\n-----------------------------------------------------------");
                printf("\nIngrese el elemento: ");
                scanf("%d", &liElemento);
                DeterminarExistencia(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
                MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
                liRepetirPrograma = RepetirPrograma();
                break;
            case 4:
                break;
            case 5:
                break;
        }
    } while (liRepetirPrograma == 1);

    return 0;
}

int RepetirPrograma(void)
{
    int liRepetirPrograma;

    printf("-------------------------------------------------------------------------------\nPresione 1 para volver al men%c anterior...\n=> ", 163);
    scanf("%d", &liRepetirPrograma);

    return liRepetirPrograma;
}

int MenuPrincipal(size_t TamanoArreglo)
{
    system("cls");

    int liOpcionMenu;

    printf("NOTA: Tama%co m%cximo del conjunto: %d\n", 164, 160, TamanoArreglo);
    printf("\n----------MENU-----------------------------------------------------------------");
    printf("\n1. Insertar un elemento en el conjunto");
    printf("\n2. Eliminar un elemento del conjunto");
    printf("\n3. Determinar si un elemento es miembro o no en el conjunto");
    printf("\n4. Uni%cn de conjuntos", 162);
    printf("\n5. Intersecci%cn de conjuntos", 162);
    printf("\n-------------------------------------------------------------------------------");
    do
    {
        printf("\n=> ");
        scanf("%d", &liOpcionMenu);

        if (liOpcionMenu <= 0 || liOpcionMenu > 5)
            printf("\n\tError!, debe ingresar un valor de 1 a 5.\n");
    } while (liOpcionMenu <= 0 || liOpcionMenu > 5);

    return liOpcionMenu;
}

void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo)
{
    int liContador;

    printf("\nCONJUNTO: ");

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        printf("%d", laiArreglo[liContador]);

        if (liContador < TamanoArreglo - 1)
            printf(", ");
    }

    printf("\n");
}

void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == 0)
        {
            laiArreglo[liContador] = liElemento;
            printf("\n---------------------------------------------\n| Insertado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, todas las posiciones estan ocupadas.\n");
}

void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            laiArreglo[liContador] = 0;
            printf("\n---------------------------------------------\n| Eliminado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}

void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            printf("\n------------------------------------------\n| Elemento encontrado en la posici%cn %d. |\n------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}
18  Programación / Programación C/C++ / Re: Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose en: 6 Abril 2015, 18:24 pm
Hola,
entonces, pongo todo el codigo dentro de un while, luego deberia poner el menu en una funcion y llamar esa funcion en cada menu del switch, luego, preguntar al final de cada menu si desea regresar al menu anterior o no?, eso es todo?.
19  Programación / Programación C/C++ / Qué hacer para que mi programa vuelva al menú anterior y siga ejecutandose en: 6 Abril 2015, 18:10 pm
Hola,
estoy haciendo un ejercicio de la universidad (explicado en los comentarios del programa) y me gustaría que el programa se repita. Por ejemplo, Presione 1 para volver al menú anterior y 0 para salir. Al volver al menú anterior, poder elegir otra opción y asi sucesivamente, manteniendo los valores de las variables ya que el punto del programa es ver los valores e ir jugando con ellas añadiendo y eliminando valores.

Aquí mi programa:

Código:
#include <stdio.h>
#include <stdlib.h>

/*
Tema V. Funciones

22. Escriba un programa en el cual haciendo uso de arreglos se puedan manipular conjuntos de números enteros donde se ofrezcan los siguientes servicios:

a)Insertar un elemento en el conjunto.
b)Eliminar un elemento  del conjunto.
c)Determinar si un elemento es miembro o no en el conjunto.
d)Unión de conjuntos.
e)Intersección de conjuntos.
*/

//Declaración de prototipos
void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo);
void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo);
void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo);

int main()
{
    //Declaración de variables
    int liOpcionMenu, laiArreglo[] = {5,8,2,3,1,4,6,9,7,10}, liElemento;

    //Entrada de datos
    printf("NOTA: Tama%co m%cximo del conjunto: %d\n", 164, 160, sizeof (laiArreglo) / sizeof (int));
    printf("\n----------MENU-----------------------------------------------------------------");
    printf("\n1. Insertar un elemento en el conjunto");
    printf("\n2. Eliminar un elemento del conjunto");
    printf("\n3. Determinar si un elemento es miembro o no en el conjunto");
    printf("\n4. Uni%cn de conjuntos", 162);
    printf("\n5. Intersecci%cn de conjuntos", 162);
    printf("\n-------------------------------------------------------------------------------");
    do
    {
        printf("\n=> ");
        scanf("%d", &liOpcionMenu);

        if (liOpcionMenu <= 0 || liOpcionMenu > 5)
            printf("\n\tError!, debe ingresar un valor de 1 a 5.\n");
    } while (liOpcionMenu <= 0 || liOpcionMenu > 5);

    //Procesamiento
    switch (liOpcionMenu)
    {
        case 1:
            system("cls");
            printf("1. Insertar un elemento en el conjunto");
            printf("\n--------------------------------------");
            printf("\nIngrese el elemento: ");
            scanf("%d", &liElemento);
            InsertarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
            MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
            break;
        case 2:
            system("cls");
            printf("2. Eliminar un elemento del conjunto");
            printf("\n------------------------------------");
            printf("\nIngrese el elemento: ");
            scanf("%d", &liElemento);
            EliminarElemento(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
            MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
            break;
        case 3:
            system("cls");
            printf("3. Determinar si un elemento es miembro o no en el conjunto");
            printf("\n-----------------------------------------------------------");
            printf("\nIngrese el elemento: ");
            scanf("%d", &liElemento);
            DeterminarExistencia(liElemento, laiArreglo, sizeof (laiArreglo) / sizeof (int));
            MostrarConjunto(laiArreglo, sizeof (laiArreglo) / sizeof (int));
            break;
        case 4:
            break;
        case 5:
            break;
    }

    //Salida de datos

    return 0;
}

void MostrarConjunto(int laiArreglo[], size_t TamanoArreglo)
{
    int liContador;

    printf("\nCONJUNTO: ");

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        printf("%d", laiArreglo[liContador]);

        if (liContador < TamanoArreglo - 1)
            printf(", ");
    }

    printf("\n");
}

void InsertarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == 0)
        {
            laiArreglo[liContador] = liElemento;
            printf("\n---------------------------------------------\n| Insertado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, todas las posiciones estan ocupadas.\n");
}

void EliminarElemento(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            laiArreglo[liContador] = 0;
            printf("\n---------------------------------------------\n| Eliminado correctamente de la posici%cn %d. |\n---------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}

void DeterminarExistencia(int liElemento, int laiArreglo[], size_t TamanoArreglo)
{
    int liContador, liCondicionElse = 0;

    for (liContador = 0; liContador < TamanoArreglo; liContador++)
    {
        if (laiArreglo[liContador] == liElemento)
        {
            printf("\n------------------------------------------\n| Elemento encontrado en la posici%cn %d. |\n------------------------------------------\n", 162, liContador + 1);
            liCondicionElse++;
            return;
        }
    }

    if (liCondicionElse == 0)
        printf("\n\tAviso!, no existe ese elemento en el conjunto.\n");
}

Pensé en un DO WHILE ó WHILE pero como el programa es tan largo, no sé si sería lo correcto, también pensé en poner el menú en una función y llamarlo en cada opción del menú, no tengo ni idea de qué sería lo mejor, nunca he hecho esto.

Espero que me ayuden, saludos a todos y gracias!.
20  Programación / Programación C/C++ / Re: El "sizeof" para saber el tamaño del arreglo no me funciona en: 4 Abril 2015, 22:24 pm
1) Utilizas "laiArreglo" cuando debería ser "Arreglo".
2) Coméntale a tu profesor que prefijos como "lai" son, para ser amables, malos e innecesarios.

El uso de lai (local, arreglo, integer) o de li (local, integer) es algo obligatorio requerido por el profesor de mi universidad. Segun el, ayuda al entendimiento del programa al ver las variables.

3) El tipo del segundo parámetro de la función debe ser size_t.
Entonces, size_t, es utilizado solamente para guardar un numero entero sin signo y el numero es dado por sizeof, correcto?.
Habría alguna diferencia si utilizo size_t ó int, tendría algun efecto diferente?.

Ejemplo:

int tamaño = 10;
for (i = 0; i < tamaño; i++)

size_t tamaño = 10;
for (i = 0; i < tamaño; i++)

Los dos, suponiendo que el INT es positivo, al ser utilizado en un FOR, no tendría diferencia o sí?.

Me gusta aprender todo, perdon por las preguntas, espero que no te moleste.
Páginas: 1 [2] 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines