2010-10-01 6 views
1

comment tracer un histogramme en c à partir de 2 tableaux?comment tracer un histogramme en c

+0

Vous attendez-vous à utiliser de beaux graphiques ou juste un texte de style ****? – djna

+0

trop petit ** style, rien d'extraordinaire –

+1

Assez bon dupliquer à [Histogramme de fréquence en C] (http://stackoverflow.com/questions/1413644/); la seule différence étant la nature des données. Sur une note moins sérieuse, vous pouvez trouver des implémentations de sortie d'histogrammes en plusieurs langues sur [Code golf: Word frequency chart] (http://stackoverflow.com/questions/3169051/), mais * ne les * utilisez pas car ils sont: les solutions de golf de code cassent généralement toutes sortes de bonnes normes de codage à la recherche de brièveté. – dmckee

Répondre

0

Vous pouvez utiliser l'art ascii pour que

+1

Et la bibliothèque ncurses. – Raveline

1

Pour un histogramme aménagé sur le côté ...

Je suggère d'utiliser printf ("*") pour chaque incrément et printf ("\ n") pour commencer à sortir une nouvelle ligne. (Changer l'orientation est un exercice pour le lecteur).

1

En pensant un peu au problème, je ne suis pas convaincu que le "doublon" que j'ai identifié dans les commentaires soit vraiment réactif. Donc je vais dire quelques mots. Si vous avez choisi une approche artistique ASCII, vous n'avez plus qu'une décision à prendre: des barres verticales ou horizontales. Horizontal est facile: il suffit de décider de la mise à l'échelle puis d'imprimer les symboles bin_contents*scale pour chaque bac. Le lien code-golf est vraiment utile comme un modèle de ce que à faire, même si ce n'est pas un bon exemple de comment pour l'écrire.

Cependant, de nombreux champs ont une attente de barre verticale dans la présentation des histogrammes. C'est un peu plus difficile, mais considèrent le pseudocode

sacle = find_scale(input_array) 
max_height = find_max(input_array) * scale 
for (i=max_height; i>=0; i--) 
    if (some condition) 
     print_in_N_digits(round(i/scale)) // to label the scale 
    else 
     print_in_N_digits()    // lines with no labels 
    print " |"       // set up the vertical axis 
    for (j=first_bin to lat_bin) 
     if (input[j]*scale >= i) 
     print("#") 
     else 
     print(" ") 
     print_new_line 
print_in_N_digits(0) 
print(" +") 
for (j=first_bin to last_bin) 
    print("-") 
print_new_line 
print_in_N_digits() 
print(" 0") 
for (j=first_bin to last_bin) 
    if (some other condition) 
     print_bin_label 

Cela marche juste en face de la page, à l'aide sur la colonne par bac et à chaque impression de niveau soit " " ou "#" pour chaque colonne. La partie d'impression d'histogramme est vraiment très facile. Toute la complexité provient de la gestion de l'axe et des étiquettes.

Questions connexes