halo
This commit is contained in:
parent
1d16bb3625
commit
3408eeeb49
@ -1,60 +1,48 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
// Struktur zur Abbildung von arabisch → römisch
|
// Struktur für eine römische Ziffer und ihren Wert
|
||||||
typedef struct Roemisch {
|
typedef struct {
|
||||||
int wert; // Der arabische Zahlenwert (z.B. 1000)
|
int wert; // Der Wert der Ziffer (z.B. 1)
|
||||||
const char *zeichen; // Das zugehörige römische Zeichen (z.B. "M")
|
const char *roemisch; // Das römische Zeichen (z.B. "I")
|
||||||
} Roemisch_t;
|
} 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() {
|
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;
|
int zahl;
|
||||||
|
|
||||||
// Benutzer nach einer Zahl fragen
|
// Zahl vom Benutzer einlesen
|
||||||
printf("Zu wandelnde Zahl: ");
|
printf("Zu wandelnde Zahl: ");
|
||||||
scanf("%d", &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);
|
printf("... %d = ", zahl);
|
||||||
|
|
||||||
// Über die Tabelle iterieren, um die römische Zahl zu erzeugen
|
// Über die Ziffern von groß nach klein iterieren (von hinten nach vorne)
|
||||||
// sizeof(roemischTabelle) / sizeof(Roemisch) berechnet die Anzahl der Einträge in der Tabelle
|
for (int i = n - 1; i >= 0; i--) {
|
||||||
for (int i = 0; i < sizeof(roemischTabelle) / sizeof(Roemisch_t); i++) {
|
// So oft wie möglich die aktuelle Ziffer abziehen und ausgeben
|
||||||
// Solange der aktuelle Wert in die Zahl "passt"
|
for (int j = 0; j < zahl / ziffern[i].wert; j++) {
|
||||||
while (zahl >= roemischTabelle[i].wert) {
|
printf("%s", ziffern[i].roemisch);
|
||||||
// Das zugehörige römische Zeichen ausgeben
|
|
||||||
printf("%s", roemischTabelle[i].zeichen);
|
|
||||||
// Den Wert von der Zahl abziehen
|
|
||||||
zahl -= roemischTabelle[i].wert;
|
|
||||||
}
|
}
|
||||||
|
zahl %= ziffern[i].wert;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Zeilenumbruch am Ende
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
return 0;
|
||||||
return 0; // Erfolgreiches Programmende
|
|
||||||
}
|
}
|
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