Algorithmus entwerfen

stevoo

Aktives Mitglied
Entwerfen Sie einen Algorithmus, der jede zweite Zahl eines Feldes A(i) mit i=1,2,....,n addiert, beginnend mit dem zweiten Element und am Ende das Ergebnis der Addition überprüft. Sollte es sich beim Endresultat um eine grade Zahl handeln, so soll dies durch eine entsprechende Meldung festgehalten werden: "Das Resultat der Addition ist gerade." Handelt es sich jedoch um eine ungerade Zahl, so gibt die Meldung "Das Resultat der Addition ist ungerade" darüber Auskunft.

MEINE FRAGE: IST MEIN PSEUDOCODE RICHTIG?

n.....Feldanzahl
i......Feldelement
A(i).....Feldinhalt von i
a.....Summe der Addition jedes zweiten Feldinhaltes bis n
x.....Summe der Addition zweier Feldinhalte

i=2
a=0

Solange i<n (HIER GEHT i<=n SO WIE BEI EINEM PAP NICHT, ODER?)
A(i)+A(i+2)==x
a=a+x
i=i+4

Wenn Rest(a,2)==0
Ausgabe: "Das Resultat der Addition ist gerade."
sonst
Ausgabe: "Das Resultat der Addition ist ungerade."
 
Zuletzt bearbeitet:

stevoo

Aktives Mitglied
oder ist das besser(ohne x)?:
Solange i<n (HIER GEHT i<=n SO WIE BEI EINEM PAP NICHT, ODER?)
a=a+((A(i)+A(i+2))
i=i+4

Wenn Rest(a,2)==0
Ausgabe: "Das Resultat der Addition ist gerade."
sonst
Ausgabe: "Das Resultat der Addition ist ungerade."
 
Zuletzt bearbeitet:

HoaX

Top Contributor
Schreib doch deinen Pseudocode einfach in Javacode und probier es aus? Dann siehst du ganz einfach ob er richtig ist.
 

crackm

Mitglied
Du nimmst ein Array packs da n generierte Zahlen Math.random() könnte da nützlich sein.
Nimmst ein Schleife und gehst längedes Array /2 Scrhitte.
in der Schlefe selbst multiplizierst du den index mit zwei und addiert 1 drauf.
-> Index 0 -> 2*0+1 damit fängst du automatisch bei zweitem element an.
..
 
Zuletzt bearbeitet:

njans

Top Contributor
Java:
//n.....Feldanzahl
		//i......Feldelement
		//A(i).....Feldinhalt von i
		//a.....Summe der Addition jedes zweiten Feldinhaltes bis n (summeZweitenFeldes)
		//x.....Summe der Addition zweier Feldinhalte (lokaleSumme)
		
		int[] feld = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
		int feldAnzahl = feld.length;
		int feldElement = 2;
		int summeZweitenFeldes = 0;
		int lokaleSumme;

		while ((feldElement) < feldAnzahl)
		{
			lokaleSumme = feld[feldElement] + feld[feldElement+2];
			summeZweitenFeldes+= lokaleSumme;
			feldElement += 4 ;
		}
		
		if (summeZweitenFeldes%2 == 0)
		{
			System.out.println("Das Resultat der Addition ist gerade.");
		}
		else
		{
			System.out.println("Das Resultat der Addition ist ungerade.");
		}

Das wäre dein erste Algorithmus, mal in Java implementiert (so ist er nicht richtig ;)).
 

stevoo

Aktives Mitglied
Du nimmst ein Array packs da n generierte Zahlen Math.random() könnte da nützlich sein.
Nimmst ein Schleife und gehst längedes Array /2 Scrhitte.
in der Schlefe selbst multiplizierst du den index mit zwei und addiert 1 drauf.
-> Index 0 -> 2*0+1 damit fängst du automatisch bei zweitem element an.
..

Lassen wir java doch bei Seite. Ich will nur wissen, ob dieser Pseudocode vom Sinn her richtig ist und nicht ob er jetzt bei java funktioniert. Hier gehts nur um den pseudocode. Wenn er falsch ist, will ich, dass ihn jemand richtig stellt und mir den Fehler zeigt. Wenn jetzt hier alle mit java implementieren kommen, von dem ich Momentan keine Ahnung habe, hilft mir das überhaupt nicht weiter.
 

stevoo

Aktives Mitglied
Entwerfen Sie einen Algorithmus, der jede zweite Zahl eines Feldes A(i) mit i=1,2,....,n addiert, beginnend mit dem zweiten Element und am Ende das Ergebnis der Addition überprüft. Sollte es sich beim Endresultat um eine grade Zahl handeln, so soll dies durch eine entsprechende Meldung festgehalten werden: "Das Resultat der Addition ist gerade." Handelt es sich jedoch um eine ungerade Zahl, so gibt die Meldung "Das Resultat der Addition ist ungerade" darüber Auskunft.

MEINE FRAGE: IST MEIN PSEUDOCODE RICHTIG?

n.....Feldanzahl
i......Feldelement
A(i).....Feldinhalt von i
a.....Summe der Addition jedes zweiten Feldinhaltes bis n

i=2
a=0

Solange i<n (HIER GEHT i<=n SO WIE BEI EINEM PAP NICHT, ODER?)
a=a+((A(i)+A(i+2))
i=i+4

Wenn Rest(a,2)==0
Ausgabe: "Das Resultat der Addition ist gerade."
sonst
Ausgabe: "Das Resultat der Addition ist ungerade."

IST ER JETZT RICHTIG?
 

njans

Top Contributor
Code:
Solange i<n (HIER GEHT i<=n SO WIE BEI EINEM PAP NICHT, ODER?)
a=a+((A(i)+A(i+2))
i=i+4

Damit greifst du außerhalb deines Feldes zu. Du fängst nicht ab, dass i+2 in deinem Feld ist.
Ein kleiner Einsatz: Mit einer For-Schleife müsstest du dir da keine Sorgen machen :)
 

stevoo

Aktives Mitglied
Code:
Solange i<n (HIER GEHT i<=n SO WIE BEI EINEM PAP NICHT, ODER?)
a=a+((A(i)+A(i+2))
i=i+4

Damit greifst du außerhalb deines Feldes zu. Du fängst nicht ab, dass i+2 in deinem Feld ist.
Ein kleiner Einsatz: Mit einer For-Schleife müsstest du dir da keine Sorgen machen :)

Sorry, aber bei deiner Aussage verstehe ich nur "Bahnhof" :-( Könntest du es so formulieren, dass ich es als Anfänger verstehe.

Aber ich versuche es trotzdem zu verstehen :)
Meinst du ,dass das Feld i+2 ab einem gewissen Zeitpunkt nicht stimmt. Weil wenn ich meinen Code so durchführe, dann ist bei Schritt x das Feld i=16 und i+2 wäre 18 und falls n=17 wäre würde es nicht gehen(Auch wenn i immer noch < n ist). Das heißt ich müsste noch eine Bedinung hinzufügen. Sehe ich das richtig?
 
Zuletzt bearbeitet:

stevoo

Aktives Mitglied
n.....Feldanzahl
i......Feldelement
A(i).....Feldinhalt von i
a.....Summe der Addition jedes zweiten Feldinhaltes bis n

i=2
a=0

Solange i+2<n (muss ich da nicht eher i+2<==n setzen?)
a=a+((A(i)+A(i+2))
i=i+4

Wenn Rest(a,2)==0
Ausgabe: "Das Resultat der Addition ist gerade."
sonst
Ausgabe: "Das Resultat der Addition ist ungerade."

Bei feld = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; würde i+2<n nicht gehen oder?

1.Schritt A(2)+A(4)
2.Schritt A(6)+A(8)
3.Schritt A(10)+A(12)
4.Schritt A(14)+A(16) -->wenn aber n=16 und i+2(das in diesem Fall 16 wäre)<n ist , dann kann ich ja das letzte Feld eigentlich nicht dazu addieren(obwohl es drinnen ist und eigentlich addiert werden müsste, weil es zu der Reihe "jedes zweite Feld" dazugehört) außer ich setze i+2<==n oder?
 
Zuletzt bearbeitet:

njans

Top Contributor
1)Wieso fängst du mit i=2 an?

2) Entweder fängt das Array mit index 0 oder 1 an (Pseudocode Sache).
Somit wäre das entweder (bei n=10)
A(0) + A(2)
A(4) + A(6)
A(8) + A(10) // tritt nicht mehr auf
oder
A(1) + A(3)
A(5) + A(7)
A(9) + A(11) // tritt auch nicht mehr auf

Dein Problem ist nämlich, dass du 2 Schritte in einem machen willst.
Deine while-Schleife macht da zu viel. Es wäre sinnvoller, wenn du einfach nur jeden zweiten Eintrag in deinem Feld addieren würdest, nicht auf einen Schlag zwei Stück. Dann hast du die Probleme da oben nicht mehr ;)
 

stevoo

Aktives Mitglied
1)Wieso fängst du mit i=2 an?

2) Entweder fängt das Array mit index 0 oder 1 an (Pseudocode Sache).
Somit wäre das entweder (bei n=10)
A(0) + A(2)
A(4) + A(6)
A(8) + A(10) // tritt nicht mehr auf
oder
A(1) + A(3)
A(5) + A(7)
A(9) + A(11) // tritt auch nicht mehr auf

Dein Problem ist nämlich, dass du 2 Schritte in einem machen willst.
Deine while-Schleife macht da zu viel. Es wäre sinnvoller, wenn du einfach nur jeden zweiten Eintrag in deinem Feld addieren würdest, nicht auf einen Schlag zwei Stück. Dann hast du die Probleme da oben nicht mehr ;)

Ich fange mit i=2 an weil es in der Angabe so steht: .."beginnend mit dem zweiten Element"..
..."Es wäre sinnvoller, wenn du einfach nur jeden zweiten Eintrag in deinem Feld addieren würdest, nicht auf einen Schlag zwei Stück.." WIE SCHREIBE ICH DAS AUF?? Ich habe zwei aufeinmal gemacht, weil ich es nicht anders wusste

..."A(8) + A(10) // tritt nicht mehr auf"... Wieso tritt das bei dir nicht mehr auf? Es übersteigt die Feldanzahl ja nicht.
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Code:
a = a + A(i)

Wie wäre es, wenn du das in einer Programiersprache machen würdest? Oder dir mal das auf einem Blatt papier aufmalst, was der Algo macht? - Dann müsstest Du hier nicht alles nachfragen und hinterfragen.:rtfm:
 

njans

Top Contributor
Ich fange mit i=2 an weil es in der Angabe so steht: .."beginnend mit dem zweiten Element"..
..."Es wäre sinnvoller, wenn du einfach nur jeden zweiten Eintrag in deinem Feld addieren würdest, nicht auf einen Schlag zwei Stück.." WIE SCHREIBE ICH DAS AUF?? Ich habe zwei aufeinmal gemacht, weil ich es nicht anders wusste

..."A(8) + A(10) // tritt nicht mehr auf"... Wieso tritt das bei dir nicht mehr auf? Es übersteigt die Feldanzahl ja nicht.

Wenn du mit i=2 anfängst, dann muss dein Feld mit dem Index 1 starten!

."A(8) + A(10) // tritt nicht mehr auf" weil du n = 10 hast und in dem Beispiel hatte ich gesagt, der index startet bei 0. Dann wären die 10 Elemente auf den Indizes 0,1,2,3,4,5,6,7,8,9. Wenn du auf index 10 zugreifst, ist das nicht vorhanden.

Damit kriegst du jeden zweiten Wert
Java:
int summe
while (i <= anzahlFelder)   // Hier startet das Feld mit index 1, deswegen auch <=
{
  summe = summe + i
  i = i + 2 
}
 

stevoo

Aktives Mitglied
Wenn du mit i=2 anfängst, dann muss dein Feld mit dem Index 1 starten!

."A(8) + A(10) // tritt nicht mehr auf" weil du n = 10 hast und in dem Beispiel hatte ich gesagt, der index startet bei 0. Dann wären die 10 Elemente auf den Indizes 0,1,2,3,4,5,6,7,8,9. Wenn du auf index 10 zugreifst, ist das nicht vorhanden.

Damit kriegst du jeden zweiten Wert
Java:
int summe
while (i <= anzahlFelder)   // Hier startet das Feld mit index 1, deswegen auch <=
{
  summe = summe + i
  i = i + 2 
}


DAS iST DIE ANGABE
Entwerfen Sie einen Algorithmus, der jede zweite Zahl eines Feldes A(i) mit i=1,2,....,n addiert, beginnend mit dem zweiten Element und am Ende das Ergebnis der Addition überprüft. Sollte es sich beim Endresultat um eine grade Zahl handeln, so soll dies durch eine entsprechende Meldung festgehalten werden: "Das Resultat der Addition ist gerade." Handelt es sich jedoch um eine ungerade Zahl, so gibt die Meldung "Das Resultat der Addition ist ungerade" darüber Auskunft.

MEINE ANTWORT:
n.....Feldanzahl
i......Feldelement
A(i).....Feldinhalt von i
a.....Summe der Addition jedes zweiten Feldinhaltes bis n

i=2
a=0

Solange i+2<==n
a=a+((A(i)+A(i+2))
i=i+4

Wenn Rest(a,2)==0
Ausgabe: "Das Resultat der Addition ist gerade."
sonst
Ausgabe: "Das Resultat der Addition ist ungerade."

Ich verstehe nicht warum das flasch ist??
 
Zuletzt bearbeitet:

stevoo

Aktives Mitglied
Wir haben acht Feldelemente und beginnen mit dem zweiten
n=8
i=2 (Beginn: zweites Element)

1.(7)
2.(14)
3.(3)
4.(4)
5.(6)
6.(1)
7.(8)
8.(2)

Solange i+2<==n //n=8
a=a+(A(i)+A(i+2))
i=i+4

1. Schritt // i+2=4 also kleiner gleich n(was 8 ist)
1.1. Schritt a=0+14+4=18
i=2+4=6

2.Schritt // i+2=8 also gleich n
2.1. Schritt: a=18+1+2=21
i=6+4=10 //schon größer als n also gehts nicht weiter

Damit ist a=21 und das System müsste "Das Resultat der Addition ist ungerade." ausgebern
 

njans

Top Contributor
Das geht auch, aber dann versuch das mal nicht mit n=8, sondern n=7 :)

Da machst du Schritt 1, 1.1 aber Schritt 2 geht dann nicht mehr, aber du hast Feld 6 (1) nicht berücksichtigt.

Edit: Das Problem bei deinem Vorgehen ist, dass du immer 2 Felder auf einmal addieren willst. Wenn nun aber das 2te Feld der beiden nicht mehr erreichbar ist, dann rechnest du das erste auch nicht mehr drauf.
 
Zuletzt bearbeitet:

stevoo

Aktives Mitglied
Das geht auch, aber dann versuch das mal nicht mit n=8, sondern n=7 :)

Da machst du Schritt 1, 1.1 aber Schritt 2 geht dann nicht mehr, aber du hast Feld 6 (1) nicht berücksichtigt.

Edit: Das Problem bei deinem Vorgehen ist, dass du immer 2 Felder auf einmal addieren willst. Wenn nun aber das 2te Feld der beiden nicht mehr erreichbar ist, dann rechnest du das erste auch nicht mehr drauf.

ok ich probiers aus

Die Zwickmühle für mich hier ist. wenn ich 7 Felder hab dann geht i+2<n aber i+2<==n geht nicht und wenn ich 8 Felder habe geht zwar i+2<==n aber i+2<n geht nicht :-( Und da stecke ich fest, weil ich keinen Plan habe welche Bedinung ich sons aufstellen kann.
 
Zuletzt bearbeitet:

stevoo

Aktives Mitglied
Das geht auch, aber dann versuch das mal nicht mit n=8, sondern n=7 :)

Da machst du Schritt 1, 1.1 aber Schritt 2 geht dann nicht mehr, aber du hast Feld 6 (1) nicht berücksichtigt.

Edit: Das Problem bei deinem Vorgehen ist, dass du immer 2 Felder auf einmal addieren willst. Wenn nun aber das 2te Feld der beiden nicht mehr erreichbar ist, dann rechnest du das erste auch nicht mehr drauf.

Natürlich hast du Recht bezüglich meines Problems :) Nur meinn Hauptproblem ist: Wie löse ich mein Problem? :) :) Ich denke gerade nach.............
 

njans

Top Contributor
Indem du eben nicht 2 Zahlen auf einmal addierst, sondern nur eine:
Java:
int i
while (i <= n)
// Natürlich muss hier noch eine Bedingung hin, dass er nur jedes 2te i zur Summe hinzufügt
summe = summe + A(i)
i = i + 2
 

stevoo

Aktives Mitglied
Indem du eben nicht 2 Zahlen auf einmal addierst, sondern nur eine:
Java:
int i
while (i <= n)
// Natürlich muss hier noch eine Bedingung hin, dass er nur jedes 2te i zur Summe hinzufügt
summe = summe + A(i)
i = i + 2

GENAU DAS ist mir jetzt in den Sinn gekommen als ich nochmal mein PAP durchgegangen bin. Warum bin ich nicht früher darauf gekommen? Die Antwort war doch so simple.

Solange i<==n
a=a+A(i)
i=i+2
usw.
 

stevoo

Aktives Mitglied
1.(7)
2.(14)
3.(3)
4.(4)
5.(6)
6.(1)
7.(8)
8.(2)

Solange i<==n //n=8
a=a+(A(i)
i=i+2

1. Schritt // i=2 also kleiner n(was 8 ist)
1.1. Schritt a=0+14=14
i=2+2=4

2.Schritt // i=4 also kleiner n
2.1. Schritt: a=14+4=18
i=4+2=6

3. Schritt i=6
3.1 Schritt a=18+1=19
i=6+2=8 --> bei 7 Felder würde es hier aufhören und das Ergebnis wäre 19

4. Schritt i=8 //gleich n
4.1 a=19+2=21
i=8+2=10 //größer n
 

Neue Themen


Oben