🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #4755

Re: Oefening in C++ (schaakbord)

#4755
From: Oelewapperke
Date: Thu, 10 Jul 2003 18:27
90 lines
4149 bytes
Davy Loots wrote:

> #include <iostream.h>
> 
> int main(int argc, char* argv[])
> {
>     int k, n;
>     cout << "Geef het aantal velden : ";
>     cin >> n;
>     cout << "Geef het aantal sterretjes per vak : ";
>     cin >> k;
>     for (int i = 0; i < n; ++i)
>     {
>         for (int j = 0; j < k; ++j)
>         {
>             for (int m = 0; m < n; ++m)
>                 for (int l = 0; l < k; ++l)
>                     cout << (((i+m-n)%2)?" ":"*");
>             cout << endl;
>         }
>     }
> 
>  return 0;
> }

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: <seiPa.14411$7h.14326@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!hermes.visi.com!news-out.visi.com!petbe.visi.com!news.maxwell.syr.edu!newsfeed.vmunix.org!aotearoa.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
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>

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-10 11:27:39 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!hermes.visi.com!news-out.visi.com!petbe.visi.com!news.maxwell.syr.edu!newsfeed.vmunix.org!aotearoa.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: Oelewapperke <Oelewapperke@wol.be>
Subject: Re: Oefening in C++ (schaakbord)
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>
Lines: 90
User-Agent: KNode/0.6.1
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7Bit
Message-ID: <seiPa.14411$7h.14326@afrodite.telenet-ops.be>
Date: Thu, 10 Jul 2003 18:27:36 GMT
NNTP-Posting-Host: 213.118.140.75
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1057861656 213.118.140.75 (Thu, 10 Jul 2003 20:27:36 MET DST)
NNTP-Posting-Date: Thu, 10 Jul 2003 20:27:36 MET DST
Organization: Telenet Internet