programmer en cirkel i C++

Tags:    c++

Hej Udviklere

Jeg sidder her med et program eksempel fra den bog jeg sidder med i øjeblikket. Jeg spekulerede på, om det ikke var muligt at få lavet en cirkel bestående af x'er, ligesom firkanten og rektanglet i eksemplet??

Koden er som følger:
//Eksempel 18.4. Form-klasser.
#include <iostream>

class Form
{
public:
Form(){}
virtual ~Form(){}
virtual long HentAreal() = 0;
virtual long HentOmkreds()= 0;
virtual void Tegn() = 0;
private:
};

class Cirkel : public Form
{
public:
Cirkel(int radius):densRadius(radius){}
~Cirkel(){}
long HentAreal() { return 3 * densRadius * densRadius; }
long HentOmkreds() { return 9 * densRadius; }
void Tegn();
private:
int densRadius;
int densOmkreds;
};

void Cirkel::Tegn()
{
cout << "Cirkeltegningsrutine her!\\n";
}


class Rektangel : public Form
{
public:
Rektangel(int laengde, int bredde):
densLaengde(laengde), densBredde(bredde){}
virtual ~Rektangel(){}
virtual long HentAreal() { return densLaengde * densBredde; }
virtual long HentOmkreds() {return 2*densLaengde + 2*densBredde; }
virtual int HentLaengde() { return densLaengde; }
virtual int HentBredde() { return densBredde; }
virtual void Tegn();
private:
int densBredde;
int densLaengde;
};

void Rektangel::Tegn()
{
for (int i = 0; i<densLaengde; i++)
{
for (int j = 0; j<densBredde; j++)
cout << "x ";

cout << "\\n";
}
}

class Kvadrat : public Rektangel
{
public:
Kvadrat(int laengde);
Kvadrat(int laengde, int bredde);
~Kvadrat(){}
long HentOmkreds() {return 4 * HentLaengde();}
};

Kvadrat::Kvadrat(int laengde):
Rektangel(laengde,laengde)
{}

Kvadrat::Kvadrat(int laengde, int bredde):
Rektangel(laengde,bredde)
{
if (HentLaengde() != HentBredde())
cout << "Fejl, ikke et Kvadrat... et Rektangel??\\n";
}

int main()
{
int valg;
bool fSlut = false;
Form * sp;

while (1)
{
cout << "(1)Cirkel (2)Rektangel (3)Kvadrat (0)Slut: ";
cin >> valg;

switch (valg)
{
case 1:
sp = new Cirkel(5);
break;
case 2:
sp = new Rektangel(4,6);
break;
case 3:
sp = new Kvadrat(5);
break;
default:
fSlut = true;
break;
}
if (fSlut)
break;

sp->Tegn();
cout << "\\n";
}
return 0;
}

En sweater er noget børn får på, når mor fryser.

Member of TAR



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Jeg kan gode lide følgende løsning. Den gør brug af cirklens ligning, og kræver at du inkluderer <cmath> (og bruger using namespace std;). Den virker på alle platforme, men er nok ikke lige så hurtig som Bertels.

Her er funktionen:

Fold kodeboks ind/udKode 


--
Blog:
http://www.sigkill.dk/blog



Først skal du bruge en funktion til at flytte på cursoren, hvis du bruger windows kunne den se sådan ud:
Fold kodeboks ind/udKode 


Så kan du lave din tegne funktion:
Fold kodeboks ind/udKode 

Hvis du har mange punkter (stor radius) er det måske ikke nok med 100 punkter.

sin og cos kræver math.h, du skal bruge windows.h til GotoXY



Jeg kan gode lide følgende løsning. Den gør brug af cirklens ligning, og kræver at du inkluderer <cmath> (og bruger using namespace std;). Den virker på alle platforme, men er nok ikke lige så hurtig som Bertels.

Her er funktionen:

Fold kodeboks ind/udKode 


--
Blog:
http://www.sigkill.dk/blog


Tak for hjælpen begge to. Jeg brugte Bertels eksempel, for den var, som du sagde, hurtigest.

En sweater er noget børn får på, når mor fryser.

Member of TAR



t