Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallöchen,

hat einer von euch den Blockkurs November 2006 zu den Grundlagen der C-Programmierung von der mathematischen Universität Göttingen gemacht???

ich muss den gerade durcharbeiten und häng da leider n bissl fest und suche nun jemanden der mir Lösungsansätze oder Musterlösungen (also Quellcode.... keine Text wie z.B. erst mit scanf einlesen, dann dies, dann das) schicken kann...

Mein Problem liegt bei Tag 7 (Also dem Aufgabenblat 6) und da die 2. Aufgabe.

Für alle, die die Aufgabe nicht kennen, aber trotzdem gewillt sind mir zu helfen:

Schreiben und testen Sie ein Programm, das vom Nutzer eine nichtnegative ganze Zahl als Eingabe erwartet und geben Sie die eingegebene Zahl wieder aus. Die Besonderheit: Es soll nicht formatiert mit scanf eingelesen werden sondern zeichenweise mit getchar. Der Nutzer soll gewarnt und erneut zur Eingabe aufgefordert werden, falls in seiner Eingabe ein Zeichen auftaucht, dass nicht Teil einer korrekten Eingabe sein kann. Führende Leerräume (also Leerzeichen oder \f, \n,\r, \t, \v) sollen überlesen werden, führende Nullen sollen erlaubt sein. Als Ende der Zifferneingabe gilt der erste Leerraum nach einer Ziffer. Z.B. würde die Eingabe "1860 München" korrekt sein und zur Ausgabe "1860" führen. "1860München" und "München 1860" dagegen wäre fehlerhafte Eingaben.

Hinweis: Der Unterschied zwischen einem Zeichen und dem entsprechenden char-Wert ist zu beachten. So lesen wir das Zeichen 5 als fünf - der entsprechende char-Wert ist aber die Nummer dieses Zeichens im Zeichensatz, das kann von Maschine zu Maschine eine andere Zahl sein. Wir können aber davon ausgehen, dass die Ziffern im Zeichensatz in üblicher Reihenfolge hintereinander kommen. Der Wert, den wir brauchen, ist also '5'-'0'. Allgemein ausgedrückt: Wenn durch c = getchar() ein Zeichen gelesen wurde, das als Ziffer erkannt wurde (Funktion isdigit !), so gibt der Wert des Ausdrucks c-'0' den "richtigen" Wert von c an.

*für Fortgeschrittene: Sorgen Sie dafür, dass ein Überlauf verhindert wird, d.h., dass der Nutzer informiert wird, falls versucht wird, eine zu große ganze Zahl einzugeben.

Vielen Dank shcon einmal im Vorraus :byby:

Geschrieben

wenn schon 1860 münchen vorkommt, helfe ich grundsätzlich nicht!

spaß beiseite: hast du schon selber was programmiert? wo hängst du? einfach gleich die musterlösung zu verwenden ist sicherlich nicht im sinne des erfinders. post mal das, was du schon hast, dann kann man dir ein paar tipps dazu geben

Geschrieben

nja... Hallo Welt kriege ich hin :D und die Aufgaben davor sind auch mit ach und krach fertig geworden... programmieren ist einfach nicht mein ding *seufz*

das problem ist, dass ich viele ideen habe, die aber absolut nicht umsetzen kann...

hier mein angefangener quelltext: *wenn man das überhaupt schon so nennen darf*

#include <stdio.h>

int main(void) {

int eingabe;

printf("Bitte geben Sie eine nichtnegative ganze Zahl ein: ") ;

while((eingabe=getchar()) !='\f'

&& eingabe!='\n'

&& eingabe !='\r'

&& eingabe !='\t'

&& eingabe!='\v' )

{

while( eingabe < 0 ) {

printf("Ihre Eingabe wahr falsch, bitte geben sie erneut eine nichtnegative ganze Zahl ein: ") ;

}

}

return 0;

}

weiter bin ich absolut nicht gekommen... obwohl ich schon stolz auf mein getchar mist da bin :D :D :D ich denke du wirst da mit was anfangen können, auch wenn keine kommentare drinne stehen....

--->musterlösungen wären einfacher, vor allem weil ich den mist ja net für die schule brauch... und eigentl sonst auch nicht mehr.... war nur sonne fixxe idee von unserem ausbilder... der ist aber sie 2 wochen krank und jetzt hänge ich hier mit dem ******... und nächste woche habe ich schule und nach der schule wird c wohl nicht mehr gemacht... und die azubis vor mir saßen da wohl genauso vor wie ich :D <---

sorry, dass die einrückungen weg sind... aber das will das forum wohl nicht *püh*

Geschrieben
nja... Hallo Welt kriege ich hin :D und die Aufgaben davor sind auch mit ach und krach fertig geworden... programmieren ist einfach nicht mein ding *seufz*

das problem ist, dass ich viele ideen habe, die aber absolut nicht umsetzen kann...

hier mein angefangener quelltext: *wenn man das überhaupt schon so nennen darf*

#include <stdio.h>

int main(void) {

int eingabe;

printf("Bitte geben Sie eine nichtnegative ganze Zahl ein: ") ;

while((eingabe=getchar()) !='\f'

eingabe=getchar() ist eine zuweisung kein vergleich, der vergleichsoperator ist ==

2. versuchst du hier ein char? mit einem int zu vergleichen, was schon mal gar nich so geht. Gibt diese getchar eine char-array zurück oder wirklich nur ein char? Du kannst nur gleiche datentypen vergleichen.

Geschrieben
eingabe=getchar() ist eine zuweisung kein vergleich, der vergleichsoperator ist ==

2. versuchst du hier ein char? mit einem int zu vergleichen, was schon mal gar nich so geht. Gibt diese getchar eine char-array zurück oder wirklich nur ein char? Du kannst nur gleiche datentypen vergleichen.

angeblich soll das so funktionieren... hab ja jetzt schon bei mir am DESY gaaaaaanz viele Leute gefragt und da wurd mir das so vorgetütelt... aber wenn des net funktioniert :( *seufz* -.-*

außerdem, wenn ich das richtig verstehe, macht das Galileo openbook das auch. zwar in nem anderen Zusammenhang aber die machen das:

Galileo Openbook C von A bis Z von Jürgen Wolf:

Hinweis für Programmierneulinge Auch wenn es bei der Funktion getchar() den Anschein hat, dass hier mit ganzen Strings gearbeitet wird, ist dem nicht so. Diese Funktion liest Zeichen für Zeichen aus einem Puffer.

Dies geschieht aber erst, wenn die Taste ENTER gedrückt wird. Suchen Sie nach einer Funktion, die auf Betätigung einer bestimmten Taste wartet, könnte die Funktion getch() für Sie interessant sein. Für MS-DOS steht diese Funktion sofort zur Verfügung, z.B.: while( (c=getch()) != 'q');. Damit wird das Programm so lange angehalten, bis die Taste q gedrückt wird. Unter Linux müssen Sie dafür die Bibliothek <ncurses.h> oder <termios.h> verwenden. Der Nachteil von getch() ist, dass das Programm damit schlecht auf ein anderes System portiert werden kann.

Zur Funktion getchar() noch ein Listing:

/* count_char.c */

#include <stdio.h>

#include <stdlib.h>

int main (void) {

int c,counter=0;

printf("Bitte Eingabe machen:");

/* Eingabe machen bis mit Return beendet wird */

while((c=getchar()) != '\n') {

/* Leerzeichen und Tabulatorzeichen nicht mitzählen */

if( (c != ' ') && (c != '\t') )

counter++; /* counter erhöhen */

}

/* Gibt die Anzahl eingegeb. Zeichen von 0 bis counter-1 aus

* mit counter-1 wird das Zeichen '\0' nicht mitgezählt */

printf("Anzahl der Zeichen beträgt %d Zeichen\n", counter-1);

return EXIT_SUCCESS;

}

Mit diesem Listing werden alle darstellbaren Zeichen gezählt, die Sie über die Tastatur eingeben. Leerzeichen und Tabulatoren werden jedoch nicht mitgezählt.

Geschrieben
Du solltest dir zunächsteinmal ganz unabhängig von der Programmiersprache überlgen in welchen Schritten du die Aufgabe umsetzten möchtest. Wenn du dir darüber im klaren bist kannst du dich darum kümmern wie du das dann wirklich programmierst.

die ideen habe ich.... ich habe im grunde auch im kopf, was ich will, bzw wie ich mir vorstelle wie das klappt... ABER die umsetzung *seufz* die geht irgendwie nicht ^^... is einfach net mein fall

Geschrieben
angeblich soll das so funktionieren... hab ja jetzt schon bei mir am DESY gaaaaaanz viele Leute gefragt und da wurd mir das so vorgetütelt... aber wenn des net funktioniert :( *seufz* -.-*
Doch, das ist so schon OK. Die Zuweisung ist hier gewollt. Das ist zwar stilistisch fragwürdig, funktioniert aber.

Du hast hier grundsätzlich einen endlichen Automaten. Deine Abfrage ist nicht zustandslos. Du brauchst also auf jeden Fall eine Variable, die deinen Zustand speichert. Teil des Zustands ist, ob du bereits eine Ziffer eingelesen hast. Davon hängt nämlich ab, wie du mit Whitespace-Zeichen umgehst: Ignorieren (wenn noch keine Ziffer eingelesen wurde), oder die Eingabe als gültig abschließen (wenn schon eine Ziffer eingelesen wurde). Eine Variable für den eingelesenen Wert brauchst du natürlich auch noch.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...