Grundkurs Common-Lisp WS 96|97

Weihnachtsübung (18-dez-1997)

Formatierte Ausgaben (20 Punkte)

Definiere eine vierstellige iterative Funktion draw-triangle(), die gleichseitige Dreiecke (oder Teile davon) ausgibt; die Gestalt und Position der Dreiecke wird von den folgenden Parametern bestimmt:

  • width: Breite der Grundseite (unten) in Zeichen; immer ungerade (teste mit oddp()) und größer oder gleich 1 (teste mit >());
  • height: maximale Höhe des Dreiecks in Zeilen; immer größer oder gleich 1;
  • growth: Wachstumsmaß zwischen zwei Zeilen (i.e. Differenz der Breiten in zwei aufeinanderfolgenden Zeilen) in Zeichen; immer gerade (evenp()) und größer oder gleich 2;
  • indentation: Einrückungstiefe (i.e. Abstand der Grundseite vom linken Rand) in Zeichen; immger größer oder gleich 0.

Einige Aufrufbeispiele:

? (draw-triangle 7 4 2 0)

   *
  ***
 *****
*******
nil
? (draw-triangle 7 3 2 1)
   ***
  *****
 *******
nil
? (draw-triangle 9 3 4 2)
      *
    *****
  *********
nil

Hinweis: Verwende zur Ausgabe die Funktion format(); `(format t <string>)' gibt <string> am Bildschirm aus; der format()-String `"~%"' erzeugt einen Zeilenumbruch; e.g.

? (format t "foo~%bar")
foo
bar
nil

Noch ein Hinweis: draw-triangle() erzeugt die Dreiecke von oben (Spitze) nach unten (Grundseite); verwende ein do*() als Kontrollstruktur, deren Rumpf je eine Zeile des Dreiecks ausgibt; verwende weiterhin zweimal do() (im Rumpf des do*()), um die Einückungstiefe und Sterne der aktuellen Zeile (je zeichenweise) auszugeben.

Letzter Hinweis: Berechne für jeden Iterationsschritt des äußeren do*() lokale Variablen blanks und stars entsprechend der Zahl der benötigten Leerzeichen (Einrückung) und Sterne der aktuellen Zeile.

     *     
    ***    
   *****   
    ***    
   *****   
  *******  
   *****   
  *******  
 ********* 
  *******  
 ********* 
***********
     *     
     *     





         *          
        *****        
      *********      
        *****        
      *********      
    *************    
      *********      
    *************    
  *****************  
    *************    
  *****************  
*********************
         ***         
         ***         





      *      
     ***     
    *****    
     ***     
    *****    
   *******   
    *****    
   *******   
  *********  
   *******   
  *********  
 *********** 
  *********  
 *********** 
*************
      *      
      *      



Abgabetermin ist der 12-jan-97

lisp-aufgaben@coli.uni-sb.de