diff --git a/06_erweiterte_zeiger/stringaddierer.c b/06_erweiterte_zeiger/stringaddierer.c new file mode 100644 index 0000000..da1ea6b --- /dev/null +++ b/06_erweiterte_zeiger/stringaddierer.c @@ -0,0 +1,42 @@ +/* + * Ergänzen Sie im untenstehenden Programm die fehlenden Funktionen. addiereText bekommt dabei eine Folge von + * Zahlenwörtern kleiner zehn übergeben und ermittelt daraus die Summe. Groß- und Kleinschreibung soll keine Rolle spielen. + * Zudem liefert die Funktion 0, wenn ein Zahlenwort nicht aufgelöst werden konnte, ansonsten 1. + * + * 1. Beispielhafter Programmablauf: + * >> Addiere: Fuenf achT SIEBEN + * Das Ergebnis lautet 20. + * + * 2. Beispielhafter Programmablauf: + * >> Addiere: fuenf achtzehn sieben + * Falsche Eingabe. + */ + +#include +#include +#include +#include +#include "../02_strings/eingabe.h" + +#define MAX_EINGABE_LEN 100 + +char *wandleKlein(char *text); +int wandleZahl(const char *wort); +int addiereText(const char *text, int *erg); + +int main() +{ + char eingabeText[MAX_EINGABE_LEN]; + int erg; + + gibTextEin("Addiere: ", eingabeText, MAX_EINGABE_LEN); + + if(addiereText(eingabeText, &erg)) + printf("Das Ergebnis lautet %d.\n", erg); + else + printf("Falsche Eingabe.\n"); + + + return EXIT_SUCCESS; +} + diff --git a/06_erweiterte_zeiger/stringsortierung.c b/06_erweiterte_zeiger/stringsortierung.c new file mode 100644 index 0000000..ac9d96e --- /dev/null +++ b/06_erweiterte_zeiger/stringsortierung.c @@ -0,0 +1,38 @@ +/* + * Erweitern Sie das folgende Programm, sodass es die Funktion qsort der Standard-Bibliothek verwendet, + * um das enthaltene String-Array sortiert auszugeben. Es sollen zuerst die Strings ohne Zahlen ausgegeben werden + * und am Ende die mit Zahlen. Die Strings ohne Zahlen sollen aufsteigend sortiert werden, die mit Zahlen absteigend. + * Sie können davon ausgehen, dass die im Array enthaltenen Strings immer nur aus Buchstaben oder nur aus Zahlen bestehen. + * Es ist also ausreichend, das erste Zeichen mittels isdigit(...) zu prüfen. + * + */ + +#include +#include +#include +#include + +void gibStringsAus(const char *strings[], unsigned int anzahl); + + +int main() +{ + const char *strings[] = {"789", "Zorro", "Adam", "Werner", "123", "Bernd", "Hubert", "456"}; + unsigned int anzahlStrings = sizeof(strings)/sizeof(strings[0]); + + printf("Vor Sortierung:\n"); + gibStringsAus(strings, anzahlStrings); + + printf("\nNach Sortierung:\n"); + gibStringsAus(strings, anzahlStrings); + + return EXIT_SUCCESS; +} + +void gibStringsAus(const char *strings[], unsigned int anzahl) +{ + for(int i = 0; i < anzahl; i++) + { + printf("%s\n", strings[i]); + } +} diff --git a/07_const/const.c b/07_const/const.c new file mode 100644 index 0000000..aaa7d32 --- /dev/null +++ b/07_const/const.c @@ -0,0 +1,70 @@ +/* + * Im folgenden Programm soll eine Eingabe nur bestehend aus Zahlen als String eingelesen werden. Die einzelnen Zahlen sollen extrahiert, konvertiert + * und deren Summe ausgegeben werden. + * + * 1. Ergänzen Sie in den vorhandenen Funktionen zunächst das Schlüsselwort const bei geeigneten Parametern. + * 2. Implementieren Sie nun die Funktion konvertiereZahlen, die einen String übergeben bekommt, die enthaltenen Zahlen nach int konvertiert und in einem + * int-Array speichert. Der String soll nicht verändert werden. Die Funktion soll die Anzahl an extrahierten Zahlen zurückgeben oder 0, falls Wörter enthalten + * sind, die keine Zahlen sind. Sehen Sie sich für die genauen Anforderung an die Funktion auch unten deren Verwendung in der main-Funktion an. Vergessen Sie + * nicht, Parameter mit dem Schlüsselwort const zu markieren, wenn es Sinn ergibt. + */ + +#include +#include +#include + +#define PUFFER_GROESSE 100 + + +char *gibTextEin(char *ausgabeText, char *puffer, unsigned int groesse); +void gibSummeAus(unsigned int zahlen[], unsigned int anzahl); + +int main() +{ + char eingabe[PUFFER_GROESSE]; + unsigned int zahlen[PUFFER_GROESSE]; + unsigned int vorhandeneZahlen = 0; + + gibTextEin("Geben Sie Zahlen ein: ", eingabe, PUFFER_GROESSE); + + vorhandeneZahlen = konvertiereZahlen(eingabe, zahlen, PUFFER_GROESSE); + + gibSummeAus(zahlen, vorhandeneZahlen); + + return EXIT_SUCCESS; +} + +char *gibTextEin(char *ausgabeText, char *puffer, unsigned int groesse) +{ + printf("%s", ausgabeText); + fgets(puffer, groesse, stdin); + + if(puffer[strlen(puffer)-1] == '\n') + puffer[strlen(puffer)-1] = '\0'; + else + while(getchar() != '\n') {} + + return puffer; +} + +void gibSummeAus(unsigned int zahlen[], unsigned int anzahl) +{ + int summe = 0; + + if(anzahl > 0) + { + printf("%d", zahlen[0]); + summe = zahlen[0]; + } + + for(int i = 1; i < anzahl; i++) + { + printf(" + %d", zahlen[i]); + summe += zahlen[i]; + } + + if(anzahl > 0) + printf(" = %d\n", summe); + else + printf("%s", "Keine Werte vorhanden!\n"); +} \ No newline at end of file