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,…“