C-Aufgabe. Ich peil nix :(
-
versuch mal
scanf("%d\n",&x);
btw. solltest du eine genaue Fehler Beschreibung mitliefern. "geht nicht" sorgt nicht dafür, dass man dir gut helfen kann.
lies dir am besten mal http://www.catb.org/~esr/faqs/smart-questions.html durch
-
Ich verstehe nicht genau was Du mit der Schleife da versuchst... Aber ne Potenzierung ist es nicht wirklich...
Potenz = x mal mit sich SELBST Multipliziert, ich sehe aber kein selbst*selbst, sondern nur selbst*anders
Die Potenzier SChleife muss so aussehen:
for(i=1; i<=n; i++) { potenz=potenz*potenz; }
AUSSERHALB der Schleife multiplizierst Du das dann mit dem anderen kram
-
k. danke
werd gleich ausprobieren.
-
Ich würde das auch eher in eine Funktion packen:
int myPow(int zahl, int exp) { int i; if(exp == 0) return 1; // Sonderfall: zahl hoch 0 ist immer 1.... for(i = 1; i<exp; i++) zahl *= 2; return zahl; }
Das hat den Vorteil, dass es übersichtlicher ist. Die würdest du dann z. B. so aufrufen:
printf("%i\n", myPow(2,5));
-
hihi. funktionen kommen erst nach den sommerferien...^^
also ich hab das jetz so gemacht, aber egal was ich eingebe, es kommt immer 0 raus =((
# include <stdio.h> # include <ctype.h> int main() { float k, n, p, klammer, i, b; scanf("%d", &k); scanf("%d", &n); scanf("%d", &p); klammer=p/100+1; for (i = 0; i < n; i++) { klammer=klammer*klammer; b=klammer*k; printf("%d", b); } scanf ("%d", k); return 0; }
-
ups. hab das mitm ausserhalb nich gemacht. hach ich hohle birne..^^
-
hmm. aber warum ausserhalb? es soll ja immer zu dem zeitpunkt ausgegeben werden...! oder etwa nicht?
-
int myPow(int zahl, int exp) { int i; if(exp == 0) return 1; // Sonderfall: zahl hoch 0 ist immer 1.... for(i = 1; i<exp; i++) zahl *= 2; return zahl; }
Das stimmt aber nicht! Das multipliziert die Zahl exp-1 mal mit zwei.
for(i=1; i<=n; i++) { potenz=potenz*potenz; }
Ist auch nicht richtig. Hier wird 4^3 :
44=16
1616=256
ausgerechnet.Aber eine korekte Schleife für die Potenz war ja auch schon zu sehen:
#include <stdio.h> int main (void) { int zahl = 10; int ergebnis = 1; int exp = 5; int i; for (i = 0; i < exp; i++){ ergebnis *= zahl; } printf ("%d",ergebnis); getchar (); return 0; }
-
Wie definiert ihr 0^0, eingie definieren es ja als 1, andere als undefiniert.
-
warum wird bei der richtigen schleife der variable der wert 1 als erstes zugewiesen???
-
Entyl_Sa schrieb:
Das stimmt aber nicht! Das multipliziert die Zahl exp-1 mal mit zwei.
Also die Ergebnisse stimmen, außer bei zahl == 1. Wie auch immer, sollte eigentlich mehr den Nutzen einer Funktion zum Ausdruck bringen.
-
hmm. nur wenn ich anfange, warum ist dann der wert von ergebnis am anfang 1?
-
also ich hab den code jetz ma auf die richtige angepasst. aber egal was ich eingebe als ergebnis kommt immer 0..
# include <stdio.h> # include <ctype.h> int main() { float k, n, p, klammer, i, b, hinter=1; scanf("%d", &k); scanf("%d", &n); scanf("%d", &p); klammer=p/100+1; for (i = 0; i < n; i++) { hinter=hinter*klammer; b=hinter*k; printf("%d", b); } scanf ("%d", k); return 0; }
-
CarstenJ schrieb:
Also die Ergebnisse stimmen, außer bei zahl == 1. Wie auch immer, sollte eigentlich mehr den Nutzen einer Funktion zum Ausdruck bringen.
Eigentlich stimmt es nur bei zahl==2 .
Aber den nutzen einer Funktion stellt es sicher dar.
Was ich hier auch auf jeden Fall für angebracht halte.ergebnis ist am Anfang 1 weil x^0 immer eins ist, und sonst ist er für die erste multiplikation ja auch ganz praktisch, so bekommt man beim ersten Schleifendurchlauf zahl in ergebnis.
PS.: hälst du hinter und klammer für aussagekraeftige Variablennamen?
-
Aber ich krieg ja 0 raus... nich 1.
hmm. stimmt schon. die namen sind dumm. ich habse mal geändert:
# include <stdio.h> # include <ctype.h> int main() { float kapital, jahre, zinssatz, grundklammer, i, endkapital, klammer-potensiert=1; scanf("%d", &kapital); scanf("%d", &jahre); scanf("%d", &zinssatz); grundklammer=p/100+1; for (i = 0; i < jahre; i++) { klammer-potensiert=klammer-potensiert*grundklammer; endkapital=klammer-potensiert*kapital; printf("%d", endkapital); } return 0; }
-
Eigentlich stimmt es nur bei zahl==2 .
Argh....ja klar, du hast natürlich absolut recht :D.
@Schmank:
Klammer raff ich immer noch net.....Und du liest Ganzzahlen ein, keine floats. Mach es so:scanf("%f", &kapital)
Wobei ich immer noch nicht genau verstehe, was da eigentlich berechnet werden soll.
-
naja das steht ja in der aufgabe im ersten beitrag. das endkapital soll ausgerechnet werden. aber es sollen bei 5 jahren z.b. das kapital nach jedem der 5 jahre extra angezeigt werden. und klammer ist halt die formel p/100+1 die potensiert werden soll. die gesamtformel ist endkapital=(zinssatz/100+1)^n
hmm. stimmt. ich änder das mitm float mal. aber wenn keine steigen vorhanden ist, müsste doch zumindest das startkapital gezeigt werden und nicht 0 oder?
-
p/100+1
Das ergibt sofern mit INTs gearbeitet wird immer(!!) 1 sofern p<100. Und wo genau zeigt er die "0"?
*edit*
%d im printf ist für INTs, für FLOATs musst Du %f verwenden
-
falsch, wenn du das als int einliest, bleibts (das startkapital und der rest) bei der 0. also: %f
-
Du solltest den Code den du hier postest vielleicht auch schon vorher mal compiliert haben. Bei deiner letzten Version existiert p zum Beispiel garnicht.
'-' in Variablennamen ist auch nicht drin.
Variablennamen die sich auf deine Formel beziehen sind nicht sehr aussagekraefitg, wie du an CarstenJ´s Reaktion ja schon gemerkt haben solltest.
Dann würde ich jahre noch als int anlegen und siehe da, du hast ein funktionierendes Programm.