Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Temas - RGT

#1
Programación C/C++ / Ejercicio usando Colas en C++
11 Noviembre 2015, 19:58 PM
Hola amigos,
Resulta que tengo que hacer esto:

CitarEscriba un programa para ejecutar el experimento siguiente:
Genere 100 números aleatorios con valores en el rango entre 1 y 500. Conforme se genera cada número, insértelo en una cola inicialmente vacía. Si el número es de dos dígitos, tiene prioridad sobre números de tres dígitos.

Después de insertar los 100 números, imprima en orden secuencial las posiciones de la cola donde se encuentra el número con mayor valor y el número con menor valor.

Nunca hemos trabajado usando Colas, no entiendo cómo uno puede aprender de esta manera pero bueno, venga...

He investigado cómo crear una Cola y crear los números aleatorios.

Código:

#include <iostream>
#include <stdlib.h>     // Librería para usar la función srand()
#include <time.h>       // Librería para usar la función time()

using namespace std;

//Declaraciones de tipos para manejar colas en C++
typedef struct _nodo {
   int dato;
   struct _nodo *siguiente;
} tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Cola;

int main()
{
    //Declaración de variables
    int i, Numero;
    srand(time(NULL));

    //Procesamiento
    for(i = 1; i <= 100; i++)
    {
        Numero = 1 + rand() % (501 - 1);
        cout << Numero << endl;
    }

    return 0;
}


Screenshot:


Vamos bien, ahora la pregunta es:


  • Cómo inserto los números en la Cola?.
  • Cómo es eso de prioridad?.
  • Cómo hago para que el número de dos dígitos se guarde antes que los de tres dígitos?
Bueno, nunca había visto Colas, espero puedan ayudarme, gracias.
#2
Hola amigos,

Tengo esto:
string PalabraAdivinar = golf;

//Variable usada solamente para convertir la Palabra a Adivinar de String a Char y poder usar la función strcmp()
    char PalabraAdivinarChar[PalabraAdivinar.size()] = PalabraAdivinar;

//Uso de la función strcmp()
y = strcmp(PalabraAdivinarChar, Respuesta);


Debo pasar mi cadena String a Char para poder usar esta función y me compare si la Palabra a Adivinar ya es igual a la Respuesta, o sea, lo que ingresa el usuario. Para hacer esta comparacion hago uso de la funcion strcmp(), el cual solo trabaja con variables tipo Char.

La duda mia es, la variable Char esta bien declarada?, porque me da error en CodeBlocks.

Notar que hice esto:
PalabraAdivinarChar[PalabraAdivinar.size()]

no se me ocurrió otra forma de asignarle el tamaño que necesito jeje.

espero me ayuden chicos..
#3
Hola, gracias por guiarme todo este tiempo.
Tengo un nuevo problema con mi programa.

Mi 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 :(
#4
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..
#5
Programación C/C++ / Pasar fichero a una función
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?
#6
#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!!!
#7
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:

#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!.
#8

int liContador, laiArreglo[] = {5,8,2,3,1,4,6,9,2,10};

    printf("\nCONJUNTO: ");

    for (liContador = 0; liContador < sizeof (laiArreglo) / sizeof (int); liContador++)
    {
        printf("%d ", laiArreglo[liContador]);
    }


Con ese código solamente me muestra el 5.

Anteriormente tenía laiArreglo[10] y me funcionaba correctamente. Al hacer esto laiArreglo[] = {5,8,2,3,1,4,6,9,2,10}, ya me dejo de funcionar. El FOR solo llega hasta 1 y no hasta 10.

Por qué?.
#9

int liContador1, liContador2, liElse = 0;

    for (liContador1 = 1; liContador1 <= liNumeroB; liContador1++)
    {
        for (liContador2 = liContador1 + 1; liContador2 <= liNumeroB; liContador2++)
        {
            if (NumerosAmigos(liContador1, liContador2))
                printf("\n%d, %d", liContador1, liContador2);

            else
                liElse++;
        }
    }

    if (liElse != 0)
        printf("\nLos n%cmeros no son amigos.\n", 163);


Estoy haciendo un programa para buscar los números amigos anteriores a un valor dado. El programa printea la pareja de números encontrados pero, necesito mostrar un mensaje si no existe ninguna pareja de números amigos.

El problema es que no se me ocurre ninguna forma de hacerlo. He intentado con BREAK, CONTINIUE, CONTADORES..

Ahora mismo tengo:
else
                liElse++;


fue lo último que estaba probando.

Alguien tiene alguna idea sobre cómo puedo hacer para resolver esto?.

Saludos y gracias a todos por ayudarme!.
#10
Ejemplo: Si el arreglo original es 8 4 8 5 4, entonces el arreglo se transformará a: 8 4 -1 5 -1 y se devolverá como cantidad de
repeticiones 2.

Código (cpp) [Seleccionar]
//Declaración de variables
   int liN, liContador, laiArreglo[10];

   //Entrada de datos
   do
   {
       printf("Cantidad de componentes del arreglo: ");
       scanf("%d", &liN);

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

   for (liContador = 0; liContador < liN; liContador++)
   {
       do
       {
           printf("Valor #%d: ", liContador + 1);
           scanf("%d", &laiArreglo[liContador]);

           if (laiArreglo[liContador] < 0)
               printf("\n\tError!, debe ingresar un valor mayor que 0.\n\n");
       } while (laiArreglo[liContador] < 0);
   }

   //Procesamiento
   int liContador1, liContador2;

   for (liContador1 = 0; liContador1 < liN - 1; liContador1++)
   {
       for (liContador2 = liContador1 + 1; liContador2 < liN; liContador2++)
       {
           if (laiArreglo[liContador2] == laiArreglo[liContador1])
               laiArreglo[liContador2] = -1;
       }
   }

//Salida de datos
   printf("\nResultado: ");

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

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




Como pueden ver, no logro hacerlo, estoy vuelto loco y ya no se que hacer :(

Mod: Código resaltado con etiquetas GeSHi para que sea más visible
#11
Ejemplo:

void Funcion(int Numero)
{
  procesamiento......

  [B]return;[/B]
}


Pregunta:
Es necesario el "return:" al final de cada función o no?, qué es lo correcto?.

Ejemplo:

void Funcion([B]void[/B])
{
  procesamiento......
}


Pregunta:
Es necesario el "void" sino necesito recibir ningún valor?, qué es lo correcto?.

-
Algunos dice que nó y otros dicen que sí.
Qué es lo correcto para una perfecta comprensión para el compilador y la mejor prática en C?.
#12
Hola, soy nuevo en el foro y quiero enviarles un saludo a todos ustedes.


//Declaración de variable
   int liN, liContador1, liContador2, liContador3, liContadora = 0;

   //Entrada de datos
   printf("Ingrese un valor: ");
   scanf("%d", &liN);

   //Procesamiento
   printf("\n");

   for (liContador1 = 1; liContador1 <= liN; liContador1++)
   {
       for (liContador2 = 1; liContador2 <= liN; liContador2++)
       {
           for (liContador3 = 1; liContador3 <= liN; liContador3++)
           {
               if (liContador1 * liContador1 + liContador2 * liContador2 == liContador3 * liContador3)
                   printf("(%d, %d, %d)\t", liContador1, liContador2, liContador3);
           }
       }
   }

   printf("\n");




Tengo este código hecho y me muestra muchos resultados, algunos que no aparecen, por ejemplo en wikipedia y algunos sitios web que enseñan este método.

Tengo algo mal o me falta hacer algo?.

Espero que me ayuden y saludos a todos!.