problema en c

Iniciado por winnipu, 18 Diciembre 2012, 00:13 AM

0 Miembros y 1 Visitante están viendo este tema.

winnipu

Vereis estoy intentando hacer este ejercicio:
dado un arreglo de 10 valores metidos en source, nos haga un diagrama de barras que represente esos numeros. Barras en vertical.

Hasta ahora lo unico que he conseguido es que las barras aparezcan horizontalmente pero no se como hacerlo de arriba a abajo. Os pego el codigo que llevo:

#include <stdio.h>


int main(void) {
int valor[10]={7,3,5,10,8,4,1,6,7,5};
int i,j,asteriscos;
printf("Los valores que se van a representar como barras de asteriscos son:\n");
printf("7,3,5,10,8,4,1,6,7,5\n");

for (i=0;i<10;i++){ //abrimos un for que recorre todos los elementos del array.
asteriscos=valor[i]; //le damos a asteriscos el valor numerico de cada elemento del array.

printf("\n");
for (j=0;j<asteriscos;j++) //abrimos otro for para que convierta el numero del array en asteriscos.
printf("*");//se imprime un asterisco por cada valor de j, desde 0 hasta el valor del array.
}
printf("\n");
printf("\n");
printf("Presione una tecla para continuar...");
getchar();
return 0;
}

twins

Disculpa a que te refieres con imprimir de arriba a abajo? algo asi o no.

*  *  *  *
*  *  *  *
*  *  *  *
*      *  *
*      *  *
*          *
*          *
            *
            *
            *

winnipu

correcto, a eso me refiero. Dado el array de numeros, si el primero es 7 deberian salir 7 asteriscos verticales, si el segundo numero es tres, al lado de esos 7 deberian salir 3 asteriscos verticales.


naderST

Vas imprimiendo asteriscos si el valor no es cero, de lo contrario imprimes un espacio en blanco hasta que todos los valores sean cero. Por valores me refiero a cada uno de los elementos del arreglo.

winnipu

Asi?

#include <stdio.h>


int main(void) {
int valor[10]={7,3,5,10,8,4,1,6,7,5};
int i,x;
printf("Valores a representar como barras de asteriscos son: 7,3,5,10,8,4,1,6,7,5 \n");
printf("\n");
printf("REPRESENTACION GRAFICA: \n");
printf("\n");
for(x=0;x<10;x++){
for(i=0;i<10;i++){
if((valor[i]-x)>0)
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("\n");
printf("Presione una tecla para continuar...");
getchar();
return 0;
}

rir3760

Solo un detalle, esta condición:
if((valor[i]-x)>0) ...
La puedes reducir a:
if(valor[i] > x) ...

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

naderST

Cita de: winnipu en 18 Diciembre 2012, 02:03 AM
Asi?

#include <stdio.h>


int main(void) {
int valor[10]={7,3,5,10,8,4,1,6,7,5};
int i,x;
printf("Valores a representar como barras de asteriscos son: 7,3,5,10,8,4,1,6,7,5 \n");
printf("\n");
printf("REPRESENTACION GRAFICA: \n");
printf("\n");
for(x=0;x<10;x++){
for(i=0;i<10;i++){
if((valor[i]-x)>0)
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("\n");
printf("Presione una tecla para continuar...");
getchar();
return 0;
}


El problema es que lo estás limitando a que el máximo valor es 10, cosa que puede cambiar, por ejemplo si colocas 20 en el arreglo de valores no te lo va a graficar completo.

winnipu

#7
Asi lo he dejado:
Veis algun error?

#include <stdio.h>


int main(void) {
int valor[10]={7,5,12,15,8,4,18,6,7,5};
int i,x,mayor=0;
for (i=1;i<10;i++){
if (valor[i]>=mayor)
    mayor=valor[i];}
printf("Valores a representar como barras de asteriscos son: 7,5,12,15,8,4,18,6,7,5 \n");
printf("\n");
printf("REPRESENTACION GRAFICA: \n");
printf("\n");
for(x=0;x<mayor;x++){
for(i=0;i<10;i++){
if((valor[i]-x)>0)
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("\n");
printf("Presione una tecla para continuar...");
getchar();
return 0;
}

rir3760

Cita de: winnipu en 18 Diciembre 2012, 11:20 AMAsi lo he dejado:
Veis algun error?
Se te olvido la asignación a la variable "mayor", debería ser (las llaves estaban de mas):
int i,x,mayor;

mayor = valor[0];
for (i = 1; i < 10; i++)
   if (valor[i] > mayor)
      mayor = valor[i];


Dos recomendaciones: no coloques comentarios en cada linea indicando lo que hace el lenguaje y cambia esta expresión de la forma en que ya te indique:
if((valor[i]-x)>0) ...

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

winnipu

Gracias rir3760 por un minuto me adelante a lo de los comentarios y a inicializar la variable mayor.
« Última modificación: Hoy a las 15:31 por winnipu »    
rir3760« Respuesta #8 en: Hoy a las 15:32

Jejeje. Tomo nota de la linea que mencionas, y la modifiare.Gracias por tus sabios comentarios y ayuda.