Operatoren Schrittweise Ausführung eines imperativen Algorithmus

felixbaumann22

Neues Mitglied
Hallo liebes Forum,
Ich komme bald in den Genuss mich wiederholt einer Klausur in Algorithmen und Programmieren zu stellen und probier gerade die uns bereitgestellten Aufgaben zu lösen.
Ich muss aber bei mindestens 50 % der Aufgaben kapitulieren.
Vielleicht kann mir ja jemand von euch weiterhelfen.
Die folgende Übungsserie soll den unterschied zwischen applikativen und imperativen Algorithmen verdeutlichen.
Dazu wurde folgende Aufgabe gestellt:

Gegeben sei folgender imperativer Algorithmus in Java:

Java:
public static int func1(int x, int y)
{
int result = 0;
}
           if(y == 0)
           {
                return 0;
                     }
           while(x >= y) {
           x -= y;
           result++;
           }
           return result;

a) Führen Sie für die Zahlen x=17 und y=5 den oben stehenden Algorithmus schrittweise aus und notieren Sie die Ergebnisse.

b) Welche Funktion wird durch diesen Algorithmus realisiert?

c) Fu ̈r welche Werte von x und y terminiert func1?

d) U ̈berfu ̈hren Sie func1 in einen applikativen Java-Algorithmus und nennen Sie diesen
func2.


So ehrlich gesagt hab ich keine Ahnung wie ich hier ran gehen soll :) Hab auch probiert das ganze in Eclipse mal in Java zu schreiben aber da kamen nur Fehlermeldungen in der Console...
ich probier trotzdem mal eine Lösung zu finden:

a) also es gibt eine methode func1 mit den int werten x und y
in der dritten Zeile wird ein Datentyp Int mit dem Namen result deklariert und sein Wert auf 0 initialisiert.
in Zeile fünf kommt dann die Bedingung wenn y gleich 0 ist gib 0 zurück
Danach kommt eine Whileschleife mit der Bedingung x muss größer oder gleichgroß y sein, solange führe x-=y aus
und result++
nach der while schleife soll return zurück gegeben werden.

Nun also konkret zu den zwei Werten
x=17 und y=5
if(5 ==0) gebe 0 zurück // nichT der Fall also weiter zur While-Schleife...
while(17>=5)
x=17-5 //(das ergibt x= 12)
result++ //(erhöhe result um eins, das ergibt 1)
while (12>=5)
x= 12-5 //(das ergibt x= 7)
result++ //(erhöhe result wieder um eins, das ergibt 2)
while(7>=5)
x=7-5 //(das ergibt x= 2)
result++ //(erhöhe result wieder um eins, das ergibt 3)
while (2>=5) //(ist nicht der Fall also springe ich ans Ende der Whileschleife
und gebe result zurück //(result sollte zu diesem Zeitpunkt 3 sein)
if (2 ==0) //(ist nicht der Fall )
also return result //(result = 3)

Dann sollte in Java bei dem Befehl System.out.println(result) eigentlich 3 rauskommen oder sehe ich das Falsch?

b) Mhh Subtraktion von zwei natürlichen Zahlen im positiven Wertebereich

c) für x=5 y=5 oder auch für die Werte x=20 und y=2

d)

Java:
public class func2
{ public static void main(String [] args)
   {
   int x = 17;
   int y = 5;
   int result = 0;
 
   if(y == 0)
   {
   } while(x >= y) {
   x -= y;
   result++;
   }
   System.out.println(result);
   }

}

Könnt ihr mir vielleicht weiterhelfen? Vielen Dank Liebe Grüße Felix
 
Zuletzt bearbeitet von einem Moderator:

felixbaumann22

Neues Mitglied
Ich glaube die Aufgabe b) läuft eher auf Iteration hinaus. Und
mir ist gerade aufgefallen d) ist falsch weil in applikativen Algorithmen ja keine Schleifen erlaubt sind.
hab d) nochmal überarbeitet:
Java:
public class func2
{ public static void main(String [] args)
   {
   int x = 17;
   int y = 5;
   int result = 0;

   if(y == 0)
   {
   } else {
   x -= y;
   result++;
   }
     if(y == 0)
     {
     } else {
       x -= y;
       result++;
  
     }
       if(y == 0)
         {
           } else {
               x -= y;
                 result++;
             }

   System.out.println(result);
   }

}
 
Zuletzt bearbeitet von einem Moderator:

stg

Top Contributor
Deine Lösung zu d) ist totaler Unsinn. Schnapp dir noch mal euer Skript und schau nach, was die Begriff applikativ bzw imperativ überhaupt bedeuten. Offernbar wurde das von dir noch nicht verstanden.

Deine Lösung zu a) ist in Ordnung, wenn man davon ausgeht, dass du nur beim abtippen des Codes Tippfehler gemacht hast. So, wie der Code hier steht, kompiliert er nämlich nicht einmal fehlerfrei.

Bei c) sollst du nicht einfach ein paar Beispiel angeben, sondern (allgemein formuliert) alle Möglichkeiten für Paare (x,y) angeben, für die der Algorihmus terminiert.

zu b) Ich bin mir nicht sicher, ob es für die Funktion, welche dort abgebildet wird, tatsächlich einen Namen gibt. Es ist fast eine Ganzzahl-Division, aber eben auch nur fast...
 

Neue Themen


Oben