Kann mir jemand bei Niki der roboter Helfen?

Weitere Informationen folgen:wink:
____----------------------------.
.
.
.
.

.

.-
.
-.

.-

.-

Kann ich gerne machen. Worum geht es denn konkret?

Kann ich gerne machen. Worum geht es denn konkret?

eINE aUFGABE SCHICKE SIE IN 25 MIN :wink:

Hi,
Ich hab von NIKI keine Ahnung, sorry.

Kann ich gerne machen. Worum geht es denn konkret?

Im Gang einer lAger halle sind Paletten abgestellt. Nikki soll sp programmiert werden, dass die hohen Paletten (zwei GegenstÀnde) in rechte Regalreihe, die kleine Paletten in die Linke regaleihe einsortiert werden . Entwickle ein Programm:

____________________________________
/ / / / / / / /
/
/
°° ° °° ° ° °° °° /
(Roboter) / / / / / / / /
( ) / / / / / / / /

Kann ich gerne machen. Worum geht es denn konkret?

http://www.hupfeld-software.de/beschreibung/aufgaben


So. Hatte Mittagspause.

Hier die Lösung:

PROGRAM Lager_aufraeumen;

PROCEDURE drehe_um;
BEGIN
drehe_links;
drehe_links;
END;

PROCEDURE drehe_rechts;
BEGIN
drehe_links;
drehe_links;
drehe_links;
END;

PROCEDURE Links_ablegen;
BEGIN
drehe_links;
vor;
WHILE hat_Vorrat DO gib_ab;
drehe_um;
vor;
drehe_links;
END;

PROCEDURE Rechts_ablegen;
BEGIN
drehe_rechts;
vor;
WHILE hat_Vorrat DO gib_ab;
drehe_um;
vor;
drehe_rechts;
END;

BEGIN
vor;
WHILE Platz_belegt DO
BEGIN
nimm_auf;
IF Platz_belegt THEN
BEGIN
nimm_auf;
Rechts_ablegen;
END
ELSE
Links_ablegen;
vor;
END;
END.

Kann ich gerne machen. Worum geht es denn konkret?

http://www.hupfeld-software.de/beschreibung/aufgaben


Ich habe noch gesehen, dass der Nikki nicht am Beginn der Reihe steht. Also fehlte in der ersten Lösung noch eine Routine, damit er zum Startpunkt geht:

PROGRAM Lager_aufraeumen;

PROCEDURE drehe_um;
BEGIN
drehe_links;
drehe_links;
END;

PROCEDURE drehe_rechts;
BEGIN
drehe_links;
drehe_links;
drehe_links;
END;

PROCEDURE Links_ablegen;
BEGIN
drehe_links;
vor;
WHILE hat_Vorrat DO gib_ab;
drehe_um;
vor;
drehe_links;
END;

PROCEDURE Rechts_ablegen;
BEGIN
drehe_rechts;
vor;
WHILE hat_Vorrat DO gib_ab;
drehe_um;
vor;
drehe_rechts;
END;

PROCEDURE Anfang_finden;
BEGIN
WHILE vorne_frei DO vor;
drehe_links;
vor;
drehe_rechts;
vor;
END;

BEGIN
Anfang_finden;
vor;
WHILE Platz_belegt DO
BEGIN
nimm_auf;
IF Platz_belegt THEN
BEGIN
nimm_auf;
Rechts_ablegen;
END
ELSE
Links_ablegen;
vor;
END;
END.

Kann ich gerne machen. Worum geht es denn konkret?

http://www.hupfeld-software.de/beschreibung/aufgaben


ErgĂ€nzung: Der Befehl „vor;“ nach dem Aufruf von „Anfang_finden“ im Hauptprogramm muss noch raus.

Welche Information(en) benötigen Sie?

warum geht das z.B nicht?

PROGRAM danke fĂŒr die vorherige Hilfe;

BEGIN
vor;
vor;
if platz_belegt then drehe_links;
vor;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_belegt then nimm_auf;
drehe_links;
drehe_links;
drehe_links;
vor;
if platz_frei then gib_ab;
drehe_um;
vor;
drehe_links;
drehe_links;
drehe_links;
abschalten;
end;
END

warum geht das z.B nicht?



Dein Vorschlag enthÀlt einen entscheidenden Fehler, denn Nikki soll ja in AbhÀngigkeit der Belegung eines Feldes entscheiden, ob der Inhalt nach links oder nach rechts abgelegt werden soll.
Wenn auf einem Feld zwei Container stehen, muss er natĂŒrlich auch zwei aufnehmen, bevor er beide dann rechts ablegt. Die Aufgabenstellung impliziert, dass nicht unbedingt von vornherein feststeht, auf welchem Feld welche Anzahl Container stehen.
Außerdem fehlt in deinem Code die Prozedur „drehe_um“, die nicht zum Sprachumfang gehört und also von dir selbst deklariert werden muss.

Die Verwendung von Prozeduren hat den Vorteil, dass gleichartige Aufgaben, die mehrmals benötigt werden, nur einmal programmiert und geprĂŒft werden mĂŒssen.

Wenn z.B. die Prozedur „drehe_rechts“ einmal geschrieben ist und funktioniert, kann man sie beliebig oft einsetzen und kann davon ausgehen, dass sie an jeder Stelle des Programms fehlerfrei funktioniert.

Ein zweiter Aspekt, neben der Vermeidung von Fehlern, ist der geringere Aufwand beim Schreiben des Programms.

drehe_rechts;

schreibt sich erheblich schneller, als

drehe_links;
drehe_links;
drehe_links;

Hinzu kommt die bessere Übersichtlichkeit des Quellcodes.
In der Informatik fĂŒhren immer viele Wege nach Rom. Aber einen guten Informatiker zeichnet effizienter und zugleich gut lesbarer Code aus.

Zu meiner Lösung gelangt man durch eine einfache Form der Anforderungsanalyse. Dazu habe ich die gestellte Aufgabe in kleinere und leichter ĂŒberschaubare Unteraufgaben aufgeteilt.

  1. Offenbar sollen Container, die Nikki aufgenommen hat, entweder links oder rechts abgelegt werden. Außerdem wĂ€re es praktisch, wenn er danach zum Ausgangspunkt zurĂŒckkehrt, damit er mit dem nĂ€chsten Arbeitsschritt weitermachen kann.

  2. In den Unteraufgaben „Links_ablegen“ und „Rechts_ablegen“ ist jeweils das Umdrehen von Nikki erforderlich, was also als weitere Teilaufgabe abgegrenzt werden kann.

  3. Zur besseren Lesbarkeit des Hauptprogramms wird die Bewegung zum Startpunkt als Prozedur geschrieben.

  4. Das Hauptprogramm ĂŒbernimmt die grundlegende Ablaufsteuerung, wozu auch die Entscheidung gehört, wenn nach der Aufnahme eines Containers auf dem aktuellen Feld noch ein weiterer Container vorhanden ist, die Entscheidung fĂ€llt, ihn ebenfalls aufzunehmen und beide dann rechts abzulegen und ansonsten den einen bereits aufgenommenen Container links abzulegen.

Durch das Schreiben der beiden „
_ablegen“-Prozeduren, brauche ich mir im Hauptprogramm um die Details des Ablegens keine Gedanken mehr zu machen und kann nach dem Ablegen Nikki einfach einen Schritt weiter vor gehen lassen, zum nĂ€chsten Feld, bis keine Container mehr zu finden sind.

Fazit:
Strukturierte modulare Programmierung (so nennt man diese Vorgehensweise) fĂŒhrt zu Quellcode, der leichter gepflegt werden kann und weniger fĂŒr Fehler anfĂ€llig ist, als so genannter „Spaghetti-Code“ (alles ist einfach hintereinander weg programmiert), der zwar zunĂ€chst schnell zum Ziel zu fĂŒhren scheint, aber fehleranfĂ€llig, schwer zu lesen und sehr unflexibel ist.

Pascal ist eine der ersten „modularen“ Programmiersprachen gewesen. Die allererste hieß treffenderweise „Modula“. In der weiteren Entwicklung der Programmiersprachen kam zum modularen Prinzip spĂ€ter noch die Objektorientierung als nĂ€chster grundlegender Meilenstein hinzu. Ähnlich, wie bei der modularen Programmierweise ein anderer Analyseansatz fĂŒr die Lösung von Aufgaben/Problemen erforderlich ist, als beim „Spaghetti-Code“, wurden mit der EinfĂŒhrung der objektorientierten Programmierung wiederum ganz neue Vorgehensweisen in der Analyse erforderlich.

Alle diese Weiterentwickungen von Programmiersprachen hatten jeweils zum Ziel, die Lösung immer komplexerer Aufgaben zu ermöglichen und zugleich den Quellcode trotzdem ĂŒbersichtlich und handhabbar zu erhalten.

Ein „gutes“ Programm benötigt fĂŒr eine Aufgabenstellung den kleinstmöglichen Quellcode, der zugelich die Laufzeit (also Performance) des Programms nicht beeintrĂ€chtigt.

Sorry fĂŒr den kleinen Exkurs. Hatte gerade Lust dazu und ich hoffe, ich konnte dir ein wenig weiterhelfen.

Gruß
Robert

Also wenn es hier schon einmal um ein Problem mit Niki geht, kommt gleich meine Frage.
Bin nÀmlich blutiger AnfÀnger :confused:

Aufgabe:
In der ersten Zeile sind in unregelmĂ€ĂŸigen AbstĂ€nden solche „Kugeln“ verteilt. Niki soll dort, wo keine sind welche ablegen & außerdem sollen wir viel mit „While,
“ und „If
“ arbeiten. Also nicht „vor,vor, gib_ab,
“

WĂ€re sehr nett.

Also wenn es hier schon einmal um ein Niki geht, kommt gleich meine Frage.
Bin nÀmlich blutiger AnfÀnger :confused:

In der ersten Zeile sind in unregelmĂ€ĂŸigen AbstĂ€nden solche „Kugeln“ verteilt. Niki soll dort, wo keine sind welche ablegen & außerdem sollen wir viel mit „While,
“ und „If
“ arbeiten. Also nicht „vor,vor, gib_ab,
“