abonnement Unibet Coolblue Bitvavo
pi_115463769


Het topic over de programmeertalen C en C++. Als je vragen over C of C++ hebt, zit je hier goed. Natuurlijk kan je ook gewoon mee kletsen.

Let er bij het stellen van een vraag op dat je zo veel mogelijk revelante informatie geeft, zoals:
- wat je probeert te doen;
- welk besturingsysteem je hebt;
- welke compiler en versie je gebruikt;
- de eventuele foutmelding die je ziet;
- een minimaal codevoorbeeld dat je fout veroorzaakt.

FAQ

Wat is het verschil tussen C en C++?

De programmeertalen C en C++ hebben veel overeenkomsten. C++ is begonnen als een uitbreiding op C en ondersteunt bijna de volledige C-taal. Dit betekent dat een computerprogramma geschreven in C meestal ook een geldig C++-programma is.

C++ heeft onderdelen aan de C-taal toegevoegd en ondersteunt verschillende programmeerstijlen beter. C++ heeft onder andere sterkere typechecking, betere manieren om data te encapsuleren en eenvoudigere structuren om algemene code te schrijven. C is echter nog steeds beter ondersteund op 'afwijkende' platformen en wordt mede daarom nog veel gebruikt.

Zie Stroustrups FAQ voor meer informatie.

Ik wil beginnen met C of C++; welke moet ik kiezen?

Dat hangt van jou af: er is geen direct 'betere' keuze. Je hoeft zeker geen C te leren voordat je aan C++ begint: het is waarschijnlijk zelfs beter van niet. Zorg in de eerste plaats voor een goed leerboek, de online informatie en 'cursussen' laat vaak te wensen over voor de beginneling.

Wat is een goed boek voor C of C++

Zie wederom Stroustrups FAQ.

Links

Naslagwerken

C/C++ Reference
The C Library Reference Guide
C++ Documentation
C++ Annotations

Achtergrond
The Association of C and C++ Users
Stroustrup's homepage

Deze OP vind je hier.
pi_115463850
w00t OP is al een stuk beter, goed gedaan GS42!

Ik kijk later zelf wel even wat we kunnen toevoegen.
pi_115464227
quote:
0s.gif Op zondag 12 augustus 2012 14:42 schreef thenxero het volgende:

[..]

Dat is misschien het beste, misschien heb ik dat in de toekomst ook nog voor andere dingen nodig. Hoe installeer die nieuwe gcc?
Hier haal ik gcc 4.7.1 ( http://www.equation.com/servlet/equation.cmd?fa=fortran )

En dan in Code::Blocks:
Settings -> Compiler and debugger settings
Ik copy dan meestal de oude gcc
En dan in "Toolchain executables" gooi ik de nieuwe compiler install dir erin

En vergeet niet om de nieuwe compiler profile de default te maken.
Some people should be around your entire life; others should just make an appearance.
pi_115465168
quote:
0s.gif Op zondag 12 augustus 2012 15:39 schreef ari_zahav het volgende:

[..]

Hier haal ik gcc 4.7.1 ( http://www.equation.com/servlet/equation.cmd?fa=fortran )

En dan in Code::Blocks:
Settings -> Compiler and debugger settings
Ik copy dan meestal de oude gcc
En dan in "Toolchain executables" gooi ik de nieuwe compiler install dir erin

En vergeet niet om de nieuwe compiler profile de default te maken.
Bedankt. Heb dit nu gedaan. Volgens mij werkt hij goed (heb het getest op mijn eigen oude bestanden), alleen als ik de class/header van GS42 wil gebruiken dan krijg ik:

"It seems like this project has not been built yet. Do you want to build it now?" Vervolgens druk je op "Ja" en dan krijg ik weer hetzelfde bericht. Ik heb net een minuut lang enter ingedrukt maar het bericht blijft maar terugkomen :P
pi_115465743
Geen idee wat dat zou kunnen zijn. Ik zou de error even googlen als ik jou was :)
Some people should be around your entire life; others should just make an appearance.
pi_115466611
quote:
0s.gif Op zondag 12 augustus 2012 16:23 schreef ari_zahav het volgende:
Geen idee wat dat zou kunnen zijn. Ik zou de error even googlen als ik jou was :)
Gefixt, het werkt nu :D
pi_115467107
quote:
0s.gif Op zondag 12 augustus 2012 16:46 schreef thenxero het volgende:

[..]

Gefixt, het werkt nu :D
En hoe?
pi_115467228
quote:
0s.gif Op zondag 12 augustus 2012 16:58 schreef t4rt4rus het volgende:

[..]

En hoe?
Moest gewoon nog een path aanpassen naar de goede compiler :P

PE 13 eindelijk opgelost. Vreemd genoeg duurde het 1sec om één Unlimited Int te lezen en te printen, dus ik had niet veel vertrouwen in de snelheid. Maar die 50 getallen bij elkaar optellen ging ook in ongeveer 1 sec, dus dat viel wel mee :)
pi_115467373
Met GMP duurt het 0.003s om op te lossen.
pi_115467897
quote:
0s.gif Op zondag 12 augustus 2012 17:04 schreef t4rt4rus het volgende:
Met GMP duurt het 0.003s om op te lossen.
Je kan het ook niet zo vergelijken, want er zit ook nog allerlei code van mezelf omheen om die dingen in te lezen. Kan best zijn dat het daar vandaan komt.

100! berekent ie ook binnen 50ms op mijn langzame netbookje

[ Bericht 5% gewijzigd door thenxero op 12-08-2012 17:28:28 ]
pi_115468907
Opdracht 25 is ook leuk :)
1000 digits :P
pi_115469779
Nu opdracht 24 doen zonder programmeren, moet lukken.

edit:
het werkt niet echt... :(

a b c d e f g h i j
10! mogelijkheden om dit te sorteren
Als plek 1 vast staat zijn er nog 9! mogelijkheden om te sorteren, etc.

De miljoenste permutatie is dan
k * 10! + l * 9! + m * 8! + n * 7! + o * 6! + p * 5! + q * 4! + r * 3! + s * 2! + t * 1!

waarin k het k'ste element is uit de gesorteerde set van getallen 10 getallen;
waarin l het l'ste element is uit de gesorteerde set van de overgebleven 9 getallen;
etc.

Of heb ik dit fout?

[ Bericht 39% gewijzigd door t4rt4rus op 12-08-2012 19:02:23 ]
pi_115471698
quote:
0s.gif Op zondag 12 augustus 2012 18:06 schreef t4rt4rus het volgende:
Nu opdracht 24 doen zonder programmeren, moet lukken.

edit:
het werkt niet echt... :(

a b c d e f g h i j
10! mogelijkheden om dit te sorteren
Als plek 1 vast staat zijn er nog 9! mogelijkheden om te sorteren, etc.

De miljoenste permutatie is dan
k * 3628800 + l * 362880 + m * 40320 + n * 5040 + o * 720 + p * 120 + q * 24 + r * 6 + s * 2 + t * 1
waarin k het k'ste element is uit de gesorteerde set van getallen 10 getallen;
waarin l het l'ste element is uit de gesorteerde set van de overgebleven 9 getallen;
etc.

Of heb ik dit fout?
Ik snap de vraag niet eens want ze zeggen niet hoe je de elementen moet permuteren
pi_115471733
quote:
0s.gif Op zondag 12 augustus 2012 18:57 schreef thenxero het volgende:

[..]

Ik snap de vraag niet eens want ze zeggen niet hoe je de elementen moet permuteren
Staat er toch gewoon?
quote:
If all of the permutations are listed numerically or alphabetically, we call it lexicographic order.
What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
pi_115471877
quote:
0s.gif Op zondag 12 augustus 2012 18:59 schreef t4rt4rus het volgende:

[..]

Staat er toch gewoon?

[..]

Na wat gegoogle begrijp ik dat je ze moet sorteren op grootte, maar dat haal ik niet echt uit de vraag
pi_115472992
quote:
0s.gif Op zondag 12 augustus 2012 19:03 schreef thenxero het volgende:

[..]

Na wat gegoogle begrijp ik dat je ze moet sorteren op grootte, maar dat haal ik niet echt uit de vraag
Het staat er gewoon...

quote:
If all of the permutations are listed numerically or alphabetically, we call it lexicographic order.
edit:
En zelf nog een voorbeeld
quote:
The lexicographic permutations of 0, 1 and 2 are:

012 021 102 120 201 210


[ Bericht 13% gewijzigd door t4rt4rus op 12-08-2012 19:39:07 ]
pi_115473384
quote:
0s.gif Op zondag 12 augustus 2012 19:33 schreef t4rt4rus het volgende:

[..]

Het staat er gewoon...

[..]

edit:
En zelf nog een voorbeeld

[..]

Ja, list numerically lees ik gewoon als numerieke waarden in een lijst zetten. Maar dat kan ook aan mij liggen.
quote:
0s.gif Op zondag 12 augustus 2012 18:06 schreef t4rt4rus het volgende:
Nu opdracht 24 doen zonder programmeren, moet lukken.

edit:
het werkt niet echt... :(

a b c d e f g h i j
10! mogelijkheden om dit te sorteren
Als plek 1 vast staat zijn er nog 9! mogelijkheden om te sorteren, etc.

De miljoenste permutatie is dan
k * 10! + l * 9! + m * 8! + n * 7! + o * 6! + p * 5! + q * 4! + r * 3! + s * 2! + t * 1!

waarin k het k'ste element is uit de gesorteerde set van getallen 10 getallen;
waarin l het l'ste element is uit de gesorteerde set van de overgebleven 9 getallen;
etc.

Of heb ik dit fout?

Volgens mij klopt dat wel


Je idee klopt wel maar volgens mij moet je met 9! beginnen... dus k * 9! + ... etc
pi_115473808
quote:
0s.gif Op zondag 12 augustus 2012 19:43 schreef thenxero het volgende:

[..]

Ja, list numerically lees ik gewoon als numerieke waarden in een lijst zetten. Maar dat kan ook aan mij liggen.
Nee list numerically is numeriek sorteren dus op grootte. ;)

quote:

Volgens mij klopt dat wel


Je idee klopt wel maar volgens mij moet je met 9! beginnen... dus k * 9! + ... etc
Je kan wel eens gelijk hebben ja :P

Dan wordt het dus
11M = k*9! + l*8! + m*7! + n*6! + o*5! + p*4! + q*3! + r*2! + s*1!
=>
11M = 2*9! + 6*8! + 6*7! + 2*6! + 5*5! + 1*4! + 2*3! + 2*2! + 0*1!

Dus dan lukt het wel... Ok nu zeg ik verder niks meer. :P

[ Bericht 5% gewijzigd door t4rt4rus op 12-08-2012 19:57:55 ]
pi_115474172
En dit klopt ook weer niet :S
pi_115474279
quote:
0s.gif Op zondag 12 augustus 2012 20:00 schreef t4rt4rus het volgende:
En dit klopt ook weer niet :S
Hmm, ik zal er even naar gaan kijken
pi_115475188
Ik snap al waar het fout gaat. Er zijn meerdere manieren om je coëfficiënten te bepalen. Je moet dus nog controleren of je een coëfficiënt kan veranderen door de volgende coëfficiënten te vergroten. Als dat kan moet je het ook zo laten staan.
pi_115476240
wacht eens even,
0 is de eerste permutatie...

Dus we moeten dit oplossen:
1999999 = k*9! + l*8! + m*7! + n*6! + o*5! + p*4! + q*3! + r*2! + s*1!

En dan kom je wel op de goede uit. ;)
pi_115476506
quote:
0s.gif Op zondag 12 augustus 2012 20:49 schreef t4rt4rus het volgende:
wacht eens even,
0 is de eerste permutatie...

Dus we moeten dit oplossen:
[ code verwijderd ]

En dan kom je wel op de goede uit. ;)
Ik zag het ja. Omdat je niet het aantal permutaties telt, maar het aantal keer dat je de originele permutatie gepermuteerd hebt. Samen met mijn vorige opmerking kom je goed uit.
pi_115476708
quote:
0s.gif Op zondag 12 augustus 2012 20:54 schreef thenxero het volgende:

[..]

Ik zag het ja. Omdat je niet het aantal permutaties telt, maar het aantal keer dat je de originele permutatie gepermuteerd hebt. Samen met mijn vorige opmerking kom je goed uit.
We tellen wel het aantal permutaties ;)
999 999 is de miljoenste permutatie van de set {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
pi_115478016
Precies. Heb nu ook met de class van GS42 opgave 20 opgelost. In 0.2 seconde dus ik vind die klasse erg goed werken.
pi_115489831
quote:
0s.gif Op zondag 12 augustus 2012 15:31 schreef t4rt4rus het volgende:
w00t OP is al een stuk beter, goed gedaan GS42!

Ik kijk later zelf wel even wat we kunnen toevoegen.
Ha, dank je. Natuurlijk was het ook niet overdreven moeilijk om verbeteringen aan te brengen. ;) Leuk als jullie ook iets toevoegen, het is nog lang niet compleet.

quote:
0s.gif Op zondag 12 augustus 2012 17:01 schreef thenxero het volgende:

PE 13 eindelijk opgelost. Vreemd genoeg duurde het 1sec om één Unlimited Int te lezen en te printen, dus ik had niet veel vertrouwen in de snelheid. Maar die 50 getallen bij elkaar optellen ging ook in ongeveer 1 sec, dus dat viel wel mee :)
Daar kan je best gelijk in hebben. Ik moest kiezen tussen snelle in- en output of snel rekenen. Hier heb ik dus voor gekozen. :) Compileren met -O2 of -O3 helpt wel flink.

quote:
0s.gif Op zondag 12 augustus 2012 17:04 schreef t4rt4rus het volgende:
Met GMP duurt het 0.003s om op te lossen.
Ik heb ook geen schijn van kans tegen GMP. :'( Op een korte benchmark die ik gedaan heb, was GMP zo 50 keer sneller op puur rekenwerk en ik ben bang dat dat oploopt naarmate de getallen groter worden. Op de in- en output wil ik niet eens weten hoe veel sneller ze zijn. :) Maar sneller zijn dan GMP was gelukkig ook niet mijn doel.

quote:
0s.gif Op zondag 12 augustus 2012 19:03 schreef thenxero het volgende:

Na wat gegoogle begrijp ik dat je ze moet sorteren op grootte, maar dat haal ik niet echt uit de vraag
Als je dat in C++ wilt doen, gaat dat trouwens heel mooi met std::next_permuation. Die produceert permutaties in oplopende volgorde. Opgave 24 kan je zo in 3 (korte) regels code doen.

quote:
0s.gif Op zondag 12 augustus 2012 21:23 schreef thenxero het volgende:
Precies. Heb nu ook met de class van GS42 opgave 20 opgelost. In 0.2 seconde dus ik vind die klasse erg goed werken.
Blij dat het nu goed werkt. Dit is precies het soort doel dat ik voor ogen had: grote getallen en gebruiksgemak waar geen extreme snelheid nodig is. Dank je wel voor het testen. :)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115495012
quote:
0s.gif Op zondag 12 augustus 2012 23:40 schreef GS42 het volgende:
Blij dat het nu goed werkt. Dit is precies het soort doel dat ik voor ogen had: grote getallen en gebruiksgemak waar geen extreme snelheid nodig is. Dank je wel voor het testen. :)
Ja, erg bedankt voor deze gebruiksvriendelijke class :) .

Ik vrees dat ik een bug heb gevonden. Ik probeer het eerste Fibonacci getal te vinden die uit minstens 1000 cijfers bestaat. Dat betekent dat het getal groter dan of gelijk aan 10^999 is. Dus ik ga getallen vergelijken met 10000.........000 (999 nullen). Ik krijg geen error maar ook geen output (alleen return 0).
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
pi_115495799
C++ kan natuurlijk geen getallen zoals 100000000....0000 parsen.
pi_115495839
lol dat gaat ook niet werken xero :P
Misschien in een string zetten?
pi_115496000
Hierboven staat zowel de oorzaak als de oplossing. :) C++ kan niet zulke grote getallen verwerken (vandaar de problemen om met grote getallen te rekenen) en daarom moeten zulke getallen in string-vorm aangeleverd worden.

1Unlimited::Int k("10000000");

Initialiseert k vanuit een string.

Trouwens: je zou ook een compiler-waarschuwing moeten krijgen als je jouw code probeert te compileren. Iets als "integer constant too large for its type" ofzo. Een compiler-waarschuwing is vrijwel altijd een waarschuwing dat er iets niet helemaal klopt in de code en moet dus weggewerkt worden.

[ Bericht 14% gewijzigd door GS42 op 13-08-2012 00:51:07 ]
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115498545
quote:
0s.gif Op maandag 13 augustus 2012 00:45 schreef GS42 het volgende:
Hierboven staat zowel de oorzaak als de oplossing. :) C++ kan niet zulke grote getallen verwerken (vandaar de problemen om met grote getallen te rekenen) en daarom moeten zulke getallen in string-vorm aangeleverd worden.
[ code verwijderd ]

Initialiseert k vanuit een string.

Trouwens: je zou ook een compiler-waarschuwing moeten krijgen als je jouw code probeert te compileren. Iets als "integer constant too large for its type" ofzo. Een compiler-waarschuwing is vrijwel altijd een waarschuwing dat er iets niet helemaal klopt in de code en moet dus weggewerkt worden.
Ik krijg vreemd genoeg geen compiler waarschuwing. Als naïeve newb dacht ik dat je bij Unlimited::int een ongelimiteerde integer kon initialiseren. Bedankt!
pi_115500455
tvp voor ProjectEuler. Ik heb de eerste 26 al :7 /opschepmodus
pi_115500675
quote:
2s.gif Op maandag 13 augustus 2012 02:44 schreef kutkloon7 het volgende:
tvp voor ProjectEuler. Ik heb de eerste 26 al :7 /opschepmodus
Morgen Vandaag ben ik hopelijk ook zo ver.

Misschien moeten we maar een apart PE draadje maken(?)
pi_115505531
Een goed idee. Ik ben ook begonnen met PE, maar dan met Python 3.
Some people should be around your entire life; others should just make an appearance.
pi_115506035
quote:
0s.gif Op maandag 13 augustus 2012 01:27 schreef thenxero het volgende:

[..]

Ik krijg vreemd genoeg geen compiler waarschuwing. Als naïeve newb dacht ik dat je bij Unlimited::int een ongelimiteerde integer kon initialiseren. Bedankt!
Gebruik `-Wall -Wextra'.
Ik compile het meeste met `-O3 -std=c++11 -Wall -Wextra'

[ Bericht 5% gewijzigd door t4rt4rus op 13-08-2012 11:48:31 ]
pi_115506413
Al het gepraat over Project Euler kan nu hier, dan blijft het wel zo overzichtelijk en kunnen andere talen ook meedoen.
pi_115507274
quote:
0s.gif Op maandag 13 augustus 2012 01:27 schreef thenxero het volgende:

Als naïeve newb dacht ik dat je bij Unlimited::int een ongelimiteerde integer kon initialiseren. Bedankt!
Opzich geen rare gedachte. :) Goede tip, ik zal het wel ergens in de documentatie opnemen.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115509169
quote:
0s.gif Op maandag 13 augustus 2012 12:20 schreef GS42 het volgende:

[..]

Opzich geen rare gedachte. :) Goede tip, ik zal het wel ergens in de documentatie opnemen.
Ik heb het trouwens opgelost door het te initialiseren als een klein getal, en dan met een loop steeds keer 10 doen totdat je genoeg nullen hebt. Dat werkt wel gewoon.
pi_115509352
quote:
0s.gif Op maandag 13 augustus 2012 13:19 schreef thenxero het volgende:

Ik heb het trouwens opgelost door het te initialiseren als een klein getal, en dan met een loop steeds keer 10 doen totdat je genoeg nullen hebt. Dat werkt wel gewoon.
Ook een prima oplossing natuurlijk. Iets als Int x(10); x.pow(999); geeft je ook het juiste getal.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115606314
quote:
7s.gif Op maandag 13 augustus 2012 03:00 schreef thenxero het volgende:

[..]

Morgen Vandaag ben ik hopelijk ook zo ver.

Misschien moeten we maar een apart PE draadje maken(?)
Goed idee, ik zie dat je dat inmiddels al gedaan hebt ;)
pi_115656114
Is er een handige manier om twee waardes om te wisselen in C++ zonder dat je een derde variable aanmaakt? Bijvoorbeeld: Stel dat a=1, en b=2. Dan wil ik dat a=2 en b=1. Nu zou ik dat doen met zoiets als:

1
2
3
4
5
6
7
int a,b,c;
a=1;
b=2;

c=b;
b=a;
a=c;
Maar dan heb je dus extra geheugen nodig voor die c, en ik vroeg me dus af of dat ook beter kan.
pi_115656279
1
2
3
b = a+b
a = b-a
b = b-a
pi_115656673
Natuurlijk, ik zat eigenlijk te denken aan bepaalde libraries :')
pi_115657822
std::swap, maar soms heb je geen andere keus (maar dat regelt std::swap dus achter de schermen).

edit: voor primitive datatypes gaat dit niets uitmaken, het is vooral handig met types die ook pointers naar andere objecten bevatten. Een kleine optimisatie is je c in die code als const te declareren, dan houdt hij em zeker in CPU registers. Of de berekening met meer flops uitvoeren zoals thabit doet als je echt geen plek hebt.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115658292
Dit soort truuks lijken me niet hetgene om wakker van te liggen overigens. Vaak zitten ze al in std geoptimaliseerd, en anders wordt je code er alleen maar onleesbaarder van.
pi_115658786
Mwah, dat van const is mijns inziens toch erg handig zoveel mogelijk goed te doen, in alle situaties.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115659665
quote:
0s.gif Op donderdag 16 augustus 2012 21:43 schreef thabit het volgende:
Dit soort truuks lijken me niet hetgene om wakker van te liggen overigens. Vaak zitten ze al in std geoptimaliseerd, en anders wordt je code er alleen maar onleesbaarder van.
Die truc die jij postte of die const?

Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
pi_115660118
quote:
0s.gif Op donderdag 16 augustus 2012 22:09 schreef thenxero het volgende:

[..]

Die truc die jij postte of die const?

Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
Ik doelde op de truc die ik zelf postte; const is wel goed om aan te leren.

Goed random getallen produceren, dat is een vakgebied op zich. Ik zou vooral googlen naar wat mensen ermee gedaan hebben.
pi_115665657
quote:
0s.gif Op donderdag 16 augustus 2012 22:09 schreef thenxero het volgende:

[..]

Die truc die jij postte of die const?

Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
/dev/random ...
pi_115665784
quote:
0s.gif Op donderdag 16 augustus 2012 20:54 schreef thenxero het volgende:
Is er een handige manier om twee waardes om te wisselen in C++ zonder dat je een derde variable aanmaakt? Bijvoorbeeld: Stel dat a=1, en b=2. Dan wil ik dat a=2 en b=1. Nu zou ik dat doen met zoiets als:
[ code verwijderd ]

Maar dan heb je dus extra geheugen nodig voor die c, en ik vroeg me dus af of dat ook beter kan.
xchg rax, rbx :)
pi_115665844
quote:
0s.gif Op vrijdag 17 augustus 2012 00:13 schreef t4rt4rus het volgende:

[..]

/dev/random ...
quote:
0s.gif Op vrijdag 17 augustus 2012 00:16 schreef t4rt4rus het volgende:

[..]

xchg rax, rbx :)
?
pi_115666770
quote:
0s.gif Op vrijdag 17 augustus 2012 00:17 schreef thenxero het volgende:

[..]

[..]

?
/dev/random is random nummer generator in linux.
xchg rax, rdx is swappen tussen rax en rbx.
pi_115667047
oke
pi_115672584
quote:
0s.gif Op vrijdag 17 augustus 2012 00:13 schreef t4rt4rus het volgende:

[..]

/dev/random ...
Is niet altijd random in de zin dat het standaard statistische tests doorstaat, en wat erger is (vanuit wetenschappelijk oogpunt) is dat de gegenereerde nummers niet reproduceerbaar zijn (ook al haalt hij op gegeven moment wel een statistische test, het heeft geen betekenis).

quote:
0s.gif Op vrijdag 17 augustus 2012 00:46 schreef t4rt4rus het volgende:

[..]

/dev/random is random nummer generator in linux.
xchg rax, rdx is swappen tussen rax en rbx.
xchg is typisch langzamer dan gewone moves/stores. Het is schijnbaar handig om semaforen te implementeren (geen ervaring mee), maar anders spaart het wederom 1 register uit in ruil voor meer cycles voor de swap; i.e. geheugen vs snelheid, de aloude tradeoff.
Indien standaard C gebruikt wordt met correcte consts, dan gaat dit allemaal automatisch. Mocht xchg dus wel even snel zijn op je architectuur, of gebruikt jouw code echt al alle registers, dan kiest de compiler uit zichzelf xchg.

edit: const temporary in C, std::swap in C++; de standaard STD implementatie doet dit zelf al goed.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115735563
quote:
0s.gif Op donderdag 16 augustus 2012 22:19 schreef thabit het volgende:

[..]
Goed random getallen produceren, dat is een vakgebied op zich. Ik zou vooral googlen naar wat mensen ermee gedaan hebben.
Ik heb er even mee zitten kloten, maar het is toch wel een heel gedoe om dit in C++ voor elkaar te krijgen. Toen zag ik opeens dat er prima random integer generators op internet zijn. Ik genereer daar in een mum van tijd 100,000 random ints. Die plak ik in een textbestandje en lees ik dan in C++ in een array. So far so good, maar als ik bij element 20,096 van mijn array kom, dan loopt mijn programma vast.

Toen dacht ik misschien dat mijn array gewoon niet groter kon worden dan 20,096 integers. Dat ben ik gaan testen door array[i]=i te doen voor i=0 tot i=100,000. Maar dat gaf geen problemen, dus daar zou het niet aan mogen liggen.

Als return value krijg ik 0xC0000005. Heb je enig idee waar het aan kan liggen? Dit is de code die ik gebruik (en die dus goed werkt tot de gevreesde 20,096) (random2.txt is een CSV-bestand):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void ReadInts(int randint[])
{
    char *inname = "random2.txt"; //contains random numbers 0 - 9999
    ifstream infile(inname);

    if (!infile) {
        cout << "There was a problem opening file "
             << inname
             << " for reading."
             << endl;
    }
    else cout << "Opened " << inname << " for reading." << endl;
    int k=0;
    randint[30000]; 

    string value;
    int result;
    while ( infile.good() )
    {
        getline ( infile, value, ',' );
        result=0;
        stringstream convert(value);
        if ( !(convert >> result) )
        {
            result = 0;
        }
        randint[k]=result;
        cout << "k = " << k << " en random number = " << result << endl;
        ++k;
    }

}
pi_115736479
Problem solved, had randomint verkeerd geinitialiseerd in mijn main :)
pi_115739014
Zijn er geen C(++)-voorbeelden/libraries die dat beter kunnen dan de standaardlibrary? Lijkt me toch wat makkelijker dan eerst een file moeten genereren.
pi_115740156
Klopt. Boost is volgens mij zo'n library. Maar de vorige keer dat ik een niet-standaard library probeerde te gebruiken was dat een drama :P .
pi_115742076
GSL is doorgaans wat makkelijker in gebruik.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115746730
quote:
Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
Misschien een beetje laat, maar over het algemeen is rand() een prima bron voor random getallen en alleen in geval van beveiliging kan ik me voorstellen dat je een betere random number generator wilt gebruiken.

Waarom heb je het idee dat de de getallen "niet zo random lijken"? En waarvoor wil je het gebruiken?
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115749052
Of rand() goed is hangt af van de compilercollectie. gsl_rng_rand heeft/had bijvoorbeeld een duidelijk probleem. IBM's randu-functie was schijnbaar ook niet zo'n succes. Met een beetje ongeluk kom je ze nog tegen in de praktijk.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115775211
quote:
3s.gif Op zondag 19 augustus 2012 12:14 schreef trancethrust het volgende:
GSL is doorgaans wat makkelijker in gebruik.
Meneer zit op Windows... :P
pi_115777287
quote:
0s.gif Op zondag 19 augustus 2012 15:04 schreef GS42 het volgende:

[..]

Misschien een beetje laat, maar over het algemeen is rand() een prima bron voor random getallen en alleen in geval van beveiliging kan ik me voorstellen dat je een betere random number generator wilt gebruiken.

Waarom heb je het idee dat de de getallen "niet zo random lijken"? En waarvoor wil je het gebruiken?
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.
pi_115777578
quote:
0s.gif Op maandag 20 augustus 2012 10:47 schreef t4rt4rus het volgende:

[..]

Meneer zit op Windows... :P
Dan wordt het ook moeilijker dan noodzakelijk.

quote:
0s.gif Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:

[..]

Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn.
...
Dat komt omdat (zelfs al gebruikt je installatie een betere RNG dan de twee die ik hierboven als voorbeeld aanhaalde), doordat rand() doorgaans een linear congruential RNG (LC-RNG) is. Als ik een gok doe dan ben je bezig met monte-carlo methoden, en voor zulke punt-gebaseerde methodes kun je bewijzen dat voor elke LC-RNG altijd een dimensie d is waarvoor de gegenereerde punten rond vlakken in die d-dimensionale ruimte clusteren.
De oplossing is inderdaad om een niet LC-RNG te gebruiken (je kan ook de code van de wiki-pagina over de Mersenne-twister testen), of je kiest simpelweg een LC-RNG die het wel goed doet voor jouw d.

Ten tweede, als je met `heel snel' richting high-performance computing wil gaan, raad ik je ten sterkste aan toch op linux verder te gaan. Je krijgt simpelweg betere performance (zeker wanneer je multithreaded gaat) en in de industrie zelf (incl. de academici overigens) is er nagenoeg niemand die serieus in Windows werkt.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115778638
Oke, ik zal later naar Linux gaan kijken. Voor nu is het al een hele stap vooruit in de performance van Matlab naar C++. Voor nu voldoet mijn gedownloadde txt bestand met random numbers, en het werkt al een stuk sneller dan gehoopt, maar het is inderdaad niet ideaal.
pi_115779183
quote:
0s.gif Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:

[..]

Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.
Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.

Verder klopt het dat je voor serieuze taken beter een aparte library kan gebruiken, maar dan moet je wel erg serieus zijn. ;) Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
"Slechts diegene mag slopen die iets beters kan bouwen."
  dinsdag 21 augustus 2012 @ 19:08:13 #67
189216 netolk
maar dan andersom
pi_115833350
quote:
0s.gif Op maandag 20 augustus 2012 12:59 schreef GS42 het volgende:

[..]

Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.

Verder klopt het dat je voor serieuze taken beter een aparte library kan gebruiken, maar dan moet je wel erg serieus zijn. ;) Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
ik zou sowieso zo vaak mogelijk de std functies gebruiken ipv. zelf maken of uit externe libs halen
Beware of the Raping Zebra's
pi_116017028
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:

1
2
3
4
5
6
7
8
9
2 2
3 3
4 2 2
5 5
6 2 3
7 7
8 2 2 2
9 3 3
10 2 5
etcetera.

Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
pi_116017177
quote:
0s.gif Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]

etcetera.

Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
Waarom geen vector gebruiken?
pi_116017883
quote:
0s.gif Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]

etcetera.

Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:

Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116019780
quote:
0s.gif Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:

[..]

Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:

Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
Ik zou std::getline gebruiken en niet std::basic_istream::getline.
http://en.cppreference.com/w/cpp/string/basic_string/getline
pi_116019868
quote:
0s.gif Op zondag 26 augustus 2012 13:03 schreef t4rt4rus het volgende:

[..]

Ik zou std::getline gebruiken en niet std::basic_istream::getline.
http://en.cppreference.com/w/cpp/string/basic_string/getline
Dan zijn we het eens: jouw getline is dezelfde als de mijne. ;)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116020201
quote:
0s.gif Op zondag 26 augustus 2012 13:06 schreef GS42 het volgende:

[..]

Dan zijn we het eens: jouw getline is dezelfde als de mijne. ;)
Als ik op die link van je klik kom ik toch ergens anders uit.

edit:

ohnee toch niet :P
pi_116020349
De reden dat ik het met een array wilde doen is omdat ik dezelfde 'layout' wil als in dat textbestand: een 2-dimensionaal ding. Met vector heb je altijd 1 dimensie voor zover ik weet.
pi_116020443
quote:
0s.gif Op zondag 26 augustus 2012 13:20 schreef thenxero het volgende:
De reden dat ik het met een array wilde doen is omdat ik dezelfde 'layout' wil als in dat textbestand: een 2-dimensionaal ding. Met vector heb je altijd 1 dimensie voor zover ik weet.
1std::vector< std::vector<unsigned> >

Als je wilt kan het ook in een array van unsigned-pointers, maar dan moet je dynamisch alloceren en ergens de lengte van elke array opslaan om deze te kunnen gebruiken.

Oh, eventueel zou je ook een array van vectoren kunnen gebruiken, als je weet hoeveel regels je bestand heeft en dit niet verandert.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116020770
Oh okay, vector in vector kan ik wel proberen (wist niet dat dat kon).

Het probleem wat ik nog heb is dat je met getline een string krijgt die de hele regel bevat. Ik weet wel dat ik met string_naam[x] toegang krijg tot element x, maar hoe scheidt ik het best alle integers?
pi_116021090
quote:
0s.gif Op zondag 26 augustus 2012 13:32 schreef thenxero het volgende:
Oh okay, vector in vector kan ik wel proberen (wist niet dat dat kon).

Het probleem wat ik nog heb is dat je met getline een string krijgt die de hele regel bevat. Ik weet wel dat ik met string_naam[x] toegang krijg tot element x, maar hoe scheidt ik het best alle integers?
Jahoor, vrijwel alles kan in een vector. Uit mijn hoofd is alleen een (non-throwing) copy constructor vereist.

quote:
0s.gif Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:

[..]

Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
Had je problemen met de istringstream methode? Volgens mij vraag je namelijk naar bovenstaande, maar misschien was ik onduidelijk of snap ik je vraag niet.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116021306
quote:
0s.gif Op zondag 26 augustus 2012 13:40 schreef GS42 het volgende:
[..]

Had je problemen met de istringstream methode? Volgens mij vraag je namelijk naar bovenstaande, maar misschien was ik onduidelijk of snap ik je vraag niet.
Ja klopt, ik weet niet hoe dat werkt. Een korte voorbeeldcode zou wel fijn zijn.
pi_116021733
quote:
0s.gif Op zondag 26 augustus 2012 13:46 schreef thenxero het volgende:

[..]

Ja klopt, ik weet niet hoe dat werkt. Een korte voorbeeldcode zou wel fijn zijn.
Nou, okay dan. ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string> // for std::string, std::getline
#include <fstream> // for std::ifstream
#include <sstream> // for std::istringstream

int main() {

    // open file
    std::ifstream file("input.txt");

    // read file per line
    std::string line;
    while (std::getline(file, line)) {
        // now [line] contains a line from input.txt
        
        // create istringstream filled with [line]
        std::istringstream iss(line);
        
        // extract all numbers from [iss]
        unsigned temp;
        while (iss >> temp)
            std::cout << temp << ' ';

        std::cout << '\n';
    }
}

Dit moet op jouw bestandsformaat werken. De truc zit in de istringstream: deze neemt een string en doet zich daarna voor als istream. Hierdoor kan je uit het object lezen alsof het een bestand is. De istringstream en ostringstream (doet het tegenovergestelde) zijn vrij nuttig en het is een goed idee je er eens in te verdiepen.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116022135
Bedankt! Weet je misschien een site waar dit allemaal helder uitgelegd wordt? Er zijn zoveel dingen... istream ifstream ofstream ostream getline cin cout << >> stringstream dat ik de bomen door het bos niet meer zie.

En wat betekent 'unsigned temp' precies? Ik weet wel dat je unsigned kan gebruiken in combinatie met int, bijvoorbeeld 'unsigned int'. Maar wat als er geen type na unsigned komt?
pi_116022395
quote:
0s.gif Op zondag 26 augustus 2012 14:07 schreef thenxero het volgende:
Bedankt! Weet je misschien een site waar dit allemaal helder uitgelegd wordt? Er zijn zoveel dingen... istream ifstream ofstream ostream getline cin cout << >> stringstream dat ik de bomen door het bos niet meer zie.
In de OP (hebben jullie 'em al wat uitgebreid?) staat onder andere een link naar de C++ Annotations. Volgens mij is deze pagina wel nuttig. Het is geen simpele pagina, maar dan heb je wel gelijk het volledige overzicht.

quote:
En wat betekent 'unsigned temp' precies? Ik weet wel dat je unsigned kan gebruiken in combinatie met int, bijvoorbeeld 'unsigned int'. Maar wat als er geen type na unsigned komt?
'unsigned' is hetzelfde als 'unsigned int' :P
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116022795
Het ziet er verschrikkelijk uit, maar dat zal ik maar eens gaan doorlezen dan.
pi_116023003
Als ik een class C aanmaak, implementeer ik ook meteen een functie
1std::ostream& operator<<(std::ostream&, const C&);
Handig voor testen en debuggen! Met std::cout kun je je object op het scherm zetten, en met stringstreams kun je je object in een string omzetten, mocht dat nodig zijn.
pi_116023561
quote:
14s.gif Op zondag 26 augustus 2012 14:22 schreef thenxero het volgende:
Het ziet er verschrikkelijk uit, maar dat zal ik maar eens gaan doorlezen dan.
Wat ziet er verschrikkelijk uit?
pi_116023866
quote:
0s.gif Op zondag 26 augustus 2012 14:39 schreef t4rt4rus het volgende:

[..]

Wat ziet er verschrikkelijk uit?
Die pagina met alle streams en zo. Ik vind het in het algemeen leuk om C++ te leren, maar daar zie ik tegenop. Noodzakelijk kwaad.
pi_116023919
quote:
0s.gif Op zondag 26 augustus 2012 14:46 schreef thenxero het volgende:

[..]

Die pagina met alle streams en zo. Ik vind het in het algemeen leuk om C++ te leren, maar daar zie ik tegenop. Noodzakelijk kwaad.
Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
pi_116023980
quote:
0s.gif Op zondag 26 augustus 2012 14:47 schreef t4rt4rus het volgende:

[..]

Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
Ja, het is ook waar ik naar op zoek was. To the point en overzichtelijk. En er zijn ook plaatjes :) . Maar leuk is anders...
pi_116024375
quote:
0s.gif Op zondag 26 augustus 2012 14:47 schreef t4rt4rus het volgende:

[..]

Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
Ik vind het een vreselijke pagina. Het staat vol met grijze informatie, tekst en voorbeeldcode staat door elkaar en het document is gigantisch. Daarnaast worden hoofd- en bijzaken niet goed gescheiden waardoor je snel in de details van error- of formatting flags zit te kijken terwijl dit niet erg belangrijk is om te kunnen werken met streams.

Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116024784
quote:
0s.gif Op zondag 26 augustus 2012 14:57 schreef GS42 het volgende:

[..]

Ik vind het een vreselijke pagina. Het staat vol met grijze informatie, tekst en voorbeeldcode staat door elkaar en het document is gigantisch. Daarnaast worden hoofd- en bijzaken niet goed gescheiden waardoor je snel in de details van error- of formatting flags zit te kijken terwijl dit niet erg belangrijk is om te kunnen werken met streams.

Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
Gelukkig ligt het niet aan mij :7 .
pi_116028081
quote:
0s.gif Op zondag 26 augustus 2012 14:57 schreef GS42 het volgende:

[..]
Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
Het is inderdaad meer een documentatie.
Ik vind dat wel lekker lezen :)

Maar misschien kan code wel in een box, is wat makkelijker lezen.
Is dat in de gedrukte versie ook niet het geval?
pi_116535457
Aah mooi dat hier ook iets staat over C++. Ik heb een heleboel vragen:

Mijn vraag gaat hierover:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include <conio.h>
int main(void)
{
float getal, som=0, gemiddelde;
int teller=0;
printf("Voer 10 getallen in (sluit af met een negatief getal) -> ");
scanf("%f",&getal);
while(getal > 0)
   {
      som+=getal;
      scanf("%f",&getal);
      teller++;
   }
gemiddelde = som / teller;
printf("Het gemiddelde van de %d getallen is = %.2f",teller,gemiddelde);
getchar();   
getchar();
return 0;
}
Tussen elk getal zet je een spatie. De som is dus gelijk aan een getal + 1? Dus als je een 1 invoert wordt de som gelijk aan 2? De teller krijgt er steeds +1 bij zolang er getallen > 0 ingevoerd worden. Dat snap ik.

Stel ik voer 1 9 8 5 -4 in.

som = getal + 1
som = 1 + 1
teller = 1

gemiddelde = (1 + 9 + 8 + 5 + 1 + 1 +1 + 1)/(1+1+1+1) = Ik kom er niet uit. Iemand die me kan helpen?



Druk het laatste getal en het voorlaatste getal (in die volgorde) af van een rij

Hoe moet ik dit aanpakken?
Ik heb nu dit programma:

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
#include <conio.h>
int main(void)
{
 float getallen;
printf("voer getallen in");
scanf("%d", getallen);

getchar();   
getchar();
return 0;
}

Voor woorden is dit een eitje: gwn char string[5], bij iemand die 'Joop" intikt kun je zo elke letter van het woord benoemen.
Er wordt in ieder geval een '%f-file' van ieder getal gemaakt. Hoe kan ik deze getallen onderschijden? De float bestaat uit een reeks getallen, bv: 6 7 8 1. Ik kan hem getal voor getal in laten lezen, maar ik moet ieder getal een benaming geven voor deze opdracht. Kan iemand me verder helpen?

[ Bericht 22% gewijzigd door dfdsdfds op 08-09-2012 15:48:16 ]
pi_116535567
Kun je je code in [code]-tags zetten? Dat leest wat prettiger.
pi_116535731
quote:
0s.gif Op zaterdag 8 september 2012 15:41 schreef dfdsdfds het volgende:
gemiddelde = (1 + 9 + 8 + 5 + 1 + 1 +1 + 1)/(1+1+1+1) = Ik kom er niet uit. Iemand die me kan helpen?
Dit moet je eerst naar een float (of double) casten, anders voert-ie een integer deling uit en dat is gewoon afgerond naar beneden.
pi_116535838
quote:
0s.gif Op zaterdag 8 september 2012 15:41 schreef dfdsdfds het volgende:
De float bestaat uit een reeks getallen, bv: 6 7 8 1. Ik kan hem getal voor getal in laten lezen, maar ik moet ieder getal een benaming geven voor deze opdracht. Kan iemand me verder helpen?
Een float is 1 enkel getal, en geen reeks getallen. Je moet de getallen in een array (of beter: een vector) van floats stoppen.
pi_116535865
Bij dit programma moet een naam 5 keer in 4 rijen afgedrukt worden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
#include <conio.h>
int main(void)
{
    int r = 0;
    int a = 0;
    char v_naam[25];
    printf("Voer uw voornaam in -> ");
    scanf("%s", &v_naam);
    
    for (a=1; a<21; a++)

    {
    printf("%s\t", v_naam);
    if (a % 5 == 0)
    {
        printf("\n"); 
    }
    }

    getchar();
    getchar();
    return 0;
}

Wat betekent die
1if (a % 5 == 0)
in godsnaam :? Na 5 'a's' moet er een witregel geplaatst worden. Zonder deze regel werden er gwn 20 namen onder elkaar gezet. Het == teken betekent 'is gelijk aan'. Als ik voor a 5 invoer staat er dus
1if (5 % 5 == 0)
. Wat betekent de % hier?
pi_116536064
quote:
0s.gif Op zaterdag 8 september 2012 15:55 schreef thabit het volgende:

[..]

Een float is 1 enkel getal, en geen reeks getallen. Je moet de getallen in een array (of beter: een vector) van floats stoppen.
Waarom staat er dan maar een keer %f als ik 5 6 4 3 invoer? Dan wordt er toch 5 6 4 3 in de float gestopt en word de float getal voor getal verwerkt?

1
2
3
4
5
6
7
8
9
printf("Voer 10 getallen in (sluit af met een negatief getal) -> ");
scanf("%f",&getal);
while(getal > 0)
   {
      som+=getal;
      scanf("%f",&getal);
      teller++;
   }
gemiddelde = som / teller;
Stel ik voer 1 4 5 -1 in. Dan scant hij toch al deze 4 getallen? Ik zie toch maar een keer %f staan? Eerst wordt het eerste getal gescand. Het getal is >0 dus wordt het in de while loop gepropt. Vervolgens word er gezegd dat de soms gelijk is aan het getal +1 (waarom dat?), het getal wordt gescand en de teller krijgt er +1 bij. Dit gebeurd net zolang totdat er een negatief getal komt. Hoe is de totaal som tot stand gekomen? Heeft hij nu alle sommen bij elkaar opgeteld of zo?
pi_116536379
quote:
0s.gif Op zaterdag 8 september 2012 16:03 schreef dfdsdfds het volgende:

[..]

Waarom staat er dan maar een keer %f als ik 5 6 4 3 invoer? Dan wordt er toch 5 6 4 3 in de float gestopt en word de float getal voor getal verwerkt?
[ code verwijderd ]

Stel ik voer 1 4 5 -1 in. Dan scant hij toch al deze 4 getallen? Ik zie toch maar een keer %f staan? Eerst wordt het eerste getal gescand. Het getal is >0 dus wordt het in de while loop gepropt. Vervolgens word er gezegd dat de soms gelijk is aan het getal +1 (waarom dat?), het getal wordt gescand en de teller krijgt er +1 bij. Dit gebeurd net zolang totdat er een negatief getal komt. Hoe is de totaal som tot stand gekomen? Heeft hij nu alle sommen bij elkaar opgeteld of zo?
Ik weet niet precies hoe scanf werkt, je kan beter de functionaliteit uit iostream gebruiken.
pi_116536394
quote:
0s.gif Op zaterdag 8 september 2012 15:56 schreef dfdsdfds het volgende:
Wat betekent de % hier?
Rest bij deling.
pi_116536710
quote:
0s.gif Op zaterdag 8 september 2012 15:41 schreef dfdsdfds het volgende:
Aah mooi dat hier ook iets staat over C++. Ik heb een heleboel vragen:
Ten eerste: waarom probeer je het te doen? Het lijkt op of een opgave uit een leerboek of een huiswerkopdracht. Iets meer context is handig.

Als het uit een leerboek is: hoe oud is je boek? Je gebruikt conio.h en int main(void) waardoor ik een beetje het idee heb weer in de jaren '80 te zitten. :P En als je boek werkelijk over C++ gaat, doe je er beter aan weg te gooien. Als je boek over C gaat, kan je er misschien wel iets mee.

Dat is namelijk het tweede punt: als je C++ code probeert te schrijven, kan je beter helemaal overnieuw beginnen: het gebruik van printf en scanf is een doodszonde. Beter kan je het vanaf het begin goed leren. (Als je echter een C programma probeert te schrijven, is het prima.)

En je lijkt nogal wat basisconcepten niet duidelijk te hebben, zoals wat er opgeslagen wordt in een fundamenteel type en wat de operatoren doen. Het helpt om hierover te lezen voordat je begint te typen. :)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116537138
quote:
0s.gif Op zaterdag 8 september 2012 16:29 schreef GS42 het volgende:

[..]

Ten eerste: waarom probeer je het te doen? Het lijkt op of een opgave uit een leerboek of een huiswerkopdracht. Iets meer context is handig.

Als het uit een leerboek is: hoe oud is je boek? Je gebruikt conio.h en int main(void) waardoor ik een beetje het idee heb weer in de jaren '80 te zitten. :P En als je boek werkelijk over C++ gaat, doe je er beter aan weg te gooien. Als je boek over C gaat, kan je er misschien wel iets mee.

Dat is namelijk het tweede punt: als je C++ code probeert te schrijven, kan je beter helemaal overnieuw beginnen: het gebruik van printf en scanf is een doodszonde. Beter kan je het vanaf het begin goed leren. (Als je echter een C programma probeert te schrijven, is het prima.)

En je lijkt nogal wat basisconcepten niet duidelijk te hebben, zoals wat er opgeslagen wordt in een fundamenteel type en wat de operatoren doen. Het helpt om hierover te lezen voordat je begint te typen. :)
Ik moet voor a.s. woensdag 4 opdrachten inleveren en zit pas op 1/4 :|W Klakkeloos overnemen van anderen heeft geen zin bij dit vak, dat weet ik. Bovendien weet de docent dat snel genoeg te achterhalen dus daar ben ik niet op uit. Eerder informatie zodat ik een beetje op gang geholpen kan worden.
Die conio die je bedoelt is overbodig weet ik, maar ik laat 'm maar erbij staan.
Ik heb nog een vaag dictaat gevonden op school maar daar kom ik ook niet erg wijs uit. Weet jij een gratis betere NLse versie?
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')