Προς το περιεχόμενο

Κατασκευή κύκλου σε C;


korgoroth

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα σε όλους, θα ήθελα να ρωτήσω, αν κάποιος έχει χρησιμοποιήσει ποτέ το math.h σε C ​​για να κατασκευάσετε έναν κύκλο, ας πούμε, από τα αστέρια'*'??

 

Θα ήθελα κάποιος να με καθοδηγήσει. :mrgreen:

Δημοσ.

Τι θυμήθηκα τώρα...

 

Όταν ήμουν α' λυκείου είχα γράψει ένα πρόγραμμα για γραφική παράσταση συνάρτησης με χαρακτήρες (το *).

Σε Fortran, χωρίς καμιά εντολή γραφικών, μόνον με την write.

 

Λίγο αργότερα έκανα κάτι παρόμοιο παρόμοιο για C++ με την turbo C++.

Εδώ το οπτικό αποτέλεσμα ήταν καλύτερο αλλά χρησιμοποιούσα specific εντολές της turbo C++ που

έθεταν τον δρομέα σε συγκεκριμένη θέση στην οθόνη.

 

 

Το cmath δεν περιέχει κάτι ουσιώδες γι' αυτό που ζητάς - μόνον τις sin(x) και cos(x).

Γενικά ο δρομέας πρέπει να τυπώνει περισσότερες από μια φορές στην ίδια γραμμή.

Αυτό πρακτικά δεν μπορεί να γίνει δίχως εντολές του τύπου locateCursor(x,y) και νομίζω ότι στάνταρ τέτοιες δεν υπάρχουν.

 

Συνεπώς για να σχεδιάσεις είναι καλύτερο να χρησιμοποιήσεις σε βασικό επίπεδο κάποια βιβλιοθήκη όπως το opengl ή η pgplot...

 

-

Δημοσ.

http://en.wikipedia.org/wiki/Circle

The equation can be written in parametric form using the trigonometric functions sine and cosine as60def90ab8e162c1f84130f51104a484.pngdbf064555ddcb69e893290c9432d1ecb.png

where t is a parametric variable in the range 0 to 2π

 

Αρα ειναι μια for 0, 2*pi με το cos παιρνεις το x και με το sin το y

 

Να ενα παραδειγμα

>

#include <Windows.h>
#include <math.h>

#define PI 3.14f
//defiens gia eikoniko kartesiano
#define VIRTUAL_X(x) (x + 200)
#define VIRTUAL_Y(y) (y + 150)

typedef struct
{
float x,y;
}Point;

void CreateCircle(Point *pPoints,int nPoints,float r)
{
float			f;
int				idxPoints;
float			step;

f				= 0.0f;
idxPoints		= 0;
step			= PI * 2.0f / (float) (nPoints-1);
for(;f < PI * 2.0f; f+= step, idxPoints++)
{
	pPoints[idxPoints].x = r * cos(f);
	pPoints[idxPoints].y = r * sin(f);
}
pPoints[idxPoints] = pPoints[0];
}


void Present(Point *pPoints,int nPoints)
{	
HWND			hWnd;
HDC				hDc;
HPEN			hPen;
int				idx;

hWnd			= GetConsoleWindow();
hDc				= GetDC(hWnd);
hPen			= CreatePen(PS_SOLID,1,RGB(0,255,0));
idx				= 1;
SelectObject(hDc,hPen);

MoveToEx(hDc,VIRTUAL_X(pPoints[0].x),VIRTUAL_Y(pPoints[0].y),0);

for(;idx < nPoints;idx++)
	LineTo(hDc,VIRTUAL_X(pPoints[idx].x),VIRTUAL_Y(pPoints[idx].y));

DeleteObject(hPen);
ReleaseDC(hWnd,hDc);
}

int main(int,char**) 
{
Point points[100];
CreateCircle(points,100,110);
Present(points,100);

return 0;
}

 

 

Σε text mode πρεπει να μετατρεψεις το poitns σε matrix και να το εκτυπωσεις.

Δημοσ.

να γραψεις 1α σε εναν πινακα char[xx][yy] τη γραφικη παρασταση και μετα να την εκτυπωσεις γραμμη-γραμμη δεν παιζει ?

 

Πολύ καλή και απλή ιδέα, μου άρεσε.

 

>#include <iostream>
#include <algorithm>
#include <math.h>
#include <memory.h>

#define PI 3.14159f

const int DrawingAreaSize = 40; // diastash se xarakthres ths e3odou mas

using namespace std;

double round(double r) {
   return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);
}

int main(int, char**) {
       // 2d tetragwnos pinakas diastasewn DrawingAreaSize * DrawingAreaSize
       // Epeidh mesa apo8hkeyoume "strings", ston a3ona X einai +1 char megalyteros
       // gia na exoume xwro na baloume null terminator gia na to typwsoume eykola
       char output[DrawingAreaSize][DrawingAreaSize + 1];

       // Initialize ton pinaka me spaces ("adeios kambas")
       memset(&output, ' ', DrawingAreaSize * (DrawingAreaSize + 1));

       // Ka8orismos leptomereias sxediasmou -- oso megalytero toso perissotera
       // shmeia tou kyklou 8a ypologistoun kai 8a ektypw8oun
       // Prosferetai gia peiramatismo
       int steps = DrawingAreaSize * 6;

       for(int i = 0; i < steps; ++i) {
           float rads = 2 * PI * i / steps; // posa rad einai h gwnia gi' ayto to shmeio

           // Translation apo polikes se kartesianes syntetagmenes (ma8hmatika lykeiou)
           int x = round((1 + cos(rads)) * DrawingAreaSize / 2);
           int y = round((1 + sin(rads)) * DrawingAreaSize / 2);

           // Clip ta x, y sta oria poy exoume (mporei to round na ta esteile ektos)
           x = min(x, DrawingAreaSize - 1);
           y = min(y, DrawingAreaSize - 1);
           
           x = max(x, 0);
           y = max(y, 0);

           // Bale ena asterisko sto shmeio poy ypologisame
           output[x][y] = '*';
       }

       // Kai twra apla pare ton pinaka output kai typwse tis grammes
       // th mia katw apo thn allh
       for(int i = 0; i < DrawingAreaSize; ++i) {
           // PROSOXH: Nai men afhsame xwro gia to null terminator, alla
           // prepei na ton baloume kiolas 
           output[i][DrawingAreaSize] = 0;
           cout << output[i] << "\n";
       }
       cout << "OK\n";

       return 0;

}

 

Δυστυχώς επειδή ο λόγος πλάτους/ύψους των χαρακτήρων στην κονσόλα δεν είναι 1, τα "pixel" που χρησιμοποιούμε για να απεικονίσουμε το αποτέλεσμα είναι μακρόστενα. Επειδή οι υπολογισμοί μας όμως έγιναν υποθέτοντας πως τα pixel είναι τετράγωνα, το αποτέλεσμα όταν τυπωθεί θα είναι μια έλλειψη.

 

Για να αντιμετωπίσουμε αυτό το φαινόμενο, μια μπακάλικη λύση είναι να υποθέσουμε ότι ο λόγος πλάτος/ύψους είναι περίπου 0.4 (αυτό προκύπτει από γνώσεις τυπογραφίας) και να βάλουμε αυτόν τον παράγοντα στην εξίσωση:

 

>int x = round((1 + cos(rads)) * DrawingAreaSize / 2 * 0.4);

 

Αυτό θα έχει σαν αποτέλεσμα ο κύκλος φαίνεται σχεδόν κυκλικός.

Δημοσ.

Με βάλατε και μένα στο τριπάκι... παλιόπαιδα :lol: : http://ideone.com/tyeVZ

 

Δουλεύει μόνο στο 1ο καρτεσιανό τεταρτημόριο και για τους αλγόριθμους τόσο της γραμμής όσο και του κύκλου χρησιμοποίησα έτοιμες εκδοχές του Bresenham. Όποιος δεν βαριέται, μπορεί να βελτιώσει και τους αλγόριθμους, να βάλει και scaling και origin move και κανονικό clipping (εγώ το ομολογώ βαριέμαι :lol:).

 

Θεώρησα πως ο στόχος δεν είναι η βελτιστοποίηση των αλγόριθμων, αλλά το demonstration στοιχειώδους buffered plotting σε κονσόλα.

 

Το προγραμματάκι σχεδιάζει:

  • γράφημα της συνάρτησης: f(x) = a*x+b
  • γραμμή μεταξύ 2 σημείων
  • κύκλο με μεταβλητό κέντρο και ακτίνα
  • έλλειψη που οριοθετείται από παραλληλόγραμμο (ορίζεται από τα αντικριστά σημεία της πάνω αριστερής και της κάτω δεξιάς του γωνίας)

Το link στην αρχή του post δείχνει στο τέλος του κώδικα και δείγμα της εξόδου.

 

 

>
/* -----------------------------------------------------------------------
* Από: migf1
*
* Πολύ απλοϊκό παράδειγμα προγράμματος κονσόλας που παράγει στο 1ο καρτεσιανό
* τεταρτημόριο τα εξής:
* α)	το γράφημα μιας συνάρτησης: f(x) = a*x + b
* β)	μια γραμμή μεταξύ δυο σημείων: (x1,y1) και (x2,y2)
* γ)	έναν κύκλο με κέντρο στο σημείο: (x,y) και ακτίνα radius
* δ)	μια έλλειψη που οριοθετείται από παραλληλόγραμμο με αντικριστές κορυφές
*	τα σημεία: (x1,y1) πάνω αριστερά και (x2,y2) κάτω δεξιά
*
* Μπορείτε να αλλάξετε τιμές σε οποιοδήποτε από τα x, pt2.x, x2, pt2.y, y2 & radius,
* αλλά σημειώστε πως το πρόγραμμα απεικονίζει μονάχα όσα σημεία παράγονται στην
* περιοχή: (0,0) ... (74,22)
*
* ΣΗΜΕΙΩΣΕΙΣ ΥΛΟΠΟΙΗΣΗΣ:
*	Οι αλγόριθμοι για τον σχεδιασμό της γραμμής του κύκλου και της έλλειψης
*	είναι ΕΤΟΙΜΕΣ υλοποιήσεις των αλγορίθμων Bresenham, που χρησιμοποιήσα
*	ατόφιους (με μόνη αλλαγή την προσαρμογή τους στις δομές δεδομέννων Screen
*	και Point του παρόντος προγράμματος).
*
* 	Δείτε επίσης:
*	http://free.pages.at/easyfilter/bresenham.html
*	http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
*
*	Tο πρόγραμμα δεν κάνει ούτε scaling ούτε κανονικό clipping και απεικονίζει
*	ΜΟΝΑΧΑ το 1ο τεταρτημόριο του καρτεσιανού επιπέδου, με το σημείο (0,0) να
*	βρίσκεται στην κάτω αριστερή μεριά της οθόνης.
*	Ο κύριος σκοπός για τον οποίον γράφτηκε το πρόγραμμα ήταν η παρουσίαση μιας
*	απλοϊκής υλοποίησης buffered σχεδιασμού (οι συναρτήσεις αναβοσβήνουν τα
*	κατάλληλα pixels μέσα στο buffer, το οποίο κατόπιν τυπώνεται στην οθόνη
*	σειρά προς σειρά, μεσω της συνάρτησης: draw_screen() ).
* -----------------------------------------------------------------------
*/

#include <stdio.h>
#include <stdlib.h>			// for exit()
#include <string.h>			// for memset()

#define	MAXCOLS		75     		// μέγιστο πλάτος της οθόνης μας
#define MAXROWS		23		// μέγιστο ύψος της οθόνης μας

#define PIXEL_ON	'#'		// χαρακτήρας απεικόνισης "αναμμένων" pixels
#define PIXEL_OFF	'.' 		// χαρακτήρας απεικόνισης "σβησμένων" pixels

				// έλεγχος για pixels εκτός ορίων
#define	VALIDPIXEL(x,y, w,h)	( (y) > -1 && (y) < (h) && (x) > -1 && (x) < (w) )

#define	REVAXIS(y,h)	(h) - (y) - 1   // προσαρμόζει την συντεταγμένη y ώστε το σημείο
				// που της αντιστοιχεί να απεικονιστεί στην
				// αντεστραμμένη φορά του άξονά (χρήσιμο για τον
				// άξονα Υ που τον θέλουμε να μετράει από κάτω
				// προς τα πάνω)

#define ABS(x)		( (x) < 0 ? -(x) : (x) )

typedef struct point {			// δομή καρτεσιανού σημείου
int x;					// καρτεσιανή συντεταγμένη x του σημείου
int y;					// καρτεσιανή συντεταγμένη y του σημείου
} Point;

typedef struct screen {			// δομή για το buffer της οθόνης μας
int nrows;				// τρέχον πλάτος της οθόνης μας
int ncols;				// τρέχον ύψος της οθόνης μας
char pixel[MAXROWS][MAXCOLS];		// το buffer της οθόνης μας
} Screen;

// ------------------------------------------------------------------------------------
// set_pixel:
//
// "Ανάβει" το pixel x,y στο buffer της οθόνης. Θα εμφανιστεί αναμένο όταν αργότερα
// τυπωθεί το buffer μέσω της συνάρτησης: draw_screen
//
void set_pixel( Screen *screen, int x, int y )
{
				// απόρριψη pixels που βγαίνουν εκτός οθόνης
if ( !VALIDPIXEL(x,y, screen->ncols, screen->nrows ) )
	return;
				// προσαρμογή του y ώστε το μέτρημα για την
y = REVAXIS(y, screen->nrows);	// απεικόνιση να ξεκινά από κάτω προς τα επανω
screen->pixel[y][x] = PIXEL_ON;

return;
}

// ------------------------------------------------------------------------------------
// Η συνάρτηση που παράγει το 1ο γράφημα, δοκιμάστε και με άλλες τιμές
//
int f( int x )
{
return x/3 + 1;
}

// ------------------------------------------------------------------------------------
// set_f():
//
// "Ανάβει" τα pixels που αντιστοιχούν στο γράφημα της συνάρτησης f(), στο buffer της
// οθόνης (θα εμφανιστούν αναμμένα όταν αργότερα τυπωθεί το buffer μέσω της συνάρτησης:
// draw_screen() )
//
void set_f( Screen *screen )
{
register int x;
for (x=0; x < screen->ncols; x++)
	set_pixel( screen, x, f(x) );

return;
}

// ------------------------------------------------------------------------------------
// set_line():
//
// "Ανάβει" τα pixels της γραμμής που οριοθετείται από τα σημεία pt1 και pt2, στο
// buffer της οθόνης (θα εμφανιστούν αναμμένα όταν αργότερα τυπωθεί το buffer μέσω
// της συνάρτησης: draw_screen() )
//
void set_line( Screen *screen, Point pt1, Point pt2)
{
int dx =  ABS( pt2.x - pt1.x );
int dy = -ABS( pt2.y - pt1.y );
int sx = (pt1.x < pt2.x) ? 1 : -1;
int sy = (pt1.y < pt2.y) ? 1 : -1; 
int err = dx + dy, e2;				// error value e_xy

for (;
{
	set_pixel(screen, pt1.x, pt1.y);
	if ( pt1.x == pt2.x && pt1.y == pt2.y )
		break;
	e2 = 2 * err;
	if (e2 >= dy) {				// e_xy + e_x > 0
		err += dy;
		pt1.x += sx;
	} 
	if (e2 <= dx) {				// e_xy + e_y < 0 */
		err += dx;
		pt1.y += sy;
	}
}

return;
}

// ------------------------------------------------------------------------------------
// set_circle():
//
// "Ανάβει" τα pixels της περιφέρειας του κύκλου με κέντρο το σημείο: center και ακτίνα
// radius, στο buffer της οθόνης (θα εμφανιστούν αναμμένα όταν αργότερα τυπωθεί το
// buffer μέσω της συνάρτησης: draw_screen() )
//
void set_circle(Screen *screen, Point center, int radius)
{
int x = -radius, y = 0, err = 2-2*radius;		// II. Quadrant
do {
	set_pixel(screen, center.x-x, center.y+y);	//   I. Quadrant
	set_pixel(screen, center.x-y, center.y-x);	//  II. Quadrant
	set_pixel(screen, center.x+x, center.y-y);	// III. Quadrant
	set_pixel(screen, center.x+y, center.y+x);	//  IV. Quadrant
	radius = err;
	if (radius >  x)				// e_xy + e_x > 0
		err += ++x * 2 + 1;
	if (radius <= y)
		err += ++y * 2 + 1;			// e_xy + e_y < 0
} while (x < 0);

return;
}

// ------------------------------------------------------------------------------------
void set_ellipse( Screen *screen, Point rsta, Point rend )
{
// values of diameter
int a = ABS( rend.x - rsta.x );
int b = ABS( rend.y - rsta.y );
int b1 = b & 1;	

// error increment
long dx = 4 * (1-a) * b * b;
long dy = 4 * (b1+1) *a * a;

// error of 1.step
long err = dx + dy + b1 * a * a;
long e2;

if (rsta.x > rend.x) {			// if called with swapped points
	rsta.x = rend.x;
	rend.x += a;
}
if (rsta.y > rend.y)				 // ... exchange them
	rsta.y = rend.y;

// starting pixel
rsta.y += (b+1)/2;
rend.y = rsta.y-b1;

a *= 8 * a;
b1 = 8 * b * b;

do {
	set_pixel(screen, rend.x, rsta.y);	//   I. Quadrant
	set_pixel(screen, rsta.x, rsta.y);	//  II. Quadrant
	set_pixel(screen, rsta.x, rend.y);	// III. Quadrant
	set_pixel(screen, rend.x, rend.y);	//  IV. Quadrant
	e2 = 2 * err;
	if (e2 >= dx) {				// x step
		rsta.x++;
		rend.x--;
		err += dx += b1;
	}
	if (e2 <= dy) {				// y step
		rsta.y++;
		rend.y--;
		err += dy += a;
	}
} while ( rsta.x <= rend.x );

while ( rsta.y - rend.y < b ) {	// too early stop of flat ellipses a=1
	set_pixel(screen, rsta.x - 1, rsta.y);// -> finish tip of ellipse
	set_pixel(screen, rend.x + 1, rsta.y++); 
	set_pixel(screen, rsta.x - 1, rend.y);
	set_pixel(screen, rend.x + 1, rend.y--); 
}

return;
}

// ------------------------------------------------------------------------------------
// "Σβήνει" όλα τα pixels στο buffer της οθόνης (α εμφανιστούν σβησμένα όταν αργότερα
// τυπωθεί η οθόνη μέσω της συνάρτησης: draw_screen() )
//
void clear_screen( Screen *screen )
{
// γρήγορος κώδικας
memset( &screen->pixel, PIXEL_OFF, screen->nrows * screen->ncols * sizeof(char));

/*** DISABLED: αργός εναλλακτικός κώδικας, αλλά ενδεχομένως πιο συμβατός
register int x,y;

for (y=0; y < screen->nrows; y++)
	for (x=0; x < screen->ncols; x++)
		screen->pixel[y][x] = PIXEL_OFF;
***/

return;
}

// ------------------------------------------------------------------------------------
// draw_screen():
//
// Τυπώνει όλα τα pixels του buffer (αναμμένα και σβηστά) καθώς και την αρίθμηση
// των αξόνων Χ και Υ
//
void draw_screen( Screen screen )
{
register int x, y;

for (y=0; y < screen.nrows; y++)
{
	// τύπωμα ετικετών αριστερά από τον άξονα Υ
	int ylab = y;
	printf("%3d ", REVAXIS(ylab, screen.nrows) );

	// τύπωμα των pixels της y-οστής σειράς του buffer
	for (x=0; x < screen.ncols; x++)
		putchar( screen.pixel[y][x] );
	putchar('\n');
}

// τύπωμα ετικετών κάτω από τον άξονα Χ
printf("Y/X ");
for (x=0; x < screen.ncols; x++)
	printf("%d", x%10);
putchar('\n');

return;
}

// ------------------------------------------------------------------------------------
int main( void )
{
char s[255+1] = "";			// βοηθητικό string (άνευ σημασίας)

/*
 * ορισμός του buffer της οθόνης & αρχικοποίηση των τρεχουσών διαστάσεών του
 */
Screen screen = { .ncols = MAXCOLS, .nrows = MAXROWS };

/*
 * Σχεδίαση γραφήματος της συνάρτησης: f(x) = a*x+b
 * (πειραματιστείτε με διάφορες τιμές των a και b, στη γραμμή 69)
 */

printf("> press ENTER for graph of: f(x) = x/3+1 ...");
fgets(s, 255+1, stdin); putchar('\n');
clear_screen( &screen );		// σβήσιμο όλων των pixels στο buffer
set_f( &screen);			// σχεδίαση της f(x) στο buffer
draw_screen( screen );			// τύπωμα όλων των pixels του buffer

/*
 * Σχεδίαση γραμμής μεταξύ 2 σημείων: pt1 και pt2
 * (πειραματιστείτε με διάφορες τιμές)
 */
					// τα σημεία που οριοθετούν τη γραμμή
Point pt1 = { .x=2, .y=14 }, pt2 = { .x=64, .y=2};
printf(	"> press ENTER for line between points (%d,%d) and (%d,%d)...",
	pt1.x, pt1.y, pt2.x, pt2.y
);
fgets(s, 255+1, stdin); putchar('\n');
clear_screen( &screen );		// σβήσιμο όλων των pixels στο buffer
set_line( &screen, pt1, pt2 );		// σχεδίαση της γραμμής στο buffer
draw_screen( screen );			// τύπωμα όλων των pixels του buffer

/*
 * Σχεδίαση κύκλου με κέντρο στο σημείο: center και ακτίνα: radius
 * (πειραματιστείτε με διάφορες τιμές)
 */

Point center = { .x=30, .y=11 };	// το κέντρο του κύκλου
int radius = 10;			// η ακτίνα του κύκλου
printf(	"> press ENTER for circle with center (%d,%d) and radius %d...",
	center.x, center.y, radius
);
fgets(s, 255+1, stdin); putchar('\n');
clear_screen( &screen );		// σβήσιμο όλων των pixels στο buffer
set_circle( &screen, center, radius );	// σχεδίαση του κύκλου στο buffer
draw_screen( screen );			// τύπωμα όλων των pixels του buffer

/*
 * Σχεδίαση έλλειψης που οριοθετείται από παραλληλόγραμο με την
 * επάνω αριστερή του γωνία στο σημείο: psta και την κάτω δεξιά
 * γωνία του στο σημείο: pend
 * (πειραματιστείτε με διάφορες τιμές)
 */
				// τα σημεία που οριοθετούν το παραλληλόγραμο
Point psta = { .x=2, .y=20 }, pend = { .x=60, .y=2};
printf(	"> press ENTER for ellipsis in rect: (%d,%d)-(%d,%d) ...",
	psta.x, psta.y, pend.x, pend.y
);
fgets(s, 255+1, stdin); putchar('\n');
clear_screen( &screen );		// σβήσιμο όλων των pixels στο buffer
set_ellipse( &screen, psta, pend );	// σχεδίαση της έλλειψης στο buffer
draw_screen( screen );			// τύπωμα όλων των pixels του buffer

/*
 * Τερματισμός του προγράμματος
 */
printf("> press ENTER to exit...");
fgets(s, 255+1, stdin);

exit( EXIT_SUCCESS );
}

 

EDIT:

έβαλα να σχεδιάζει και έλλειψη και άλλαξα τους αλγόριθμους σε πιο optimized εκδοχές των Bresenham: http://free.pages.at/easyfilter/bresenham.html (είναι undocumented και ο τύπος κάνει διάφορα... παπατζιλίκια, αλλά δείχνουν να δουλεύουν σωστά και γρήγορα).

Δημοσ.

Πάντως, με εντυπωσιάζεται ρε παίδες. Όλα αυτά και δεν έχετε γράψει μία συνάρτηση με κύκλους και γεωμετρία στην 1η λυκείου, χωρίς καμία εντολή γραφικών;

 

Πού πάτε;

Δημοσ.

Πάντως, με εντυπωσιάζεται ρε παίδες. Όλα αυτά και δεν έχετε γράψει μία συνάρτηση με κύκλους και γεωμετρία στην 1η λυκείου, χωρίς καμία εντολή γραφικών;

 

Πού πάτε;

Δεν καταλαβαίνω τι εννοείς.

  • 2 μήνες μετά...
Δημοσ.

καταρχήν,

 

θέλω να ευχαριστήσω τους πάντες για τον κόπο τους, νομίζω ότι από αυτό το θέμα έχω μαζέψει εμπειρία για 3 χρόνια και σε 3 γλώσσες προγραμματισμού :P,

παρόλα αυτά βρήκα λύση για το θεματάκι μου με μια απλή μέθοδο, με την εφαρμογή της συνάρτησης pow(); από την βιβλιοθήκη math.h της C. θα προωθήσω τον κωδικά άμεσα (καθώς είναι στο pc που τον έγραψα), η ιδέα ειναι οτι ξεκινάς για ενα εύρος αριθμών, απο το 0 εως μεγιστο και παραλληλα απο το μισο αρνητικό εως το μισο θετικό και οσοι αριθμοι ειναι μικρότεροι οι ίσοι απο την δυναμη αυτου που έχουμε θέσει,τους αντικαθιστούμε σε πινάκα η σε printf από ένα χαρακτήρα :)

 

 

ο κώδικας αποτελούσε ευχάριστο προγραμματιστικό ταξίδι περα απο το σχεδιο του κύκλου και το αποτέλεσμα πιστυώ ηταν πολύ ικανοποιητικο :)

 

και παλι ευχαριστώ ολους για τον χρόνο τους

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...