Verfasst am: 12.05.2012, 09:30
Titel: Programmierung einer Aufgabe
Hallo erstmal,
habe folgenes problem, soll eine Logelei mit dem Programm lösen.
Die logelei in kurzvorm lautet das jemand ein packet mit ner Bombe bekommt wo 6 Schalter angebracht sind und nur wenn die richtige kombination gefunden wurde explodiert sie nicht.
Folgende Aussagen sind gegeben:
1. Wenn Schalter 1 nach links und außerdem sowohl Schalter 2 als auch Schalter 5 nach rechts sind, knallts.
2. Wenn Schalter 3 nach rechts und außerdem von den beiden Schaltern 1 und 6 mindestens einer nach rechts ist, knallts.
3. Wenn Schalter 1 nach links und außerdem die Schalter 2,4 und 5 nach rechts sind, knallts.
4. Wenn Schalter 4 nach links und zudem Schalter 6 nach rechts ist, knallts.
5. Wenn Schalter 2 und außerdem mindestens einer der beiden Schalter 1 und 6 nach links gestellt sind , knallts.
6. Wenn Schalter 4 nach rechts und zugleich Schalter 3 nach links ist, knallts.
7. Wenn sowohl Schalter 5 als auch Schalter 6 nach links gekippt sind, knallts.
Dies ist mein Ansatz:
Code:
Matrix=char('links gedrueckt','nicht gedrueckt', 'rechts gedrueckt') ;
[N,M]=size(Matrix);
for schalter1 = 1:3 for schalter2 =1:3 if schalter1 == schalter2
continue end for schalter3 = 1:3 if schalter3 == schalter1 | schalter3 == schalter2
continue end for schalter4= 1:3 if schalter4 == schalter1 | schalter4 == schalter2 | schalter4 == schalter3
continue end for schalter5= 1:3 if schalter5 == schalter1|schalter5 == schalter2|schalter5 == schalter3|schalter5 == schalter4
continue end for schlater6= 1:3 if schalter6 == schalter1|schalter6 == schalter2|schalter6 == schalter3|schalter6 == schalter4|schalter6 == schalter5
continue end
a1 = schalter1 == 1||schalter2 == 3 || schalter5 == 3;
a2 = schalter3 == 3||schalter1 == 3;
a3 = schalter3 == 3||schalter6 == 3;
a4 = schalter1 == 1||schalter2 ==3||schalter4==3||schalter5==3;
a5=schalter4 ==1||schalter6==3;
a6=schalter2==1||schalter1==1;
a7=schalter2==1||schalter6==1;
a8=schalter4==3||schalter3==1;
a9=schalter5==1||schalter6==1;
gesamt = a1 && a2 && a3 && a4 && a5 && a6 && a7 && a8 && a9;
if(gesamt) fprintf('Schalter1 ist %s\n', Matrix (schalter1,1:N));
fprintf('Schalter2 ist %s\n', Matrix (schalter2, 1:N));
fprintf('Schalter3 ist %s\n', Matrix (schalter3, 1:N));
fprintf('Schalter4 ist %s\n', Matrix (schalter4, 1:N));
fprintf('Schalter5 ist %s\n', Matrix (schalter5,1:N));
fprintf('Schalter6 ist %s\n', Matrix (schalter6,1:N));
end end end end end end end
jetzt meine Frage: ich habe die Bedingungen ja aufgestellt nur leider bekomme ich keine Ergebnisse.
Zudem weiß ich auch recht nicht ob die Aussagen die ich aufgestellt habe so richtig geschrieben wurden, wäre schön wenn mir jemand bei dem Problem helfen könnte.
entferne alle deine Bedingungen mit CONTINUE, da erstens diese an dieser Stelle ganz unnötig sind und zweitens machen diese keinen Sinn.
Wie willst du erreichen mit 3 Werten, dass alle 6 Schalter unterschiedliche Werte annehmen, also kommst damit nicht mal bis zu vierten Schalter.
Außerdem hast in FOR den Namen "schalter6" falsch geschrieben
Danke schon mal im vorraus für die wertvollen Tips, also mit ergebnisse mein ich, wenn ich das skript ins Programm ziehe werden mir keine ergebnisse angezeigt, normalerweise habe ich ja in den letzten Befehlen das Programm aufgefordert mir die gewissen Schalter mit einer antwort aus zu geben wie Schater1 ist gedrückt.
An denny der tip mit den Bedingungen nach den Variablen hat mich überzeugt, aber das mit den Schaltern hab ich nicht ganz Verstanden, am Ende kann ja jeder schalter nur jeweils drei bedingungen annehmen, bzw drei stellungen haben links gedrückt, rechts gedrückt und gar nicht gedrückt???
An denny der tip mit den Bedingungen nach den Variablen hat mich überzeugt, aber das mit den Schaltern hab ich nicht ganz Verstanden, am Ende kann ja jeder schalter nur jeweils drei bedingungen annehmen, bzw drei stellungen haben links gedrückt, rechts gedrückt und gar nicht gedrückt???
Ja es gibt 3 Positionen, welche die Schalter annehmen können.
Du versuchst es aber vorab zu prüfen, und dann diese Schalterposition zu überspringen, also kommt dann vor, dass an der Stelle
immer aus der Schleife hinausspringst. Weil vorher hast du ja schon geprüft, dass der Schalter1 und Schalter2 und Schalter 3 unterschiedlich. sein sollen. 3 Schalter Positionen bereits besetzt und du verlangst von Schalter4, dass es anders gesetzt ist als vorherige Schalter. Das Funktioniert nicht, weil wie bereits erwähnt hast nur 3 Positionsmöglichkeiten. Also kommst du nie bis zum Schalter6.
Außerdem hast du ja bereits die Stelle wo du abprüfst, das IF (gesamt) .
Das genügt. Also sind die anderen Bedingungen überflüssig.
also danke dir danny,
habe jetzt den quellcode so umgeändert wie du meintest.
ich glaube aber das das ergebnis nicht richtig stimmt mit den Bedingungen, wäre schön wenn du mir noch dabei helfen könntest...
also mein neuer Quellcode
Code:
Matrix=char('links gedrueckt','nicht gedrueckt', 'rechts gedrueckt') ;
[M,N]=size(Matrix);
for schalter1 = 1:3 for schalter2 =1:3
gesamt = a1 && a2 && a3 && a4 && a5 && a6 && a7 && a8 && a9;
if(gesamt) fprintf('Schalter1 ist %s\n', Matrix (schalter1,1:N));
fprintf('Schalter2 ist %s\n', Matrix (schalter2, 1:N));
fprintf('Schalter3 ist %s\n', Matrix (schalter3, 1:N));
fprintf('Schalter4 ist %s\n', Matrix (schalter4, 1:N));
fprintf('Schalter5 ist %s\n', Matrix (schalter5,1:N));
fprintf('Schalter6 ist %s\n', Matrix (schalter6,1:N));
end end end end end end end
Schalter1 ist links gedrueckt
Schalter2 ist links gedrueckt
Schalter3 ist rechts gedrueckt
Schalter4 ist rechts gedrueckt
Schalter5 ist links gedrueckt
Schalter6 ist rechts gedrueckt
du hast in der Aufgabe doch 7 Bedingungen , warum hast 9 definiert?
Bedingung Eins ist schon mal falsch:
Zitat:
Wenn Schalter 1 nach links und außerdem sowohl Schalter 2 als auch Schalter 5 nach rechts sind, knallts.
Du hast a1= schalter1==1||schalter2 == 3 || schalter5 == 3 sollte aber
a1 = schalter1 == 1 && schalter2 == 3 && schalter5 == 3;
Überprüfe alle deine Bedingungen.
Außerdem bedenke, dass es die Bedingungen sind wo die Bombe explodiert und du such die Schalterkombination, wo die Bombe entschärft wird.
Also wie sollte die GESAMT denn lauten?
Außerdem deine Annahme ist falsch, es müssen ja alle Schalter gedrückt sein, weil man ja nur eine Kombination hat, wo die Bombe nicht explodiert Also muss du Zustand "Nicht gedrückt" übersprungen werden
gesamt = ~(a1) && ~(a2) && ~(a3) && ~(a4) && ~(a5) && ~(a6) && ~(a7);
if(gesamt) fprintf('Schalter1 ist %s\n', Matrix (schalter1,1:N));
fprintf('Schalter2 ist %s\n', Matrix (schalter2, 1:N));
fprintf('Schalter3 ist %s\n', Matrix (schalter3, 1:N));
fprintf('Schalter4 ist %s\n', Matrix (schalter4, 1:N));
fprintf('Schalter5 ist %s\n', Matrix (schalter5,1:N));
fprintf('Schalter6 ist %s\n', Matrix (schalter6,1:N));
end end end end end end end
Ich danke dir rechtherzlich, du hast mir das ganze Wochenende gerettet.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.