[C con Clase] Tema 10. Arrays II. No me sale la propuesta 1 y 2
dehm
davidehm en gmail.com
Vie Mayo 27 12:07:08 CEST 2011
Bueno:
Siguiendo con el ejercicio, mezclando un poco lo pedido en los problemas 1 y 2, he aquí mi propuesta. Pero antes unas dudas:
Entiendo que cuando se pide mostrar la serie de mayor a menor (después de haberla mostrado de menor a mayor) lo que se está pidiendo es que se reordenen los índices del array para que al más pequeño le corresponda el mayor valor y así sucesivamente.
Yo lo he hecho así, pero también limitándome a mostrar la información a la inversa, sin tocar el valor de los índices.
La pregunta es....en un programa real, no será más fácil limitarse a mostrar la información al revés. Lo digo porque así el programa tendrá que hacer menos cálculos y eso repercutirá en la velocidad del programa, ¿no?
Y la otra cosa....no sé como hacer que me salgan las series separadas por la coma "," pero sin que salga la última coma:
Ahora me sale:
a,b,c,d,
y debería ser:
a,b,c,d
Y el código:
#include <iostream>
using namespace std;
int main()
{
short int i,j; //Defino las variables int
float suma=0; //Defino la variable suma como float, para tener decimales
float aux,vector[4];
cout << "Introduce 5 valores " <<endl; //El bucle para pedir números se repetirá tantas veces como
for (i=0;i<5;i++) //le haya marcado la variable contador
{
cin >>vector [i];
suma = suma + vector [i]; //Voy actualizando la variable "suma" sumando cada elemento del vector
}
cout << "La serie introducida es: "; //Saco en pantalla la serie introducida, en el órden de introducción
for (i=0;i<5;i++)
{
cout << vector [i]<<",";
}
cout <<endl;
cout << "La suma es: ";
cout << suma <<endl; //La variable "suma" ya la tenía actualizada. La saco por pantalla
cout << "La media es: ";
cout << suma / 5 <<endl; //La media es la suma de los nº/por el nº de elementos de la serie (contador)
for (i=4;i>0;i--) //Empiezo un bucle que va desde el último índice del vector hasta el 0
{for (j=0;j<i;j++) //De ésta forma éste bucle empieza en 0 y acaba en el último índice del vector
//disminuyendo en una unidad en cada iteración del pincipal
if (vector[j]>vector[j+1]) //Si el valor del primer índice es mayor que el del siguiente inmediato
{
aux=vector[j]; //Cambio los valores apoyándome en una variable auxiliar "aux" para poder
vector[j]=vector[j+1]; //traspasar dichos valores
vector[j+1]=aux;
}
}
cout << "La serie ordenada es: "; //Una vez reasignados los índices, mostramos los valores ordenados
for (j=0;j<5;j++) //Con los índices reasignados, los muestro en un bucle que va de 0 a 9 (10 valores)
{
cout << vector [j] <<",";
}
cout <<endl;
cout << "El mayor número de la serie es: " <<vector [4] <<endl;
cout << "El menor número de la serie es: " <<vector [0] <<endl;
//Ahora muestro los números a la inversa
//Método "atajo" (me limito a mostrar los números en órden inverso)
cout <<"la serie a la inversa es (método cutre): ";
for (j=4;j>=0;j--)
{
cout <<vector [j]<< ",";
}
cout <<endl;
//Método "reordenación de índices"
//(Ahora el índice 0 corresponderá al mayor valor y el 4 al menor)
for (j=4;j>=0;j--) //bucle desde 4 hasta 0 decreciendo en una unidad en cada iteración
for (i=0;i<j;i++) //bucle desde 0 hasta j (primero de 0 a 4, luego de 0 a 3, etc...)
if (vector [i]<vector [i+1])
{
aux=vector [i];
vector [i]=vector [i+1];
vector [i+1]=aux;
}
cout <<"La serie a la inversa es (método cambiar los indices): ";
for (j=0;j<5;j++)
cout <<vector [j]<<",";
return 0;
}
Más información sobre la lista de distribución Cconclase