Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Ähnliche Dokumente
Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

( = 18 Punkte)

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Bitte hier unbedingt Matrikelnummer und Adresse eintragen, sonst keine Bearbeitung möglich Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Klausur am

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Lösungen der Aufgaben zum Studientag

Wintersemester 2007/2008 Hinweise zur Bearbeitung der Klausur zum Kurs 1613 Einführung in die imperative Programmierung

Kurs 1612 Konzepte imperativer Programmierung Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung

An alle Teilnehmer(innen) des Kurses Einführung in die imperative Programmierung im Wintersemester 2008/2009. Klausur-Informationen

An die Teilnehmerinnen und Teilnehmer des Kurses 1613 Einführung in die imperative Programmierung im WS 05/06

Wintersemester 2005/2006 Hinweise zur Bearbeitung der Klausur zum Kurs 1612 Konzepte imperativer Programmierung

Kurs 1613 Einführung in die imperative Programmierung

Fernuniversität in Hagen r- I Name. Vorname ~- Fachbereich Informatik. ( ) Vollzeitstudent ( ) Teilzeitstudent ( ) Zweithörer ( ) Gasthörer


Wie schreibe ich ein Programmierstils in Deutschland

Bitte hier unbedingt Matrikelnummer und Adresse eintragen, sonst keine Bearbeitung möglich "Konzepte imperativer Programmierung"

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Wintersemester 2010/2011 Hinweise zur Bearbeitung der Klausur zum Kurs 1613 Einführung in die imperative Programmierung

Kurs 1575, Klausur vom , Musterlösung

Kurs 1575, Musterlösung der Klausur vom

Wintersemester 98/99 Hinweise zur Bearbeitung der Klausur zum Kurs 1612 Konzepte imperativer Programmierung

4.Grundsätzliche Programmentwicklungsmethoden

Lösungsvorschläge zur Hauptklausur 1661 Datenstrukturen I

Syntax der Sprache PASCAL

Kurs 1575, Klausur vom , Musterlösung

Studientag zum Kurs 01613

Über Arrays und verkettete Listen Listen in Delphi

Sachen gibt s, die gibt s gar nicht

Kurs 1575, Musterlösung zur Winter Klausur 2003/04

{$MODE Delphi} // fuer Free Pascal unit UCd;

Aufgabe (Schreibtischtest, lexikographische Ordnung)

Hinweise zur Bearbeitung der Klausur zum Kurs Einführung in die imperative Programmierung

Übung Algorithmen und Datenstrukturen

FernUniversität -Gesamthochschule- in Hagen

Übung Algorithmen und Datenstrukturen

Vordiplom für Wirtschaftswissenschaften Allgemeine Informatik II SS Juli 2002 Bearbeitungszeit: 120 Minuten BEISPIELLÖSUNG

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

2.2 Einfache Datenstrukturen

1 Funktionale vs. Imperative Programmierung

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Ein Induktionsbeweis über Schuhgrößen

Bitte hier unbedingt Matrikelnummer und Adresse eintragen, sonst keine Bearbeitung möglich "Konzepte imperativer Programmierung"

15 Der strukturierte Datentyp»set«(Mengen)

Schleifen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 45

Informatik I Übung, Woche 40

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Übung Algorithmen und Datenstrukturen

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Fachbericht DPR. Name: René Wagener. Klasse: CI3O1. Fachlehrer: Herr Balog

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Grundlagen der Informatik

ABITURPRÜFUNG 2003 LEISTUNGSFACH INFORMATIK (HAUPTTERMIN)

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Grundlagen der Programmierung

Grundlagen der Informatik

Ausgabe:

VBA-Programmierung: Zusammenfassung

Manipulation binärer Bäume Binäre Bäume II

INFORMATIK FÜR BIOLOGEN

Übungsblock 11. Lösungen Übungsblatt 10: Aufgabe 1:

Klausur zu Grundlagen der Informatik I mit Lösungen 28. Februar 2005 (WS 2004/2005) Dr. Andreas F. Borchert Norbert Heidenbluth

JAVA für Nichtinformatiker - Probeklausur -

DYNAMISCHE DATENSTRUKTUREN MIT ZEIGERVARIABLEN. Staatl. Realgymnasium Lebach 1991/92 Grundkurs Informatik. 1. Einführung. 2.

Suche in Texten. Verschiedene Szenarios: Dynamische Texte. Texteditoren Symbolmanipulatoren. Statische Texte

Übungspaket 32 Einfach verkettete, sortierte Liste

Gruppe A. kommtvor := proc(x::anything, l::list) local y; for y in l do if x=y then return true end if end do; return false end proc

Andere Arten von Listen. Vorlesung 4

Einführung in die Programmierung mit VBA

Lösungsvorschläge zur Klausur 1661 Datenstrukturen I

Einstieg in die Informatik mit Java

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

Verkettete Listen (Linked Lists) Vorlesung 3

15. Elementare Graphalgorithmen

Praxis der Programmierung

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Algorithmen und Datenstrukturen (für ET/IT)

Name: Aufgaben. Arbeitsanweisung

Einstieg in die Informatik mit Java

Primzahlen und Programmieren

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

INSERTION-SORT: Ja, Es wird immer das erste, kleinste Element an die neue Liste angehängt.

Vorlesung Datenstrukturen

Programmierkurs: Delphi: Einstieg

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Kommentierte Lösung zur Aufgabe Kiosk

3. Übungsblatt zu Algorithmen I im SoSe 2017

Bash-Skripting Linux-Kurs der Unix-AG

Transkript:

Kurs 1613 Einführung in die imperative Programmierung 1 Aufgabe 1 In einer ersten for-schleife wird das Kandidatenfeld initialisiert, so dass alle Kandidaten hinten stehen. Eine zweite for-schleife simuliert die 50 Durchgänge des Auswahlverfahrens. Dabei werden im i-ten Durchlauf (i = 1,..., MAXKANDIDAT) jeweils mit einer inneren while-schleife die Vielfachen von i abgezählt, also die Kandidaten, die ihre Position ändern müssen, indem sievortreten, falls sie hinten stehen, bzw. zurücktreten, falls sie vorne stehen. Am Ende des Verfahrens stehen alle Kandidaten vorne, deren Nummern Quadratzahlen sind. procedure BerechneZustand ( outfeld : tkandidaten); { berechnet die zugelassenen und abgelehnten Kandidaten } i: tkandidatenbereich; {Durchlaeufe} j: tnatzahl; {Im i-ten Durchlauf werden hiermit die Kandidaten (Vielfache von i) abgezaehlt} { Initialisierung: alle Kandidaten stehen hinten } for i:= 1 to MAXKANDIDAT do outfeld[i] := hinten; { Durchlaeufe starten... } for i:= 1 to MAXKANDIDAT do j:=i; {erstes Vielfaches von i} while j <= MAXKANDIDAT do if outfeld[j] = vorn then outfeld[j] := hinten outfeld[j] := vorn; j := j + i; {naechstes Vielfaches von i} end; { while } end { for } end; { BerechneZustand } Aufgabe 2 Zur Lösung unseres Problems durchlaufen wir inliste1 mit den Zeigern Zeiger1 und ZeigHilf1 und inliste2 mit den Zeigern Zeiger2 und ZeigHilf2, wobei stets Zeiger1^.next=ZeigHilf1 und Zeiger2^.next=ZeigHilf2 gilt. Dabei ändern wir die Folgezeiger der Listenelemente, bis das Ende von inliste1 und damit von

2 Kurs 1613 Einführung in die imperative Programmierung inliste2 erreicht ist. Die angegebene Funktion arbeitet auch für den Fall ungleich langer Listen. Wir geben zusätzlich ein Rahmenprogramm an, welches den Test der Funktion Listen- Merge ermöglicht: program Aufgabe (input, output); { Testprogramm fuer die Funktion ListenMerge } type trefelement = ^telement; telement = record info : integer; next : trefelement end; tnatzahlplus = 1..maxint; Liste, Liste1, Liste2 : trefelement; Laenge : tnatzahlplus; function ListenMerge ( inliste1, inliste2 : trefelement) : trefelement; { fasst die Elemente der nicht-leeren und gleich langen Listen inliste1 und inliste2 mit dem Reissverschlussverfahren durch Aenderung der Verkettung zu einer einzigen Liste zusammen und gibt einen Zeiger auf den Anfang der Ergebnisliste zurück } Zeiger1, Zeiger2, ZeigHilf1, ZeigHilf2 : trefelement; Zeiger1 := inliste1; Zeiger2 := inliste2; while (Zeiger1 <> nil) and (Zeiger2 <> nil) do ZeigHilf1 := Zeiger1^.next; { 1) Nachfolger sichern } ZeigHilf2 := Zeiger2^.next; Zeiger1^.next := Zeiger2; { 2) Verkettung aendern } Zeiger2^.next := ZeigHilf1;

Kurs 1613 Einführung in die imperative Programmierung 3 Zeiger1 := ZeigHilf1; { 3) Zeiger weiterruecken } Zeiger2 := ZeigHilf2 end; ListenMerge := inliste1; { Neuen Anfang ausgeben } end; { ListenMerge } procedure ListeAufbauen ( inanz : tnatzahlplus; ioliste : trefelement ); { liest inanz Zahlen von der Tastatur ein und speichert sie in der Reihenfolge der Eingabe in der linearen Liste ioliste } Zahl : integer; AnfListe, EndListe, hilf : trefelement; k : tnatzahlplus; AnfListe := nil; writeln ('Bitte ', inanz, 'natuerliche Zahlen eingeben:'); for k := 1 to inanz do read (Zahl); new (hilf); hilf^.info := Zahl; hilf^.next := nil; if AnfListe = nil then { erste Zahl } AnfListe := hilf; EndListe := hilf end { zweite und weitere Zahlen } EndListe^.next := hilf; EndListe := hilf end end; ioliste := AnfListe end; { ListeAufbauen }

4 Kurs 1613 Einführung in die imperative Programmierung writeln ('Bitte die Listenlaenge eingeben (>0):'); readln (Laenge); ListeAufbauen (Laenge, Liste1); ListeAufbauen (Laenge, Liste2); Liste := ListenMerge (Liste1, Liste2); writeln ('Die "verkettete" Liste lautet:'); repeat write (Liste^.info); Liste := Liste^.next until Liste = nil end. { Aufgabe} Aufgabe 3 procedure NachVorn( inwert: integer; iorefanfang: trefelement); {Sucht das erste vorkommende Element mit inwert in der info-komponente und verschiebt dieses Element an den Anfang der Liste. ACHTUNG: Ein solches Element muss in der Liste vorkommen!} lauf, elem: trefelement; {Sonderfallprüfung: Falls das erste Element den Wert inwert hat, so ist nichts zu tun.} if (iorefanfang^.info <> inwert) then {Den Vorgaenger des zu verschiebenden Elementes suchen:} lauf := iorefanfang; while lauf^.next^.info <> inwert do lauf := lauf^.next; elem := lauf^.next; {elem zeigt nun auf das zu verschiebende Element, lauf auf dessen Vorgaenger. Jetzt verschieben:} lauf^.next := elem^.next; elem^.next := iorefanfang; iorefanfang := elem; end; {if} end; {NachVorn}

Kurs 1613 Einführung in die imperative Programmierung 5 Laut Aufgabenstellung durfte vorausgesetzt werden, dass der Suchwert in der Liste vorkommt, was insbesondere bedeutet, dass die Liste nicht leer sein kann, und dass, falls das Element nicht am Anfang steht, die Liste mindestens zwei Elemente hat. Die While-Bedingung oben ist also unter dieser Voraussetzung problemlos, es kann nicht zu einer Dereferenzierung von NIL kommen. Aufgabe 4 a) function countleaf(inrefwurzel : trefbinbaum ): tnatzahl; {die Funktion liefert die Anzahl der Blätter des inrefwurzel} if inrefwurzel = nil then countleaf := 0 if (inrefwurzel^.links = nil) and (inrefwurzel^.rechts = nil) then countleaf := 1 countleaf := countleaf(inrefwurzel^.links) + countleaf(inrefwurzel^.rechts); end; { countleaf }

6 Kurs 1613 Einführung in die imperative Programmierung b) 3 8 11 18 21 25 36 37 18 8 36 3 11 25 37 21 Aufgabe 5 Ein Testfall ist eine Menge von Testdaten, wobei ein Testdatum wiederum ein Paar ist, welches zum Ersten die Eingabedaten (hier: Eingabe für Parameter inzahl) und zum Zweiten die bei dieser Eingabe laut Spezifikation erwartete Ausgabe enthält: Abweisender Test: T 0 = { (0, 0) } Boundary-Test: T 1 = { (e, e) e {1,..., 9} } Interior-Test (2 Durchläufe): T 2 = { (e, a) e {10,..., 99} a ist die größere der zwei Ziffern von e}