TIA HILFE: Klassenarbeit am Montag und ich verstehe die Aufgaben nicht (SCL)

locorococ

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,

ich habe mich hier angemeldet, weil ich bei meinen Übungsaufgaben versage. Leider kann ich die Schritte nicht nachvollziehen und mir wird nicht klar, was bei den Lösungen der Aufgaben abgeht. Ich war noch nie gut in SCL geschweige denn TIA und obwohl ich die Lösungen habe, verstehe ich es nicht.

Ich würde mich sehr freuen, wenn mir hier jemand, auch wenn es vielleicht zu viel verlangt ist, zu den Aufgaben 3 bis 6 eine Schritt-für-Schritt-Anleitung machen könnte. Diese Anleitung in die Lösungen schreiben könnte. Am besten so das ich genau weiß was da gerade in den Zeilen passiert, was dort gemacht wird und warum gewisse Datentypen genau dann gewählt wurden, wo Sie gewählt wurden. Die Aufgaben 1 und 2 verstehe ich und kann auch diese nachvollziehen.

Als Anhang findet Ihr die Aufgaben sowie die Lösungen in der Aufgabe in SCL.

Bedauerlicherweise habe ich sonst niemanden, den ich fragen könnte oder mit dem ich lernen kann, deshalb wende ich mich an euch. Ich bin über jede Hilfe dankbar und falls es Rückfragen geben sollte, schreibt einfach in den Thread.

EDIT: Für die Anleitung würde ich mich auch gerne Bedanken mit irgendwas :)
 

Anhänge

Wir machen hier keine Hausaufgaben, wir helfen gern wenn es schon erste Versuche gibt.
Scheint hier nicht der Fall zu sein.

Nimm Dir doch mal folgenden Satz zu Herzen:

Wenn Du etwas mit Worten beschreiben kannst, kann man es mit einer SPS programmieren
Was ich damit sagen will ist: Schreib es Dir mal in normalen Worten für Dich verständlich auf, und versuche es dann Schritt für Schritt in Code umzuwandeln.

Grüße
Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir machen hier keine Hausaufgaben, wir helfen gern wenn es schon erste Versuche gibt.
Scheint hier nicht der Fall zu sein.

Nimm Dir doch mal folgenden Satz zu Herzen:


Was ich damit sagen will ist: Schreib es Dir mal in normalen Worten für Dich verständlich auf, und versuche es dann Schritt für Schritt in Code umzuwandeln.

Grüße
Marcel
Ich habs mir auf Papier aufgeschrieben und habe auch versucht es mir herzuleiten, leider ohne Erfolg. Wie auch schon gesagt das sind die einzigen Aufgaben von vielen bei denen ich an meine Grenzen stoße. Es sind ausserdem keine Hausaufgaben, es sind Übungsaufgaben für die Klassenarbeit am Montag, falls das ein Unterschied macht.
 
Kurz angeschaut.
Stichwort 3fach geschachtelte for Schleifen.

Und darin hält die aufgabe was gemacht werden soll.
Ist immer die gleiche schleifenstruktur mit einer scl Anweisung innendrin.
 
.. Die Aufgaben 1 und 2 verstehe ich und kann auch diese nachvollziehen. ..
Wenn du die Aufgaben 1 und 2 verstanden hast, was bitte verstehst du dann an der Aufgabe 3 denn nicht? Aufgabe 3 unterscheidet sich von Aufgabe 2 doch nur in einer simplen Berechnung des Durchschnitts mittels Grundrechenarten. Es werden in den drei FOR-Schleifen alle Elemente des Array auf ungleich Null abgefragt. Jedes Element, welches <> Null ist, wird in der IF-Anweisung auf eine Summe aufaddiert, so wie die Menge der Funde gezählt. Anschließend wird diese Summe durch die Anzahl der gefundenen Array-Elemente (<>Null) geteilt. Da man Rundungsfehler bei der Division von Ganzzahlen (Integer) vermeiden möchte, wird die Division mit Gletkommazahlen (Real) durchgeführt. Daher die Umwandlung von LINT (Ganzzahl 64 Bit) nach Real (Gleitpunktzahl 32 Bit) vor der Division. Fragen?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du die Aufgaben 1 und 2 verstanden hast, was bitte verstehst du dann an der Aufgabe 3 denn nicht? Aufgabe 3 unterscheidet sich von Aufgabe 2 doch nur in einer simplen Berechnung des Durchschnitts mittels Grundrechenarten. Es werden in den drei FOR-Schleifen alle Elemente des Array auf ungleich Null abgefragt. Jedes Element, welches <> Null ist, wird in der IF-Anweisung auf eine Summe aufaddiert, so wie die Menge der Funde gezählt. Anschließend wird diese Summe durch die Anzahl der gefundenen Array-Elemente (<>Null) geteilt. Da man Rundungsfehler bei der Division von Ganzzahlen (Integer) vermeiden möchte, wird die Division mit Gletkommazahlen (Real) durchgeführt. Daher die Umwandlung von LINT (Ganzzahl 64 Bit) nach Real (Gleitpunktzahl 32 Bit) vor der Division. Fragen?
Genau so Antworten habe ich mir hier erhofft, ich danke dir sehr!
 
Die Aufgaben 1 und 2 verstehe ich und kann auch diese nachvollziehen.
Tatsächlich?

Aufgabe 1:
In der AufgabenStellung sehe ich den Eingang 'xFREIGABE' und den Ausgang 'xDONE' am FC11-Kästchen.
Wie sollen diese beiden bei der Lösung berücksichtigt werden?
Sind sie wirklich so "selbst-erklärend", dass man dies in der AufgabenStellung nicht beschreiben muss?
Sind dafür nicht der Eingang 'EN' und der Ausgang 'ENO' standardmässig vorhanden???
Irgendetwas, das DONE enthält, findet man i.A. nur bei Bausteinen, die nicht sofort das Ergebnis liefern können, sondern erst nach x Zyklen.
Bausteine, die aber nicht sofort das Ergebnis liefern können, fallen für mich grundsätzlich nicht in die Kategorie FC, sondern FB. :unsure:

Die Lösung zu Aufgabe 1 zeigt, dass alle Zellen des 3-dimensionalen Array mit einem Wert entsprechend ihrer "Adresse" (den 3 Indizes) "befüllt" werden. Darüber steht aber absolut nichts in der AufgabenStellung. Dort sind nur 9 spezielle Zellen angegeben, die nach dieser Methode befüllt werden sollen.
Was mit den anderen Zellen 991 Zellen passieren soll ... keine Ahnung. Kann man unverändert so belassen, wie sie sind oder löschen oder ...

Aufgabe 2:
Kein Wort darüber, was passieren soll, wenn in mehreren Zellen der gesuchte Wert gespeichert sein sollte.
Da der Baustein aber 4 Ausgänge benötigt, um nur ein einziges Ergebnis (von möglicherweise mehreren Ergebnissen) zu liefern, verbietet sich für meinen Geschmack schon wieder die Verwendung eines FC.
Warum soll der Baustein ...
- einerseits, wenn er die erste der Zellen mit passendem Inhalt gefunden hat, nicht die Suche abbrechen oder
- andererseits, wenn er sowieso alle Zellen prüft, nicht die Anzahl der Zellen mit passendem Inhalt als Ergebnis liefern?
Warum werden als SchleifenZähler und somit als ArrayIndizes Ganzzahlen ausgerechnet vom Typ LINT verwendet?
Ich hätte ja panische Angst, dass der Compiler ausflippt, wenn er das sieht! ;)

Zu allen Lösungen:
Warum wird den BOOLeschen Variablen 0 oder 1 zugewiesen und nicht FALSE oder TRUE?

Aufgabe 3:
Zweck des Eingang 'xFREIGABE' wird in AufgabenStellung nicht genannt und in der Lösung ebenfalls ignoriert !?!
Division durch 0, wenn das Array nur Nullen enthält.

Aufgabe 4:
Der StartWert für den MaximalWert wird unlogisch vorgegeben. Kann funktionieren, muss aber nicht.
Warum wird ein "Lösungsweg" gezeigt, der nur in AusnahmeFällen ein richtiges Ergebnis liefern kann?
Das ist ja so, wie mit der Uhr, die stehengeblieben ist und immerhin 2-mal am Tag die richtige Zeit anzeigt. :ROFLMAO:

Aufgabe 6:
Kann mir jemand erklären, warum man sooo umständlich auf den DatenTyp REAL ausweichen sollte, um die QuerSummen von DINT-Zahlen zu berechnen? Etwa nur, um auch mal die Funktion 'TRUNC' angewendet zu haben? Ich versteh die Welt nicht mehr.
Es geht doch einfacher mit MOD und fast so einfach auch ohne MOD.

OB1 :
Die Ausgänge der FCs werden z.T. auf dieselben Variablen "geleitet", die somit mehrfach pro Zyklus be- bzw. überschrieben werden.
Ich frage mich warum, wozu? Soll damit der Frust der Lernenden trainiert werden, die versuchen, die 6 Funktionen zu testen bzw. ihre Ergebnisse zu überprüfen/nachzuvollziehen?

3D-Array :
Einerseits ist es nicht schlecht, Arrays mit mehr als nur 1 Dimension kennenzulernen.
Andererseits ist der Sinn und Zweck von Arrays mit mehr als 1 Dimension nicht wirklich einleuchtend.
Hier hat das 3D-Array ...
- allein den Vorzug, die ArrayElemente nach der angedeuteten Regel mit Inhalt füllen zu können und
- den Nachteil, in den LösungsWegen den SchreibAufwand zu erhöhen und die Übersichtlichkeit zu mindern.
Dass hier eine "DatenBank" erzeugt wird, in der jeder Wert nur 1-mal vorkommt, ist schön und gut, um sich Vereinfachungen bei der Lösung ausdenken zu lernen.
Wem wird klar, dass hier die Daten aufsteigend sortiert angeliefert werden?
Hat derjenige, der z.B. ...
Code:
#iX_KOORDINATE:=DINT_TO_INT(#diX-1);
... schrieb, darauf spekuliert oder ist er darauf hereingefallen?
Aber leider ist dieser Fall zu oft praxisfremd, um die erzielten Vereinfachungen schätzen und erkennen zu lernen. Und vor allem, den Umgang mit den Ausnahmen zu beherrschen, die ja so oft dazu führen, dass einem Programm durch eine "kleine Unstimmigkeit" die Grundlage der FunktionsFähigkeit entzogen werden kann.

Mein GesamtEindruck der AufgabenStellungen und der Lösungen: mehr oder weniger, aber auf jeden Fall zuviel "g'schlampert".
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein GesamtEindruck der AufgabenStellungen und der Lösungen: mehr oder weniger, aber auf jeden Fall zuviel "g'schlampert".

Ich finde auch, dass die "Aufgaben"-Stellungen eine Zumutung sind.

Ich hätte wenigstens erwartet, dass die Lehrperson einen Satz mit einer Anweisung zustande bringt, á la
"Erstelle einen FC in der Sprache x, der mindestens folgende Array-Einträge produziert".

Abgesehen von den fehlenden Definitionen und Beschreibungen. Und der Tatsache dass es das Array XYZ im DB20 gar nicht gibt, sondern nur aXYZ...

Wenn Schüler*in dann in Aufgabe 1 folgendes Programmiert, gibt es aber nur allenfalls 20% der Punkte, weil Lehrperson beleidigt ist, dass seine Gedachte Aufgabenstellung nicht interpoliert wurde... So ist jedenfalls meine Erfahrung mit (Berufsschul-)Lehrpersonen

Code:
gdb3D.aXYZ[1,1,1]:=010101;
gdb3D.aXYZ[1,1,5]:=010105;
gdb3D.aXYZ[1,1,10]:=010110;
...
gdb3D.aXYZ[10,10,10]:=101010;
 
Ich finde auch, dass die "Aufgaben"-Stellungen eine Zumutung sind.
... und die Lösungen auch.
Nun, was die AufgabenStellungen betrifft, wird der Lernende ja bestens auf eine spätere Praxis vorbereitet.
Nicht alle, aber viele Kunden haben zunächst auch nur vage Vorstellungen, welche Aufgabe eigentlich gelöst werden soll.
Und meistens haben sie den Hinterkopf voller Ausnahmen, Besonderheiten, u.s.w., die man durch mühsame Rückfragen "abklopfen" muss.
Nur, für PrüfungsAufgaben sind solche AufgabenStellungen ziemlich unbrauchbar. Denn wer hat da schon die Möglichkeit, die AufgabenStellung mit dem AufgabenSteller so zu besprechen, dass die Unklarheiten ausgeräumt werden können?
Beim Programmieren geht es ja darum, logische und präzise Anweisungen zu schreiben. Dabei muss man jegliche GedankenSprünge erkennen und in kleine EinzelSchritte zerlegen, was aber den meisten sehr schwer fällt.
Aber genau diese "GedankenSprünge" in den AufgabenStellungen und insbesondere in den BeispielLösungen "vorzuleben", trägt nicht dazu bei, gute, gewissenhafte Programmierer auszubilden.
Es sei denn, sie dienen als "Provokation", mit der man zum Thema StolperFallen überleiten möchte.
... weil Lehrperson beleidigt ist, dass seine Gedachte Aufgabenstellung nicht interpoliert wurde... So ist jedenfalls meine Erfahrung mit (Berufsschul-)Lehrpersonen.
"Interpoliert"? :unsure:
Dieses Problem werden wir auch nicht lösen. Viele (oder alle?) Wege führen nach Rom. Beim Programmieren gibt es i.A. auch viele Wege, auf denen eine Aufgabe erfüllt werden kann. Ob dann auch noch jemand beleidigt ist, wenn ihm ein "besserer" Lösungsweg präsentiert wird, das gehört aber in eine andere Kategorie. Schlechte Verlierer gibt es überall. ;)

Die Aufgaben sind vermutlich aus einem Zusammenhang herausgelöst. Vielleicht gibt es dazu noch einen "Rahmen", in dem für alle Aufgaben geltende Voraussetzungen beschrieben sind und die somit nicht für jede einzelne Aufgabe wiederholt werden.
 
Zurück
Oben