Article View: be.comp.programming
Article #4755Re: Oefening in C++ (schaakbord)
From: Oelewapperke
Date: Thu, 10 Jul 2003 18:27
Date: Thu, 10 Jul 2003 18:27
90 lines
4149 bytes
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-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>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