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


 


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  problema en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema en c  (Leído 957 veces)
winnipu

Desconectado Desconectado

Mensajes: 68


Ver Perfil
problema en c
« en: 18 Diciembre 2012, 00:13 »

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:

Código:
#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;
}


« Última modificación: 19 Diciembre 2012, 09:35 por winnipu » En línea

twins

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: problema en c
« Respuesta #1 en: 18 Diciembre 2012, 00:45 »

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

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


En línea

winnipu

Desconectado Desconectado

Mensajes: 68


Ver Perfil
Re: problema en c
« Respuesta #2 en: 18 Diciembre 2012, 01:48 »

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.

En línea

naderST


Desconectado Desconectado

Mensajes: 628



Ver Perfil WWW
Re: problema en c
« Respuesta #3 en: 18 Diciembre 2012, 01:50 »

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.
En línea

winnipu

Desconectado Desconectado

Mensajes: 68


Ver Perfil
Re: problema en c
« Respuesta #4 en: 18 Diciembre 2012, 02:03 »

Asi?

Código:
#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;
}
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.364


Ver Perfil
Re: problema en c
« Respuesta #5 en: 18 Diciembre 2012, 02:14 »

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

Un saludo
En línea

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


Desconectado Desconectado

Mensajes: 628



Ver Perfil WWW
Re: problema en c
« Respuesta #6 en: 18 Diciembre 2012, 02:26 »

Asi?

Código:
#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.
En línea

winnipu

Desconectado Desconectado

Mensajes: 68


Ver Perfil
Re: problema en c
« Respuesta #7 en: 18 Diciembre 2012, 11:20 »

Asi lo he dejado:
Veis algun error?

Código:
#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;
}
« Última modificación: 18 Diciembre 2012, 15:31 por winnipu » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.364


Ver Perfil
Re: problema en c
« Respuesta #8 en: 18 Diciembre 2012, 15:32 »

Asi lo he dejado:
Veis algun error?
Se te olvido la asignación a la variable "mayor", debería ser (las llaves estaban de mas):
Código
  1. int i,x,mayor;
  2.  
  3. mayor = valor[0];
  4. for (i = 1; i < 10; i++)
  5.   if (valor[i] > mayor)
  6.      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:
Código
  1. if((valor[i]-x)>0) ...

Un saludo
En línea

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

Desconectado Desconectado

Mensajes: 68


Ver Perfil
Re: problema en c
« Respuesta #9 en: 18 Diciembre 2012, 15:39 »

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.
En línea

winnipu

Desconectado Desconectado

Mensajes: 68


Ver Perfil
Re: problema en c
« Respuesta #10 en: 19 Diciembre 2012, 09:25 »

Gracias tambien a ti naderST
En línea

paulmil

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: problema en c
« Respuesta #11 en: 22 Diciembre 2012, 18:11 »

Buenas, tambien estoy aprendiendo a programar en C y por ende cai al foro  ;D

Me pareció buena practica hacer el ejercicio aqui planteado, así que lo hice respetando la solucion propuesta pero con punteros. Ademas los valores del arreglo son cualquier entero e ingresados por teclado

Código
  1. #include <stdio.h>
  2. #define MAX 10
  3.  
  4. int arreglo[MAX], cont = 0;
  5.  
  6. void imprime_horizontal(int *p);
  7. void imprime_vertical(int *q);
  8.  
  9. int main(void) {
  10. /** Ingresa valores del arreglo */
  11. for (cont = 0; cont < MAX; cont++) {
  12. printf("arreglo[%d] = ", cont);
  13. scanf("%d", &arreglo[cont]);
  14. fflush(stdin);
  15. }
  16. printf("\n\n");
  17.  
  18. /** Imprime diagrama horizontal */
  19. imprime_horizontal(arreglo);
  20. printf("\n");
  21.  
  22. /** Imprime diagrama vertical */
  23. imprime_vertical(arreglo);
  24. printf("\n");
  25.  
  26. printf("Presione una tecla para continuar...");
  27. return 0;
  28. }
  29.  
  30. /**
  31.  * Imprime los valores del arreglo formando un diagrama de barras horizontal
  32.  * @param p Puntero del arreglo a imprimir
  33.  */
  34. void imprime_horizontal(int *p){
  35. int x = 0, y = 0;//Ejes del diagrama
  36.  
  37. for (y = 0; y < MAX; y++) {
  38.    for (x = 0; x < *(p + y); x++) {
  39.     printf("*");
  40.    }
  41.    printf("\n");
  42. }
  43.  
  44. }
  45.  
  46. /**
  47.  * Imprime los valores del arreglo formando un diagrama de barras vertical
  48.  * @param q Puntero del arreglo a imprimir
  49.  */
  50. void imprime_vertical(int *q){
  51. int referencia = 0;
  52. int x = 0, y = 0;//Ejes del diagrama
  53.  
  54. for (cont = 0; cont < MAX ; cont++) {
  55. if ( *(q + cont) > referencia) {
  56.    referencia = *(q + cont);
  57. }
  58. }
  59.  
  60. for (y = 0; y < referencia; y++) {
  61. for (x = 0; x < MAX; x++) {
  62. if ( *(q + x) > y) printf("*");
  63. else printf(" ");
  64. }
  65.    printf("\n");
  66. }
  67. }

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema ms dos, problema unix, NT tambien
Dudas Generales
XmefistoX 4 1,478 Último mensaje 14 Octubre 2004, 05:03
por XmefistoX
problema medio tonto pero sigue siendo problema
Desarrollo Web
gordy(D!@bL0) 2 1,672 Último mensaje 17 Noviembre 2006, 22:22
por Luisango
problema compilando kernel ubuntu (problema gordo xD)
GNU/Linux
Kase 0 1,015 Último mensaje 30 Abril 2007, 06:01
por Kase
Problema con chipset Atheros (solucionado, continuamos) Nuevo problema
Wireless en Windows
Torpedool 6 5,676 Último mensaje 11 Julio 2009, 10:45
por KARR
Problema Css o problema con el sidebar
Desarrollo Web
gaboomsk8 6 1,236 Último mensaje 27 Diciembre 2011, 21:56
por gaboomsk8
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines