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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda]Secuencias
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda]Secuencias  (Leído 2,907 veces)
Sothu

Desconectado Desconectado

Mensajes: 30


Ver Perfil
[Ayuda]Secuencias
« en: 14 Noviembre 2015, 20:23 pm »

Buenas a todos!
Mi problema es el siguiente: tengo que hacer un programa en c++ usando una secuencia, acabando tal cuando se introduzca el EOS = -1, y al acabar debe decirme si hay alguna pareja consecutiva en que las sumas de la cifras sean iguales. Ej: 45 54 (ambos suman 9). El problema en que me encuentro es que no se como comparar los distintos numeros que se van introduciendo en la secuencia ya que todos entran por el mismo cin dentro de un while.
Les dejo lo que tengo de momento (esta en catalan pero creo que es entendible).
Gracias de antemano :)
Código:
#include <iostream>

using namespace std;

const int EOS = -1;

int sumaXifres(int n)
{
    int suma=0;
    while (n!=0)
    {
          suma+=n%10;
          n=n/10;
    }
    return suma;
}

int main()
{
    int numero, numero1, n;
    cout << "DADES:" << endl;
    cin >> numero;
    while (numero != EOS)
    {
        cin >> numero;
        sumaXifres(numero) = n;
    }
    if ((sumaXifres(numero)) == (sumaXifres(numero1)))
    {
        cout << "LA SEQUENCIA CONTE UNA PARELLA CONSECUTIVA AMB IGUAL SUMA DE XIFRES:" << numero << "," << numero1;;
    }
    else cout << "LA SEQUENCIA NO CONTE UNA PARELLA CONSECUTIVA AMB IGUAL SUMA DE XIFRES.";
    return 0;
}


En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #1 en: 14 Noviembre 2015, 21:52 pm »

No me quedó del todo claro lo que intentas hacer, pero acá varias cosillas:

Código
  1. cout << "DADES:" << endl;
  2.    cin >> numero; // <- Acá
  3.    while (numero != EOS)
  4.    {
  5.        cin >> numero; // <- Estás pidiendo el mismo valor 2 veces.
  6.        sumaXifres(numero) = n;
  7.    }
  8.  

También estás declarado numero y número1, y "numero1" nunca la utilizas, así que:
Código
  1. if ((sumaXifres(numero)) == (sumaXifres(numero1))) // <- Este if jamás se cumplirá.
  2.    {
  3.        cout << "LA SEQUENCIA CONTE UNA PARELLA CONSECUTIVA AMB IGUAL SUMA DE XIFRES:" << numero << "," << numero1;;
  4.    }
  5.  

Y no es válido hacer esto:

Código
  1. sumaXifres(numero) = n; /*A menos que la función retorne una referencia, y a esta se le asigna el valor de la variable 'n'*/
  2.  

En fin, si lo que quieres es ir guardando valores de manera indefinida e ir registrando al mismo tiempo la suma de sus números que componen a ese entero puedes usar vectores.

Código
  1. int main() {
  2.  
  3.    int valor;
  4.    vector<int> enteros, sumas;
  5.  
  6.    cin >> valor;
  7.  
  8.    while(valor != EOS) {
  9.        enteros.push_back(valor);
  10.        sumas.push_back(sumaXifres(valor));
  11.        cin >> valor;
  12.    }
  13.  
  14.    return EXIT_SUCCESS;
  15. }
  16.  

Y luego recorrerás cada valor del vector hasta encontrar otro valor que coincida con la suma. Y lógicamente el valor de la suma tendrá el mismo índice que el del número entero en sí. Por lo que vas comparando el primer valor con el resto, y así sucesivamente con todos hasta dar con otro igual y luego muestras los 2.


En línea

racso97

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #2 en: 18 Noviembre 2015, 21:58 pm »

Buenas! :D
Creo Zodiak98 que no quedó claro lo que había que hacer, yo tengo el mismo problema que Sothu, me quedé estancado con este programa. Se tiene que realizar un programa que dada una secuència de entrada de naturales, diga si hay 2 números consecutivos y la suma de sus dígitos coincidan(ej:32[3+2=5] y 23[2+3=5]). Después de poner la última dada válida acabar cuando se introduzca EOS= -1. Espero que haya quedado más claro ahora y pueden ayudarnos.
Gracias :P




Código:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int EOS = -1;
  6.  
  7. int sumaXifres(int n)
  8. {
  9.    int suma=0;
  10.    while (n!=0)
  11.    {
  12.          suma+=n%10;
  13.          n=n/10;
  14.    }
  15.    return suma;
  16. }
  17.  
  18. int main()
  19. {
  20.    int numero, numero1, n;
  21.    cout << "DADES:" << endl;
  22.    cin >> numero;
  23.    while (numero != EOS)
  24.    {
  25.        sumaXifres(numero) == n;
  26.    }
  27.    if ((sumaXifres(numero)) == (sumaXifres(numero1)))
  28.    {
  29.        cout << "LA SEQUENCIA CONTE UNA PARELLA CONSECUTIVA AMB IGUAL SUMA DE XIFRES:" << numero << "," << numero1;;
  30.    }
  31.    else cout << "LA SEQUENCIA NO CONTE UNA PARELLA CONSECUTIVA AMB IGUAL SUMA DE XIFRES.";
  32.    return 0;
  33. }
  34.  

[MOD] Para publicar código usar etiquetas GeSHi.
« Última modificación: 7 Diciembre 2015, 22:21 pm por simorg » En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #3 en: 18 Noviembre 2015, 22:18 pm »

Pero entonces necesitan pedir numero1 también, y sólo piden numero. Lo correcto sería que dentro del while ocupes 2 "cin", uno para numero, y otro para numero1, y luego comparar. Y si alguno de los 2 es -1 entonces finalizas.

Pensé que se referían a que se iba a introducir una cantidad ilimitada de números, y luego comparar cada uno de ellos a ver si alguno coincidía. Pero si sólo irán de 2 en 2, entonces pide 2 números en el while y luego comparas.
« Última modificación: 18 Noviembre 2015, 22:20 pm por Zodiak98 » En línea

racso97

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #4 en: 18 Noviembre 2015, 23:15 pm »

Un ejemplo que tendria que hacer el programa seria este:

Dades:
1
2
23
44
33
32
23
44
55
-1
La secuencia contiene una pareja consecutiva con igual suma de digitos

Con que detecte una pareja que salte ese mensaje y tu introduces los numeros que quieras.
Te lo digo para acabar de concretar el problema  :P
En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #5 en: 19 Noviembre 2015, 03:23 am »

Bueno entonces usas vectores.
Mira acá te lo dejo:
Código
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. const int EOS = -1;
  7.  
  8. int sumaXifres(int n);
  9.  
  10. int main() {
  11.    vector<int> numeros, suma_numeros;
  12.  
  13.    int numero;
  14.    cin >> numero;
  15.  
  16.    bool encontrados = false;
  17.  
  18.    while(numero != EOS) {
  19.        numeros.push_back(numero);
  20.        suma_numeros.push_back(sumaXifres(numero));
  21.        cin >> numero;
  22.    }
  23.  
  24.    int tamanio = numeros.size();
  25.  
  26.    for(int j = 0; j < tamanio - 1; ++j) {
  27.        for(int i = j + 1; i < tamanio; ++i) {
  28.            if(suma_numeros[j] == suma_numeros[i]) {
  29.                cout << "Pareja encontrada: "
  30.                << numeros[j] << " , " << numeros[i] << endl;
  31.                encontrados = true; //Al menos 1 pareja fue encontrada.
  32.            }
  33.        }
  34.    }
  35.  
  36.    if(!encontrados)
  37.        cout << "No se han encontrado parejas..." << endl;
  38.  
  39.  
  40.    return 0;
  41. }
  42.  
  43. int sumaXifres(int n) {
  44.    int suma=0;
  45.  
  46.    while (n!=0) {
  47.          suma += n % 10;
  48.          n = n / 10;
  49.    }
  50.  
  51.    return suma;
  52. }
  53.  

EDIT:
Ahora, por ejemplo, si introduces 2 números iguales:
45
65
76
65
-1

Te arrojará que 65 y 65 son pareja. Para evitar eso puedes agregar al if una condición que diga que si esos números son iguales, entonces no entre al if, y la condición quedaría así:
Código
  1. if(suma_numeros[j] == suma_numeros[i] && numeros[j] != numeros[i]) {
  2.       cout << "Pareja encontrada: "
  3.       << numeros[j] << " , " << numeros[i] << endl;
  4.       encontrados = true; //Al menos 1 pareja fue encontrada.
  5. }
  6.  

Pero si no quieres eso entonces lo dejas como estaba al principio.
« Última modificación: 19 Noviembre 2015, 12:23 pm por Zodiak98 » En línea

racso97

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #6 en: 19 Noviembre 2015, 16:08 pm »

Gracias Zodiak98 por tu tiempo pero me sigue dando error. Está vez funciona el programa pero tiene que saltar el mensaje de contiene una pareja consecutiva... cuando detecte una pareja consecutiva.
ej:
1
2
23
32
44
-1
En este ejemplo son consecutivos.
ej 2:
1
2
23
33
32
44
-1
En este otro, en cambio, hay pareja pero no son consecutivos y por tanto debería poner que no contiene ninguna pareja consecutiva.

Espero haberme explicado bien y espero que me echen una mano.
Gracias amigos  :D
En línea

Zodiak98

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: [Ayuda]Secuencias
« Respuesta #7 en: 19 Noviembre 2015, 16:18 pm »

Ah pues entonces hay que hacer sólo un cambio pequeñito. Pensé que simplemente había que buscar parejas (independientemente si estaban consecutivas o no), pero bueno nada del otro mundo, reemplazamos esto:

Código
  1. for(int j = 0; j < tamanio - 1; ++j) {
  2.        for(int i = j + 1; i < tamanio; ++i) {
  3.            if(suma_numeros[j] == suma_numeros[i]) {
  4.                cout << "Pareja encontrada: "
  5.                << numeros[j] << " , " << numeros[i] << endl;
  6.                encontrados = true; //Al menos 1 pareja fue encontrada.
  7.            }
  8.        }
  9.    }
  10.  

Por esto:
Código
  1. for(int j = 0; j < tamanio - 1; ++j) {
  2.        if(suma_numeros[j] == suma_numeros[j + 1]) {
  3.            cout << "Pareja encontrada "
  4.            << numeros[j] << " , " << numeros[j + 1] << endl;
  5.            encontrados = true; // Al menos una pareja encontrada.
  6.        }
  7. }
  8.  

Con eso ya sólo tomará en cuenta si son consecutivos. :)
« Última modificación: 19 Noviembre 2015, 20:05 pm por Zodiak98 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Secuencias en C++
Programación C/C++
eleon 5 9,964 Último mensaje 24 Enero 2012, 15:46 pm
por eleon
¿Qué secuencias son?.
GNU/Linux
Jenag 2 2,426 Último mensaje 27 Noviembre 2012, 21:16 pm
por Jenag
Secuencias de escape no encontrada
Programación C/C++
Raiden 3 2,545 Último mensaje 8 Agosto 2020, 05:29 am
por Raiden
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines