Pelles C
-
Hallo Leute sitze an einer Hausaufgabe und weiß einfach nich, wie ich anfangen bzw. die Aufgaben lösen soll. Bitte um Hilfe! Danke im Voraus! Hier die Aufgabe:
Auf dem Osnabrücker Weihnachtsmarkt letzte Woche waren einige Ihrer Bekannten
so pleite, dass sie sich Geld leihen mussten. Da Sie ein guter Mensch sind, haben
Sie ihren Bekannten das Geld geliehen; da Sie aber zugleich auch ein guter
Kaufmann sind, haben Sie natürlich auch Rückzahlungstermine vereinbart.
Nach dem Besuch stellen Sie fest, dass Sie doch einiges an Geld verliehen haben –
und beschließen ein kleines C-Programm zur Verwaltung ihrer Außenstände zu
schreiben.
Schreiben Sie ein C-Programm, das
• eine Liste von Schuldnern (mit Name, Vorname, geliehenem Betrag und
vereinbartem Rückzahlungstermin) einlesen kann (die Länge der Liste kann
(bis zu einer Obergrenze von 100) vom Benutzer festgelegt werden),
• diese Liste wieder ausgeben kann,
• für einen vom Benutzer eingegebenen Zeitraum die Gesamtsumme der
Rückzahlungen ermitteln kann.
Dabei schreiben Sie jeweils eine eigene Funktion, d.h. eine Funktion zum Einlesen,
eine Funktion zum Ausgeben und eine Funktion zur Ermittlung der Rückzahlung in
einem bestimmten Zeitraum.
Rufen diese Funktionen in Hauptprogramm zum Test in folgender Reihenfolge auf:
• Liste einlesen
• Liste ausgeben
• Rückzahlungssumme für einen bestimmten Zeitraum ermitteln
Eine Menüsteuerung ist nicht erforderlich. Die Verwendung globaler Variablen ist
nicht zulässig.Verwenden Sie folgende Datenstruktur
struct datum {
int tag;
int monat;
int jahr;
};
struct schuldner{
char name[50];
char vorname[50];
double summe;
struct datum faelligkeit;
};
struct schuldner liste[100]Beispiel – Für die Eingabe:
Name: Rahn
Vorname: Helmut
Summe: 10
Rückzahlung Jahr: 2010
Rückzahlung Monat: 12
Rückzahlung Tag: 24Name: Walter
Vorname: Fritz
Summe: 15
Rückzahlung Jahr: 2010
Rückzahlung Monat: 12
Rückzahlung Tag: 31Name: Turek
Vorname: Toni
Summe: 8
Rückzahlung Jahr: 2011
Rückzahlung Monat: 01
Rückzahlung Tag: 01Name: Morlock
Vorname: Max
Summe: 20
Rückzahlung Jahr: 2011
Rückzahlung Monat: 01
Rückzahlung Tag: 31und den Zeitraum 25.12.2010 bis 06.01.2011 soll das Programm die
Rückzahlungssumme 23 berechnen.
-
Wie genau können wir dir denn helfen?
Hier ein Anfang: Schreibe eine Funktion die ein
schuldner
einliest und eine zum Ausgeben. Benutze diese um damit die ersten beiden Teilaufgaben zu lösen.
-
Für minimierten Aufwand von Testläufen würde ich dir empfehlen, Testdaten in einer Datei vorzuhalten, die eigentliche Fachlogik bis zu Fehlerfreiheit zu implementieren und zum Schluß von Dateilesen auf stdin-Lesen umzuschalten.
Verzichte auf das nichtstandardkonforme fflush(stdin) bei stdin-Eingaben.
-
soweit bin ich schon gekommen aber funktioniert leider nicht...
könnt ihr mir vielleicht helfen?#include <stdlib.h>
#include <stdio.h>struct schuldner {
char name[60];
char vorname[60];
double summe;
struct datum faelligtkeit};
struct datum {
int tag;
int monat;
int jahr;}
struct listeneintrag {
struct listeneintrag *next;
struct schuldner inhalt;
struct datum inhalt;
};void schuldnerAusgeben (struct schuldner einschuldner) {
printf("%s", einschuldner.name);
printf("%s", einschuldner.vorname);
printf("%d\n", einschuldner.summe);}
struct schuldner schuldnerEingeben (void) {
struct schuldner einschuldner;printf("Name:");fflush(stdin);fgets(einschuldner.name,60,stdin);
printf("Vorname:");fflush(stdin);fgets(einschuldner.vorname,60,stdin);
printf("Summe:");fflush(stdin);fgets(einschuldner.summe,100,stdin);
printf("Nr:");fflush(stdin);scanf("%i",&eineAdresse.nr);return (einschuldner);
}struct listeneintrag *adresseInListeEinfuegen (struct adresse neueAdresse, struct listeneintrag *liste) {
struct listeneintrag *neuerListeneintrag;
neuerListeneintrag = malloc(sizeof(struct listeneintrag));
neuerListeneintrag->next = liste;
neuerListeneintrag->inhalt = neueAdresse;return neuerListeneintrag;
}void listeAusgeben (struct listeneintrag *listenanfang) {
struct listeneintrag *aktuellerListeneintrag;
aktuellerListeneintrag = listenanfang;
while ( aktuellerListeneintrag != NULL )
{
adresseAusgeben(aktuellerListeneintrag->inhalt);
aktuellerListeneintrag = aktuellerListeneintrag->next;
}
}int main (void){
struct listeneintrag *listenanfang = NULL;
int anzahlschuldner, indexschuldern;
struct schuldner einschuldner;
struct datum eindatumprintf("Bitte Schuldner eingeben: ?"); scanf("%i",&anzahlschuldner);fflush(stdin);
for (indexschuldner = 1; indexschuldner <= anzahlschuldner; indexschuldner ++) {
einschuldner = schuldner eingeben();
eindatum = datum eingeben ();
listenanfang = schuldnerInListeEinfuegen(einschuldner, listenanfang);
istenanfang = datumInListeEinfuegen(eindatum, listenanfang);
}listeAusgeben(listenanfang);
}
-
Student87 schrieb:
soweit bin ich schon gekommen aber funktioniert leider nicht...
könnt ihr mir vielleicht helfen?#include <stdlib.h> #include <stdio.h> struct schuldner { char name[60]; char vorname[60]; double summe; struct datum faelligtkeit }; struct datum { int tag; int monat; int jahr; } struct listeneintrag { struct listeneintrag *next; struct schuldner inhalt; struct datum inhalt; }; void schuldnerAusgeben (struct schuldner einschuldner) { printf("%s", einschuldner.name); printf("%s", einschuldner.vorname); printf("%d\n", einschuldner.summe); } struct schuldner schuldnerEingeben (void) { struct schuldner einschuldner; printf("Name:");fflush(stdin);fgets(einschuldner.name,60,stdin); printf("Vorname:");fflush(stdin);fgets(einschuldner.vorname,60,stdin); printf("Summe:");fflush(stdin);fgets(einschuldner.summe,100,stdin); printf("Nr:");fflush(stdin);scanf("%i",&eineAdresse.nr); return (einschuldner); } struct listeneintrag *adresseInListeEinfuegen (struct adresse neueAdresse, struct listeneintrag *liste) { struct listeneintrag *neuerListeneintrag; neuerListeneintrag = malloc(sizeof(struct listeneintrag)); neuerListeneintrag->next = liste; neuerListeneintrag->inhalt = neueAdresse; return neuerListeneintrag; } void listeAusgeben (struct listeneintrag *listenanfang) { struct listeneintrag *aktuellerListeneintrag; aktuellerListeneintrag = listenanfang; while ( aktuellerListeneintrag != NULL ) { adresseAusgeben(aktuellerListeneintrag->inhalt); aktuellerListeneintrag = aktuellerListeneintrag->next; } } int main (void){ struct listeneintrag *listenanfang = NULL; int anzahlschuldner, indexschuldern; struct schuldner einschuldner; struct datum eindatum printf("Bitte Schuldner eingeben: ?"); scanf("%i",&anzahlschuldner);fflush(stdin); for (indexschuldner = 1; indexschuldner <= anzahlschuldner; indexschuldner ++) { einschuldner = schuldner eingeben(); eindatum = datum eingeben (); listenanfang = schuldnerInListeEinfuegen(einschuldner, listenanfang); istenanfang = datumInListeEinfuegen(eindatum, listenanfang); } listeAusgeben(listenanfang); }
Vielen Dank dafür dass Du Code-Tags nutzt um die Lesbarkeit deines Codes zu erhöhen!
-
Kannst du lesen? Scheinbar nicht.
-
So wie du das angehst sollte das nur auf Microsoft Compilern zuverlässig laufen.
Wieso möchtest du wissen? Microsoft hat eigene Ideen wie in C programmiert werden soll. Schau beispielsweise unter MSDN und fflush(stdin), und unter MSDN und scanf() unter VS2010.Warum lautet der Titel Pelles C - arbeitest du mit dem Compiler?
Zum Quelltext, die Semikolon erscheinen mir ein wenig eigenartig verteilt?
MfG f.-th.