Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich gehe gerade alte Prüfungen durch und bei sehr vielen Aufgaben, bei denen es z.B. heißt "Erstellen Sie ein entsprechendes Programmfragment in Pseudocode" würde ich im Alltag das ganze per LINQ umsetzen. Für Pseudocode gibt es keine Vorgaben, er kann an eine beliebige Programmiersprache angelehnt sein, muss es aber nicht. Wäre eine Antwort mit LINQ möglich? Gibt es, wenn richtig, volle Punktzahl? Kann ich davon ausgehen, dass den Prüfern LINQ bekannt ist (sollt ich es ranschreiben :D)?

Wie ist es bei Aufgaben, wo in der Aufgabenstellung steht "stellen Sie die Logik [...] in einem Struktogramm, PAP oder Pseudocode dar"?

Ähnlich bei SQL-Aufgaben: Es gibt syntaktische Unterschiede zwischen MySQL und MSSQL. Sollte man dazuschreiben, welche Syntax man verwendet hat, um Missverständnissen vorzubeugen?

Geschrieben

Pseudocode ist in der Regel sprachenunabhängig. Von daher: Nein, du kannst nicht vorraussetzen, das die Prüfer LINQ kennen, da keine Anlehnung an eine Sprache nötig ist. Hier ist die reine Beschreibung dessen gemeint, was dein "Programm" tut. Ein Array ist ein Array, egal in welcher Sprache. Stell dir Pseudocode vor, wie ein Struktogramm. Ist im Prinzip auch nichts anderes.

Ich würde mal behaupten, das es bei SQL ähnlich ausschaut. Wir haben damals in der Schule "allgemeinen" SQL Syntax gelernt. Weder mySQL noch MSSQL. SQL

Geschrieben

Der Code muss verständlich sein, siehe Pseudocode

Wenn ein Prüfer z.B. nur eine logische (Prolog) oder funktionale Sprache (Haskell) kann, dann wäre eben ein LINQ Quellcode für ihn nicht ohne weiteres verständlich. Schreib Deinen Code so, dass der Prüfer ihn versteht

Geschrieben
Pseudocode ist in der Regel sprachenunabhängig. Von daher:

Ich würde mal behaupten, das es bei SQL ähnlich ausschaut. Wir haben damals in der Schule "allgemeinen" SQL Syntax gelernt. Weder mySQL noch MSSQL. SQL

Jein ;)

Wenn ich z.B. die ersten fünf Zeilen einer Ergebnismenge ausgeben will/soll, dann ist das in MySQL ein LIMIT 5 in MSSQL ein TOP 5. Meines Wissens gibt es hierfür nicht DAS SQL.

Ein select distinct in MSSQL sortiert die Ergebnismenge, in MySQL nicht. Hat mir in einer SA einmal Punktabzug gebracht, weil ich MSSQL verwendet habe, unser Lehrer aber MySQL wollte (auch, wenn das nicht explizit in der Aufgabenstellung stand). Aus der firma kannte ich halt MSSQL.

Geschrieben

Das ist im Grunde eine interessante Frage.

Per se ablehnen sollte man das nicht. Und LINQ ist äußerst leserlich, wenn man es pfleglich ausformuliert; ebenso Extensionmethods.


IEnumerable<Person> personen = gruppe.GetMatchingPerson((person) => person.Vorname.Contains('a'));
[/php]

Schöner kann man es in Pseudocode auch nicht ausdrücken.

Geschrieben

Schöner nicht :D Aber wenn man zeigen soll, dass man die Logik/Algorithmik verstanden hat, ist es vielleicht ein Schuß ins Knie. Andererseits lernen wir einen Beruf im IT-Bereich. Es werden Fragen zu IPv6 gestellt, weil wir ja über aktuelle Entwicklungen auf dem Laufenden sein sollen. Programmieren im Berufsalltag tue ich nicht mit Lochstreifen, da sollte es eigentlich drin sein, sich nicht für die Prüfung wieder auf annodunnemals einschießen zu müssen. Wenn die Prüflinge mit der Zeit gehen sollen, warum nicht auch die Prüfer?

Ich werde jetzt keine Punkte riskieren aber interessieren würde mich ja schon, wie das gewertet würde.

Geschrieben

Also ich denke Pseudocode ist eigentlich etwas sehr wichtiges. Stellt euch mal vor, ihr habt die Anforderung etwas zu programmieren. Der Auftraggeber beherrscht meinetwegen nur C++. Jetzt knallt der euch die Anforderungen in C++ vor die Nase und ihr sollt das ganze in Perl umsetzen und habt keinen Plan von C++. Na viel Spaß. Da wäre es doch angenehmer gewesen, er würde euch Pseudocode, Struktogramme oder ein PAP vorlegen. Von daher finde ich es gut, wenn man so eine Aufgabe gestellt bekommt, sollte man eigentlich hinbekommen. Und wirklich schwer ists ja nun wirklich nicht. Schreib doch deinen LINQ Code hin und beschreib was er tut...

IEnumerable<Person> personen = gruppe.GetMatchingPerson((person) => person.Vorname.Contains('a'));

Ist ja recht schön und gut, aber erklär doch mit Worten was dieses Konstrukt tut...

Würde ich deine Prüfung kontrollieren, von mir bekämst du null Punkte.

Geschrieben

Das würde ich bei Aufgaben so sehen, wo es um die Darstellung der Logik geht. Die Verwendung von Pseudocode in der Prüfung rührt mMn eher daher, dass wir da ohne IDE auf dem Papier programmieren und ein Prüfungsauschuss nicht eine bestimmte Programmiersprache zur Umsetzung verlangen kann bei der Fülle, die es da draußen gibt.

Ein anderer Aspekt: Ich denke, dass man mit LINQ und Lamba-Ausdrücken eine Problemstellung wesentlich deutlicher formulieren kann. Wenn ich Expressiontrees in LINQ aufbaue, komme ich doch deutlich näher an das heran, was ich versuche, mit dem Programm aus der realen Welt abzubilden. Nicht umsonst entstehen funktionale Programmiersprachen.

Diese ganzen Konstrukte mit Schleifendurchläufen waren doch jahrzehntelang nur erforderlich, weil es die funktionale Abbildung einer Frage wie "suche mir aus der Auflistung Gruppe der Personen-Objekte die, deren Eigenschaft Vorname den Buchstaben 'a' enthält heraus" nicht gab. Ich kann mir den ganzen Overhead sparen, der erforderlich war, weil ich Objekte nicht so selektieren und projizieren konnte wie Datenbankdaten, sparen und mich auf das konzentrieren, was ich damit anfangen will. Heißt nicht, dass man das nicht auch beherrschen sollte (wer heute eine PTA-Ausbildung macht, büffelt auch noch einmal die Photosynthese - obwohl keine Sau in die Apotheke kommt und fragt, wie das denn noch mal funktioniert mit dem Licht und dem Sauerstoff; die meisten wollen komischweise doch Medikamente).

Geschrieben

Diese ganzen Konstrukte mit Schleifendurchläufen waren doch jahrzehntelang nur erforderlich, weil es die funktionale Abbildung einer Frage wie "suche mir aus der Auflistung Gruppe der Personen-Objekte die, deren Eigenschaft Vorname den Buchstaben 'a' enthält heraus" nicht gab. Ich kann mir den ganzen Overhead sparen, der erforderlich war, weil ich Objekte nicht so selektieren und projizieren konnte wie Datenbankdaten, sparen und mich auf das konzentrieren, was ich damit anfangen will.

Rein technisch gibt es das alles nicht. Du hast nur dass Glück, dass der Interpreter / Compiler Dir so etwas ermöglichst, auf technischer Ebene gibt es noch nicht mal Schleifen, sondern dort wird eine Schleife via Jump und If realisiert. Du versteifst Dich auf Linq, was ist, wenn Du eben diese Sprache nicht hast und z.B. in Prolog arbeiten musst, dort würden Dir weder Lambda-Ausdrücke oder Expressiontrees nichts nützen. Wenn Du aber weißt wie eine Grammatik aufgebaut ist und funktioniert, dann sieht das schon etwas anders aus.

Der Pseudocode soll verdeutlichen, wie der Algorithmus funktioniert, ohne auf technische Details wert zu legen.

Geschrieben

Der Pseudocode soll verdeutlichen, wie der Algorithmus funktioniert, ohne auf technische Details wert zu legen.

Das ist genau das, was ich weiter oben schon mit den unterschiedlichen Aufgabenstellungen meinte: "stellen Sie die Programmlogik dar" vs. "erstellen Sie das Programmfragment/die Methode".

Das eine zielt auf Algorithmik, das andere auf Implementierung. Das hatte ich aber schon im Ursprungspost deutlich getrennt.

Geschrieben (bearbeitet)

Das eine zielt auf Algorithmik, das andere auf Implementierung. Das hatte ich aber schon im Ursprungspost deutlich getrennt.

Wenn Du aber wie in Deinem vorhergehenden Post:

Ich denke, dass man mit LINQ und Lamba-Ausdrücken eine Problemstellung wesentlich deutlicher formulieren kann. Wenn ich Expressiontrees in LINQ aufbaue, komme ich doch deutlich näher an das heran, was ich versuche, mit dem Programm aus der realen Welt abzubilden. Nicht umsonst entstehen funktionale Programmiersprachen.

Techniken einsetzt, die eben auf LINQ basieren, dann hast Du hier definitiv einen technischen Bezug. Vor allem Expressionstrees existieren so nicht direkt unter C++ oder Prolog. D.h. wenn ich jetzt eben Prolog gewöhnt bin und Du Expressionstrees vorlegst, die ich evtl gar nicht aufgrund der LINQ Syntax erkenne, dann würde man hier Dir das in der Prüfung negativ auslegen. In einem Expressentree steckt letztendlich eine Grammatik, die man via EBNF darstellen kann und ein PDA bzw EA um die Daten zu parsen und anhand der Grammatik zu überprüfen. D.h. aber ich kann ohne irgendwelchen Synatx das Verfahren darstellen. Damit würde eine EBNF und eben linguistisch beschrieben das Verarbeiten von der Eingabe über die Verarbeitung durch die Automaten sich im Pseudocode darstellen lassen, ohne dass man Sprachkonzepte wie Expressiontrees braucht.

Je nach Problem muss ich das aber gar nicht so explizit machen, dann im Pseudocode reicht es einfach "parse Eingabe" anzugeben. Die technische Umsetzung ist dann unabhängig davon

Bearbeitet von flashpixx
Geschrieben
Ist ja recht schön und gut, aber erklär doch mit Worten was dieses Konstrukt tut...

An das Objekt Gruppe wird die Nachricht GetMatchingPerson geschickt.

Diese Nachricht enthält genau ein Prädikat. Bei dem Prädikat handelt es sich um eine Abbildungsvorschrift, die diejenigen Elemente aus Gruppe selektiert, die die Aussage "Vorname.Contains('a')" erfüllen.

Oder simpel: Die Methode GetMatchingPerson gibt, wie der Name unschwer vermuten lässt, Personen zurück, auf die eine gewisse Bedingung zutrifft. Diese Bedingung (im Übergabeparameter vom Typ Predicate<T>, i.e. Predicate<Person>) besteht darin, dass alle Personen aus der Gruppe selektiert werden, wo der Vorname ein a enthält.

Ich denke, an der Stelle sollten sich die Prüfer nicht dümmer stellen als sie sind.

Wenn ich davon ausgehen kann, dass die Prüfer in ihrem Vorleben schon einmal eine moderne, objektorientierte Sprache genutzt haben, sollten Sie auch in der Lage sein, derartige Ausdrücke zu verstehen - auch ohne die dahinterstehende Technik zu begreifen.

Um vorher Gesagtes noch einmal zu zitieren:

Der Pseudocode soll verdeutlichen, wie der Algorithmus funktioniert, ohne auf technische Details wert zu legen.

Und eben genau das tut die Formulierung in LINQ.

Für denjenigen, der den Code liest, wird eine Abstraktionsschicht geboten, die von den schmutzigen Details der Implementierung abschrimt. Genau das soll Pseudocode auch ermöglichen.

Würde ich deine Prüfung kontrollieren, von mir bekämst du null Punkte

Ich hoffe, dass derart ignorante Prüfer in der Minderzahl sind.

Geschrieben

Pseudocode ist nicht gleich Quellcode... es geht darum ohne irgendwelche Konstrukte Dinge darzustellen... mehr wie eine Art Aufsatz in Deutsch..

Du sollst für "Fachfremde" darstellen, wie dein Programm funktioniert. Das funktioniert mit LINQ eben nicht.

Und ja, solche Prüfer sind mehr oder weniger die Regel.. ich kenne niemanden, der LINQ durchgehen lassen würde.

In einem Deutschaufsatz kannst du auch nicht, wenn es darum geht einen Gegenstand zu beschreiben eine Inhaltsangabe machen...

Geschrieben

Zum Teil gebe ich Dir recht:

Pseudocode soll eine gewisse Abstraktionsschicht bieten, quasi als Metasprache fungieren.

Andererseits möchte ich daran erinnern, dass Pseudocode nicht normiert ist, resp. es Normierungsversuche gibt, wie den von Prof. Pomberger - welcher die Algortihmensprache Jana entwickelt hat; Jana selbst orientiert sich im wesentlichen an Java.

Wir können gern auch einmal den umgekehrten Weg gehen:

Die Funktionsweise dürfte nun nach meiner Beschreibung klar und verständlich sein.

Wenn wir nun davon ausgehen, kein LINQ zu benutzen, bleibt die Frage offen, wie das oben gesagte in einer objektorientierten Pseudosprache abgebildet werden kann.

Der Punktoperator dürfte selbst im Pseudocode seine Rolle beibehalten.

Mithin liesse sich der Methodenaufruf transformieren:

var Personen=gruppe.GetMatchingPerson()

Somit haben wir zum einen vom konkreten Datentyp IEnumerable<Person> abstrahiert und haben zum anderen den Methodenaufruf konform jeglicher Konvention über objektorientierten Pseudocode hinweg formuliert.

Desweiteren nutzen wir die mathemathische Symbolik und formulieren folgende Bildmenge:

F: X->Y; für alle X, die die Bedingung F(x) erfüllen, mit F="enthält ein 'a' im Vornamen".

Dies übergeben wir nun unserer Funktion und erhalten

var Personen=gruppe.GetMatchingPerson(F(x));
F: X->Y; für alle X, die die Bedingung F(x) erfüllen, mit F="enthält ein 'a' im Vornamen".[/php]

Wobei ich

[php] personen = gruppe.GetMatchingPerson((person) => person.Vorname.Contains('a'));

lesbarer finde.

Okay. Die geschummelte Variante wäre dann mit "echtem" Pseudocode:

 var Person = gruppe.GetMatchingPerson(deren Vorname ein A enthält)

.

Dann doch lieber den LINQ-Ausdruck, da der der mathematischen Logik wesentlich näher ist.

Geschrieben (bearbeitet)
Zum Teil gebe ich Dir recht:

Pseudocode soll eine gewisse Abstraktionsschicht bieten, quasi als Metasprache fungieren.

Andererseits möchte ich daran erinnern, dass Pseudocode nicht normiert ist, resp. es Normierungsversuche gibt, wie den von Prof. Pomberger - welcher die Algortihmensprache Jana entwickelt hat; Jana selbst orientiert sich im wesentlichen an Java.

Pseudocode ist eine Abstrakte Sprache. Hier gibt es keinen Normen. Daher auch keinen echten Quellcode. Dennoch sind all deine bisherigen Beispiele nicht annähernd an dem dran, was Pseudocode ist.

Mal ein ganz andres Beispiel weg von der Programmierung:

Du sollst jemandem mit Worten beschreiben wie man einen Papierflieger baut. Da kannst du auch nicht mit der Handy Kamera anrücken und Bilder knipsen von den jeweiligen Schritten. Es geht darum zu beschreiben.

Mal angenommen du hast eine Schleife.

In Pseudocode würdest du z.B. schreiben:

Solange Variable i nicht größer ist als 100, dann immer 1 zu Variable x addieren.

Das ist Pseudocode. Jeder kann was mit anfangen und es kann in jede Sprache umgesetzt werden. Nichts andres soll Pseudocode sein.

var Person = gruppe.GetMatchingPerson(deren Vorname ein A enthält)
<-- das hat rein gar nichts mit Pseudocode gemeinsam.. ihr versucht hier in eine abstrakte Sprache Normen reinzubringen, die es nicht gibt. Bearbeitet von Nathalia
Geschrieben

Je nach Zielgruppe ist eine hohe Formalität des Pseudocodes aber gar nicht notwendig oder sogar hinderlich. Für einen Kunden oder Vertriebler ist das grundsätzliche Prinzip des Algorithmus in nicht formaler Ausführung ggf. leichter zu verstehen.

Geschrieben
Je nach Zielgruppe ist eine hohe Formalität des Pseudocodes aber gar nicht notwendig oder sogar hinderlich. Für einen Kunden oder Vertriebler ist das grundsätzliche Prinzip des Algorithmus in nicht formaler Ausführung ggf. leichter zu verstehen.

Und da ist LINQ gegenüber anderen Konstrukten auch wieder von Voteil, weil es Worte benutzt, die dem normalen Sprachgebrauch entspringe, wie das SQL ja schon vorgemacht hat.

from, select, where, group sind knapp, knackig, präzise und auch für jemanden ohne Programmierkenntnisse verständlich. Wenn dann noch die Variablen nicht a, b, c heißen, sondern z.B. Gruppe oder Personen, dann gehört schon Vorsatz dazu, es nicht zu verstehen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...