120
Tags:
c++
Skrevet af
Bruger #4996
@ 23.10.2006
Afsnit 10Indtil videre har vi puttet al vores koden ind i main. Det er også fint til små programmer, men forestil dig at hele koden til Windows eller Linux skulle være inden for main funktionen, det ville være ret upraktisk.
Derfor har man opfundet funktioner, der kan bruges til at splitte koden op i mindre dele.
Lad os se på et eksempel på en funktion:
#include <iostream>
int add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int x = add(2, 3);
std::cout << x << std::endl;
}
Her er add en funktion. I parentesen efter navnet på funktionen står parametrene til funktionen, og deres type.
De står på ca. samme måde som man laver variabler. Hvis ikke funktionen skal bruge nogen parametre lader man bare parentesen være tom.
int foran navnet på funktionen betyder at den returnerer en int, hvis ikke den skal returnere noget skal man skrive void i stedet.
I funktionen laver vi en variabel, c, der er a + b, denne værdi returneres.
I main kalder vi funktionen, dvs udfører koden i funktionen, funktionen laver ikke noget før den bliver kaldt.
Da vi har skrevet 2 og 3 i parentesen betyder det at disse bliver til parametre til funktionen.
I funktionen vil a således være 2 og b vil være 3. c bliver sat til at være summen af de to, dvs. 5, denne værdi returneres.
Tilbage til main vil x blive sat til at være returværdien fra add, dvs. 5.
Det er jo ganske simpelt? Du har allerede brugt flere funktioner, f.eks. std::getline, rand.
Lad os tage et eksempel mere. Vi så før at det var besværligt at læse et enkelt bogstav, men det er måske noget der skal gøres mange gange, så lad os lave en funktion til det:
char GetBogstav()
{
std::string S;
std::getline(std::cin, S);
return S[0];
}
Så kan man bruge den med.
[/pre]
std::cout << "Vil du? ";
char ch = GetBogstav();
if(ch == 'j')
std::cout << "Ok" << std::endl;
[/pre]
Smart ikke?
Der er lige en ting mere vi skal have på plads. For at vi kan få lov til at kalde en funktion skal kompileren vide hvordan funktionen ser ud.
I det først eksempel skrev vi funktionen add inden main, og så er der ingen problemer.
Men ofte vil man gerne have dem byttet om, så main står først, og hvad gør man så?
Man laver en prototype på funktionen:
#include <iostream>
int add(int a, int b);
int main()
{
int x = add(2, 3);
std::cout << x << std::endl;
}
int add(int a, int b)
{
int c = a + b;
return c;
}
Her er den første linie med add en prototype, den ser ud på samme måde som selve funktionen, indtil { hvor der i stedet er et ;
En prototype betyder noget i retning af at, der kommer senere en funktion der ser sådan ud, jeg skal nok fortælle dig hvordan den ser ud senere.
OpgaverLav regnestykke eksemplet fra afsnit 8 om så det bruger funktioner til plus, minus, gange og dividere.
En funktion kan naturligvis godt kalde andre funktioner, og den kan enda kalde sig selv.
Lav en funktion der kalder sig selv og beregner 3*2*1 hvor det første tal i rækken skal være en parameter.
Du skal bruge en if for at undgå at den kalder sig selv igen og igen for evigt.
Hvor store tal kan man gøre det med og få det rigtige resultat?
Brug evt. windows lommeregner til at checke, den kan regne med meget større tal end os, der hedder det n!
Afsnit 11Lad os kikke lidt på dette kode:
#include <iostream>
void foo(int a)
{
a++;
std::cout << a << std::endl;
}
int main()
{
int x = 1;
foo(x);
std::cout << x << std::endl;
}
Hvad vil det skrive? Man kunne tro at det ville skive 2 begge gange, men det gør det ikke.
Det skriver 2 første gang og 1 anden gang.
Det skyldes at når vi kalder foo vil den modtage et kopi af x, denne kopi (som er 1) vil den lægge 1 til, resultatet (2) vil den så udskrive.
Tilbage i main vil vi udskrive x, den er stadig 1 da foo kun ændrede på kopien af x, ikke x i sig selv.
Det er fint i nogle tilfælde, men i andre tilfælde vil vi gerne have foo til at ændre på x og ikke kun kopien af x, og hvad gør man så?
Man bruger en reference.
En reference er en variabel der referer til en anden variabel, man siger også at en reference er et alias, dvs. et andet navn, for en anden variabel.
En reference i sig selv kan ikke indeholde noget, den kan kun referere til en anden variabel.
Et simpelt eksempel:
#include <iostream>
int main()
{
int i = 2;
int& r = i;
i++;
std::cout << i << ", " << r << std::endl;
r++;
std::cout << i << ", " << r << std::endl;
}
Her er i en almindelig int.
r er en reference til en int, den sættes til at referere til i.
Når vi så tæller i op, og udskriver både i og r vil de begge skrive at de er 3, simpelthen fordi det er to udgaver af det samme.
Når vi derpå tælle r op, tæller vi i virkeligheden i op, og både i og r vil fortælle at de er 4.
Og nu til bage til vores eksempel, hvis vi laver foo om så den får en reference i stedet:
#include <iostream>
void foo(int& a)
{
a++;
std::cout << a << std::endl;
}
int main()
{
int x = 1;
foo(x);
std::cout << x << std::endl;
}
Så vil programmet skrive 2 begge gange!
Det er fordi a, som er parameteren til foo, nu er en reference til x, så nå foo tæller a op, vil den tælle det op som a refererer til, dvs. x i main.
En reference vil altid referere til det samme, man kan ikke sætte den til at referere til noget andet.
Og en reference vil altid referere til noget.
De følgende eksempler er ugyldige:
int& x = 1;
En reference skal referere til en variabel.
int& y;
En reference skal referere til noget.
Int i, j;
int& z = i;
z = j;
En reference skal skal altid referere til det samme.
En reference kan være const:
double d;
const double& r = d;
Man kan godt læse fra en const reference, men man kan ikke skrive til den.
Det kan i nogle tilfælde være praktisk, f.eks. i følgende:
void foo(const int& a)
{
std::cout << a << std::endl;
}
int main()
{
foo(1);
}
Hvis ikke a i kaldet til foo var const kunne man ikke bruge 1 som argument, men var nødt til at lave en variabel, det betyder så at foo ikke kan ændre a, men det giver heller ikke rigtigt mening at ændre 1.
Det samme gælder her:
void foo(const std::string& a)
{
std::cout << a << std::endl;
}
int main()
{
foo("Hello World");
}
Når man vil overføre en std::string til en funktion er det oftest en fordel at bruge referencer fordi programmet så slipper for at kopiere strengen.
Hvis man så ikke vil have at funktionen roder i ens streng kan man lave den const.
Opgaver1: Lav regnestykke eksemplet som vi så på i afsnit 10 om, så funktionerne ikke returnerer resultatet, men overfører det som en parameter vha. reference.
Afsnit 12Vi så i sidste afsnit at man kunne lave en add funktion:
int add(int a, int b)
Hvis man så ville bruge funktionen med double, måtte man lave en version der bruger double:
double add(double a, double b)
Dette ville virke fint, men det er lit trivielt at lave add funktioner for alle mulige typer.
Og netop det trivielle vil programører gøre meget for at undgå, så der findes naturligvis noget der er smartere, man kan bruge template funktioner:
template <typename T>
T add(T a, T b)
{
T c = a + b;
return c;
}
Dette er en template funktion der kan lægge alle typer sammen, man bruger den på samme måde som andre funktioner:
std::cout << add(2, 4) << std::endl;
Det der sker er at når compileren skal oversætte finder den ud af hvilen type T er og så laver den en funktion der tager netop denne type.
Man skal være opmærksom på at de to argumenter i dette tilfælde skal være den samme type, og det er også typen på det der returneres.
Hvis vi skriver:
std::cout << add(2.4, 4) << std::endl;
Vil compileren brokke sig, for de to argumenter har ikke samme type, 2.4 er en double, 4 er en int. Vi kan løse problemet ved at skrive:
std::cout << add(2.4, 4.0) << std::endl;
For så er begge argumenter double, og compileren er glad igen. Eller vi kan fortælle compileren at den skal bruge en bestemt type for T, f.eks:
std::cout << add<double>(2.4, 4) << std::endl;
Så vil den lave 4 om til en double og bruge double udgaven af add.
Vi kan naturligvis godt have flere template argumenter:
template <typename T1, typename T2>
T1 add(T1 a, T2 b)
{
return a + b;
}
Så behøver de to argumenter ikke have samme type, og funktionen vil returnere en værdi af den type som det første argument havde.
Bemærk at for at kalde en template funktion er det ikke nok med en prototype, compileren skal have hele funktionen for at kunne oversætte.
OpgaverLav regne maskine eksemplet om til at bruge template funktioner.
Prøv at ændre typen af det der regnes på fra int til double og unsigned short.
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (83)
Godt arbejde Bertel. Thumbs up !
Der var dog lige lidt, jeg faldt over.
1) Du bruger godt nok <iostream> men ikke <ctime> og <cstdlib>. Istedet bruger du <time.h> og <stdlib.h>. Hvorfor ?
2) Du returnerer ikke noget i din main metode, som ellers er defineret til at returnere en int. gcc compileren kommer med en warning (når man bruger '-Wall' parametren), så det vil være god skik altid at returnere 0 fra sin main metode.
1: Både ctime og time.h er standard C++ headere. Af gammel vane bruger jeg .h versionerne. iostream.h er ikke en standard headerfil. Visual C++ 6.0 forstår ikke std::localtime.
2: Ifølge C++ standarden behøver man ikke return fra main, det skal give det samme som at returnere 0. I C skal man returnere noget. MinGW version 3.4.2 giver ingen warning ved at udelade return 0;
En helt fantastisk artikel! Bliver med garanti et godt redskab når jeg skal til at gå i gang med C++.
Det er en fantastisk artikel jeg lærte helt vildt meget men jeg har et lille spørgsmål angående den lommeregner man kan lave når man har tasted tal1 og 2 og trykker enter så forsvinder den inden man når at se resultated
det her er den kode jeg har brugt:
#include <iostream>
int main()
{
int x, y;
std::cout << "Tal 1: ";
std::cin >> x;
std::cout << "Tal 2: ";
std::cin >> y;
std::cout << x << " + " << y << " = " << x + y << std::endl;
std::cout << x << " * " << y << " = " << x + y << std::endl;
std::cout << x << " - " << y << " = " << x + y << std::endl;
std::cout << x << " / " << y << " = " << x + y << std::endl;
std::cin.get();
}
håber du kan hjælpe mig
lige en lille ting. du skriver at man kan bruge c++ til at lave styresystemer som Windows. det passer dog ikke helt da der ligger meget andet og lavere kode bag noget som windows. specielt i kernenen.
>jesper veile, put en ekstra std::cin.get() ind til slut.
Den første "spiser" den newline der er tilbage efter >> y, den sidste venter på en ny enter.
>Smurf Killer, ja der er næsten nødvendigt med en anelse assembler og nok også lidt C kode i kernen. Men 98% af et styresystem som Windows kunne laves i C++.
Bertel > HOLD KÆFT!!!!!! ...
... hvor er du god
9 sider !!!
Hej det er jesper igen jeg vil barer gerne vide men en er de første koder er der en artikel om hvor programmet svarer tilbage igen hvordan for man den til at spørger om et nyt spørgsmål efter den har svaret.
Hilsen jesper
Hey flerer problemer hehe
nu hvor der står at man ska prøver at lave 3 tabellen men jeg kan ikke rigtig se hvad den kode du har skrevet til har noget med det at gøre
Jesper, jeg foretrækker at svare på disse og lignende spørgsmål i tråde oprettet til formålet i C++ foraet.
Anyway, til det første; du skal lige vente til at du har lært om while, i afsnit 9.
Du kan udskrive hvert 3. tal med:
int i;
for(i = 1; i <= 30; i += 3)
std::cout << i << " ";
Eller du kan:
int i;
for(i = 1; i <= 10; i++)
std::cout << i*3 << " ";
Jeg er forholdsvis ny til C++ - Så denne guide, burde, passe til mig, ikke sandt?
Nu er det måske en anelse unfair, at jeg lige har gået cplusplus' tutorial igennem. - Og ikke kan udgå at sammenligne.
Mine point til dig, Bertel, fordeles således (så retfærdigt som muligt):
- Først og fremmest vil jeg give dig ét point, for denne guide som helhed. - Flot initiativ, flot du gider.
- Du får ét point, for din meget pædagogiske skrift. - Dét point tager jeg så igen pga. _MANGE_ "slåejl", hvilket også inkluderes i koderne, desværre.
- Du får ét point for flot, dog meget kort, at gennemgå de mest "basic" emner.
- Efter jeg havde læst cplusplus' tutorial havde jeg stadig meget svært ved et forstå konceptet med pointere, et problem som nu er løst. Du får ét point for et flot afsnit omkring pointere.
Hvorvidt jeg endten har en dårlig korttidshukommelse, eller om du har skrevet sammenhænget mellem kodeeksemplerne, en smule uklart, lader jeg tvivlen komme dig til gode, og trækker ikke et point. - Men tænk over det.
Til sidst vil jeg blot tilføje et tak.
- Steffen.
Steffen, jo guiden burde passe dig.
Jeg har forsøgt at undgå "slåfejl" specielt i kode stumperne, da de kan virke meget forstyrrende.
Jeg ved der er en fejl i det andet eksempel i afsnit 25, der burde stå ... i catch'en.
Hvis du finder andre fejl må du meget gerne skrive dem, så andre kan få glæde af det. Jeg kan, så vidt jeg ved, ikke rette artiklen :-(
Jeg forstår ikke afsnittet "Hvorvidt jeg endten ..."
Okay.
Mener dog at have løbet ind i nogle markante undervejs.. kan dog ikke huske hvor (så er det selvfølgelig også nemt for mig, at beskylde
)
- Jeg kender dog ikke til den du nævner.
Men "slåfejl" i selve guiden (altså uden for kodeeksemplerne) er også frustrerende, da det tit gør, at man skal læse samme sektion flere gange for, at forstå samenhænget (jeg forstår, at du ikke kan rette det).
Det jeg mener til slut i min kommentar er at;
1. Jeg husker dårligt fra kodeesempel til kodeeksempel (hvilket resulterer i, at jeg tit ikke forstår sammenhænget).
2. Der er intet sammenhæng, og i dette tilfælde mener jeg at det endten er en smule uklart "sat op", eller at man skule være blevet gjort opmærksom på det fra start.
Det jeg vil frem til er meget bogstaveligt at; I mine øjne har variablerne i kodeeksemplerne tit ingen værdier (hvilket godt kan være forvirrende for "sådan en som mig").
- Steffen
Bah, glemte så lige pointen i den sidste del.
Min pointe er så, at når jeg har opfattelsen "Det jeg vil frem til.." er endten 1. eller 2. tilfælde sandfærdig
- Og lod min tvivl komme dig til gode.
- Steffen
Eneste jeg synes artiklen mangler er en oversigt i starten som giver hvert afsnit en overskrift om hvad afsnittene handler om. Ellers er det dejligt at se en sådan artikel.
Godt arbejde Bertel!... Highfive herfra!
Velformuleret og fornuftig gennemgang
Den mini lommeregner du er igang med, hvis man skriver de 2 tal, så trykker på enter, så forsvinder skærmen, har forsøgt med at sætte std::cin.get(); ind men det hjalp ikk!
Hvad gør man så ?
Jacob Veile, put en ekstra std::cin.get() ind til slut.
Den første "spiser" den newline der er tilbage efter >> y, den sidste venter på en ny enter.
jeg forstår ikke rigtigt det med ++x og x++. du siger ++x tælles x op inden resultatet. men hvad skal tælles op? x er jo = 1(?) og hvad er resultatet?
skide godt initiativ at lave denne artikel! er til stor hjælp!!
Det er i begge tilfælde x der tælles én op.
Prøv at kikke på:
#include <iostream>
int main()
{
int y = 1;
int x = 1;
std::cout << ++y << std::endl;
std::cout << x++ << std::endl;
std::cout << x << std::endl;
std::cout << y << std::endl;
std::cin.get();
}
Hvad sker der når du kører det?
Først skriver den 2, da y tælles en op (fra 1) inden den udskrives.
Så skriver den 1 fordi x tælles en op (fra 1) efter den udskrives.
Til slut skriver den 2 og 2 da både x og y ender med at være 2
aha! super du! du får forresten lige en 5'er
Har problemer med if ! Jeg får hele tiden en fejl når jeg kompiler med den:
3 C:\\Documents and Settings\\Pixi\\Skrivebord\\main.cpp expected unqualified-id before "if"
3 C:\\Documents and Settings\\Pixi\\Skrivebord\\main.cpp expected `,' or `;' before "if"
Koden:
#include <iostream>
if(y != 0)
{
std::cout << x << " / " << y << " = " << x / y << std::endl;
}
Du bliver nødt til at putte koden ind i en main. Man kan ikke afvikle kode vilkårlige steder i sin .cpp fil, medmindre det er del af en variabel initialisering.
Derudover har du ingen erklæring af y og x
Et komplet eksempel:
#include <iostream>
int main()
{
int x;
std::cout << "Tal 1:";
std::cin >> x;
int y;
std::cout << "Tal 2:";
std::cin >> y;
if(y != 0)
{
std::cout << x << " / " << y << " = " << x / y << std::endl;
}
}
Jeg foretrækker stadig at svare på spørgsmål om C++ i C++ fora, medmindre de direkte har relevans for tutorialen.
Den helt nye C++ programmør ville måske have mere gavn af at hente Microsoft Visual C++ Express (den er gratis).
Desuden er Microsofts compiler (sammen med Intels) den compiler, der er tættest på at overholde hele C++ standarden (GCC er dog ikke lang bagefter)
Visual C++ er også en mulighed, jeg synes at den er stor, tung og bøvlet at bruge.
Jeg har aldrig prøvet Visual C++ Express, men hvis det er et low-level sprog, så er det jo ikke andet end en bunke **** for en bunke ****** noobs, der vil lave programmer med et tastetryk. Jeg synes C++ er utroligt dejligt, fordi det ikke er "let" - som jeg synes Delphi og Visual Basic er - og fordi man har så meget mere kontrol over sit program.
Den helt nye C++ programmør har helt klart mest gavn af C++, ikke andet
hej alle den if(Y != 0) vil dev c++ ik compill
kommer med fejl, og en ting jeg har lagt mærke til er ingen
bruger using namespace std; i stede for at sku skrive std hele tiden.?
hej alle den if(Y != 0) vil dev c++ ik compill
kommer med fejl, og en ting jeg har lagt mærke til er ingen
bruger using namespace std; i stede for at sku skrive std hele tiden.?
ku ik finde ud af din lommeregner der så jeg lege lidt med den
ps er ny til c++ men tag et kig på det her og sig hvad du syndes
#include <iostream>
using namespace std;
int main ()
{
int a, b;
cout << "tast tal: \\n";
cin >> a >> b;
{
cout << "summen er\\n " << a*b << "\\n";
}
cin.get();
cout << "summen er\\n" << a+b << "\\n";
cout << "summen er\\n" << a/b << "\\n";
cin.get();
cin.get();
return 0;
}
jeg har lagt mærke til er ingen bruger using namespace std; i stede for at sku skrive std hele tiden.?
Prøv at se sidste del af afsnit 1.
I stedet for at bruge cin.get(); til at stoppe, kan man "bare" sende en systembesked om at holde en pause indtil en tast trykkes... system("pause");
...Og dejlig jordnær artikel
system("pause"); tricket virker kun på Windows.
Så vidt jeg er bekendt er det da også kun windows der lukker prompterne? ...Min mac gør i hvert fald ikk'.
...Bare en tanke
fin guide.. jeg lærte meget af den! Forstod det hele fint! en femmer herfra!
Davs Bertel,
dine if kodeopstillinger virker ikke... Du siger på et tidspunkt i ovenstående kommentarer at man skal bruge main for at få det til at virke... Ville det så ikke være lidt nemmere at gå til, hvis du havde lavet nogle kodeeksempler, hvor du rent faktisk havde brugt if-kommandoen i denne sammenhæng?!? Det er noget frustrerende at side som nybegynder og ikke kunne få koderne til at virke...
Mvh. Camilla
Jeg burde nok have lavet nogle flere af eksemplerne som komplette eksempler med main, men jeg synes også at eksemplerne skal være korte og overskuelige, så det er en balance.
Jeg er i gang med en opdatering af artiklen og din kommentar vil naturligvis blive taget under overvejelse, sammen med de øvrige kommentarerer.
Det første if eksempel fra afsnit 4 kunne se sådan ud:
#include <iostream>
int main()
{
int x, y;
std::cout << "Tal 1: ";
std::cin >> x;
std::cout << "Tal 2: ";
std::cin >> y;
if(y != 0)
{
std::cout << x << " / " << y << " = " << x / y << std::endl;
}
}
hej bertel.
jeg kunne godt tænke mig at lære lidt om programmering osv. hvor kan man finde c++ henne?
-out
hej bertel.
jeg kunne godt tænke mig at lære lidt om programmering osv. hvor kan man finde c++ henne?
-out
Du kan finde en compiler mm, her:
http://www.codeblocks.org/Hvis du downloader versionen "with MINGW compiler" har du alt der skal til for at komme i gang.
Det er en super artikel, og skidt med slåfejl, vi er jo ikke alle perfekte, og desuden er kompileren med til at lette det
håber der kommer en artikel fra dig mere med lidt mere avancerede strukturer
Keep up the good work
Når jeg går ind i Code::blocks v1.0 så når jeg trykker F9 kommer der ingen boks frem , den skriver bare nede for neden :
Project : Console application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\\Users\\Gangster Wulff\\Documents\--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
mingw32-g++.exe: installation problem, cannot exec `cc1plus': No such file or directory
(Rød tekst her fra.)Process terminated with status 1 (0 minutes, 0 seconds)
Hvad er fejlen ?
og jeg satte denne her kode ind:
#include <iostream>
int main()
{
std::cout << "Hello World" << std::endl;
std::cin.get();
}
hold kæft den her artikel sparker røv
. den styrer. da jeg lige er gået igang med C++ er den superr god. 5 herfra
hehe hvis man dividerer med 0 kan man da bare skrive:
if(y != 0)
{
std::cout << x << " / " << y << " = " << x / y << std::endl;
}
else
{
y = x;
std::cout << x << " / " << "0" << " = " << x << std::endl;
}
ikk så svært! fandt ud af det første gang selvom jeg aldrig havde prøvet c++ før...
men ellers hamrende god artikel !5!
Hej, kanon fed artikel
Men jeg har det samme problem som Martin, hvad er der galt? Og hvordan kan det løses?
En femmer
Det er sku godt lavet.
Hej
Super. Men jeg må lige kommenterer, at jeg savner et index eller en indholdsfortegnelse.
Mvh
Carsten
Hej .. Er en 13 årig dreng der roder lidt med programmering.. Ved godt jeg er lidt sent ude men har en udbedrelse af Martin's lommeregner.. #include <iostream>
using namespace std;
int main ()
{
int a, b;
cout << "Tast tal 1: \\n";
cin >> a;
cout << "Tast tal 2: \\n";
cin >> b;
{
cout << "Gange=" << a*b << "\\n";
}
cin.get();
cout << "Plus=" << a+b << "\\n";
cout << "Minus=" << a-b << "\\n";
cout << "Divider=" << a/b << "\\n";
cin.get();
cin.get();
return 0;
Hej.
Jeg har lidt problemer med at forstå det med x++, ++x.
Også det med loops.
Jeg synes det bliver forklaret lidt for hurtigt. Jeg ved næsten intet om C++ så jeg forstår ikke så meget af det.
Så kunne du ikke please forklare det lidt bedre?
Vil det ikke være nemmere at at skrive:
using namespace std;
så behøves du ikke at skrive std så mange gange.
Men ellers god artikkel
-FredeK
jeg har prøvet at lave regnemaskinen om så den bruger template. Men det fungere ikke rigitgt. Kan ikke finde fejlen. Kan du hjælpe mig?
#include <iostream>
#include <string>
template <typename T1, typename T2>
T1 plus(T1 x, T2 y);
T1 minus(T1 x, T2 y);
T1 gange(T1 x, T2 y);
T1 divsion(T1 x, T2 y);
int main()
{
std::cout << "tal 1" << std::endl;
double tal1;
std::cin >> tal1;
std::cout << "skriv a for +, b for -, c for * og d for /" << std::endl;
std::string streng1;
std::cin >> streng1;
std::cout << "tal 2" << std::endl;
double tal2;
std::cin >> tal2;
if(tal2==0&&streng1=="d")
{
std::cout << "fejl" << std::endl;
}
if(streng1=="a")
{
std::cout << plus(tal1, tal2) << std::endl;
}
if(streng1=="b")
{
std::cout << minus(tal1, tal2) << std::endl;
}
if(streng1=="c")
{
std::cout << gange(tal1, tal2) << std::endl;
}
if(streng1=="d"&&tal2!=0)
{
std::cout << divsion(tal1, tal2) << std::endl;
}
if(streng1!="a"&&streng1!="b"&&streng1!="c"&&streng1!="d")
{
std::cout << "fejl" << std::endl;
}
return 0;
}
T1 plus(T1 x, T2 y)
{
return x + y;
}
T1 minus(T2 r, T3 t)
{
return r - t;
}
T1 gange(T2 p, T3 o)
{
return p * o;
}
T1 divsion(T2 k, T3 l)
{
return k / l;
}
ellers godt arbejde
ups.. fik den vist ikk li ind i den kodeboks..
Svar venligst en Dummi
Jeg gør præcis hvad du skriver, og programmet svarer:
"1 - Debug" uses an invalid compiler. Skipping...
Nothing to be done.
Hwa gør jeg (forkert)?
Animal
#include <iostream>
int main()
{
int x, y;
std::cout << "Tal 1: ";
std::cin >> x;
std::cout << "Tal 2: ";
std::cin >> y;
std::cout << x << " + " << y << " = " << x + y << std::endl;
std::cout << x << " - " << y << " = " << x - y << std::endl;
std::cout << x << " * " << y << " = " << x * y << std::endl;
if(x && y > 100)
{
std::cout << x << " / " << y << " = " << x / y << std::endl;
else if(x < y)
std::cout << y << " / " << y << " = " << y / x << std::endl;
std::cout << "tallene er byttet om pga. y er større end x" << std:endl;
}
std::cin.get();
std::cin.get();
}
Hvad er der galt der?
Forresten meget god artikel!!!
Hey Bertel.
Jeg sad lige og læste din artikel igennem igen af ukendte årsager (er faktisk på vej til at skulle noget :p).
Jeg "faldt" over dette:
"En bool kan kun have to værdier; false eller true. false er 0, true er 1, det kan man se ved at forsøge at skrive dem ud."
- Er det ikke sådan i C++ ligesom det er med f.eks. PHP at false er 0 og true er alt andet? Her mener jeg, hvis du konverterer andre typer, via typecast eller w/e, til bool?
Jeg har egentlig ikke alt for meget styr over det, men det føler jeg mig overbevist om at du gør :p
Et lille eksempel:
int x,y,z;
x = 0;
y = 1;
z = -1;
if(x) std::cout << "Dette kode vil aldrig blive udført";
if(y && z) std::cout << "Dette stykke kode vil blive udført";
Super godt lavet den er let for en begynder som mig og den hjælper! jeg er ikke noget vildt langt men jeg giver den 5!
Syntes det er en okay artikel. _MEN_ Du kunne på en måde godt have forklaret nogen ting bedere. For eksempel har jeg ikke fattet en pjælle af vector.. Hvordan vil koden se ud til en vector osv. Eller nice job.
"lige en lille ting. du skriver at man kan bruge c++ til at lave styresystemer som Windows. det passer dog ikke helt da der ligger meget andet og lavere kode bag noget som windows. specielt i kernenen. "
Det er jo to forskellige ting. Det ene udtryk går på, at man kan lave et windows-lignende OS i C++. Det andet udtryk går på, at Windows ikke kun er lavet i C++. Alligevel blander du dem sammen.
Bertel sagde ikke, Windows var lavet i C++ alene. Han sagde, noget lignende Windows kunne laves i C++. Det betyder dog ikke, at Microsoft har valgt at gøre det på den måde.
"lige en lille ting. du skriver at man kan bruge c++ til at lave styresystemer som Windows. det passer dog ikke helt da der ligger meget andet og lavere kode bag noget som windows. specielt i kernenen. "
Det er jo to forskellige ting. Det ene udtryk går på, at man kan lave et windows-lignende OS i C++. Det andet udtryk går på, at Windows ikke kun er lavet i C++. Alligevel blander du dem sammen.
Bertel sagde ikke, Windows var lavet i C++ alene. Han sagde, noget lignende Windows kunne laves i C++. Det betyder dog ikke, at Microsoft har valgt at gøre det på den måde.
Jeg har et problem med at forstå starten i afsnit 5.
Du skriver at x = y % z; er det samme som
x = y - (y / z)*z;
og at det skulle kunne finde resten i regnestykket. Men rent matematisk vil y - (y/z)*z = y - yz/z = y - y/1 = y - y = 0
altså er x = y - (y/z)*z = 0 ?? så x = 0 ligegyldigt hvilke tal du putter ind. Men computeren læser det åbenbart anderledes? forklaring tak.
Glem det jeg fandt ud af det ved at spørge i en mirc channel
blev flamet godt og grundigt xD
Rigtig spændende!
Dog kan jeg bare ikke få skrevet artiklen ud i et printvenligt format. Kan den fås som PDF?
Denne artikel sparker SUPER NUMSE!!!!!!!!!!!!!!!! Bang ! Super god, man kan lære en masse af dette ! 1000 ud af 5!
Bertel du er kraft ojme min GUD! GUD GUD GUD!!!!
Frederik Kongsgaard:
Har han skrevet , BUT! Han skrev at han heller vil med det andet ( eller noget i den stil ) Forståeligt
Wtf hvad her bertel lige lavet her ?
[/pre]
std::cout << "Vil du? ";
char ch = GetBogstav();
if(ch == 'j')
std::cout << "Ok" << std::endl;
[/pre]
Forsøg:
Hej
Sejt man kan lave {pre} og {/pre} istedet for {code} og {/code}
Skift {} ud med []
super flot skrevet og har fået meget ud af at læse den
plzz hjælp mig med afsnit 3 bare skriv hvad man skal altså jeg prøver sådan her men virker bare ikke jeg er heller ikke så god til det begyndte for en time siden.
#include <iostream>
#include <string>'
using namespace std;
int main()
{
std::getline << std::string << "jacob";
}
std::cout << "hej jacob"
{
og plzz svar
Jeg havde overset din kommentar, det er bedre at stille et normalt spørgsmål, men:
[
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- string name;
- cout << "Type your name: ";
- getline(cin, name);
- cout << "Hej: " << name;
- }
Hej jeg har et spørgsmål angående opgaven i afsnit 8.
her har jeg prøvet at lave den del der skulle plusse de to tal hvis du trykker 1 men det virker ikke. Lige ud set hvad jeg gør udskriver den min linje der siger "fejl".
Vil du venligst hjælpe mig med at rette fejlen, og eventuelt fortælle mig hvordan man gør det mugligt at både +, -, /, *.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int x, y;
cout << "tal 1: ";
cin >> x;
cout << "Tal 2: ";
cin >> y;
cout << "1 = +" << endl;
cout << "2 = -" << endl;
cout << "3 = *" << endl;
cout << "4 = /" << endl;
cin.get();
cin.get();
int a;
if(a == 1)
{
cout << x << " + " << y << " = " << x + y << endl;
}
else
{
cout << "fejl" << endl;
}
}
undskyld har fundet en løsning.
hvor kan man downloade c++
hvor kan man downloade c++ ?
hvor kan man downloade c++ ?
hvor kan man downloade c++ ?
hvor kan man downloade c++ ?
-
beklager jeg kom til at skrive det så mange gange
Du skal være
logget ind for at skrive en kommentar.