halo
This commit is contained in:
parent
4d9f0b6e84
commit
f0606db4f5
@ -12,77 +12,74 @@ typedef struct {
|
||||
|
||||
// Funktion zur Einlesung der Zahlen
|
||||
int einlesen(Kommazahl zahlen[], int max) {
|
||||
char eingabe[100];
|
||||
int anzahl = 0;
|
||||
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)) {
|
||||
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;
|
||||
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; // Speichern der Zahl
|
||||
if (anzahl >= max) break;
|
||||
zahlen[anzahl++] = z; // Speichere die Zahl im Array
|
||||
if (anzahl >= max) break; // Wenn Maximum erreicht, abbrechen
|
||||
}
|
||||
return anzahl;
|
||||
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;
|
||||
for (int i = 0; i < anzahl; i++) {
|
||||
if (zahlen[i].nachstellen > max_nachstellen) {
|
||||
max_nachstellen = zahlen[i].nachstellen;
|
||||
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;
|
||||
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;
|
||||
*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 nachkomma = zahlen[i].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;
|
||||
*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) {
|
||||
// Nachkommaübertrag berechnen
|
||||
int basis = 1;
|
||||
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;
|
||||
summe_nachkomma = summe_nachkomma % basis;
|
||||
// Ausgabe
|
||||
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 zur Speicherung aller eingegebenen Zahlen
|
||||
int anzahl = einlesen(zahlen, MAX); // Eingabephase
|
||||
int max_nachstellen = max_nachkommastellen(zahlen, anzahl); // Maximal vorkommende Anzahl von Nachkommastellen finden
|
||||
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); // Aufaddieren mit Skalierung
|
||||
ausgabe(summe_vorkomma, summe_nachkomma, max_nachstellen); // Ausgabe
|
||||
return 0;
|
||||
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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user