Dev - C++ - No me imprime un valor. Programa de ordenado.

   
Vista:

No me imprime un valor. Programa de ordenado.

Publicado por Albert (2 intervenciones) el 31/12/2014 18:28:57
Buenas a todos y antes de nada gracias por la ayuda.
Resulta que estoy haciendo este programa que mezcla vectores de fracciones, y los muestra en orden, sin repeticiones . Y una de las fracciones (de una serie de juegos de pruebas que tengo que introducir para probar el programa) nunca aparece.

Lo que tengo que introducir por consola es:

9 1/5 1/5 1/3 1/1 8/3 3/1 3/1 4/1 4/1
6 1/3 1/1 1/1 5/2 5/2 3/1

Siendo los dos valores al principio de cada sequencia el tamaño del vector.
-------------------------------------
La salida tendria que ser:

1/5
1/3
1/1
5/2
8/3
3/1
4/1

--------------------------------------
Pero la salida es:

1/5
1/3
1/1
8/3
3/1
4/1




El codigo es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<iostream>
#include<vector>
using namespace std;
 
struct Racional {
    int num, den;
};
 
int comparador(const Racional& a, const Racional& b) {
    int numa = a.num*b.den;
    int numb = b.num*a.den;
    if (numa > numb) return 5;
    else if (numa == numb) return 0;
    else return -1;
}
 
void mezcla(const vector<Racional>& a, const vector<Racional>& b) {
    int i, j, k;
    i = j = k = 0;
    while (i < a.size() and j < b.size()) {
        while (i < a.size()-1 and a[i+1].num == a[i].num and a[i+1].den == a[i].den) ++i;
        while (j < b.size()-1 and b[i+1].num == b[i].num and b[i+1].den == b[i].den) ++j;
        int lel = comparador(a[i],a[j]);
        if (lel == 0) {
            cout << a[i].num << "/" << a[i].den << endl;
            ++i; ++j;
        }
        else if (lel == -1) {
            cout << a[i].num << "/" << a[i].den << endl;
            ++i;
        }
        else if (lel == 5) {
            cout << b[j].num << "/" << b[j].den << endl;
            ++j;
        }
    }
    while (i < a.size()) {
        if (i < a.size()-1 and a[i+1].num == a[i].num and a[i+1].den == a[i].den) ++i;
        else { cout << a[i].num << "/" << a[i].den << endl;
        ++i;
        }
    }
    while (j < b.size()) {
        if (j < b.size()-1 and b[j+1].num == b[j].num and b[j+1].den == b[j].den) ++j;
        else { cout << b[j].num << "/" << b[j].den << endl;
        ++j;
        }
    }
}
 
int main() {
    int n;
    cin >> n;
    vector<Racional> a(n);
    char basura;
    for (int i = 0; i < a.size(); ++i) {
        cin >> a[i].num >> basura >> a[i].den;
    }
    int m;
    cin >> m;
    vector<Racional> b(m);
    for (int j = 0; j < b.size(); ++j) {
        cin >> b[j].num >> basura >> b[j].den;
    }
    mezcla(a,b);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Renold

No me imprime un valor. Programa de ordenado.

Publicado por Renold (2 intervenciones) el 31/12/2014 19:37:39
Hola,buenas,revise tu codigo ,esta un poco confuso con el tipo de arreglo que tienes en las lineas(NO ES LO IMPORTANTE),fíjate a ver si el vector de salida (el que almacena los vectores ya en orden) este en un limite que pueda contener al vector inicio.Es decir VECTORINI[5] VECTORFIN[5]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

No me imprime un valor. Programa de ordenado.

Publicado por Albert (2 intervenciones) el 31/12/2014 20:43:30
Hola, gracias por la ayuda.
En el programa al final no usé un tercer vector para guardar las fracciones ya en orden, simplemente los fui imprimiendo segun los iba ordenando. Uso cin y cout para introducir y imprimir .

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me imprime un valor. Programa de ordenado.

Publicado por Jose Manuel (30 intervenciones) el 02/01/2015 13:03:39
Al margen de todo esto, cuando uses contenedores de la STL como vector, list, map... acostumbrate a usarlos con iteradores, verás que es mucho mas sencillo y claro cuando te haces con ellos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar