synsing Skrevet 15. august 2004 Del Skrevet 15. august 2004 (endret) Jeg er nybegynner i c++. #include <iostream> int mult(int a, int b); int main() { int a, b; cout<<"\n Skriv inn to tall som skal multipliseres \n"; cin>>a>>b; cout<<"\n Svaret på gangestykket er "<<mult(a, b)<<" \n"; return 0; } int mult(int a, int b) { return a*b; } Jeg skal hindre programmet i å "forsvinne" før jeg ser svaret, men får det ikke til. Har prøvd med cin.get(). Hvor skal man skrive inn cin.get()? (kanskje jeg skrev inn feil sted) Et spørsmål til; Hvorfor trenger "int mult(int a, int b);" og være med både på begynnelsen OG på slutten? Endret 15. august 2004 av firstperson Lenke til kommentar
Bøb Skrevet 15. august 2004 Del Skrevet 15. august 2004 Du kan da altids prøve med en 'cin.ignore(100, '\n')' før du bruker cin.get() på slutten, tror det vil virke. Grunnen til at funksjonen din må være deklarert på toppen og, er fordi den brukes i main(), og siden main() er over selve funksjonen, må den deklareres før den brukes. Å bruke den uten å først deklarere den virker dårlig Lenke til kommentar
søppel Skrevet 15. august 2004 Del Skrevet 15. august 2004 (endret) Dette spm. er blitt tatt opp hundevis av ganger her, men ok: Legg til cin.get(); eller system("pause"); før linjen return 0; Dette med mult-funksjonen handler om deklarasjoner og definisjoner (declaration og definition), og står forklart i detalj i de fleste C++-bøker. Du kan gjøre slik: int mult(...) { // kode her } int main() { // kode her .. som kaller mult } Edit: Svarte visst samtidig .. heh :] Endret 15. august 2004 av søppel Lenke til kommentar
synsing Skrevet 15. august 2004 Forfatter Del Skrevet 15. august 2004 (endret) Dette spm. er blitt tatt opp hundevis av ganger her, men ok: Legg til cin.get(); eller system("pause"); før linjen return 0; Jeg skriver jo at jeg har lagt inn cin.get(); , men at det ikke virker. Jeg skriver inn før return 0; men det forsvinner allikevel. EDIT: Sorry, koden jeg hadde lagt til var den uten cin.get(); , men jeg har prøvd, altså. Endret 15. august 2004 av firstperson Lenke til kommentar
søppel Skrevet 15. august 2004 Del Skrevet 15. august 2004 (endret) Noe slikt; #include <iostream> using namespace std; int mult(int a, int b) { return a*b; } // mult int main() { int a, b; cout << "Skriv inn to tall som skal multipliseres: "; cin >> a >> b; cout << "\nSvaret på gangestykket er " << mult(a, b) << '\n'; cin.ignore(); cin.get(); return(0); } // main ..man må bruke ignore noen ganger (Bøb var inne på dette). Endret 15. august 2004 av søppel Lenke til kommentar
eierdegics Skrevet 16. august 2004 Del Skrevet 16. august 2004 å ja akkurat det samme probl hadde jeg og! :!: Lenke til kommentar
reznor15 Skrevet 16. august 2004 Del Skrevet 16. august 2004 (endret) Prøv denne koden. Med system("Pause"); er det umulig at vinduet forsvinne rmed en gang. Btw, hvilken editor/kompiler bruker du? Jeg bruker dev-c++ og vs.net. Code: include <iostream> using namespace std; int main() { cout<<"Hello, world!"; system("PAUSE"); return 0; } Endret 16. august 2004 av reznor15 Lenke til kommentar
Bøb Skrevet 17. august 2004 Del Skrevet 17. august 2004 ....men system() ligger vel ikke i iostream gjør det vel? Dessuten er det ikke noen god ide å bruke system() til alt mulig heller, det kan være veldig usikkert til tider. Lenke til kommentar
synsing Skrevet 17. august 2004 Forfatter Del Skrevet 17. august 2004 ...Btw, hvilken editor/kompiler bruker du? Jeg bruker dev-c++ og vs.net. Var spørsmålet til meg? I så fall; Dev- C++ 4. Lenke til kommentar
søppel Skrevet 17. august 2004 Del Skrevet 17. august 2004 (endret) NAME system - execute a shell command SYNOPSIS #include <stdlib.h> int system(const char *string); <...> Så i C++ blir det: #include <cstdlib> Edit: (Ta en titt her for å se hvorfor: http://www.cpp.no/lars/ticpp-v1/Chapter02.html#Heading78 ) Endret 17. august 2004 av søppel Lenke til kommentar
synsing Skrevet 21. august 2004 Forfatter Del Skrevet 21. august 2004 Ok, nå har jeg utvidet programmet litt, slik at det både kan multiplisere, addere, substraktere og dividere. Jeg bruker nå float, slik at det kan skrive ut desimaler. Men hva kan jeg gjøre for at programmet kan regne med høyere tall? Hvis det går over f.eks. en million, blir det error. Lenke til kommentar
søppel Skrevet 21. august 2004 Del Skrevet 21. august 2004 #include <iostream> using namespace std; int main() { float f; cin >> f; cout << f << endl; return(0); } // main 10000001e+06 1 million går fint her. Hvis du tenker på den rare notasjonen så er det såkalt "vitenskapelig notasjon". For å få vanlig notasjon: #include <iostream> using namespace std; int main() { float f; cin >> f; cout << fixed << f << endl; return(0); } // main 10000001000000.000000 http://www.cpp.no/lars/ticpp-v2/#_Toc53985693 og http://www.cpp.no/lars/ticpp-v2/#_Toc53985688 Lenke til kommentar
A_N_K Skrevet 21. august 2004 Del Skrevet 21. august 2004 (endret) Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro). Endret 21. august 2004 av A_N_K Lenke til kommentar
synsing Skrevet 21. august 2004 Forfatter Del Skrevet 21. august 2004 (endret) Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro). Jeg får ikke skrevet ut desimaler med double . f.eks. 5/4 blir 1, mens med float blir det 1.25 EDIT: srkifveil Endret 21. august 2004 av firstperson Lenke til kommentar
søppel Skrevet 21. august 2004 Del Skrevet 21. august 2004 (endret) Må være noe annet som er galt i så fall, firstperson - både float og double er flytetall -- med desimaler altså. Edit: #include <iostream> using namespace std; int main() { double d = 5.0 / 4.0; float f = 5.0f / 4.0f; cout << fixed << d << endl; cout << fixed << f << endl; return(0); } // main 1.2500001.250000 Endret 21. august 2004 av søppel Lenke til kommentar
synsing Skrevet 21. august 2004 Forfatter Del Skrevet 21. august 2004 (endret) Må være noe annet som er galt i så fall, firstperson - både float og double er flytetall -- med desimaler altså. Det er godt mulig, kan ikke så mye c++. Men programmet leste jeg fra en tidligere tråd her, der var det brukt double. Men da jeg oppdaget at det ikke ble desimaler, synes jeg jeg det var rart, for jeg hadde lest at double var flyttall. Så jeg skrev programmet på nytt, akkurat likt, (byttet fra if til switch ) men med float denne gangen, og da gikk det. EDIT::::: Det virker hvis jeg skriver inn tallene som skal summeres før jeg kompilerer, men hvis jeg skriver slik at brukeren skal skrive inn tallene, og programmet regne det ut, går det ikke. #include <iostream> using namespace std; int main() { double d = 5.0 / 4.0; float f = 5.0f / 4.0f; cout << fixed << d << endl; cout << fixed << f << endl; return(0); } // main virker hos meg også. Endret 21. august 2004 av firstperson Lenke til kommentar
søppel Skrevet 21. august 2004 Del Skrevet 21. august 2004 (endret) men hvis jeg skriver slik at brukeren skal skrive inn tallene, og programmet regne det ut, går det ikke. #include <iostream> using namespace std; int main() { double d1, d2; cout << "Type inn two floating point (double) numbers: "; cin >> d1 >> d2; cout << d1 / d2 << endl; float f1, f2; cout << "Type inn two floating point (float) numbers: "; cin >> f1 >> f2; cout << f1 / f2 << endl; return(0); } // main Edit: btw, A_N_K: Var ikke klar over det der - så det er ingenting å spare i det hele tatt ved å bruke float (spør generellt siden jeg ikke kan spørre mer spesifikt ..heh, tenker f.eks. på overføring på bussen, og lagring i minnet, e.l.)? Lurer forresten på om skjermkort fortsatt bruker float internt, eller hva; det er irriterende å skrive OpenGL-kode (f.eks. et bibliotek) og måtte "avgjøre" om ting skal være float eller double (GLfloat, GLdouble) på brukerens vegne. Edit2: Etter en sjekk med sizeof ser det ut til at double her tar 8 bytes og float tar 4 - så man (jeg?) sparer i hvertfall litt minne og båndbredde ved å bruke float fremfor double i de tilfeller der doubles nøyaktighet/størrelse ikke er nødvendig, tror jeg. Endret 21. august 2004 av søppel Lenke til kommentar
synsing Skrevet 21. august 2004 Forfatter Del Skrevet 21. august 2004 (endret) #include <iostream> #include <cstdlib> using namespace std; int regn_svar(double tall1, double tall2, char regneart); int main(int argc, char *argv[]) { double tall1; double tall2; char regneart; cout<<"Skriv inn et regnestykke, med enter mellom hvert tall. \n"; cin>>tall1>>regneart>>tall2; double svar=regn_svar(tall1, tall2, regneart); cout<<tall1<<" "<<regneart<<" "<<tall2<<" "; cout<<"= "<<svar; cin.ignore(); cin.get(); return 0; } //slutt main int regn_svar(double tall1, double tall2, char regneart) { double svar; if (regneart=='+') svar=tall1+tall2; if (regneart=='/') svar=tall1/tall2; if (regneart=='*') svar=tall1*tall2; if (regneart=='-') svar=tall1-tall2; return svar; cin.ignore(); cin.get(); } EDIT: Skiftet til double-versjonen. Hvorfor kommer det ikke desimaler? Noen som ser feilen? Endret 22. august 2004 av firstperson Lenke til kommentar
saboi Skrevet 22. august 2004 Del Skrevet 22. august 2004 Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro). fordi det er raskere med float enn med double? Lenke til kommentar
A_N_K Skrevet 22. august 2004 Del Skrevet 22. august 2004 (endret) Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro). fordi det er raskere med float enn med double? Søppel: Jeg vet ærlig talt ikke med OpenGL, jeg ser det finnes double- og float-utgaver av funksjoner, så jeg går utifra at det kan ha innvirkning på hastighet. Geforce 6800 bruker 32bit presisjon så vidt jeg kan se, så float er kanskje mer effektivt for GPU-programmering? Saboi: Vil float gå raskere så lenge CPUen jobber med extended precision? Fordelen med float er i de fleste tilfeller lavere minnebruk, så vidt jeg vet. Edit: Det jeg kan komme på som referanse er at bruken av float i Steinbergs VST-rammeverk (DSP-plugins) ble diskutert i forbindelse med framtidige forbedringer, den fordelen med float som kom opp var plassbesparing. På den annen side, hvis man skrur på single precision i CPU er det mulig at man vil se bedre ytelse (Intel og MSVC reduserer vel presisjonen til double, default). Endret 22. august 2004 av A_N_K Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå