Entwurf 2: "Nassi-Shneiderman-Diagramme"

von Jeanine Umlang


Inhalt

1. Einordnung der Unterrichtsstunde

 

2. Sachanalyse

 

3. Stundenziele

 

4. Didaktische und methodische Vorbesinnung/ Analyse

 

5. Stundenverlauf

 

6. Anhang

 

 


1. Einordnung der Unterrichtsstunde [zurück]

 Diese Stunde ist Bestandteil der 2. Phase unserer Halbjahresplanung. Sie umfasst die Behandlung von Struktogrammen nach Nassi-Shneiderman.
 Notwendige Voraussetzungen aus den vorhergehenden Stunden sind ein sicherer und geübter Umgang mit der Programmieroberfläche, mit der Grafikbibliothek und mit den bisher erlernten Sprachelementen, speziell denen der objektorientierten Betrachtung. Ich gehe davon aus, dass zuvor der Begriff Algorithmus und umgangssprachliche Kontrollstrukturen anhand von Alltagsalgorithmen definiert und thematisiert wurden. Außerdem sollten die Schüler mit Hilfe der Grafikbibliothek und Pythons Kontrollstrukturen in selbständiger Arbeit einen einfachen Algorithmus entwickelt haben, der eine Bedingung oder/und eine Wiederholung enthält, um somit die Effektivität von Kontrollstrukturen zu verinnerlichen und deren Bedeutung in Algorithmen zu erkennen.
 In der zu behandelnden Unterrichtsstunde soll nun die Handhabung von Struktogrammen eingeführt und geübt werden. Dabei soll bereits auf die Syntax von Python geachtet werden, damit die Struktogramme sofort in ihren jeweiligen Programmcode übersetzt werden können. Die Algorithmen beinhalten erstmal nur das Positionieren von mehreren Objekten, z.B. eine Schleife zur Anordnung in jede Ecke des Spielfeldes.
 Die nächste Stunde dient dann zur Entwicklung von Algorithmen für bewegte Objekte, im Hinblick auf die Umsetzung des Squash-Spiels, und zur Leistungsüberprüfung des Teilgebietes "Kontrollstrukturen".
 Im Folgenden geht es dann weiter mit der Behandlung von Klassenbeziehungen und der Festigung des Gelernten durch die Erstellung des Quellcodes für das Squash-Spiel.

 2. Sachanalyse [zurück]

 

Algorithmus

 Ein Algorithmus ist der Entwurf einer Lösungsidee. Er besteht aus klar und deutlich formulierten Schritten, die mit endlichem Aufwand in endlicher Zeit ausführbar sind. Ein Programm ist somit ein Algorithmus, jedoch gebunden an eine Programmiersprache.

 

Kontrollstrukturen

 Als Kontrollstrukturen werden im Allgemeinen Sprachmittel zum Steuern einer Ausführungsreihenfolge von Anweisungen bezeichnet. Kontrollstrukturen in einem Programm ermöglichen es, bestimmte Anweisungsblöcke nur unter bestimmten Bedingungen oder mehrfach zu durchlaufen. Sie kontrollieren also den Programmablauf.
 Bei Programmen die keine Kontrollstrukturen aufweisen werden die Anweisungen in der Reihenfolge abgearbeitet in der sie im Quelltext vorkommen.

Kontrollstrukturen der Programmiersprache Python

Bedingung Bedingte Anweisung

if, elif und else

if a > b:
  print 'a ist groesser als b.'
elif a < b:
  print 'a ist kleiner als b.'
else:
  print 'a ist gleich b.'
 
Wiederholung Zählschleife for i=1
for i in range(100):
    print i
 
Vorprüfende Schleife while i=0
while i < 100:
    print i
    i = i + 1

 

Struktogramm

 Unter einem Struktogramm (Nassi-Shneiderman-Diagramm) versteht man die graphische Darstellung eines Programmablaufs mit entsprechenden Operationen. Es stellt ein Modell dar, mit dessen Hilfe Programme unabhängig von der Programmiersprache entwickelt werden können. Der Lesefluss eines Struktogramms erfolgt von oben nach unten, genauso wie die Abarbeitung erfolgen soll. Umfangreiche und komplexe Programme sind so leicht lesbar. Jedes Struktogramm besteht aus einzelnen Elementstrukturblöcken, die jeweils einen Programmschritt symbolisieren und anschließend kantendeckend aneinander gefügt und gegebenenfalls ineinander verschachtelt werden. Jeder Strukturblock zeichnet sich dadurch aus, dass er nur einen Eingang und nur einen Ausgang besitzt.

 

 

 

 

 

3. Stundenziele [zurück]

 

Grobziel:

  • Die Schüler können ein Programm bzw. Algorithmus hinsichtlich seiner Kontrollstrukturen Analysieren und in einem Diagramm darstellen

Feinziele:

  • Die Schüler kennen den Aufbau eines Struktogramms nach Nassi-Shneiderman.

  • Sie können einen Algorithmus in Form eines Struktogramms beschreiben.

  • Sie können Pythoncode in ein Struktogramm überführen.

  • Sie können zu einer Aufgabenstellung einen Algorithmus entwickeln.

  • Sie erkennen die Kontrollstrukturen im Algorithmus.

 

 

4. Didaktische und methodische Vorbesinnung/ Analyse [zurück]

 

Einführung

 Ich hatte zuerst überlegt den Aufbau eines Struktogramms über den klassischen Frontalunterricht einzuführen. Da ich jedoch die Sachanalyse selbst über das Internet durchgeführt habe und dort auch einiges nachlesen konnte, habe ich diesen Zugang zu den Struktogrammen gewählt. Somit sind die Schüler gezwungen sich eigene Gedanken zum Thema zu machen und sind auch eher bereit das Ganze kritisch zu betrachten. Ich habe leider in meinen bisher unterrichteten Stunden festgestellt, dass die Schüler meistens den Vortrag des Lehrers akzeptieren und sich wenig eigene Gedanken machen. So kann ich dem entgegenwirken. Außerdem lernen die Schüler, das Internet auch zum Wissenserwerb zu nutzen und somit sich selbst zu helfen.

Die Schüler werden in drei Gruppen aufgeteilt. Dabei sind die Schüler nicht gezwungen zusammenzuarbeiten. Die Gruppeneinteilung dient eher der Themenunterscheidung. Eine Gruppe soll sich mit der Definitionen von Struktogrammen und dem grundsätzlichen Aufbau beschäftigen, die andere mit der Darstellung einer Schleife und eine weitere mit dem Aufbau der Bedingung, wobei jede Gruppe auch nach Beispielen Ausschau halten soll. Über diese soll dann nach dem Zusammentragen der Ergebnisse diskutiert werden, damit die Schüler auch lernen die Meinung ihrer Mitschüler kritisch zu betrachten. Die Ergebnisse werden von einem Schüler der jeweiligen Gruppe vorgetragen und zu einem Tafelbild zusammengefügt.

So erhalten die Schüler einen bleibenden Überblick über den Aufbau eines Struktogramms und werden in den Methoden-, Sach- und Selbstkompetenzen geschult.

 

1. Anwendung

 In einer ersten Anwendung sollen die Schüler dann das zusammengetragene Wissen verinnerlichen. Dazu sollen sie den vorgegebenen Pythoncode der Methode eins() in ein Struktogramm umwandeln und herausfinden, was diese Methode ausführt. Die Methode enthält Wiederholungen und Bedingungen.

 

2.Anwendung

 In der zweiten Anwendung sollen die Schüler sich dann anhand eines Problems einen Algorithmus in Form eines Struktogramms überlegen. Gegenüber der ersten Anwendung müssen die Schüler jetzt ohne Hilfe handeln. Sie sollen mehrere Bälle diagonal anordnen bis sie an eine Wand stoßen, dann sollen die Bälle in die entgegengesetzte Richtung diagonal angeordnet werden. Unter der Sicht des Gesamtkonzeptes "Squash-Spiel" ist dies bereits ein Teilproblem bzw. Teilalgorithmus. Die Schüler können diese Überlegungen in der Erarbeitung des Quelltextes des Squash-Spiels wieder aufgreifen.

 

 

5. Stundenverlauf [zurück]

 

Phase

Inhalt

Unterrichtsmethode

Lehrertätigkeit

Schülertätigkeit

Medien

I

Einführung/ Wissenserwerb

 

Lehrervortrag

Aufgabenstellung:  Internetrecherche nach Def. Struktogramm und Darstellung der einzelnen Kontrollstrukturen mit einem Beispiel

Bilden 3 Gruppen

 

Gruppenarbeit

Koordiniert die Gruppenbildung und Internetrecherche und beantwortet fragen

Jede Gruppe sucht nach der Antwort der Fragestellung

Internet
Unterrichtsgespräch

Erstellung eines Tafelbildes

Vorstellung der Ergebnisse der Gruppen,

Tafel

Diskussion über die Beispiele

Regt die Diskussion an

Diskutieren über die Beispiele

Tafel/ Internet/ Beamer
II Anwendung 1/ gesamte Klasse gelenktes Unterrichtsgespräch

Vorgabe einer Methode in  Pythoncode

Analyse des Quelltextes, Überführung in ein Struktogramm Beamer/ Tafel/ Methode eins()
III Anwendung 2/ Einzelarbeit Aufgabenstellung und Hausaufgabe Problemerläuterung Überlegen sich ein Struktogramm für den Ablauf eins Algorithmus, Realisieren am Computer Tafel/ Beamer/ Methode vier()

 

 

6. Anhang [zurück]

Quellcode zum Speichern (test0.py)

from grafik import *
import math

class HSpielfeld(TZeichenblatt):
    def __init__(self):
        TZeichenblatt.__init__(self)


class HBall(TKreis):
    #Erzeugung einer Klasse mit den Parametern Spielfeld, x- und y-Koordinate des Mittelpunktes
    #und Füllfarbe 
    def __init__(self,SF,x,y,f):
        TKreis.__init__(self,SF)
        self.Spielfeld=SF                                         #Zuordnung zum Spielfeld
        self.setzeRadius(20)                                      #Festlegen des Radius
        self.setzeMPos(x-self.holeRadius(),y-self.holeRadius())   #Startpunkt festlegen
        self.Farbe.setzeFarbname("gruen")                         #Festlegen der Randfarbe 
        self.Fuellfarbe.setzeFarbname(f)                          #Festlegen der Füllfarbe
        
    #Methode, die ein Objekt bewegt
    def bewegen(self,x,y):
        self.posVersetzenUm(x,y)    #Versetzt das Objekt um x(y) entlang der x(y)-Achse
        self.zeigen()               #zeigt das Objekt an der neuen Position

        
def eins():
    #Erzeugen eines Balls
    ball=HBall(spielfeld,0,0,"weiss")
    j=1                 #Startwert j
    #Anzeigen von Bällen  entlang der y-Achse im Abstand 500
    while (j*50 < (spielfeld.holeHoehe()-ball.holeRadius())):
        i=1             #Startwert i
        #Anzeigen von Bällen entlang der x-Achse im Abstand 50 
        while (i*50 <(spielfeld.holeBreite()-ball.holeRadius())):
            #Auswahl von Spalten in denen die Bälle gruen sein sollen 
            if i in (1,3,5,7,9,11,13,15,17,19):
                ball=HBall(spielfeld,i*50,j*50,"gruen")
                ball.zeigen()
            #sonst sind die Bälle rot 
            else:
                ball=HBall(spielfeld,i*50,j*50,"rot")
                ball.zeigen()
            i=i+1
        j=j+1

            
#diagonale Anordnung von Bällen mit Reflexion an der Wand 
def vier():
    ball=HBall(spielfeld,0,0,"weiss")
    i=1
    j=1
    while (j*20 <(spielfeld.holeHoehe()-ball.holeRadius())) \
                 and (i*20 <(spielfeld.holeBreite()-ball.holeRadius())):
        ball=HBall(spielfeld,i*20,j*20,"rot")
        ball.zeigen()
        i=i+1
        j=j+1
        print j
    j=j-2
    print j
    while (j*20 <(spielfeld.holeHoehe()-ball.holeRadius())) \
                 and (i*20 <(spielfeld.holeBreite()-ball.holeRadius())):
        print j
        ball=HBall(spielfeld,i*20,j*20,"rot")
        ball.zeigen()
        j=j-1
        i=i+1
    
    
#--------------------------Main------------------------------

fenster=Tkinter.Tk()
spielfeld=HSpielfeld()
ball=HBall(spielfeld,50,50,"rot")
spielfeld.pack()
vier()
fenster.mainloop()

 

 

 


27. Juli 2006   Jeanine Umlang