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ú

Mensajes - Dresden

#1
Cita de: al2000 en 22 Octubre 2018, 09:57 AM...un ejercicio que me pide que cuente las palabras de una frase acabada en '.'...

El título del tema nos dice que se trata de un ejercicio para principiantes, por esto, al leer la parte de la pregunta que cité anteriormente, deduje que la entrada del programa siempre sería una frase terminada con un punto (utilizado para señalar el final de la entrada). Lo que es habitual en este tipo de ejercicios, donde se suelen asumir entradas ideales.

Estos son algunos de los casos de prueba que utilicé, y las salidas que obtuve con mi código:

Código (cpp) [Seleccionar]
.
0

       .
0

,;.
0

,  ;    .
0

Hola.
1

Hola      .
1

        Hola   .
1

En un lugar de la Mancha, de cuyo nombre no quiero acordarme...
12

En    lugar             , de cuyo nombre no quiero          .
7

En un lugar.
3


Como se puede ver, cuando no existen palabras o cuando hay más de un espacio entre las palabras el cálculo es correcto.

No tomé en cuenta, intencionalmente, el conteo de números dentro de la frase, porque al2000 no lo planteó como parte del problema:

Código (cpp) [Seleccionar]
Ahora vienen 7 espacios:       , con estos otros suman 12:     .
7


En todo caso, no me parece que sea una solución incorrecta para un ejercicio de nivel básico.
#2
Programación C/C++ / Re: ayuda
23 Octubre 2018, 13:04 PM
#include <stdio.h>   // fgets()
#include <string.h>  // strcspn(), strcmp()

enum { N_PAISES = 10, N_CHARS = 10 };

int main(void) {
    const char paises[N_PAISES][N_CHARS] = {
        "Angola", "Egipto", "Lesoto", "Serbia", "Guinea",
        "Grecia", "Brasil", "Ruanda", "Kosovo", "Chipre"
    };

    const char capitales[N_PAISES][N_CHARS] = {
        "Luanda", "El Cairo", "Maseru", "Belgrado", "Conakri",
        "Atenas", "Brasilia", "Kigali", "Pristina", "Nicosia"
    };

    char respuesta[N_CHARS];
    int aciertos = 0;
    int errores  = 0;

    for (int i = 0; i < N_PAISES; ++i) {
        printf("Cual es la capital de %s? ", paises[i]);
        fgets(respuesta, sizeof respuesta, stdin);
        respuesta[strcspn(respuesta, "\r\n")] = '\0';

        if (strcmp(respuesta, capitales[i]) == 0) {
            printf("\t* Correcto *\n\n");
            ++aciertos;
        } else {
            printf("\t* Incorrecto *\n\n");
            ++errores;
        }
    }

    printf(
        "   MARCADOR    \n"
        "Aciertos --> %i\n"
        "Errores ---> %i\n",
        aciertos, errores
    );

    return 0;
}
#3
#include <stdio.h>
#include <ctype.h>  // isalpha()

int main(void) {
    int nPalabras = 0;
    int existeLetra = 0;
    char caracter = '\0';

    while (caracter != '.') {
        scanf("%c", &caracter);

        if (!existeLetra) {
            existeLetra = isalpha(caracter);
        }

        if (existeLetra) {
            if (caracter == ' ') {
                ++nPalabras;
                existeLetra = 0;
            }

            if (caracter == '.') {
                ++nPalabras;
            }
        }
    }

    printf("Total palabras: %i\n", nPalabras);

    return 0;
}
#4
Programación C/C++ / Re: Ayuda con bucle for
22 Octubre 2018, 18:18 PM
Mientras la condición i < n sea verdadera, las repeticiones seguirán ejecutándose. Cuando la condición no se cumpla (cuando i llegue a ser igual a n), las iteraciones de la sentencia for terminarán.

En la condición:
Código (cpp) [Seleccionar]
if (j1 > 0 && j1 < 25)

La primera parte (j1 > 0) no es necesaria, siempre será verdadera debido al rango en el que se generan los números aleatorios.
#5
En este caso, el primer número indica la cantidad de elementos de la lista. Compila con el estándar C++ 98 en adelante:

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdarg>

int sumar(int, ...);

int main()
{
    std::cout << sumar(5, 5, 4, 6, 7, 8) << '\n';
    return 0;
}

int sumar(int nNumeros, ...)
{
    va_list numeros;
    va_start(numeros, nNumeros);

    int suma = 0;
    for (int i = 0; i < nNumeros; ++i)
    {
        suma += va_arg(numeros, int);
    }

    va_end(numeros);
    return suma;
}


Estos compilan con el estándar C++ 11 o superior:

Código (cpp) [Seleccionar]
#include <iostream>
#include <vector>

int sumar(const std::vector<int> &);

int main()
{
    int suma = sumar({ 5, 4, 6, 7, 8 });
    std::cout << suma << '\n';

    return 0;
}

int sumar(const std::vector<int> &numeros)
{
    int suma = 0;

    for (const int &num : numeros)
    {
        suma += num;
    }
    return suma;
}


Código (cpp) [Seleccionar]
#include <iostream>

template <typename T>
T sumar(T inicio)
{
    return inicio;
}

template <typename T, typename... Nums>
T sumar(T inicio, Nums... nums)
{
    return inicio + sumar(nums...);
}

int main()
{
    const int suma = sumar(5, 4, 6, 7, 8);
    std::cout << suma << '\n';
    return 0;
}