Frage zu Vraiablentüp
-
Die Typen werden wohl "long long" und "int" sein, aber dennoch würden ein paar mehr Erklärungen hier weiterhelfen.
@TE: poste doch mal den Quelltext der noch dazu gehört. Die Deklaration und sage uns vor allem, warum du dich für die beiden jeweiligen Typen entschieden hast.
-
Ich hatte long long genommen, weil ich tendenziell auch mal lange Zahlen testen wollte ...
#include <iostream> #include <vector> using namespace std; int quot; long long Testzahl; int Zehler=0; int TS=0; vector<int>Teiler(0); //vector<int>NTTS(0); //NichttrivialeTeilersumme int main () { cout<< "Geben Sie die zu testende Zahl ein: "; cin>>Testzahl; cout<<"\n\nMacro Zahltester findet:\n"; for(int i=1;i<=Testzahl;i=i+1) { quot=Testzahl/i; if(0==Testzahl%i) { Zehler=Zehler+1; Teiler.push_back(quot); cout<<" "<<quot <<" ist der "<<Zehler<<". Teiler der Zahl "<<Testzahl<<". \n"; TS=TS+quot; } } cout<<"Die Zahl "<<Testzahl<<" hat "<<Zehler<<" Teiler. \n"; //cout<<"Die TS ist: "<<TS<<" = "; for(auto it=Teiler.begin();it!=Teiler.end();it++) { cout<<*it; if( it!=Teiler.end()-1 ) cout<<" + "; } cout<<" = "<<TS<<" ist die Teilersumme der Zahl "<<Testzahl<<".\n"; return (0); }
-
Dann mach halt den Zähler "i" und "quot" auch als long long, wenn du meinst dass du den großen Wertebereich brauchst.
Übrigens kannst du das quot=Test/i noch in die If-Bedingung reinziehen. Nicht nötig, das bei jedem Schleifendurchlauf zu berechnen.
-
Danke ...
momentan weiß ich nicht, wie man einen bestehenden Container Typ vector wieder leert....
das muß irgendwie vector<int>clear(); oder so gehen, stimmt das?
-
Teiler.clear();
-
Danke, der hat geholfen Macro funktioniert ...:-)
Wenn ich jetzt haben möchte, daß das Macro bei 2 Teilern schreibt. 29 ist priem
kann ich dann schreiben
if sice of teiler = 2
cout .......
-
das ist ein makro:
#define mytype (int)keine ahnung was du meinst wenn du "macro" schreibst. meinst du vielleicht "programm"?
-
not smart schrieb:
das ist ein makro:
#define mytype (int)keine ahnung was du meinst wenn du "macro" schreibst. meinst du vielleicht "programm"?
jaja, ich meine kleines Progrämmchen ...
-
Ich wollte, daß das Progrämmchen mir bei Primzahl einen kleinen Satz ausgibt
Die Bedingung ist. wenn im Container nur 2 Teiler enthalten sind, handelt es sich um eine Primzahl
geht das so: if (onsize(teiler)=2)
oder wie schreib ich das?
-
brak schrieb:
oder wie schreib ich das?
Wie wäre es wenn du einen std::vector nicht bloß blind verwendest, sondern im Zweifel auch die Dokumentation dazu anschaust. Dein Code kommt mir wie eine wilde (und schlechte) Mischung aus kopierten Internetcode vor.
Hier gibt es z.B. eine Referenz. Schau dir "size" mal an, es steht sogar ein Beispiel dazu.
Des weiteren solltest du dir globale Variablen abgewöhnen, sprechende Bezeichner (TS ist nicht sprechend) wählen und Variablen auch erst dort deklarieren wo du sie wirklich brauchst.
-
Mach ist, was heißt eigentlich std: Stunde schreibt man doch h?
Wenn ich das so lese würde ich "if(int size(teiler)=2)" schreiben
-
Wie kommst du darauf, dass es Stunde heißen könnte?

standardWenn ich das so lese würde ich "if(int size(teiler)=2)" schreiben
Warum? Weil da
int size();in der Referenz steht? Das ist die Deklaration, kein Beispiel zur Benutzung. Aufrufen tust du das so:Teiler.size().(BTW ascs Spekulation ist damit wohl bestätigt ... du solltest erstmal kleinere Brötchen backen und nur das verwenden, was du auch verstehst.)
-
brak == blurry333?
-
Brak, ich denke mit der Aufgabe, die du dir gestellt hast, hast du dich ein wenig übernommen.
Fang von vorn an, lege erstmal einfache Variablen an, befülle die ( std::cin ), gib sie aus ( std::cout ) und lerne erstmal die Grundlagen. Und dann kannst du mit Schleifen und Container ( z.b. vector ) weiter machen.
Aber alles zu seiner Zeit.
Und wenn du es wirklich ernsthaft lernen willst, ist ein C++-Buch sinnvoll.
-
if (Teiler.size()=2)Da sagt er (der Comp) "Expression is not assignabel"
was wohl meint, er weiß nicht was ich will?

-
brak schrieb:
if (Teiler.size()=2)Da sagt er Expression is not assignabel
was wohl meint, er weiß nicht was ich will?

das bedeutet eher, du weisst nicht wie du schreiben musst was du willst. -> grundlagen...
-
Ja, aber es macht solchen Spaß, wenn man schon mal sowas hat:
hab den Fehler gefunden ...
bei if kommen 2 Gleichheitszeichen ..:-)
-
das ist aber:
1. ineffizient
2. schlecheter stil
3. unleserlichdass du dinge wie "i=i+1", "Teiler.size()=2", "return (0);" usw schreibst, zeigt, dass du DRINGEND die grundlagen nachholen solltest.
-
Du hast ja recht, und ich will mich nicht verteidigen, aber Du kannst mir die Zeit nicht geben. So bleibt nur learning by doing an reading .... was einem zielgerichtetem Trial an Error entspricht ...
ja aber seit return (0) beendet er das Programm, wie ich will und spult nicht endlos weiter ....
-
brak schrieb:
ja aber seit return (0) beendet er das Programm, wie ich will und spult nicht endlos weiter ....
Die Frage ist, warum Du nicht
return ((0));schreibst.