Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/Refactoring: Unterschied zwischen den Versionen

(Dateiverlinkung korrigert)
(Schritt 1: Satz beendet)
Zeile 16: Zeile 16:
 
== Schritt 1 ==
 
== Schritt 1 ==
  
Schreibe eine Funktion encodeblock(), die die vier gegebenen encode_*_output() Funktionen ersetzt.
+
Schreibe eine Funktion encode_block(), die die vier gegebenen encode_*_output() Funktionen ersetzt.
  
 
  /**
 
  /**
Zeile 29: Zeile 29:
 
  }
 
  }
  
ersetze die Aufrufe der vier Funktionen an den drei stellen im Code durch den einmaligen Aufruf der
+
Ersetze die Aufrufe der vier Funktionen an den drei stellen im Code durch den einmaligen Aufruf der Funktion encode_block().
  
 
== Schritt 2 ==
 
== Schritt 2 ==

Version vom 22. September 2009, 02:00 Uhr

Teil 1

(In Bearbeitung)

Teil 2

Den Algorythmus zum encodieren eines Strings nach base64 aus einer anderen Aufgabe kann man auch noch etwas eleganter und knapper schreiben.

Das Programm erwatet genau einen Kommandozeilenparameter und convertiert diesen nach Base64.

$ ./base64 "Das ist ein Test"
RGFzIGlzdCBlaW4gVGVzdA==

Hier ist die Vorlage: base64_refactor.c

Schritt 1

Schreibe eine Funktion encode_block(), die die vier gegebenen encode_*_output() Funktionen ersetzt.

/**
 * Encodes three input chars into four output chars based on the base64 scheme.
 * @param in chararray with input characters
 * @param out chararray where the output is written to
 * @param len number of chars to be used from input
 */
void encode_block( unsigned char in[3], unsigned char out[4], int len )
{
  /* ... */
}

Ersetze die Aufrufe der vier Funktionen an den drei stellen im Code durch den einmaligen Aufruf der Funktion encode_block().

Schritt 2

Vereinfache den Code so, dass die Funktion encode_block() nur ein einziges mal aufgerufen wird. Lagere den Algorithmus zum encodieren in eine Extra Funktion encode() aus. Alles was die ein und Ausgabe mit dem Benutzer und Initialisierung von Variablen betrifft soll in der Funktion main() bleiben.

/**
 * Encodes the input string into an output string based on the base64 scheme.
 * @param length size of input string
 * @param input string with input characters
 * @param output string where the output is written to. It has to be long enough to hold the output
 */
void encode(int length, char *input, char *output)
{
  /* ... */
}