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 - elcentral_

#1
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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;

void InsertarOrdenado (double valor, double v[], int size) {

   int indiceInsercion=0; // indice que le corresponde al elemento
   
   while ((indiceInsercion<size)&&(v[indiceInsercion]<valor)) {
   
      indiceInsercion++;
}

if (indiceInsercion!=size) { // si no se inserta al final, hay que mover elementos

      for (int i=size-1; i>=indiceInsercion; i--) {
 
    v[i]=v[i-1];
   
    }
}

    v[indiceInsercion]=valor;
   
}

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=0;
   int i=0;

while ((i<utilizados_vector)&&(cont<k)) {
   
    if (vector[i]>=referencia) {
   
    InsertarOrdenado (vector[i], mayores_que, cont);
   
      cont++;
     
      }
     
      i++;
     
   }

   for (int i=0; i<cont; i++) {
   
      cout << mayores_que[i] << " ";
     
   }
   
   return 0;
     
}
#2
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 (cpp) [Seleccionar]

#include <iostream>
using namespace std;

void InsertarOrdenado (double valor, double v[], int size) {

  int indiceInsercion=0; // indice que le corresponde al elemento
   
  while ((indiceInsercion<size)&&(v[indiceInsercion]<valor)) {
   
     indiceInsercion++;
}

if (indiceInsercion!=size) { // si no se inserta al final, hay que mover elementos

     for (int i=size-1; i<=indiceInsercion+1; i++) {
 
  v[i] = v[i-1];
 
  }
}

   v[indiceInsercion]=valor;
   
}

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;

while ((i<utilizados_vector)&&(cont<=k)) {
 
  if (vector[i]>=referencia) {
 
  a_insertar=vector[i];
 
  if (cont==1) {
 
  mayores_que[cont]=a_insertar;
 
  }
 
  else {
 
  InsertarOrdenado (a_insertar, mayores_que, cont);
 
  }
     
      cont++;
     
     }
     
     i++;
     
  }

  for (int i=1; i<=cont; i++) {
 
     cout << mayores_que[i] << " ";
     
  }
 
  return 0;
     
}



MOD: El código debe estar publicado entre etiquetas de Código GeSHi
#3
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 (cpp) [Seleccionar]

#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;
       mayores_que[j++]=aux;
     
       }

 }

 }
 else {
 mayores_que[cont]=a_insertar;
 }
     cont++;
    }
    i++;
 }

 for (int i=1; i<=cont; i++) {
    cout << mayores_que[i] << " ";
 }
 return 0;
}




MOD: El código debe ir entre etiquetas de Código GeSHi