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

(Teil 2 Angelegt)
 
(Dateiverlinkung korrigert)
Zeile 12: Zeile 12:
 
  RGFzIGlzdCBlaW4gVGVzdA==
 
  RGFzIGlzdCBlaW4gVGVzdA==
  
Hier ist die Vorlage: [http://docs.freitagsrunde.org/Veranstaltungen/ckurs_2009/vorgaben/base64_refactor.c|base64_refactor.c]
+
Hier ist die Vorlage: [http://docs.freitagsrunde.org/Veranstaltungen/ckurs_2009/vorgaben/base64_refactor.c base64_refactor.c]
  
 
== Schritt 1 ==
 
== Schritt 1 ==

Version vom 22. September 2009, 01:58 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 encodeblock(), 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

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)
{
  /* ... */
}