diff --git a/28.2_kommaadd.c b/28.2_kommaadd.c new file mode 100644 index 0000000..f8b855d --- /dev/null +++ b/28.2_kommaadd.c @@ -0,0 +1,64 @@ +#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; +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; +} \ No newline at end of file diff --git a/29.1_laugsaeu.c b/29.1_laugsaeu.c new file mode 100644 index 0000000..593ec54 --- /dev/null +++ b/29.1_laugsaeu.c @@ -0,0 +1,37 @@ +#include +// Definition von Aufzählungstypen (enum) für Laugen und Säuren +typedef enum { NATRIUMLAUGE, KALILAUGE, KALKWASSER, ANZ_LAUGEN } Lauge; +typedef enum { SALZSAEURE, SCHWEFELSAEURE, SALPETERSAEURE, KOHLENSAEURE, ANZ_SAEUREN } Saeure; +// Tabelle der Namen (für Anzeige) +const char* laugen_namen[ANZ_LAUGEN] = { + "Natronlauge", "Kalilauge", "Kalkwasser" + }; +const char* saeure_namen[ANZ_SAEUREN] = { + "Salzsäure", "Schwefelsäure", "Salpetersäure", "Kohlensäure" + }; +// Produktmatrix: Salze für Kombinationen von Lauge x Säure +const char* produkte[ANZ_LAUGEN][ANZ_SAEUREN] = { + // Natronlauge + { "Natriumchlorid", "Natriumsulfat", "Natriumnitrat", "Natriumcarbonat" }, + // Kalilauge + { "Kaliumchlorid", "Kaliumsulfat", "Kaliumnitrat", "Kaliumcarbonat" }, + // Kalkwasser + { "Calciumchlorid", "Calciumsulfat", "Calciumnitrat", "Calciumcarbonat" } +}; +int main() { + // Überschrift ausgeben + printf(" |"); + for (int s = 0; s < ANZ_SAEUREN; s++) { + printf(" %-16s |", saeure_namen[s]); // Spaltenköpfe für Säuren + } + printf("\n"); + // Tabelle ausgeben + for (int l = 0; l < ANZ_LAUGEN; l++) { + printf("%-14s |", laugen_namen[l]); // Zeilenköpfe für Laugen + for (int s = 0; s < ANZ_SAEUREN; s++) { + printf(" %-16s |", produkte[l][s]); // Reaktionsprodukte + } + printf("\n"); + } + return 0; +} \ No newline at end of file diff --git a/a.exe b/a.exe index abeada7..56a7cb1 100644 Binary files a/a.exe and b/a.exe differ