2017-10-19 3 views
-5

Ich versuche ein Programm zu erstellen, das ein Histogramm ist. Sie haben Index: 0,1,2,3,4,5,6,7,8,9 und Werte: Sie fügen sie ein. Für jeden Wert muss ein * angezeigt werden. Zum Beispiel Wert 3 -> *** // Wert 5 -> ***** usw. Ich bekomme alles außer dem * erledigt. Kann mir jemand eine Idee oder ein Beispiel geben, wie es geht? DankHistogramm in C++ mit Arrays

Here there is the example of program.

#include <iostream> 
#include <stdlib.h> 
#include <iomanip> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    // variabili per instogramma 
    int a=8; 
    int c=12; 
    int z=0; 

    // variabili per vettore 
    int v; 
    int numeri[10]; 
    int i=0; 

    do{ 
     cout<<"Inserisci i numeri:"; 
     cin>> v; 

     numeri[i]=v; 
     i+=1; 
    } while(i<10); 

    cout<<"\n"; 

    // Mostra Index - Elementi -  Instogramma 
    cout << setw(n) << "Index"; 
    cout << setw(a) << "Valori" << " "; 
    cout << setw(c) << "Instogramma\n"; 

    for(int z=0;z<10;z++) 
    { 
     cout << setw(n) << z; 
     cout << setw(a) << numeri[z] <<"\n"; 
    } 

    system("PAUSE");  
    return EXIT_SUCCESS; 
} 

And here there is what i got with my code

+4

Meinst du "Histogramm"? Und bitte den Code einrücken. –

+0

Ja, ich meine Histogramm. – folgore95

+1

Für 1 Druck 1 Stern, für 2 Druck 2 Sterne, für 3 Druck 3 Sterne etc. Wo ist das Problem? –

Antwort

1

Die String-Klasse hat einen Konstruktor, der einen Charakter und einige Male zu wiederholen akzeptiert. Es wird eine Zeichenfolge mit so vielen Zeichen erstellt.

So in Ihrem Fall:

for (int z=0; z<10; z++) 
{ 
    cout<<setw(n)<<z; 

    cout<<setw(a)<<numeri[z]; 

    cout << string (numeri[z], '*') << "\n"; 

} 

Ich lasse Sie herausfinden, wie Sie mit dem Abstand beschäftigen wollen um ihn herum. Beachten Sie, dass Sie wahrscheinlich auch entscheiden müssen, was zu tun ist, wenn die Anzahl den verfügbaren Platz überschreitet oder kleiner als Null ist.

+0

Vergiss nicht zu überprüfen, ob if (numeri [z] <0 || numeri [z]> SomeBigValue) // Drucke keine Sterne. Andernfalls, wenn es gleich -42 oder +2,000,000,000 ist, kannst du interessante Ergebnisse erhalten. –

+1

@CodeGorilla Ja, gültige Punkte - Danke – Steve

+0

Indem Sie dies tun und die Zeichenfolge in Position c setzen, wird die * .. nicht passend. Ich habe diese Zeile in << setw (c) eingefügt, aber wie für den "Histogramm Text" wird es nicht fit. Warum? – folgore95

1

Ich denke, der beste Weg zu tun ist mit für Schleifen.

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
int disposable = 0; 
int a=8; 
int n=12; 
int c=10; 


cout<<"How many numbers do you want to enter?\n"; 
cin>>disposable; 
cout<<endl; 

int numbers[disposable]; 

for(int i = 0; i<disposable; i++) 
{ 
    cout<<"Enter a number: "; 
    cin>>numbers[i]; 
} 
cout<<setw(n)<<"Index"; 
cout<<setw(a)<<"Valori"<<" "; 
cout<<setw(c)<<"Instogramma\n"; 

for(int i = 0; i<disposable; i++) 
{ 
    cout<<setw(n)<<i; 
    cout<<setw(a)<<numbers[i]; 
    cout<<setw(c); 
    for(int j = 0; j<numbers[i]; j++) 
    { 
     cout<<"*"; 
    } 
    cout<<endl; 

} 

}

Dieser Code funktioniert, werden Sie, wie Sie herausfinden müssen, auf der * die Ausrichtung zu beheben ist: D Viel Glück Mann!

+0

Nein, dieser Code funktioniert nicht. – folgore95

+0

Es funktioniert, wenn es nicht für Sie funktioniert, tun Sie etwas falsch. Könnte sein, dass wir auch andere Compiler verwenden. – Yoldrim

0

enter image description here

Hier ist eine weitere Idee. Es ist eine Vektor-Array-Version eines Histogrammprogramms. Sie können eine Reihe von Zahlen mit nur einer cin Zeile mit Hilfe von stringstream eingeben, aber der einzige Unterschied ist, dass es die Eingabe in einem vector speichert. Es zeichnet dann ein Histogramm auf der Grundlage der Eingabe.

Drücken Sie einfach zweimal die Taste <ENTER>, damit das Programm weiß, dass Sie mit der Eingabe der Zahlen fertig sind.

#include <iostream> 
#include <iterator> 
#include <vector> 
#include <algorithm> 
#include <sstream> 
using namespace std; 

vector<int> Vector; 
string line; 

void drawchart(int max); 


int main() { 

    cout<<"Chart drawing program (Histogram) \n"; 
    cout<<"Enter a series of numbers. \n"; 
    cout<<"Seperate with a space, press <ENTER> TWICE to end input \n"; 
    cout<<" (e.g 2 3 4 5 6) > "; 

    if(!getline(cin, line)) return 1; 
    istringstream iss(line); 

    copy(istream_iterator<int>(iss), istream_iterator<int>(), back_inserter(Vector)); 

    copy(Vector.begin(), Vector.end(), ostream_iterator<int>(cout, ", ")); 

    cout<<"\nDrawing chart.. \n\n"; 

    drawchart(Vector.size()); 


    cout<<"Press ANY key to close.\n\n";  
    cin.ignore();cin.get(); 

return 0; 
} 

// draws a chart or hjistogram 
void drawchart(int max){ 
    for(int i = 0; i < max ; i++){ 
     for(int j = 0; j < Vector[i]; j++) cout << "*"; 
     cout << endl; 
    } 
}