Wie kann ich statt 1 und 0 ....Ein und Aus anzeigen``???



  • Hallo,

    ich habe schon rumprobiert aber ich komme nicht weiter.

    Bei meiner Ausgabe habe ich eine Tabelle die Zustände mit 1 und 0 darstellt.

    Ich möchte aber dass "Ein" für "1" steht

    und "Aus" für "0".

    Siehe Ausgabe

    Ausgabe
    http://www.bilder-upload.eu/thumb/6f7ee8-1482079283.png

    Danke!

    #include <stdio.h> //Informationen zur Standard Ein/Ausgabe;
    #include <stdlib.h> //Bibliothek aufrufen;
    
    int main(void) { //Startpunkt des Programms
    
    	//Schalter werden als Variablen festgelegt; Lampe = s1s2 + s3s5 + s4s5
    	int s1=0,s2=0,s3=0,s4=0,s5=0,L=0,j;
    
    	//Zustände werden in tabellenform dargestellt
    	printf("Fall\t S1\t S2\t S3\t S4\t S5\t L\t\n");
    
    	//Durchlaufbedingung: Führe aus, solange j zwischen 1 und 32 ist, erhöhe j um eins
    	for (j=1;j<=32;j++)
    	{
    		//Tabellenkopf wird ausgegeben
    		printf("%d.\t %d\t %d\t %d\t %d\t %d\t %d\t\n" ,j,s1,s2,s3,s4,s5,L);
    		//S1 Spalte; wenn Bedingung erfüllt, ist Schalter 1 an
    		if (j>=16)
    		{
    			s1=1;
    		}
    		//S2 Spalte; wenn Bedingung erfüllt, ist Schalter 2 an
    		if ((j>=8 && j<=15)||(j>=24 && j<=32))
    		{
    			s2=1;
    		}
    		else
    		{
    			s2=0; //Andernfalls bei nicht erfüllter Bedingung, ist Schalter 2 aus
    		}
    		//S3 Spalte; wenn Bedingung erfüllt, s3=an
    		if ((j>=4 && j<=7)||(j>=12 && j<=15)||(j>=20 && j<=23)||(j>=28 && j<=32))
    		{
    			s3=1;
    		}
    		else
    		{
    			s3=0; //Andernfalls ist der Schalter aus
    		}
    		//S4 Spalte; wenn Bedingung erfüllt, s4=an
    		if ((j>=2 && j<=3)||(j>=6 && j<=7)||(j>=10 && j<=11)||(j>=14 && j<=15)
    				||(j>=18 && j<=19)||(j>=22 && j<=23)||(j>=26 && j<=27)||(j>=30 && j<=31))
    		{
    			s4=1;
    		}
    		else
    		{
    			s4=0; //Andernfalls ist Schalter 4 aus
    		}
    		//S5 Spalte; wenn Bedingung erfüllt ist s5=an
    		if(j==1||j==3||j==5||j==7||j==9||j==11||j==13||j==15
    				||j==17||j==19||j==21||j==23||j==25||j==27||j==29||j==31)
    		{
    			s5=1;
    		}
    		else
    		{
    			s5=0; //Andernfalls ist Schalter 5 aus
    		}
    		//Lampe leuchtet wenn: S1 und S2 = 1; oder S3 und S5 = 1, oder S4 und S5 = 1
    		if ((s1==1 && s2==1)||(s3==1 && s5==1) || (s4==1 && s5==1))
    		{
    			L=1;
    		}
    		else
    		{
    			L=0; //Andernfalls ist die Lampe aus
    		}
    	}
    	printf("\nLegende: Schalter/Lampe AUS=0; Schalter/Lampe AN=1"
    			"\n\t Schalter=S; Lampe=L"); //Textausgabe um Legende anzuzeigen
    	return 0;
    
    }
    


  • Das musst du über Stringausgabe machen.

    Wenn es nur sehr wenig vorkommt, kannst du das mit dem ?: Operator machen:

    printf("Zustand %d ist %s\n", s, s?"Ein":"Aus" );
    

    Wenn es häufiger vorkommt, dann nimm ein Array auf Strings

    char *AusEin[] = {"Aus", "Ein"};
    ...
    int s = 1;
    ...
    printf("Zustand %d ist %s\n", s, AusEin[!!s]);
    

    Edit: Tippfehler beseitigt } statt ]



  • Mach aus L einen char* und dann weise ihm "Ein" oder "Aus" zu:

    char *L = "Aus";
    ...
    if (...)
    {
       L = "Ein";
    }
    ...
    puts(L);  // Ausgabe
    


  • Du musst dich mal mit Bitoperationen befassen.

    Dann kannst du sowas wie

    s1 = j & 16; // s1 ist 0 oder 16
    

    machen
    Mit einem if, ?: oder !! gehts auch auf 0 und 1

    Und bei (s1==1 && s2==1) reicht

    (s1 && s2)
    


  • DirkB schrieb:

    AusEin[!!s]);
    

    Hui, das ist mir aber mal ein interessantes Konstrukt. Was kommt bei nicht nicht wohl raus, falls dein Compiler da überhaupt mitspielt?

    EDIT:
    Ach übrigens: wieso nicht einfach ein ...? Nein, ich höre auf mit meinen hacks bevor ich wieder Haue bekomme.



  • Ich kriege es nicht hin

    😞 😞

    ...



  • EOP schrieb:

    DirkB schrieb:

    AusEin[!!s]);
    

    Hui, das ist mir aber mal ein interessantes Konstrukt. Was kommt bei nicht nicht wohl raus, falls dein Compiler da überhaupt mitspielt?

    Der Compiler wird jeden Wert >1 zu 1 machen. Und 0 bleibt 0.



  • Frost1989 schrieb:

    Ich kriege es nicht hin

    😞 😞

    ...

    Top Fehlerbeschreibung. 🙄



  • Andromeda schrieb:

    Der Compiler wird jeden Wert >1 zu 1 machen. Und 0 bleibt 0.

    Besser
    Der Compiler wird jeden Wert !=0 zu 1 machen. Und 0 bleibt 0.



  • DirkB schrieb:

    Andromeda schrieb:

    Der Compiler wird jeden Wert >1 zu 1 machen. Und 0 bleibt 0.

    Besser
    Der Compiler wird jeden Wert !=0 zu 1 machen. Und 0 bleibt 0.

    Tja, wegen solcher fiesen Hacks haben Hi-Level-Sprachen einen Boolean-Datentyp.

    !!x sieht scheußlich aus. Nimm besser x&1. 🙂



  • Meine Ausgabe sieht merkwürdig aus wenn ich das mit der Methode von Andromeda versuche.

    Ausgabe
    http://www.bilder-upload.eu/thumb/501351-1482083347.png

    #include <stdio.h> 	
    #include <stdlib.h> 
    
    int main(void) { 
    
    int main(void) {
    
    	//Variable Schalter werden definiert
    	//Lampe an = s1s2 + s3s5 + s4s5
    	int s1=0,s2=0,s3=0,s4=0,s5=0,j;
    	char L = "AUS";
    
    	//Schalterstellung darstellen(in Tabellenform)
    	printf("Fall\t S1\t S2\t S3\t S4\t S5\t L\t\n");
    
    	//Durchlaufbedingung: Führe aus, solange j zwischen 1 und 32 ist, erhöhe j um eins
    	for (j=1;j<=32;j++)
    	{
    
    		//Tabellenkopf wird ausgegeben
    		printf("%d\t %d\t %d\t %d\t %d\t %d\t\n" ,j,s1,s2,s3,s4,s5);
    		puts(L);
    
    		//S1 Spalte; wenn Bedingung erfüllt, ist Schalter 1 an
    		if (j>=16)
    		{
    			s1=1;
    		}
    		//S2 Spalte; wenn Bedingung erfüllt, ist Schalter 2 an
    		if ((j>=8 && j<=15)||(j>=24 && j<=32))
    		{
    			s2=1;
    		}
    		else
    		{
    			s2=0; //Andernfalls bei nicht erfüllter Bedingung, ist Schalter 2 aus
    		}
    		//S3 Spalte; wenn Bedingung erfüllt, s3=an
    		if ((j>=4 && j<=7)||(j>=12 && j<=15)||(j>=20 && j<=23)||(j>=28 && j<=32))
    		{
    			s3=1;
    		}
    		else
    		{
    			s3=0; //Andernfalls ist der Schalter aus
    		}
    		//S4 Spalte; wenn Bedingung erfüllt, s4=an
    		if ((j>=2 && j<=3)||(j>=6 && j<=7)||(j>=10 && j<=11)||(j>=14 && j<=15)
    				||(j>=18 && j<=19)||(j>=22 && j<=23)||(j>=26 && j<=27)||(j>=30 && j<=31))
    		{
    			s4=1;
    		}
    		else
    		{
    			s4=0; //Andernfalls ist Schalter 4 aus
    		}
    		//S5 Spalte; wenn Bedingung erfüllt ist s5=an
    		if(j==1||j==3||j==5||j==7||j==9||j==11||j==13||j==15
    				||j==17||j==19||j==21||j==23||j==25||j==27||j==29||j==31)
    		{
    			s5=1;
    		}
    		else
    		{
    			s5=0; //Andernfalls ist Schalter 5 aus
    		}
    		//Lampe leuchtet wenn: S1 und S2 = 1; oder S3 und S5 = 1, oder S4 und S5 = 1
    		if ((s1==1 && s2==1)||(s3==1 && s5==1) || (s4==1 && s5==1))
    		{
    			L="Ein";
    		}
    		else
    		{
    			L="Aus"; //Andernfalls ist die Lampe aus
    		}
    	}
    	printf("\nLegende: Schalter\nLampe AUS=0; Schalter/Lampe AN=1"
    			"\n\t Schalter=S; Lampe=L"); //Textausgabe um Legende anzuzeigen
    	return 0;
    
    }
    


  • Andromeda schrieb:

    DirkB schrieb:

    Andromeda schrieb:

    Der Compiler wird jeden Wert >1 zu 1 machen. Und 0 bleibt 0.

    Besser
    Der Compiler wird jeden Wert !=0 zu 1 machen. Und 0 bleibt 0.

    Tja, wegen solcher fiesen Hacks haben Hi-Level-Sprachen einen Boolean-Datentyp.

    Das funktioniert auch ohne !!.
    Mit wird aber der Wertebereich passend für das Array eingeschränkt.

    Andromeda schrieb:

    !!x sieht scheußlich aus. Nimm besser x&1. 🙂

    Das ist a) falsch und b) sieht es auch sche... aus.

    x&&1 würde noch gehen oder x||0 (du kannst die Ziffern auch durch x ersetzen).



  • Frost1989 schrieb:

    Meine Ausgabe sieht merkwürdig aus wenn ich das mit der Methode von Andromeda versuche.

    char L = "AUS";
    

    Das hat Andromeda auch nicht geschrieben.
    Und der Compiler müßte dir einen Haufen Warnungen um die Ohren hauen.
    Damit solltest du das Programm gar nicht erst laufen lassen.

    Behebe die Ursachen für die Warnungen.



  • Nicht char L sondern char* L

    Du brauchst einen Pointer.
    Sonst hast du nur ein Zeichen in L.



  • Andromeda schrieb:

    Nicht char L sondern char* L

    Du brauchst einen Pointer.
    Sonst hast du nur ein Zeichen in L.

    Und das ist das LSB von der Adresse, an der "AUS" steht.
    Und das hat recht wenig mit dem Inhalt zu tun.



  • ok tatsächlich,

    🙂 🙂 🙂

    es funktioniert nun für L

    aber L wird jetzt in der ersten Spalte asugegeben.

    Wie kann ich das hinbekommen dass es in der Spalte für "L" ausgegeben wird.

    und ich vermute mal ich kann es für s1 bis s5 auch so wir für L machen`?





  • puts gibt einen String aus und hängt ein Newline ('\n') automatisch hinten dran.

    printf ist die Abkürzung von print formatted. Also formatierte Ausgabe.

    Wie kannst du mit printf einen String ausgeben.

    Aber vielleicht kommst du dann dahinter, das der Weg von Andromeda einfach aussieht, aber sehr unübersichtlich wird.



  • mit anderen worten ich kann es mit der string methode nicht mehr formatiert ausgeben??

    Die Aufgabenstellung erfordert eine formatierte Ausgabe...

    😞



  • Frost1989 schrieb:

    mit anderen worten ich kann es mit der string methode nicht mehr formatiert ausgeben??

    Die Aufgabenstellung erfordert eine formatierte Ausgabe...

    😞

    Statt

    printf("%d\t %d\t %d\t %d\t %d\t %d\t\n" ,j,s1,s2,s3,s4,s5); 
    puts(L);
    

    Probiers mal so:

    printf("%d\t %d\t %d\t %d\t %d\t %d\t %s\n" ,j,s1,s2,s3,s4,s5, L);
    

    🙂


Anmelden zum Antworten