Article View: be.comp.programming
Article #4764Re: Oefening in C++ (schaakbord)
From: Davy Loots
Date: Fri, 11 Jul 2003 15:54
Date: Fri, 11 Jul 2003 15:54
75 lines
3997 bytes
3997 bytes
Ge hebt volledig gelijk. Maar is dit niet wat hoog gegrepen voor iemand die
op bladzijde 43 van zijn eerste C++ boek zit?
Vriendelijke groenten,
Davy
"Oelewapperke" <Oelewapperke@wol.be> schreef in bericht
news:seiPa.14411$7h.14326@afrodite.telenet-ops.be...
> opmerking : de correcte code voor iostram te includen is
> <c++>
> #include <iostream>
>
> using namsepace std;
> </c++>
>
> 1 karakter per write instructie (naar de C++ libs, niet naar libc/kernel,
> ik weet het, maar het blijft 1 oproep per karakter) is crimineel
> inefficient. Verder is je programma niet goed opgesplitst (niet dat ik
> beweer dat het nodig is in dit geval, maar het is een goede gewoonte).
>
> <c++>
> void drawChessBoard(int numVelden, int numStars)
> {
> string starpart;
> string emptypart;
> string line1; // er zijn twee soorten lijnen
> string line2;
>
> starpart.reserve(numStars); // beperk de geheugenallocaties tot 1
> emptypart.reserve(numStars);
> line1.reserve(numVelden * numStars);
> line2.reserve(numVelden * numStars);
>
> for (int i = 0; i < numStars; i++)
> {
> starpart += '*';
> emptypart += ' '; // enkele aanhalingstekens roepen
de char addition op
> }
>
> for (int i = 0; i < numVelden; i++)
> {
> line1 += ( i % 2 == 0 ? starpart : emptypart);
> line2 += ( i % 2 != 0 ? starpart : emptypart);
> }
>
> for (int i = 0; i < numVelden; i++)
> {
> for (int j = 0; j < numStars; j++)
> {
> cout << ( i%2 ? line1 : line2 ) << endl;
> }
> }
> };
> </c++>
>
> (meting met "for i in 5 50 500 5000; do echo $i:; time ./chessboard $i 5 >
> /dev/null; done")
>
> numVelden numStars chessboard chessboardoptimized
> 5 5 0.000 0.000
> 50 5 0.010 0.000
> 500 5 1.100 0.010
> 5000 5 <te lang> 0.080
> 50000 5 <te lang> 0.630
>
> (dit is dus met compileroptimalisaties af op een heel modern systeem, maar
> compileroptimalisaties kunnen het probleem alleen maar uitstellen naar
> grotere aantallen op lineaire basis, terwijl deze routine exponentieel
> sneller is dan de vorige oplossing) (daarmee bedoel ik dat als je
numVelden
> verdubbeld het gegeven programma er 4x langer over doet, terwijl mijn
> versie er slechts dubbel zo lang over zal doen).
>
> Oelewapperke
Technical Details
Message-ID:
<P4BPa.888$F92.141@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-06!sn-xit-08!supernews.com!newsfeed.online.be!newsfeed.vmunix.org!aotearoa.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<be8qtj$ec3$1@reader08.wxs.nl> <3f07f2cb$0$6524$afc38c87@sisyphus.news.be.easynet.net> <be9cv4$m$1@reader08.wxs.nl> <2mYNa.9385$7h.12942@afrodite.telenet-ops.be> <seiPa.14411$7h.14326@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,c3467730e88beae5 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-07-11 08:54:30 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-06!sn-xit-08!supernews.com!newsfeed.online.be!newsfeed.vmunix.org!aotearoa.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: "Davy Loots" <davy.loots@lenaers.com.nospam> Newsgroups: be.comp.programming References: <be8qtj$ec3$1@reader08.wxs.nl> <3f07f2cb$0$6524$afc38c87@sisyphus.news.be.easynet.net> <be9cv4$m$1@reader08.wxs.nl> <2mYNa.9385$7h.12942@afrodite.telenet-ops.be> <seiPa.14411$7h.14326@afrodite.telenet-ops.be> Subject: Re: Oefening in C++ (schaakbord) Lines: 77 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4807.1700 X-MIMEOLE: Produced By Microsoft MimeOLE V5.50.4807.1700 Message-ID: <P4BPa.888$F92.141@afrodite.telenet-ops.be> Date: Fri, 11 Jul 2003 15:54:23 GMT NNTP-Posting-Host: 213.224.151.117 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1057938863 213.224.151.117 (Fri, 11 Jul 2003 17:54:23 MET DST) NNTP-Posting-Date: Fri, 11 Jul 2003 17:54:23 MET DST Organization: Telenet Internet