• Keine Ergebnisse gefunden

7. Übungsblatt Ausgabe:

N/A
N/A
Protected

Academic year: 2022

Aktie "7. Übungsblatt Ausgabe:"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe 2020

7. Übungsblatt

Ausgabe: 25.06.20 Abgabe: 02.07.20

Dieses Übungsblatt ist ein PDF-Formular. Bitte in einem PDF-Viewer Ihrer Wahl ausfüllen, abspeichern, und an die Veranstalter mailen.

Gruppe: 1 2 3 4 5 6 7 8 9 10 11 12

Name: Matrikelnummer:

Name: Matrikelnummer:

Name: Matrikelnummer:

7.1 Suche nach dem größten Element

Das folgende Programm aus der Vorlesung berechnet den Index r des größten Elementes des nicht-leeren Feldesa.

1 i n t n ;

2 i n t a [ ] ;

3 i n t i , n , r ;

4

5 /∗ ∗ { 0 < n }

6 i = 0 ;

7 r = 0 ;

8 w h i l e ( i < n )

9 /∗ ∗ inv (j . 0<= j < i −−> a [ j ] <= a [ r ] )

10 && 0 <= i <= n && 0 <= r < n ;/ {

11 i f ( a [ r ] < a [ i ] ) {

12 r = i ;

13 }

14 else {

15 }

16 i = i + 1 ;

17 }

18 /∗ ∗ { (j . 0 <= j < n−−> a [ j ] <= a [ r ] ) && 0 <= r < n }/

Berechnen Sie die stärkste Nachbedingung und die resultierenden Verifikationsbedingungen nach dem be- kannten Muster.

1. Stärkste Nachbedingung (ASP):

— Seite 1 von 2 —

(2)

7. Übungsblatt Korrekte Software: Grundlagen und Methoden, SoSe 2020

2. Verifikationsbedingungen (SVC):

7.2 Spezifikation

Zeichenketten sind in C einfach Felder vonchar. Wir können sie zu Sequenzen von Zeichen, oder Zeichenket- ten, abstrahieren, so wie wir Feldern von ganzen Zahlen zu Sequenzen (Listen) von ganzen Zahlen abstrahiert haben.

In dieser Übung wollen wir ine nützliche Funktion auf Zeichenketten spezifizieren. Dazu definieren wir ein Wortals eine Zeichenkette, die kein Leerzeichen1enthält.

Als Beispiel für rekursive Funktionsdefinitionen können die Funktionen aus der Vorlesung dienen, oder fol- gende Funktion, welche aus einer Liste von Listen eine lange Liste macht:

concat([]) == []

concat(xs:xss) ==xs++(concat(xss))

Wir spezifizieren jetzt eine Funktion, die eine Zeichenkette in eine Liste von Wörtern zerlegt.

(1) Spezifizieren Sie ein Prädikatnospace(w), welches wahr ist gdw. das Argumentwkein Leerzeichen enthält (also ein Wort ist). Nutzen Sie dazu das Prädikatis_space(c), welches wahr ist, wenn das Argumentcein Leerzeichen ist:

(2) Spezifizieren Sie eine Funktionremspace(s), welche alle Leerzeichen aus einer Zeichenkette entfernt:

(3) Spezifzieren Sie, dass das Ergebnis vonremspace(s)keine Leerzeichen enthält und damit ein Wort ist:

(4) Spezifizieren Sie damit eine Funktionwords(w), welche aus einer Zeichenketten (Listen von Zeichenw) eine Liste von Zeichenkettenwserzeugt, so dass:

• alle Elemente vonwsWörter sind, und

• sie verkettet daselbe ergeben wiewohne die Leerzeichen.

Hinweis:

Nutzen Sie die in der Vorlesung vorgestellten Funktionen ++, : etc. auf Sequenzen; ggf. können Sie auch weitere Hilfsfunktionen definieren. Beachten Sie, dass Ihre Definitionen nicht alle rekursiv bzw. ausführbar zu sein brauchen.

Die Funktionenconcatundwordsgibt es mit der hier intendierten Funktionalität auch in Haskell.

1“white space”, also Leerzeichen, Tabulator oder Zeilenvorschub

— Seite 2 von 2 —

Referenzen

ÄHNLICHE DOKUMENTE

Unter erwachsenen Personen mit chronischen Krankheiten sollen die mit dem höchsten Risiko für einen schweren Verlauf von Covid-19 prioritär Zugang zur Impfung erhalten..

I Nicht-Striktheit erlaubt zyklische Strukturen, wenn lokal Abbruch der Rekursion möglich I Beispiel: all = foldr (&amp;&amp;) True. I Gegenbeispiel: Tiefensuche in

Für kleine Graphen wie g1 ist unsere naive Implementierung aus SimpleGrphDB noch ausreichend, wenn wir jedoch beispielsweise auf größeren Graphen häufig Knoten oder Kanten

I Problem: plaziere 8 Damen sicher auf einem Schachbrett.

Hierbei ist der Rang eines Knotens die Länge des rechten Rückgrats und das rechte Rückgrat eines Knotens ist der von diesem Knoten ausgehende Pfad bis zu einem Blatt, der

• Gibt es verschiedene Klassen von Komponenten, die Ereignisse der gleichen Klasse erzeugen können, werden diese mit einem geeigneten Interface

der Compiler kennt nur, was er bereits gelesen hat, aber keine anderen Dateien → globale Variablen und alle Funktionen gelten vom Deklarationspunkt bis zum Ende der Datei

Die Funktion getchar() hat das erste Zeichen dem Tastaturpuffer Die Funktion getchar() hat das erste Zeichen dem Tastaturpuffer entnommen.. Es ist der Variablen x