Info2P5/28.2_kommaadd.c
2025-05-10 13:48:18 +02:00

64 lines
2.5 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;
int main() {
Kommazahl zahlen[MAX]; // Array zur Speicherung aller eingegebenen Zahlen
char eingabe[100]; // Eingabepuffer
int anzahl = 0; // Zähler für Anzahl der eingegebenen Zahlen
// Eingabephase
printf("Gib Deine Kommazahlen ein (Abschluss mit Leerzeile)\n");
while (fgets(eingabe, sizeof(eingabe), stdin)) {
if (eingabe[0] == '\n') break; // Abbruch bei Leerzeile
Kommazahl z;
char *komma = strchr(eingabe, ','); // Suche Komma
if (komma) {
*komma = '\0'; // Trenne Vorkommateil ab
z.vorkomma = atoi(eingabe); // Umwandlung Vorkomma
char *nachkommaStr = komma + 1;
// Entferne evtl. Zeilenumbruch
nachkommaStr[strcspn(nachkommaStr, "\n")] = '\0';
z.nachstellen = strlen(nachkommaStr); // Anzahl der Nachkommastellen merken
z.nachkomma = atoi(nachkommaStr); // Nachkomma als ganze Zahl
} else {
// Falls kein Komma, dann ist es eine ganze Zahl
z.vorkomma = atoi(eingabe);
z.nachkomma = 0;
z.nachstellen = 0;
}
zahlen[anzahl++] = z; // Speichern der Zahl
}
// Maximal vorkommende Anzahl von Nachkommastellen finden
int max_nachstellen = 0;
for (int i = 0; i < anzahl; i++) {
if (zahlen[i].nachstellen > max_nachstellen) {
max_nachstellen = zahlen[i].nachstellen;
}
}
// Aufaddieren mit Skalierung
int summe_vorkomma = 0;
long long summe_nachkomma = 0;
for (int i = 0; i < anzahl; i++) {
summe_vorkomma += zahlen[i].vorkomma;
// Nachkomma auf gemeinsame Basis (z.B. 1.000.000 für 6 Stellen) skalieren
int faktor = 1;
for (int j = 0; j < max_nachstellen - zahlen[i].nachstellen; j++) {
zahlen[i].nachkomma *= 10;
}
summe_nachkomma += zahlen[i].nachkomma;
}
// Nachkommaübertrag berechnen
int basis = 1;
for (int i = 0; i < max_nachstellen; i++) basis *= 10;
summe_vorkomma += summe_nachkomma / basis;
summe_nachkomma = summe_nachkomma % basis;
// Ausgabe
printf("= %d,%0*lld\n", summe_vorkomma, max_nachstellen, summe_nachkomma);
return 0;
}