Dev - C++ - Fallo ordenar vectores

 
Vista:

Fallo ordenar vectores

Publicado por Eliot (6 intervenciones) el 05/12/2020 12:40:50
Buenas, debo implementar un cpp donde recibiendo valores de numeros reales por teclado, los almacene en un vector. Hasta aqui todo bien. Mi código funciona. El problema viene cuando debe introducir una referencia y guardar en otro vector DE FORMA ORDENADA DE MENOR A MAYOR, aquí mi programa presenta problemas, ya que al guardar los valores en el nuevo vector, siempre se queda con el más pequeño y el resto me devuelve 0.

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
using namespace std;
 
int main(){
 
   const int TERMINADOR=-1;
   double dato, referencia;
   const int TAMANIO=1e5;
   double vector[TAMANIO], mayores_que[TAMANIO];
   int utilizados_vector, k;
 
   cout << "k valores mayores que."
        << "\nIntroduzca reales con terminador "
        << TERMINADOR << "\n";
 
   utilizados_vector=0;
 
   cout << "\nIntroduzca un número real: ";
   cin >> dato;
 
   while ( (dato!=TERMINADOR)&&(utilizados_vector<TAMANIO)) {
 
      vector[utilizados_vector]=dato;
      utilizados_vector++;
      cout << "\nIntroduzca un número real (ó -1 para terminar): ";
      cin >> dato;
 
   }
 
	cout << "\nIntroduzca el valor de referencia: ";
   cin >> referencia;
   cout << "\nIntroduzca la dimensión máxima del vector a mostrar: ";
   cin >> k;
 
   int cont=1;
   int i=1;
   double a_insertar, aux;
 
	while ((i<utilizados_vector)&&(cont<=k)) {
 
   	if (vector[i]>=referencia) {
 
   		a_insertar=vector[i];
 
   		if (cont!=1) {
 
   			for (int j=1; j<cont; j++) {
 
	      		if (mayores_que[j]>a_insertar) {
 
	        			aux=mayores_que[j];
	        			mayores_que[j]=a_insertar;
	        			a_insertar=aux;
 
	        		}
 
	   		}
 
   		}
 
   		else {
 
	   		mayores_que[cont]=a_insertar;
 
	   	}
 
      	cont++;
 
      }
 
      i++;
 
   }
 
   for (int i=1; i<=cont; i++) {
 
      cout << mayores_que[i] << " ";
 
   }
 
   return 0;
 
}

P.D: Como se ve en el cpp también se debe introducir un valor de k, que será la máxima dimensión del vector resultante. Y mostrar en pantalla los elementos de este vector.

Muchas gracias de antemano.
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 Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Fallo ordenar vectores

Publicado por Alfil (1444 intervenciones) el 05/12/2020 16:31:28
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
#include <iostream>
 
using namespace std;
 
void leerVector(float v[], int n);
void imprimirVector(float v[], int n);
void ordenarVector(float v[], int n);
 
int main()
{
    int n;
 
    cout << "\nDimension del vector: ";
    cin >> n;
 
    float v[n];
 
    leerVector(v, n);
 
    cout << "\nVector desordenado: ";
    imprimirVector(v, n);
 
    ordenarVector(v, n);
 
    cout << "\nVector ordenado: ";
    imprimirVector(v, n);
 
    cout << endl;
 
    return 0;
}
 
void leerVector(float v[], int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "(" << i + 1 << "/" << n << "): ";
        cin >> v[i];
    }
}
 
void imprimirVector(float v[], int n)
{
    for (int i = 0; i < n; i++)
        cout << v[i] << " ";
}
 
void ordenarVector(float v[], int n)
{
    float valor;
    int j;
 
    for (int i = 1; i < n; i++) {
        valor = v[i];
        j = i;
        while (j > 0 && valor < v[j-1]) {
            v[j] = v[j-1];
            j--;
        }
        v[j] = valor;
    }
}
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

Fallo ordenar vectores

Publicado por Eliot (6 intervenciones) el 05/12/2020 17:24:47
Gracias por la respuesta.

Lo que necesito es recibir un vector desordenado y ordenarlo de menor a mayor, pero por encima de un valor k dado.

Por ejemplo recibir 8.4, 3.2, 0.1, 7.5, 9.1, 5.2.

Luego introducir la maxima dimension del vector a ordenar, que has llamado n, y ademas un valor k que será el valor minimo para guardar en el nuevo vector. Si por ejemplo fuese k=7.0

Entonces se deberia imprimir en pantalla: 7.5, 8.4, 9.1

Muchas gracias igualmente, de verdad. A ver si me puedes echar una mano con esto.
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
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Fallo ordenar vectores

Publicado por Alfil (1444 intervenciones) el 05/12/2020 18:00:19
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
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
 
using namespace std;
 
void leerVector(float v[], int n);
void imprimirVector(float v[], int n);
void imprimirDesdeMinimo(float v[], int n, int k);
void ordenarVector(float v[], int n);
 
int main()
{
    int n;
 
    cout << "\nDimension del vector: ";
    cin >> n;
 
    float v[n];
 
    leerVector(v, n);
 
    cout << "\nVector desordenado: ";
    imprimirVector(v, n);
 
    ordenarVector(v, n);
 
    cout << "\nVector ordenado: ";
    imprimirVector(v, n);
 
    int k;
    cout << "\nValor minimo: ";
    cin >> k;
 
    cout << "\nVector ordenado desde " << k << ": ";
    imprimirDesdeMinimo(v, n, k);
 
    cout << endl;
 
    return 0;
}
 
void leerVector(float v[], int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "(" << i + 1 << "/" << n << "): ";
        cin >> v[i];
    }
}
 
void imprimirVector(float v[], int n)
{
    for (int i = 0; i < n; i++)
        cout << v[i] << " ";
}
 
void imprimirDesdeMinimo(float v[], int n, int k)
{
    for (int i = 0; i < n; i++)
        if (v[i] >= k)
            cout << v[i] << " ";
}
 
void ordenarVector(float v[], int n)
{
    float valor;
    int j;
 
    for (int i = 1; i < n; i++) {
        valor = v[i];
        j = i;
        while (j > 0 && valor < v[j-1]) {
            v[j] = v[j-1];
            j--;
        }
        v[j] = valor;
    }
}
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
sin imagen de perfil
Val: 16
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Fallo ordenar vectores

Publicado por Eliot (6 intervenciones) el 05/12/2020 18:29:11
Pero, ahí haces la ordenación de todo el vector, y yo lo que necesito es guardarlo en un nuevo vector ya ordenado, es decir cada elemento a introducir hacer comprobaciones con los elementos que ya haya y colocarlo en el lugar correspondiente. Así ese nuevo vector estará siempre ordenado de menor a mayor.
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

Fallo ordenar vectores

Publicado por Eliot (6 intervenciones) el 05/12/2020 19:36:42
Necesito un recorrido sobre un vector pero insertando componentes
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