Erstmal hallo! Ich war schon einmal in diesem Forum, wegen der java installation. Nun der zweite Schritt Um programmieren zu können muss man Algorithmen verstehen. Unten seht ihr eine Frage aus einem Buch, welche ic beantwortet habe. Ist meine Antwort richtig?
Wir betrachten den folgenden Algorithmus, dem als Eingabe ein Array a aus n natürlichen
Zahlen übergeben wird und der als Ausgabe zwei Zahlen x und y liefert.
Input: Array a der Länge n
x := a[0]
y := a[0]
for i = 1 to n − 1 do
if x > a then
x := a
end if
if y < a then
y := a
end if
end for
Output: x, y
a) Was berechnet der obige Algorithmus? Antwort: Er untersucht das Feld bis n-1. Für x sucht er den kleinsten Wert für y den größten.
b) Wie viele Vergleiche führt der obige Algorithmus durch? Hierbei sollen nur Vergleiche mit Elementen aus a berücksichtigt werden.
Antwort: Er führt (1,2,.....,n-1) Vergeliche für x und für y durch
c) Geben Sie einen Algorithmus in Pseudocode an, der dasselbe Problem wie der obige Algorithmus
löst und dafür höchstens 3/2n Vergleiche von Elementen aus a benötigt. Beschreiben
Sie zusätzlich die Grundidee Ihres Algorithmus in wenigen Sätzen.
Bei dieser Frage tue ich mich schon schwer, weil ich es eben selber schreiben muss. Ihr wisst bestimmt sofort die Antwort, aber bitte antwortet nicht, bevor ich nicht geantwortet hab.
Start
(Pfeil nach unten)
x<--1
(Pfeil nach unten)
x<100 (Pfeil auf die Seite mit falls "NEIN") Ende
(Pfeil nach unten mit falls "JA")
Print "Hallo"
(Der Pfeil geht links zurück an die Stelle nach "x<--1" also vor x<100)
Ich meine "Hallo" wird nur einmal ausgegeben, weil es keinen zusätzlichen Befehl gibt, dass x die Positionen von 1 bis Hundert immer einzeln verschiebt. oder?
X ist immer kleiner 100, da es nirgendwo erhöht wird.
Somit wird der Text unendlich oft ausgegeben (vielleicht hast du eine Zeile vergessen?)
Deine Anmerkung 'dass x die Positionen von 1 bis Hundert immer einzeln verschiebt.' verstehe ich nicht.
Wenn x eine Zahl sein soll, gibt es weder Positionen noch irgendetwas, was verschoben werden kann.
X ist immer kleiner 100, da es nirgendwo erhöht wird.
Somit wird der Text unendlich oft ausgegeben (vielleicht hast du eine Zeile vergessen?)
Deine Anmerkung 'dass x die Positionen von 1 bis Hundert immer einzeln verschiebt.' verstehe ich nicht.
Wenn x eine Zahl sein soll, gibt es weder Positionen noch irgendetwas, was verschoben werden kann.
Ich dachte hier ist x nur die Position und keine Zahl. Mit Unendlich hast du schon Recht. Wenn x immer an der Position 1 bleibt wird es ein Kreislauf. Ich hätte gedacht, dass 100 in diesem Fall =(z.B.)n ist. Also die Anzahl der Felder und nicht eine Zahl im Feld.
Ich stelle mir das so vor: x wird an Position 1 gesetzt. Dann: Falls x ist kleiner die mögliche Anzahl der Positionen(hier n=100 x=1) dann Print hallo. Da es dann keine Befehle zum verschieben von Positionen gibt, wird es ein unendlicher Kreislauf. ODER VERWECHSLE ICH hier x mit i vom ersten Beispiel(ganz oben)?
function x (int n,K){int j = n;int max;while( j >1){
max =1;
i =2;while(i <= j){if(K[i]>K[max]){
max = i;
i = i +1;}// if}// whileintHilf=K[j];K[j]=K[max];K[max]=Hillf;
j = j-1;}// außen while}
function x (int n,K){int j = n;int max;while( j >1){
max =1;
i =2;while(i <= j){if(K[i]>K[max]){
max = i;
i = i +1;}// if}// whileintHilf=K[j];K[j]=K[max];K[max]=Hillf;
j = j-1;}// außen while}