Wie kann ich statt 1 und 0 ....Ein und Aus anzeigen``???
-
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 1Und 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);
-
Frost1989 schrieb:
mit anderen worten ich kann es mit der string methode nicht mehr formatiert ausgeben??
Wer hat behauptet, dass man mit printf keine Strings ausgeben kann?
Du kannst Strings mit printf sogar sehr gut formatiert ausgeben.
Du kannst die Ausgabebreite begrenzen, bzw. vorgeben. Auch links- oder rechtsbündig geht.
-
@Frost: Du nervst! Machst du jetzt für jeden Furz ein neues Thema auf? Kauf dir Bücher und lerne programmieren.