C++ Brauche Hilfe bei Grafik in console

G

goloner

Gast
Hi Leute,

ich habe keine ahnung wie ich die aufgabe die ich erfüllen soll beschreiben soll deswegen zeig ich euch einfach mal das aufgabenblatt. :cool_alt:

wie ihr evtl.- unten sehen könnt funktioniert alles bis auf die ausgabe mit den Xen am ende. bin also für jeden tipp dankbar...





edit: habe noch paar infos in den code geschrieben.

Code:
#include <iostream>
#include <iomanip> //Textformatierungen
#include <cstdio>
#include <cstring>

using namespace std;

int erzeuge_r (int zahl); //Funktion 1200 Ohm
int erzeuge_r2 (int zahl); //Funktion 6*200 Ohm

//int grafik (int zahl); //Funktion für Grafik

int main (void) //Hauptprogramm
{
    srand(time(NULL)); 
    int w1200 [100] [10];
    int w200 [100] [10];     
    int i, j, n, n2, z, z2, end, zahl;
    z = 0; //zähler für genau 1200 Ohm Widerstaende
    end = 9; //zähler für waagerechte felder
    i = 0; //senkrechte felder
 
    cout << "Anzahl Widerstaende > ";
    cin >> n; 
    cout << endl;
    	
    n2 = n;	 //anzahl der zu simulierenden widerstaende
    	
	do //schleife für 1200 widerstaende
	{
        if(n < 10) end = n - 1;
    
		for(j = 0; j <= end; j++)
        {
        w1200 [i] [j] = erzeuge_r (zahl);
        cout << w1200 [i] [j] << "  ";
        n--;
        if(w1200 [i] [j] == 1200) z++;
        }
        
        cout << endl;
        
    i++;			
    }
    while(n > 0);
    
    cout << endl << endl; 
    
    end = 9;
    i = 0;
    
    do //schleife für 6*200 widerstaende
	{
        if(n2 < 10) end = n2 - 1;
    
		for(j = 0; j <= end; j++)
        {
        w200 [i] [j] = erzeuge_r2 (zahl);
        cout << w200 [i] [j] << "  ";
        n2--;
        if(w200 [i] [j] == 1200) z2++;
        }
        
        cout << endl;
        
    i++;			
    }
    while(n2 > 0);
    
    cout << endl << "Anzahl der Widerstaende mit genau 1200 Ohm: " << z << endl;
    cout << endl << "Anzahl der (6*200)Ketten mit genau 1200 Ohm: " << z2 << endl;
    
	getchar();
	getchar();
	return 0; 
}

int erzeuge_r (int zahl) //erzeugen der 1200 mit toleranz
{
     int ergebnis, zufall, ohm;
     
            zufall = rand () % 25 - 12;
            ohm = 1200;
            ergebnis = ohm + zufall;
            
            return ergebnis;
}
int erzeuge_r2 (int zahl) //erzeugen der 6*200 mit toleranz
{
     int ergebnis, zufall, ohm, x1, x2, x3, x4, x5, x6;
          
            ohm = 200;
            zufall = rand() % 5 - 2 ;
            x1 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x2 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x3 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x4 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x5 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x6 = ohm + zufall;
            ergebnis = x1 + x2 + x3 + x4 + x5 + x6;
            
            return ergebnis;
}
 
Zuletzt bearbeitet:
mh...,

hat denn keiner die zeit und lust mir zu helfen?

ich weiss nicht wie ich die grafische darstellungen der simulierten widerstaende von dem minimalen wert bis zum maximalen wert an die jeweilige funktion fr1200[25] oder fk1200[25]
weitergeben soll. mit der ausgabe als grafik mit den "X" würd ich wahrscheinlich etwas zeit brauchen aber hinbekommen.

z.b: wenn ich jeweils 100 widerstaende simuliert hätte gibt es zb 5 mit dem wert 1188 ohm und 2 mit genau 1200 ohm usw... und die mit dem niedrigsten möglichen wert bei der toleranz 1% von 1200 also 1188 wird das feld fr1200[0] plus eins gezählt und bei 1200 ohm das feld fr1200[12] bzw bekommt ein "X" hinzu. (siehe bild oben)

thx schonma falls sich jemand die arbeit macht...
 
OK,

bin einen guten schritt weiter. hab die felder w1200 [][] und w200[][] jetzt als "global" wirkende felder initalisiert also nicht mehr nur im "main" und schau da ich kann sie in der grafik funktion abrufen^^...

hätte ich auch mal früher drauf kommen können.


übrigens macht es ziemlich viel spass mit sich selbst zu reden:freak:
 
Sooo, ich habs geschafft und hab das alles mit einer super umstendlichen Abfrage aufgebaut.

Mal noch eine andere Frage: ich bin Anfänger und muss das für die FH machen. Wenn ich im I-Net nach Infos suche sehe ich, dass die meisten mit scanf und printf arbeiten. Könnte mir mal jemand den besseren bzw neueren Standart erzählen und sagen was genau der Unterschied ist mit cout und cin ???!?!!

Vielen dank...

Falls jemand Interesse hat ob bei 1200 oder bei 6 * 200 Ohm mit 1% Toleranz mehr 1200 Ohm Wiederstaende dabei sind :D.

ps. Bitte nicht viel mehr als 300 Stück berechnen lassen!

Code:
#include <iostream>
#include <iomanip> //Textformatierungen
#include <cstdio>
#include <cstring> //String / Felder Befehle

using namespace std;

int erzeuge_r (int zahl); //Funktion 1200 Ohm
int erzeuge_r2 (int zahl); //Funktion 6*200 Ohm

int grafik (int zahl); //Funktion für Grafik

int w1200 [100] [10]; //Globaler Zugriff in Funktion Grafik (zahl)
int w200 [100] [10]; //Globaler Zugriff in Funktion Grafik (zahl)
int ig = 0, jg = 0, ng, zg = 0; //Globale  zähler für Grafik

int main (void) //Hauptprogramm
{
    srand(time(NULL));
    char jn;     
    int i, j, n, n1, z, z2, end, zahl;
    
do //Komplettes Programm nocheinmal ausführen "jn"
{ 
    cout << "Anzahl der Widerstaende > ";
    cin >> n;
    cout << endl;
    	
    n1 = n;	
    ng = n;
    
    end = 9;
    z = 0;
    i = 0;
    	
	do //schleife für w1200
	{
        if(n1 < 10) end = n1 - 1;
    
		for(j = 0; j <= end; j++)
        {
            w1200 [i] [j] = erzeuge_r (zahl);
            cout << w1200 [i] [j] << "  ";
            n1--;
            if(w1200 [i] [j] == 1200) z++;
        }
        
    cout << endl;
    i++;			
    }
    while(n1 > 0); //Abbruchbedingung w1200-schleife
    
    cout << endl << endl; 
    
    end = 9; //rücksetzen der benötigten Variablen wegen änderung in Schleife w1200
    z2 = 0;
    n1 = n;
    i = 0;
    
    do //schleife für w200
	{
        if(n1 < 10) end = n1 - 1;
    
		for(j = 0; j <= end; j++)
        {
            w200 [i] [j] = erzeuge_r2 (zahl);
            cout << w200 [i] [j] << "  ";
            n1--;
            if(w200 [i] [j] == 1200) z2++;
        }
    cout << endl;
    i++;			
    }
    while(n1 > 0); //Abbruchbedingung w200-schleife
     
    cout << endl << "Anzahl der Widerstaende mit genau 1200 Ohm: " << z << endl;
    cout << endl << "Anzahl der (6*200)Ketten mit genau 1200 Ohm: " << z2 << endl;
    cout << endl << endl;
    
    cout << "1200 Ohm" << setw(37) << "6*200 Ohm";
    cout << endl << endl;
    
    grafik(zahl);
    
    cout << endl << endl;
    system ("pause");
    
    do
    {
        if(jn != 'n' && jn != 'j')
        {
            system("cls"); 
            cout << "Programm wiederholen?  [j/n] > "; //Abfrage programm wiederholen "jn"
            cin >> jn;
        }
    }
    while(jn != 'n' && jn != 'j');
    
    system("cls"); 
}
while(jn != 'n');
        
getchar();
return 0; 
}

int erzeuge_r (int zahl) // Funktion 1200 Ohm
{
     int ergebnis, zufall, ohm;
     
            zufall = rand () % 25 - 12;
            ohm = 1200;
            ergebnis = ohm + zufall;
            
            return ergebnis;
}
int erzeuge_r2 (int zahl) // Funktion 6*200 Ohm
{
     int ergebnis, zufall, ohm, x1, x2, x3, x4, x5, x6;
          
            ohm = 200;
            zufall = rand() % 5 - 2 ;
            x1 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x2 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x3 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x4 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x5 = ohm + zufall;
            zufall = rand() % 5 - 2 ;
            x6 = ohm + zufall;
            ergebnis = x1 + x2 + x3 + x4 + x5 + x6;
            
            return ergebnis;
}
int grafik (int zahl) //Funktion mit fr1200[i] und fk1200[i]
{
    int fr1200 [25], fk1200 [25];
    int i, end, n, l;
    end = 9; //Waagerechter Zähler
    n = ng; //Eingabe "n" Übergabe von global ng 
    
    if(zg != 1) //Nur beim ersten mal fr und fk "0" setzen 
    { 
    
        for(i = 0; i <= 24; i++) //fr1200 wird 0-24 "0" gesetzt
        {
              fr1200[i] = 0;
        }
        for(i = 0; i <= 24; i++) //fk1200 wird 0-24 "0" gesetzt
        {
              fk1200[i] = 0;
        }
    }
    do //schleife für w1200
	{
        if(n < 10) end = n - 1;
    
		for(jg = 0; jg <= end; jg++)
        {
            zahl = w1200 [ig] [jg];
        
        if(zahl == 1188) fr1200[0]++; //Zuordnung von fr1200
        if(zahl == 1189) fr1200[1]++;
        if(zahl == 1190) fr1200[2]++;
        if(zahl == 1191) fr1200[3]++;
        if(zahl == 1192) fr1200[4]++;
        if(zahl == 1193) fr1200[5]++;
        if(zahl == 1194) fr1200[6]++;
        if(zahl == 1195) fr1200[7]++;
        if(zahl == 1196) fr1200[8]++;
        if(zahl == 1197) fr1200[9]++;
        if(zahl == 1198) fr1200[10]++;
        if(zahl == 1199) fr1200[11]++;
        if(zahl == 1200) fr1200[12]++;
        if(zahl == 1201) fr1200[13]++;
        if(zahl == 1202) fr1200[14]++;
        if(zahl == 1203) fr1200[15]++;
        if(zahl == 1204) fr1200[16]++;
        if(zahl == 1205) fr1200[17]++;
        if(zahl == 1206) fr1200[18]++;
        if(zahl == 1207) fr1200[19]++;
        if(zahl == 1208) fr1200[20]++;
        if(zahl == 1209) fr1200[21]++;
        if(zahl == 1210) fr1200[22]++;
        if(zahl == 1211) fr1200[23]++;
        if(zahl == 1212) fr1200[24]++;
        n--;
        }
        
    ig++;			
    }
    while(n > 0); //Abbruchbedingung w1200-schleife
    
    n = ng;
    ig = 0;
    jg = 0;
    
    do //schleife für w200
	{
        if(n < 10) end = n - 1;
    
        for(jg = 0; jg <= end; jg++)
        {
            zahl = w200 [ig] [jg];
        
        if(zahl == 1188) fk1200[0]++; //Zuordnung von fk1200
        if(zahl == 1189) fk1200[1]++;
        if(zahl == 1190) fk1200[2]++;
        if(zahl == 1191) fk1200[3]++;
        if(zahl == 1192) fk1200[4]++;
        if(zahl == 1193) fk1200[5]++;
        if(zahl == 1194) fk1200[6]++;
        if(zahl == 1195) fk1200[7]++;
        if(zahl == 1196) fk1200[8]++;
        if(zahl == 1197) fk1200[9]++;
        if(zahl == 1198) fk1200[10]++;
        if(zahl == 1199) fk1200[11]++;
        if(zahl == 1200) fk1200[12]++;
        if(zahl == 1201) fk1200[13]++;
        if(zahl == 1202) fk1200[14]++;
        if(zahl == 1203) fk1200[15]++;
        if(zahl == 1204) fk1200[16]++;
        if(zahl == 1205) fk1200[17]++;
        if(zahl == 1206) fk1200[18]++;
        if(zahl == 1207) fk1200[19]++;
        if(zahl == 1208) fk1200[20]++;
        if(zahl == 1209) fk1200[21]++;
        if(zahl == 1210) fk1200[22]++;
        if(zahl == 1211) fk1200[23]++;
        if(zahl == 1212) fk1200[24]++;
        n--;
        }
        
    ig++;			
    }
    while(n > 0); //Abbruchbedingung w200-schleife
    
    zg = 1;
    
    for (i = 0; i <= 24; i++) 
    {
        l = 36;
    
        if(fr1200[i] != 0) l = l - fr1200[i];
    
        cout << "| " << setfill('X') << setw(fr1200[i]) << ""; 
        cout << setfill(' ') << setw(l) << "| " << setfill('X') << setw(fk1200[i]) << "" << endl;
    }
}
 
Zurück
Top