#include #include #include #define MAX 100 // Maximale Anzahl an Zahlen // Struktur zur Speicherung einer Zahl mit Vorkomma- und Nachkommateil typedef struct { int vorkomma; // Ganzzahliger Teil vor dem Komma int nachkomma; // Nachkommateil als ganze Zahl int nachstellen; // Anzahl der Nachkommastellen } Kommazahl; // Funktion zur Einlesung der Zahlen int einlesen(Kommazahl zahlen[], int max) { char eingabe[100]; // Puffer für die Eingabezeile int anzahl = 0; // Zählt, wie viele Zahlen eingegeben wurden printf("Gib Deine Kommazahlen ein (Abschluss mit Leerzeile)\n"); while (fgets(eingabe, sizeof(eingabe), stdin)) { // Lies eine Zeile ein if (eingabe[0] == '\n') break; // Wenn die Zeile leer ist, beende die Eingabe Kommazahl z; // Neue Kommazahl-Struktur char *komma = strchr(eingabe, ','); // Suche das Komma in der Eingabe if (komma) { // Wenn ein Komma gefunden wurde *komma = '\0'; // Setze das Komma auf Stringende, trennt Vorkomma ab z.vorkomma = atoi(eingabe); // Wandelt den Vorkommateil in int um char *nachkommaStr = komma + 1; // Zeiger auf den Nachkommateil nachkommaStr[strcspn(nachkommaStr, "\n")] = '\0'; // Entfernt Zeilenumbruch am Ende z.nachstellen = strlen(nachkommaStr); // Zählt die Nachkommastellen z.nachkomma = atoi(nachkommaStr); // Wandelt Nachkommateil in int um } else { // Wenn kein Komma gefunden wurde z.vorkomma = atoi(eingabe); // Ganze Zahl, Vorkomma ist die Zahl z.nachkomma = 0; // Nachkomma ist 0 z.nachstellen = 0; // Keine Nachkommastellen } zahlen[anzahl++] = z; // Speichere die Zahl im Array if (anzahl >= max) break; // Wenn Maximum erreicht, abbrechen } return anzahl; // Gibt die Anzahl der eingegebenen Zahlen zurück } // Funktion zur Bestimmung der maximalen Nachkommastellen int max_nachkommastellen(const Kommazahl zahlen[], int anzahl) { int max_nachstellen = 0; // Startwert für Maximum for (int i = 0; i < anzahl; i++) { // Gehe alle Zahlen durch if (zahlen[i].nachstellen > max_nachstellen) { // Wenn mehr Nachkommastellen gefunden max_nachstellen = zahlen[i].nachstellen; // Speichere neues Maximum } } return max_nachstellen; // Gibt das Maximum zurück } // Funktion zur Addition der Zahlen mit Skalierung void addiere(const Kommazahl zahlen[], int anzahl, int max_nachstellen, int *summe_vorkomma, long long *summe_nachkomma) { *summe_vorkomma = 0; // Setze Summe Vorkomma auf 0 *summe_nachkomma = 0; // Setze Summe Nachkomma auf 0 for (int i = 0; i < anzahl; i++) { // Gehe alle Zahlen durch *summe_vorkomma += zahlen[i].vorkomma; // Addiere Vorkomma-Anteil int nachkomma = zahlen[i].nachkomma; // Hole Nachkomma-Anteil // Skaliere Nachkomma auf die maximale Stellenzahl (z.B. 3 -> 300 bei 2 Nachkommastellen) for (int j = 0; j < max_nachstellen - zahlen[i].nachstellen; j++) { nachkomma *= 10; } *summe_nachkomma += nachkomma; // Addiere skalierten Nachkomma-Anteil } } // Funktion zur Berechnung des Übertrags und Ausgabe void ausgabe(int summe_vorkomma, long long summe_nachkomma, int max_nachstellen) { int basis = 1; // Basis für Nachkommastellen (z.B. 1000 für 3 Stellen) for (int i = 0; i < max_nachstellen; i++) basis *= 10; summe_vorkomma += summe_nachkomma / basis; // Übertrag von Nachkomma zu Vorkomma summe_nachkomma = summe_nachkomma % basis; // Rest bleibt als Nachkomma // Ausgabe der Summe, Nachkomma wird mit führenden Nullen ausgegeben printf("= %d,%0*lld\n", summe_vorkomma, max_nachstellen, summe_nachkomma); } int main() { Kommazahl zahlen[MAX]; // Array für alle eingegebenen Zahlen int anzahl = einlesen(zahlen, MAX); // Lies Zahlen ein, gibt Anzahl zurück int max_nachstellen = max_nachkommastellen(zahlen, anzahl); // Finde maximale Nachkommastellen int summe_vorkomma; long long summe_nachkomma; addiere(zahlen, anzahl, max_nachstellen, &summe_vorkomma, &summe_nachkomma); // Addiere alle Zahlen ausgabe(summe_vorkomma, summe_nachkomma, max_nachstellen); // Gib das Ergebnis aus return 0; // Programmende }