UTNianos

Versión completa: Ayuda - Algoritmos - Vectores
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Gente:

Consulta, tengo el siguiente problema. A ver si alguno se copa.

ES UN EJERICIO BOLUDO DE INFO 1 PERO NO ME SALE. USTEDES QUE SON DE SISTEMAS SEGURO LES PARECE UNA PELOTUDEZ.

ENUNCIADO (NO HACE FALTA USAR ARCHIVOS NI NADA, SOLO VECTORES):

Se dispone de un conjunto de 23 registros, cada uno con un valor entero, ya ordenado en forma creciente. A continuación Leer un registro adicional, también con un valor entero. Se debe escribir un diagrama y la correspondiente codificación que leyendo estos registros en el orden indicado, genere un vector de 24 elementos donde el valor adicional se encuentre ubicado en el lugar que le corresponda en el vector de forma tal que quede también ordenado en forma creciente
Muy por arriba, una posibilidad es:

1. Primero sí o sí leer todos los números inicialmente y colocarlos dentro de un vector de 24 posiciones en las posiciones 0 a 22.
2. Leer el nuevo valor que hay que insertar en algún lugar.
3. Buscar cuál es el lugar (para esto, voy recorriendo todos los valores dentro del vector y en cuanto encuentro uno que es mayor a mi nuevo número, ahí es donde debería ir mi nuevo número, y me guardo ese índice).
4. Desde la posición 23 hasta la posición de la cual tengo que mover el valor, voy moviendo el 'valor anterior' a la posición actual. Es decir, en la 23 coloco lo que había en el 22, en el 22 lo que había en el 21, etc. Así hasta llegar a la posición donde iría mi nuevo número.
5. Coloco en la posición obtenida el número.

Y listo! =)
Acá está:
[Imagen: ejinfo1.jpg]
http://img834.imageshack.us/img834/2624/ejinfo1.jpg
Sorry por la calidad...

La idea es...
1) Se leen los 23 registros y se guardan desde A[1] hasta A[23]
2) Se ingresa el nuevo registro (B), y se lo guarda como A[24]
3) Se ordena el vector A

O sea, es una versión bastante más simplificada que la de Leandro.

Si sos detallista, en realiad el enunciado dice que crees un vector nuevo. Podrías hacer que una vez creado el vector A[1] a A[23], lo copie a B[1] a B[23]; y al ingresar el nuevo registro lo guardes como B[24]. Luego ordenas el vector B y listo.

Ehhh, como que para los de Sistemas... estás despreciando a los de Industrial. lol
se me hace como poco eficiente. o sea, reordenar un vector implica muchas operaciones a memoria que por lo menos en algoritmos te dicen que esquives.
yo haria lo siguiente



read x
i = 0
j=0
while(i<24){ //recorro los vectores
if(vector1[i]<x || j = 1){ //si vector1[i] es menor que x entonces x va mas adelante, si j es 1 entonces ya puse a x en vector2
vector2[i+j] = vector1[i]
i= i+1
}
else{ //en el unico momento que puedo entrar aca es cuando vector1[i]>x y j = 0
vector2[i] = x //pongo a x en la posicion actual
j = 1 //al ponerle 1 a j me aseguro de no pisar a x en el vector2. y puedo seguir usando a i como indice para el vector1
}
}



Es más fácil que la mía, pero la mía es más eficiente ya que no tenés que ordenar el vector entero (dado que vos ya sabés que solo 1 miembro no estaría ordenado).

La solución de Jarry, si bien me hace ruido ese i+j, ya que a lo sumo sería j = -1 e i++, así tal como está no funciona me parece. Pero seguro que es poco claro, ahí habría que meter comentarios a pleno =)
Che muchas gracias por las respuestas.

Igual aca en Info 1 no joden tanto con la respuesta.

Ahora voy a terminar otros ejercicios y luego cuando vuelva a este miro las alernativas que pusieron.

Creo que la alternativa de Leandro esta bueno y es eficiente, pero tengo que ver si me sale hacerlo asi. La de Eagle es fiel candidata para que la ponga en mi TP jajaja.

Igual despues lo veo mejor dado que ahora me estoy quemando el bocho con otro.

Abrazo y gracias.
me habia equivocado, el i+j deberia haber estado en el indice del vector2 y no el del uno. ahi lo arregle. y le puse comentarios explicativos.
espero que sirva

ya me habian dicho que no codeo claramente ¬¬
URLs de referencia