halo
This commit is contained in:
parent
1d16bb3625
commit
3408eeeb49
@ -1,60 +1,48 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// Struktur zur Abbildung von arabisch → römisch
|
||||
typedef struct Roemisch {
|
||||
int wert; // Der arabische Zahlenwert (z.B. 1000)
|
||||
const char *zeichen; // Das zugehörige römische Zeichen (z.B. "M")
|
||||
} Roemisch_t;
|
||||
// Struktur für eine römische Ziffer und ihren Wert
|
||||
typedef struct {
|
||||
int wert; // Der Wert der Ziffer (z.B. 1)
|
||||
const char *roemisch; // Das römische Zeichen (z.B. "I")
|
||||
} RoemZahl;
|
||||
|
||||
// Tabelle in absteigender Reihenfolge
|
||||
// Jede Zeile enthält einen Wert und das zugehörige römische Zeichen
|
||||
Roemisch_t roemischTabelle[] = {
|
||||
{1000, "M"},
|
||||
{900, "CM"},
|
||||
{500, "D"},
|
||||
{400, "CD"},
|
||||
{100, "C"},
|
||||
{90, "XC"},
|
||||
{50, "L"},
|
||||
{40, "XL"},
|
||||
{10, "X"},
|
||||
{9, "IX"},
|
||||
{5, "V"},
|
||||
{4, "IV"},
|
||||
{1, "I"}
|
||||
};
|
||||
|
||||
// Hauptfunktion
|
||||
int main() {
|
||||
// Tabelle der römischen Ziffern, aufsteigend sortiert (klein nach groß)
|
||||
RoemZahl ziffern[] = {
|
||||
{1, "I"},
|
||||
{4, "IV"},
|
||||
{5, "V"},
|
||||
{9, "IX"},
|
||||
{10, "X"},
|
||||
{40, "XL"},
|
||||
{50, "L"},
|
||||
{90, "XC"},
|
||||
{100, "C"},
|
||||
{400, "CD"},
|
||||
{500, "D"},
|
||||
{900, "CM"},
|
||||
{1000, "M"}
|
||||
};
|
||||
const int n = sizeof(ziffern) / sizeof(ziffern[0]);
|
||||
int zahl;
|
||||
|
||||
// Benutzer nach einer Zahl fragen
|
||||
// Zahl vom Benutzer einlesen
|
||||
printf("Zu wandelnde Zahl: ");
|
||||
scanf("%d", &zahl);
|
||||
|
||||
// Überprüfen, ob die Zahl im erlaubten Bereich liegt (1 bis 3999)
|
||||
if (zahl <= 0 || zahl > 3999) {
|
||||
printf("Nur Zahlen zwischen 1 und 3999 erlaubt!\n");
|
||||
return 1; // Programm mit Fehlercode beenden
|
||||
}
|
||||
|
||||
// Die eingegebene Zahl ausgeben
|
||||
|
||||
printf("... %d = ", zahl);
|
||||
|
||||
// Über die Tabelle iterieren, um die römische Zahl zu erzeugen
|
||||
// sizeof(roemischTabelle) / sizeof(Roemisch) berechnet die Anzahl der Einträge in der Tabelle
|
||||
for (int i = 0; i < sizeof(roemischTabelle) / sizeof(Roemisch_t); i++) {
|
||||
// Solange der aktuelle Wert in die Zahl "passt"
|
||||
while (zahl >= roemischTabelle[i].wert) {
|
||||
// Das zugehörige römische Zeichen ausgeben
|
||||
printf("%s", roemischTabelle[i].zeichen);
|
||||
// Den Wert von der Zahl abziehen
|
||||
zahl -= roemischTabelle[i].wert;
|
||||
// Über die Ziffern von groß nach klein iterieren (von hinten nach vorne)
|
||||
for (int i = n - 1; i >= 0; i--) {
|
||||
// So oft wie möglich die aktuelle Ziffer abziehen und ausgeben
|
||||
for (int j = 0; j < zahl / ziffern[i].wert; j++) {
|
||||
printf("%s", ziffern[i].roemisch);
|
||||
}
|
||||
zahl %= ziffern[i].wert;
|
||||
}
|
||||
|
||||
// Zeilenumbruch am Ende
|
||||
printf("\n");
|
||||
|
||||
return 0; // Erfolgreiches Programmende
|
||||
return 0;
|
||||
}
|
54
28.4.3_romzahl2.c
Normal file
54
28.4.3_romzahl2.c
Normal file
@ -0,0 +1,54 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// Struktur für eine römische Ziffer und ihren Wert
|
||||
typedef struct {
|
||||
int wert;
|
||||
const char *roemisch;
|
||||
} RoemZahl;
|
||||
|
||||
int main() {
|
||||
// Array aufsteigend sortiert (klein nach groß), inkl. Super-Subtraktionsregeln
|
||||
RoemZahl ziffern[] = {
|
||||
{1, "I"},
|
||||
{4, "IV"},
|
||||
{5, "V"},
|
||||
{9, "IX"},
|
||||
{10, "X"},
|
||||
{40, "XL"},
|
||||
{49, "IL"}, // 50 - 1
|
||||
{50, "L"},
|
||||
{90, "XC"},
|
||||
{99, "IC"}, // 100 - 1
|
||||
{100, "C"},
|
||||
{400, "CD"},
|
||||
{499, "ID"}, // 500 - 1
|
||||
{500, "D"},
|
||||
{900, "CM"},
|
||||
{990, "XM"}, // 1000 - 10
|
||||
{999, "IM"}, // 1000 - 1
|
||||
{1000, "M"}
|
||||
};
|
||||
const int n = sizeof(ziffern) / sizeof(ziffern[0]);
|
||||
int zahl;
|
||||
|
||||
printf("Zu wandelnde Zahl: ");
|
||||
scanf("%d", &zahl);
|
||||
|
||||
if (zahl <= 0 || zahl > 3999) {
|
||||
printf("Bitte eine Zahl zwischen 1 und 3999 eingeben.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("... %d = ", zahl);
|
||||
|
||||
// Von groß nach klein durch das aufsteigende Array
|
||||
for (int i = n - 1; i >= 0; i--) {
|
||||
for (int j = 0; j < zahl / ziffern[i].wert; j++) {
|
||||
printf("%s", ziffern[i].roemisch);
|
||||
}
|
||||
zahl %= ziffern[i].wert;
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
88
28.4.4_notenverw.c
Normal file
88
28.4.4_notenverw.c
Normal file
@ -0,0 +1,88 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct Schueler {
|
||||
char name[30];
|
||||
char vorname[30];
|
||||
int note;
|
||||
} Schueler_t;
|
||||
|
||||
int main() {
|
||||
Schueler_t *klasse = NULL; // Dynamisches Array für Schüler
|
||||
int anzahl = 0; // Aktuelle Anzahl der Schüler
|
||||
int kapazitaet = 0; // Aktuelle Kapazität des Arrays
|
||||
int summe = 0;
|
||||
int haeufigkeit[6] = {0}; // Notenspiegel
|
||||
|
||||
while (1) {
|
||||
// Speicher vergrößern, falls nötig
|
||||
if (anzahl >= kapazitaet) {
|
||||
kapazitaet = kapazitaet == 0 ? 10 : kapazitaet * 2;
|
||||
Schueler_t *tmp = realloc(klasse, kapazitaet * sizeof(Schueler_t));
|
||||
if (!tmp) {
|
||||
printf("Speicherfehler!\n");
|
||||
free(klasse);
|
||||
return 1;
|
||||
}
|
||||
klasse = tmp;
|
||||
}
|
||||
|
||||
printf("\n----Eingabe des %d. Schuelers----\n", anzahl + 1);
|
||||
|
||||
printf("Name (oder ENTER zum Beenden): ");
|
||||
if (fgets(klasse[anzahl].name, sizeof(klasse[anzahl].name), stdin) == NULL)
|
||||
break;
|
||||
klasse[anzahl].name[strcspn(klasse[anzahl].name, "\n")] = 0;
|
||||
if (klasse[anzahl].name[0] == '\0')
|
||||
break;
|
||||
|
||||
printf("Vorname: ");
|
||||
if (fgets(klasse[anzahl].vorname, sizeof(klasse[anzahl].vorname), stdin) == NULL)
|
||||
break;
|
||||
klasse[anzahl].vorname[strcspn(klasse[anzahl].vorname, "\n")] = 0;
|
||||
|
||||
do {
|
||||
printf("Note (1-6): ");
|
||||
if (scanf("%d", &klasse[anzahl].note) != 1) {
|
||||
while (getchar() != '\n');
|
||||
printf("Ungültige Eingabe. Abbruch.\n");
|
||||
free(klasse);
|
||||
return 1;
|
||||
}
|
||||
} while (klasse[anzahl].note < 1 || klasse[anzahl].note > 6);
|
||||
|
||||
// Eingabepuffer leeren (wegen scanf)
|
||||
while (getchar() != '\n');
|
||||
|
||||
summe += klasse[anzahl].note;
|
||||
haeufigkeit[klasse[anzahl].note - 1]++;
|
||||
anzahl++;
|
||||
}
|
||||
|
||||
if (anzahl == 0) {
|
||||
printf("Keine Schüler eingegeben.\n");
|
||||
free(klasse);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Übersicht ausgeben
|
||||
printf("\n%-4s %-15s %-15s %-5s\n", "Nr.", "Name", "Vorname", "Note");
|
||||
for (int i = 0; i < anzahl; i++) {
|
||||
printf("%-4d %-15s %-15s %-5d\n", i + 1, klasse[i].name, klasse[i].vorname, klasse[i].note);
|
||||
}
|
||||
// Durchschnittsnote
|
||||
double durchschnitt = (double)summe / anzahl;
|
||||
printf("\n....Durchschnittsnote: %.2f\n", durchschnitt);
|
||||
// Notenspiegel
|
||||
printf("....Notenspiegel\n");
|
||||
for (int i = 0; i < 6; i++) {
|
||||
printf("Note %d: ", i + 1);
|
||||
for (int j = 0; j < haeufigkeit[i]; j++) {
|
||||
printf("*");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
free(klasse);
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user