Sunteți pe pagina 1din 2

LABORATOR 5

Enunţ:
Scrieţi programul C care permite plasarea a N noduri în vârful unui poligon regulat înscris într-
un cerc de rază r.

1. Descrierea algoritmului
Determinarea modului de a plasa N noduri în vârful unui poligon regulat este ilustrată în figura
de mai jos.

Observaţii:
Pentru a calcula coordonatele lui xk, yk folosim următoarele formule:
x0 = getmaxx()/2; // determină coordonatele centrului ecranului
y0 = getmaxy()/2;
xk = r*cos(2*k*/n) + x0;
yk = -r*sin(2*k*/n) + y0;

Rezolvare:
Scrieţi programul C care permite plasarea a N noduri în vârful unui poligon regulat înscris într-
un cerc de rază r.

#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h> /* pt. functia exit din initializare_mod_grafic() */
#include <ctype.h> /* pt. functia toupper() */

#define PI 2*asin(1)
#define r 200
#define CALE "c:\\Borlandc\\BGI"

void desenare(int n)
{
double xk, yk, x0, y0;
int k;
char s[2] = {0, 0};
x0 = getmaxx()/2;
y0 = getmaxy()/2;
for(k=0; k<n; k++)
{
xk = r*cos(2*k*PI/n) + x0;
yk = -r*sin(2*k*PI/n) + y0;
setcolor(WHITE);
fillellipse(xk, yk, 20, 20);
setcolor(BLACK);
s[0] = k + 'A';
outtextxy(xk, yk, s);
}
setcolor(WHITE);
}/* desenare */

void initializare_mod_grafic(void)
{
int gdriver=DETECT, gmode, err;

initgraph(&gdriver, &gmode, CALE);


err=graphresult();
if(err!=grOk)
{
printf("Eroare la initializarea modului grafic: %s\n",
grapherrormsg(err));
printf("Apasati o tasta pentru a termina ...\n");
getch();
exit(1);
}
}/* initializare mod grafic */

void main(void)
{
int n=0, i, j, xi, yi, xj, yj, x0, y0;
char c1, c2;

clrscr();
printf("Introduceti numarul de noduri: ");
while((scanf("%d", &n)!=1) || (n<=0))
{
printf("Introduceti un intreg pozitiv!\n");
fflush(stdin);
printf("Introduceti numarul de noduri: ");
}
initializare_mod_grafic();
desenare(n);
outtextxy(getmaxx() - 400, getmaxy()-10, "Apasati o tasta!"); getch();
closegraph();
fflush(stdin);
printf("Introduceti un arc!\n");
printf("Introduceti primul nod: "); scanf("%c", &c1); c1 = toupper(c1);
fflush(stdin);
printf("Introduceti urmatorul nod: "); scanf("%c", &c2); c2 =
toupper(c2);
initializare_mod_grafic();
desenare(n);
i = c1 - 'A';
j = c2 - 'A';
x0 = getmaxx()/2;
y0 = getmaxy()/2;
xi = r*cos(2*i*PI/n) + x0;
yi = -r*sin(2*i*PI/n) + y0;
xj = r*cos(2*j*PI/n) + x0;
yj = -r*sin(2*j*PI/n) + y0;
setcolor(WHITE);
line(xi, yi, xj, yj);
outtextxy(getmaxx() - 400, getmaxy()-10, "Apasati o tasta!"); getch();
closegraph();
}/* main */

S-ar putea să vă placă și