weiterer Ablauf durch Entertaste
-
Hallo Leute,
und zwar hab ich ne Aufgabe wo ich ne Rechnung hab und die Ergebnisse also sobald es mehr als 10 Zeilen sind nach der 10 zeile mit Enter weiter drücken soll.
Dies ist bereits mein Quelltext:
// erste Aufgabe: Erstellen Sie ein C-Programm, das unter Verwendung der mathematischen Bidbliothek // wahlweise eine Tabelle der Argument- und Funktionswerte der Funktion // 2 hoch x oder ld(x) für x-Werte im Intervall xa =< x =< xe in Abständen von dx berechnet und über stdout ausgibt. // Die Tabellenausgabe ist nach jeweils 10 Tabellenzeilen zu unterbrechen und erst nach Eingabe von Enter fortzusetzen. // Über stdin einzugeben: // Auswahl der zu tabellierenden Funktion, // Anfangswert xa und Endwert xe und Schrittweite dx (reele Werte) // Die eingegebenen Werte sind auf Zulässigkeit zu prüfen. // Hinweis: Zur Berechnung der Funktionswerte können die Standardfunktionen pow() bzw. log10() verwendet werden (Parameter siehe Manual). #include <stdio.h> #include <math.h> int main () { int Wahl; int xa; int xe; int basis; int exponent; int dx; int c; int counter=0; printf("Waehle deine Funktion!\n"); printf("(1) 2 hoch x\n(2) ld(x)\n\n"); scanf("%1d", &Wahl); printf("Waehle Anfangswert und Endwert!\n"); do { printf("Anfangswert xa (maximal 1023) :\n"); scanf("%d", &xa); } while (xa >= 1024); do { printf("Endwert xe (maximal 1023) :\n"); scanf("%d", &xe); } while (xe >= 1024); printf("Intervall (ganzzahlig) :\n"); scanf("%d", &dx); if (Wahl ==1) // 2 hoch x { for (exponent=xa; exponent<=xe; exponent=exponent+dx) { printf("2 hoch %d = %lf\n " ,exponent, pow(2, exponent)); } } else // ld(x) { for (basis=xa; basis<=xe; basis=basis+dx) { getchar(); printf("Logarithmus %d zur Basis 10 = %lf\n", basis, log10(basis)); } } return 0; }
ich hatte mir gedacht das mit getchar() zumachen jedoch muss ich da nach jeder zeile enter drücken siehe logarithmus aufgabe
jetzt ist meine frage wie ich dieses problem lösen kann
-
Und deine Frage war...?
scanf("%1d", &Wahl);
Besser ohne das
l
inld
.ich hatte mir gedacht das mit getchar() zumachen jedoch muss ich da nach jeder zeile enter drücken siehe logarithmus aufgabe
Dann lass doch einfach einen Zähler mitlaufen, und wenn der auf 10 ist, musst du ein
getchar()
einschieben.
Aber aus dem aktuellen x-Wert und xa und dx kriegt man sicher auch raus, ob man gerade bei einer zehnten Zeile ist.
-
Noch was zur Aufgabe an sich:
Anfangswert xa und Endwert xe und Schrittweite dx (reele Werte)
Da bist du mit
int
ungünstig unterwegs.Die eingegebenen Werte sind auf Zulässigkeit zu prüfen.
Was passiert, wenn ich
xa
größer eingebe alsxe
?
Oder wenn ichdx
negativ eingebe?
Oder wenn ich eine Gleitkommazahl eingebe?
-
Elec schrieb:
ich hatte mir gedacht das mit getchar() zumachen jedoch muss ich da nach jeder zeile enter drücken siehe logarithmus aufgabe
jetzt ist meine frage wie ich dieses problem lösen kann
machst du schleife, lässt du zeilen mit einer zählvariable zählen. nach 10 zeilen lässt du getchar dürckern. feritg
-
tut mir leid ich hab vergessen zu schreiben das ich ein anfänger in c bin
also ich hab jetzt mein code komplett geändert sodass ich hoffentlich alles berücksichtigt habe was µngbd angesprochen hat
// erste Aufgabe: Erstellen Sie ein C-Programm, das unter Verwendung der mathematischen Bidbliothek // wahlweise eine Tabelle der Argument- und Funktionswerte der Funktion // 2 hoch x oder ld(x) für x-Werte im Intervall xa =< x =< xe in Abständen von dx berechnet und über stdout ausgibt. // Die Tabellenausgabe ist nach jeweils 10 Tabellenzeilen zu unterbrechen und erst nach Eingabe von Enter fortzusetzen. // Über stdin einzugeben: // Auswahl der zu tabellierenden Funktion, // Anfangswert xa und Endwert xe und Schrittweite dx (reele Werte) // Die eingegebenen Werte sind auf Zulässigkeit zu prüfen. // Hinweis: Zur Berechnung der Funktionswerte können die Standardfunktionen pow() bzw. log10() verwendet werden (Parameter siehe Manual). #include <stdio.h> #include <math.h> int main () { int Wahl; int xa; int xe; int basis; int exponent; int dx; int Zeilen; printf("Waehle deine Funktion!\n"); printf("(1) 2 hoch x\n(2) ld(x)\n\n"); scanf("%d", &Wahl); if (Wahl == 1) { printf("Waehle Anfangswert und Endwert!\n"); do { do { printf("Anfangswert xa (maximal 1023) :\n"); scanf("%d", &xa); } while (xa >= 1024 && printf("Die %d ist größer als 1023. Bitte waehlen Sie eine kleiner Zahl!!!\n",xa )); do { printf("Endwert xe (maximal 1023) :\n"); scanf("%d", &xe); } while (xe >= 1024 && printf("Die %d ist größer als 1023. Bitte wählen Sie eine kleinere Zahl!!!\n",xe )); } while (xa > xe && printf("Der Anfangswert %d ist größer als der Endwert %d. Bitte waehlen Sie einen kleineren Anfangswert oder einen größeren Endwert!!!\n",xa,xe)); do { printf("Intervall (ganzzahlig) :\n"); scanf("%d", &dx); } while (dx <= 0 && printf("Das Intervall muss gleich Null oder größer Null sein. Bitte wähle ein anderes Intervall aus!!!\n")); for (exponent=xa; exponent<=xe;exponent=exponent+dx) printf("2 hoch %d = %lf\n " ,exponent, pow(2, exponent)); } } else { printf("Waehle Anfangswert und Endwert!\n"); do { do { printf("Anfangswert xa (größer als 0) :\n"); scanf("%d", &xa); } while (xa <= 0 && printf("Die %d ist kleiner als 1. Bitte waehlen Sie eine größere Zahl als 0!!!\n",xa )); printf("Endwert xe :\n"); scanf("%d", &xe); } while (xa > xe && printf("Der Anfangswert %d ist größer als der Endwert %d. Bitte waehlen Sie einen kleineren Anfangswert oder einen größeren Endwert!!!\n",xa,xe)); do { printf("Intervall (ganzzahlig) :\n"); scanf("%d", &dx); } while (dx <= 0 && printf("Das Intervall muss größer Null oder gleich Null sein. Bitte wähle ein anderes Intervall aus!!!\n")); for (basis=xa; basis<=xe; basis=basis+dx) printf("Logarithmus %d zur Basis 10 = %lf\n", basis, log10(basis)); } return 0; }
so und mit der schleife hätte ich eine while schleife genommen
und hätte die zeilen so ausgelesen
zeile =0;
zeile=((xe+1)-xa)/dx somit hätte ich die Zeilen die benötigt werden jetzt ist meine frage wie löse ich das richtig in der schleife so das ich nach 10 zeilen enter drücken muss (hierfür würde ich wie gesagt getchar() nehmen) und dann die restlichen zeilen ausgespuckt werden bzw wieder 10 weiteretut mir leid für meine noobhaftigkeit
-
Hehe. In C werden manche simplen Dinge schnell unübersichtlich.
Ich hab gerade keine Zeit zum Testen. Trotzdem ein paar Dinge:
Die do-while's, die die Falscheingaben abfangen sollen, wiederholen sich. Da bietet sich eine Funktion an, die das erledigt. Redundanter Code ist nie gut.
Ich weiss nicht, wie genau du die Aufgabenstellung befolgen willst, aber da steht:
// Anfangswert xa und Endwert xe und Schrittweite dx (reele Werte)
Klingt sehr danach, dass du double oder float für die Variablen nehmen sollst. Man kann natürlich argumentieren, dass auch eine double-Variable keine reelle Zahl ist, aber eine int-Variable ist es sicher noch weniger.
zeile=((xe+1)-xa)/dx somit hätte ich die Zeilen die benötigt werden jetzt ist meine frage wie löse ich das richtig in der schleife so das ich nach 10 zeilen enter drücken muss (hierfür würde ich wie gesagt getchar() nehmen) und dann die restlichen zeilen ausgespuckt werden bzw wieder 10 weitere
Irgendwie so kann man das machen. Aber warum es sich schwer machen, wenn es auch einfach geht? Da führst du eine neue Variable ein, die einfach die Zeilen mitzählt. Und in jedem Schleifendurchlauf siehst du nach, ob die durch 10 teilbar ist (
variable % 10
ist dann Null), und wenn das so ist, machst du ein getchar(). Ist halt einfacher.
-
unsigned i = 1; while(i) { printf( "Zeile Nr. %-9u\n", i ); if (!(i%10)) { puts("Hit enter to continue."); getchar(); } i++; }
-
wie lass ich die denn die variable sagen wir einfach mal k Zeilen mit zählen?
-
hier noch einmal mit k = 25:
int main() { unsigned i = 1; unsigned k = 25; while(i) { printf( "Zeile Nr. %-9u\n", i ); if (!(i%k)) { puts("Hit enter to continue."); getchar(); } i++; } return 0; }
-
Jo danke.
Jedoch wenn ich jetzt ein Anfangswert von 1 und einen Endwert von 13 eingebe dann spuckt er mir das 13mal hintereinander aus und ich drück kein enter
i=1; while(i) { for (exponent=xa; exponent<=xe; exponent=exponent+dx) printf("2 hoch %d = %lf\n " ,exponent, pow(2, exponent)); if(!(i%10)) { getchar(); } i++; }
-
ich kann keinen endwert sehen.