Klausuraufgaben

Torsten.D

Mitglied
Bin Anfänger und das ist schon übertrieben! Alsö schreibe demnächst eine Klausur und arbeite daher alte Klausuren durch. So stehe jetzt vo diesem Problem:

6. Aufgabe (11 Punkte): Welchen Wert gibt die Methode methode1 bei folgenden Aufrufen an die aufrufende Methode zurück (Mit Begründung ! Dokumentation sämtlicher auftretender Variableninhalte von a, b, c, d, e und f ! Rechenoperationen dokumentieren; nicht raten ! ) :
methode1 (true) , methode1 (false)


Java:
public static int methode1 (boolean a){
        int b=2,c=0, d= -3, e ;
        boolean f = true;
        if (!a){
          while(f){
            e = b * c++;
            d =(int)(e/b + 5.5);
            b = d%3 * --e; 
            f= a&&f ;
            b =(byte)(-b +(-1*3.14));
         }
        }
        else b = b + d /(c-1);
        return b;
     }

Meine Fragen wäre:

c++ addiert 1 dazu aber wann?

d%3 dann wäre Rest gleich -1?

a&&f konditional AND aber was heißt das genau?

Keine Angst, dass ist nur ein Aufgaben Teil, außer Java komm ich ganz gut zurecht!

Wäre nett wenn mir einer helfen könnte!
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Wieso führst du die Methode nicht mal aus und vollziehst alles selber nach? Oder beantwortest dir deine Fragen mit kleinen Code-Schnippseln selber
c++ addiert 1 dazu aber wann?
Java:
		int c = 10;
		int b = 10 * c++;
		System.out.println(b+" "+c);  // gibt 100 11 aus

d%3 dann wäre Rest gleich -1?
zu welchem Zeitpunkt? :bae:

a&&f konditional AND aber was heißt das genau?

Galileo Computing :: Java ist auch eine Insel – 2.5 Ausdrücke, Operanden und Operatoren (könnte dir auch bei deinen anderen Fragen helfen)
 

XHelp

Top Contributor
Probier es doch einfach selber aus :bahnhof:
Code:
c++
: da wird zuerst c ausgelesen und dann 1 addiert:
Java:
c = 5;
d = c++;
//d = 5
//c = 6

Wie kommst du auf Rest
Code:
-1
?

a&&f: wenn
Code:
a
schon false ist, dann wird
Code:
f
nicht untersucht. In deinem Fall aber nicht wirklich relevant.
 

Torsten.D

Mitglied
Das ist genau das was ich sage wir würden es wahrscheinlich besser verstehen wenn wir es ausführen würden. Tuen wir aber nicht wir sitzen in einem Raum und schreiben solche Zeilen an die Tafel und sollen sagen was passiert. Demnach habe ich noch nie mit Java gearbeitet!

Also && habe ich soweit gesehen das es erst a auf false or true prüft und nur bei true f überprüft.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Das ist genau das was ich sage wir würden es wahrscheinlich besser verstehen wenn wir es ausführen würden. Tuen wir aber nicht wir sitzen in einem Raum und schreiben solche Zeilen an die Tafel und sollen sagen was passiert.

Ja aber was hindert dich jetzt es selbst FÜR DICH zu schreiben und auszuführen? Damit du verstehst was in dne jeweiligen Zeilen passiert.
 

Torsten.D

Mitglied
Ich habe noch nie mit Java gearbeitet, weiß nicht was ich alles Instalieren müsste. Hatte neulich ein Online-Einführung versucht aber mein System kann dann die Java-Datei nicht ausführen oder sucht im Netz nach Programmen die es können. Zudem ist der Aufwand größer als Zeit die mir in der Klausurenzeit verbleibt.
 

Torsten.D

Mitglied
Java:
public static int methode1 (boolean a){
        int b=2,c=0, d= -3, e ;
        boolean f = true;
        if (!a){
          while(f){
            e = b * c++;       //2*1=2
            d =(int)(e/b + 5.5);     //2/2+5,5=6,5
            b = d%3 * --e;        //6,5/3=2 Rest:0,5*1
            f= a&&f ;              //a= false???
            b =(byte)(-b +(-1*3.14));          //-0,5-3,14=3,64
         }
        }
        else b = b + d /(c-1);
        return b;
     }
Soweit komme ich aber mit && ist mir ein Rätsel a war doch nie gegeben!?!
 

eRaaaa

Top Contributor
a übergibst du der Methode, müsste eig.
Code:
false
sein damit du da in den if-Block überhaupt gelangst :D
Demnach wird f wohl dann auch
Code:
false
sein nach dem ersten Schleifendurchgang (d.h. es gibt auch nur einen :D)
 
M

Marcinek

Gast
Da innerhalb der Schleife
Code:
 if (!a){
gilt, muss a = false sein.

Code:
 e = b * c++;       //2*1=2

Eben nicht. Begründung steht weiter oben.
 

Torsten.D

Mitglied
Java:
public static int methode1 (boolean a){
        int b=2,c=0, d= -3, e ;
        boolean f = true;
        if (!a){
          while(f){
            e = b * c++;       //2*1=2
            d =(int)(e/b + 5.5);     //2/2+5,5=6,5
            b = d%3 * --e;        //6,5/3=2 Rest:0,5*1
            f= a&&f ;              //a= false???
            b =(byte)(-b +(-1*3.14));          //-0,5-3,14=3,64
         }
        }
        else b = b + d /(c-1);          //2+-3/-1=5
        return b;             //zurück zu b, läuft dann eine Schleife??
     }

!a heißt negiert!?! Sonst so stimmt das oder mache ich es verkehrt!?!
 

Torsten.D

Mitglied
Java:
public static int methode1 (boolean a){
        int b=2,c=0, d= -3, e ;
        boolean f = true;
        if (!a){
          while(f){
            e = b * c++;       //2*0=0
            d =(int)(e/b + 5.5);     //0/2+5,5=5
            b = d%3 * --e;        //5/3=1 Rest:2*-1
            f= a&&f ;              //a= false???
            b =(byte)(-b +(-1*3.14));          //2-3,14=-1
         }
        }
        else b = b + d /(c-1);          //2+-3/-1=5
        return b;             //zurück zu b, läuft dann eine Schleife??
     }
:noe:
 

eRaaaa

Top Contributor
Ja und wie kommst du dann auf halbe Zahlen? :) (bzw. Gleitkommazahl)
Java:
	public static int methode1(boolean a) {
		int b = 2, c = 0, d = -3, e;
		boolean f = true;
		if (!a) {
			while (f) {
				e = b * c++; // 0
				System.out.println(e); // c = 1
				d = (int) (e / b + 5.5); // 5
				System.out.println(d);
				b = d % 3 * --e; // -2
				System.out.println(b);
				f = a && f; // false
				System.out.println(f);
				b = (byte) (-b + (-1 * 3.14)); // -1
			}
		} else
			b = b + d / (c - 1); // 2+-3/-1=5
		return b; // b wird zurückgegeben, also -1
	}

Was meintest du mit //zurück zu b, läuft dann eine Schleife??
Lies dir auch nochmal durch was
Code:
return
macht!
 

Torsten.D

Mitglied
7. Aufgabe (15 Pkte.): Nachstehend sind zwei statische Methoden met und met1 dargestellt.
Java:
       public static int met (boolean a, int e){
         boolean feld [] = new boolean [e],logik=false ;
         int j ;
         for (j=0; j< e; j++){        //0<4;j=1
            logik =  !(logik||a) ;       //nicht logik= true und nicht a=false???
            feld[j]= logik && true ;
         }
         feld[j-2]= ((e-3)<4)|| !feld[0];
         feld[0]= (a||feld[1]) && !a;
         return (met1(feld,e)/3) ;
       } 
       public static int met1 (boolean vektor[], int r){
         int z, k=1;
         boolean i=false ;
         for (z=0;z<vektor.length;z++){
             i = i || vektor [z] ;
             if (i) k= z + 2 * k; 
         }
         return k;
       }
Betrachten Sie den Aufruf met(false,4) und geben Sie folgendes nachvollziehbar dokumentiert an
a) Welche Werte besitzen die Elemente des Felds feld unmittelbar vor dem Aufruf der Methode met1 ?
b) Welche Werte geben met1 und met an die jeweils aufrufenden Methoden zurück ?

Also eigentlich denke ich das er im feld 0 Anfängt!?!
Denke er fragt nach e im feld j!
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Hier hast du zwei Optionen.

Entweder Stift und Papier nehmen und die Änderungen des Arrays und der einzelnen Variablen entsprechend protokolieren.

Oder einmal laufen lassen und die Werte ausgeben.

Gruß,

Martin
 

Torsten.D

Mitglied
Ja ich habe Stift und Papier zur Hand und versuche es, aber bisher hält sich der Erfolg in Grenzen!;(

Ich denke da ich nicht mal verstehe was der Zweck dieses Aufrufs ist werde ich hier nicht weit kommen!
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Da gibt es keinen "zweck", den die Funktion erfüllt.

Anhand der Funktion sollst du verstehen lernen, was einzelne Zuweisungen so machen, damit du nicht jedesmal den Code ausführen musst, den du betrachtest.
 

Ariol

Top Contributor
Ich hab mal grad von Hand versucht den Ablauf aufzuschreiben. Ungetestet, aber durch Ausführen solltest du ja erkennen können ob alles passt:

Java:
//met(false,4):
	boolean a = false; int e = 4;
	boolean feld[4]; boolean logik = false;
	int j = 0;
	
	//for-Schleife:
		logik = !(logik||a)=!(false||false)=!false=true;
		feld[j] = feld[0]=logik&&true=logik=true;

		j = 1;
		logik = !(logik||a)=!(true||false)=!true=false;
		feld[j] = feld[1]=logik&&true=logik=false;

		j = 2;
		logik = !(logik||a)=!(false||false)=!false=true;
		feld[j]=feld[2] = logik&&true=logik=true;

		j = 3;
		logik = !(logik||a)=!(true||false)=!true=false;
		feld[j]=feld[3] = logik&&true=logik=false;

	feld[j-2]=feld[3-2]=feld[1] = ((e-3)<4)||!feld[0]=((4-3)<4)||!true=(1<4)||!true=true||!true=true;
	feld[0] = (a||feld[1])&&!a=(false||false)&&!false=false&&!true=false;

	//Werte vor dem Aufruf:
	a=false;e=4;feld={false,true,true,false};j=3;


	//Aufruf: met1(feld,e) = met1({false,true,true,false},4);
		boolean vektor[4] = {false,true,true,false}; int r = 4;
		int z = 0; int k = 1;
		boolean i = false;
		
		//for-Schleife
			i = i||vektor[z]=i||vektor[0]=false||false=false;
			
			z = 1;
			i = i||vektor[z]=i||vektor[1]=false||true=true;
			k = z+2*k=1+2*1=1+2=3;

			z = 2;
			i = i||vektor[z]=i||vektor[2]=true||true=true;
			k = z+2*k=2+2*3=2+6=8;

			z = 3;
			i = i||vektor[z]=i||vektor[3]=true||false=true;
			k = z+2*k=3+2*8=3+16=19;

		return 19;

	//Werte nach dem Aufruf:
	a=false;e=4;feld={false,true,true,false};j=3;
	return met1(feld,e)/3=19/3=6;
 

Ariol

Top Contributor
Update:
Java:
//met(false,4):
	boolean a = false; int e = 4;
	boolean feld[4]; boolean logik = false;
	int j = 0;
	
	//for-Schleife:
		logik = !(logik||a)=!(false||false)=!false=true;
		feld[j] = feld[0]=logik&&true=logik=true;

		j = 1;
		logik = !(logik||a)=!(true||false)=!true=false;
		feld[j] = feld[1]=logik&&true=logik=false;

		j = 2;
		logik = !(logik||a)=!(false||false)=!false=true;
		feld[j]=feld[2] = logik&&true=logik=true;

		j = 3;
		logik = !(logik||a)=!(true||false)=!true=false;
		feld[j]=feld[3] = logik&&true=logik=false;

		j = 4;

	feld[j-2]=feld[3-2]=feld[2] = ((e-3)<4)||!feld[0]=((4-3)<4)||!true=(1<4)||!true=true||!true=true;
	feld[0] = (a||feld[1])&&!a=(false||false)&&!false=false&&!true=false;

	//Werte vor dem Aufruf:
	a=false;e=4;feld={true,true,true,false};j=4;


	//Aufruf: met1(feld,e) = met1({true,true,true,false},4);
		boolean vektor[4] = {true,true,true,false}; int r = 4;
		int z = 0; int k = 1;
		boolean i = false;
		
		//for-Schleife
			i = i||vektor[z]=i||vektor[0]=true||false=true;
			k = z+2*k=0+2*1=0+2=2;
			
			z = 1;
			i = i||vektor[z]=i||vektor[1]=false||true=true;
			k = z+2*k=1+2*2=1+4=5;

			z = 2;
			i = i||vektor[z]=i||vektor[2]=true||true=true;
			k = z+2*k=2+2*5=2+10=12;

			z = 3;
			i = i||vektor[z]=i||vektor[3]=true||false=true;
			k = z+2*k=3+2*12=3+24=27;
			
			z=4;

		return 27;


	//Werte nach dem Aufruf:
	a=false;e=4;feld={true,true,true,false};j=4;

	return met1(feld,e)/3=27/3=9;
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben