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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Ayuda para insertar de forma ordenada en un vector en: 7 Diciembre 2020, 01:57 am
Muchas gracias por la ayuda. Y perdon por no poner el código bien.

Ya he corregido algunas cosas pero me sigue sin salir. Uno de los valores insertados en el nuevo vector, es 0, concretamente el primero...

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void InsertarOrdenado (double valor, double v[], int size) {
  5.  
  6.   int indiceInsercion=0; // indice que le corresponde al elemento
  7.  
  8.   while ((indiceInsercion<size)&&(v[indiceInsercion]<valor)) {
  9.  
  10.      indiceInsercion++;
  11. }
  12.  
  13. if (indiceInsercion!=size) { // si no se inserta al final, hay que mover elementos
  14.  
  15.      for (int i=size-1; i>=indiceInsercion; i--) {
  16.  
  17.   v[i]=v[i-1];
  18.  
  19.   }
  20. }
  21.  
  22.    v[indiceInsercion]=valor;
  23.  
  24. }
  25.  
  26. int main(){
  27.  
  28.   const int TERMINADOR=-1;
  29.   double dato, referencia;
  30.   const int TAMANIO=1e5;
  31.   double vector[TAMANIO], mayores_que[TAMANIO];
  32.   int utilizados_vector, k;
  33.  
  34.   cout << "k valores mayores que."
  35.        << "\nIntroduzca reales con terminador "
  36.        << TERMINADOR << "\n";
  37.  
  38.   utilizados_vector=0;
  39.  
  40.   cout << "\nIntroduzca un número real: ";
  41.   cin >> dato;
  42.  
  43.   while ((dato!=TERMINADOR)&&(utilizados_vector<TAMANIO)) {
  44.  
  45.      vector[utilizados_vector]=dato;
  46.      utilizados_vector++;
  47.      cout << "\nIntroduzca un número real (ó -1 para terminar): ";
  48.      cin >> dato;
  49.  
  50.   }
  51.  
  52. cout << "\nIntroduzca el valor de referencia: ";
  53.   cin >> referencia;
  54.   cout << "\nIntroduzca la dimensión máxima del vector a mostrar: ";
  55.   cin >> k;
  56.  
  57.   int cont=0;
  58.   int i=0;
  59.  
  60. while ((i<utilizados_vector)&&(cont<k)) {
  61.  
  62.   if (vector[i]>=referencia) {
  63.  
  64.   InsertarOrdenado (vector[i], mayores_que, cont);
  65.  
  66.       cont++;
  67.  
  68.      }
  69.  
  70.      i++;
  71.  
  72.   }
  73.  
  74.   for (int i=0; i<cont; i++) {
  75.  
  76.      cout << mayores_que[i] << " ";
  77.  
  78.   }
  79.  
  80.   return 0;
  81.  
  82. }
2  Programación / Programación C/C++ / Re: Ayuda para insertar de forma ordenada en un vector en: 7 Diciembre 2020, 01:12 am
Gracias por sus aportes... al final he dividido un poco el código y he hecho una función, pero me sigue dando problemas el primer elemento del vector, ya que no lo coge a la hora de meterlo en el nuevo vector. A ver si dan con el fallo...

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void InsertarOrdenado (double valor, double v[], int size) {
  5.  
  6.   int indiceInsercion=0; // indice que le corresponde al elemento
  7.  
  8.   while ((indiceInsercion<size)&&(v[indiceInsercion]<valor)) {
  9.  
  10.      indiceInsercion++;
  11. }
  12.  
  13. if (indiceInsercion!=size) { // si no se inserta al final, hay que mover elementos
  14.  
  15.      for (int i=size-1; i<=indiceInsercion+1; i++) {
  16.  
  17.   v[i] = v[i-1];
  18.  
  19.   }
  20. }
  21.  
  22.    v[indiceInsercion]=valor;
  23.  
  24. }
  25.  
  26. int main(){
  27.  
  28.   const int TERMINADOR=-1;
  29.   double dato, referencia;
  30.   const int TAMANIO=1e5;
  31.   double vector[TAMANIO], mayores_que[TAMANIO];
  32.   int utilizados_vector, k;
  33.  
  34.   cout << "k valores mayores que."
  35.        << "\nIntroduzca reales con terminador "
  36.        << TERMINADOR << "\n";
  37.  
  38.   utilizados_vector=0;
  39.  
  40.   cout << "\nIntroduzca un número real: ";
  41.   cin >> dato;
  42.  
  43.   while ((dato!=TERMINADOR)&&(utilizados_vector<TAMANIO)) {
  44.  
  45.      vector[utilizados_vector]=dato;
  46.      utilizados_vector++;
  47.      cout << "\nIntroduzca un número real (ó -1 para terminar): ";
  48.      cin >> dato;
  49.  
  50.   }
  51.  
  52. cout << "\nIntroduzca el valor de referencia: ";
  53.   cin >> referencia;
  54.   cout << "\nIntroduzca la dimensión máxima del vector a mostrar: ";
  55.   cin >> k;
  56.  
  57.   int cont=1;
  58.   int i=1;
  59.   double a_insertar;
  60.  
  61. while ((i<utilizados_vector)&&(cont<=k)) {
  62.  
  63.   if (vector[i]>=referencia) {
  64.  
  65.   a_insertar=vector[i];
  66.  
  67.   if (cont==1) {
  68.  
  69.   mayores_que[cont]=a_insertar;
  70.  
  71.   }
  72.  
  73.   else {
  74.  
  75.   InsertarOrdenado (a_insertar, mayores_que, cont);
  76.  
  77.   }
  78.  
  79.       cont++;
  80.  
  81.      }
  82.  
  83.      i++;
  84.  
  85.   }
  86.  
  87.   for (int i=1; i<=cont; i++) {
  88.  
  89.      cout << mayores_que[i] << " ";
  90.  
  91.   }
  92.  
  93.   return 0;
  94.  
  95. }

MOD: El código debe estar publicado entre etiquetas de Código GeSHi
3  Programación / Programación C/C++ / Ayuda para insertar de forma ordenada en un vector en: 6 Diciembre 2020, 17:05 pm
Necesito leer datos de un vector y si son superiores a una referencia dada, meterlos en otro vector de forma ordenada de menor a mayor. Este vector es de dimension maxima dada, es decir acabaré de leer datos del vector primero cuando la dimension del segundo llegue al limite o cuando se acabe el primer vector.

Tengo esto, pero no está bien y no se seguir:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.  
  6.  const int TERMINADOR=-1;
  7.  double dato, referencia;
  8.  const int TAMANIO=1e5;
  9.  double vector[TAMANIO], mayores_que[TAMANIO];
  10.  int utilizados_vector, k;
  11.  
  12.  cout << "k valores mayores que."
  13.       << "\nIntroduzca reales con terminador "
  14.       << TERMINADOR << "\n";
  15.  
  16.  utilizados_vector=0;
  17.  
  18.  cout << "\nIntroduzca un número real: ";
  19.  cin >> dato;
  20.  
  21.  while ( (dato!=TERMINADOR)&&(utilizados_vector<TAMANIO)) {
  22.  
  23.     vector[utilizados_vector]=dato;
  24.     utilizados_vector++;
  25.     cout << "\nIntroduzca un número real (ó -1 para terminar): ";
  26.     cin >> dato;
  27.  
  28.  }
  29.  
  30. cout << "\nIntroduzca el valor de referencia: ";
  31.  cin >> referencia;
  32.  cout << "\nIntroduzca la dimensión máxima del vector a mostrar: ";
  33.  cin >> k;
  34.  
  35.  int cont=1;
  36.  int i=1;
  37.  double a_insertar, aux;
  38.  
  39. while ((i<utilizados_vector)&&(cont<=k)) {
  40.  
  41.  if (vector[i]>=referencia) {
  42.  
  43.  a_insertar=vector[i];
  44.  
  45.  if (cont!=1) {
  46.  
  47.  for (int j=1; j<=cont; j++) {
  48.  
  49.      if (mayores_que[j]>a_insertar) {
  50.  
  51.        aux=mayores_que[j];
  52.        mayores_que[j]=a_insertar;
  53.        mayores_que[j++]=aux;
  54.  
  55.        }
  56.  
  57.  }
  58.  
  59.  }
  60.  else {
  61.  mayores_que[cont]=a_insertar;
  62.  }
  63.      cont++;
  64.     }
  65.     i++;
  66.  }
  67.  
  68.  for (int i=1; i<=cont; i++) {
  69.     cout << mayores_que[i] << " ";
  70.  }
  71.  return 0;
  72. }


MOD: El código debe ir entre etiquetas de Código GeSHi
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines