Ma vi rendete conto...?

a323109

Trafficante
Che io sto usando un
16973040421303115547956590151803.jpg
portatile del 2009?
Con 2 giga di ram che è piena per 3/4
Altri 2 giga di swap che è già piena per metà
Il processore sempre a palla.

E non si ferma!

Debian è un mostro di sistema operativo.
Secondo solo a Arch

Swappa di brutto perchè non ha più ram...rallenta...ci mette il suo tempo...ma non perde un colpo
 
Che io sto usando un Vedi l'allegato 721451portatile del 2009?
Con 2 giga di ram che è piena per 3/4
Altri 2 giga di swap che è già piena per metà
Il processore sempre a palla.

E non si ferma!

Debian è un mostro di sistema operativo.
Secondo solo a Arch

Swappa di brutto perchè non ha più ram...rallenta...ci mette il suo tempo...ma non perde un colpo
ma non ti conviene prendere un buon portatile invece di un monopattino da 2000 euro? :d:
 
Ok, deciframi questo :d:

#include"math.h"
#include"graph.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"bios.h"
#define PI 3.1415927

struct dati {
double x;
double y;
double vx;
double vy;
double m;
struct dati *pt;
}; /* <- punto e virgola */

struct punt { /* contiene gli indirizzi dei due anelli generati */
struct dati *pt1; /* e il numero delle masse introdotte n */
struct dati *pt2;
struct dati *pt3;
short n;
}

main()
{
double G,x,y,vx,vy,xc,yc,mc,r,ax,ay,step,step0;
struct punt indir,puntdati();
struct dati *pa,*pb,*pn,*pcoda;
short n,p,q,j,dm,cont;
short cl[7]= {2,4,3,14,5,7,1}; /* <- Vettore colori */
double stepdm(),val_step();
char ch[10];
_setvideomode(_VRES16COLOR);
pa=NULL;j=0;
G=1000.0; /* <- Costante gravitazionale */

inizio1: /* <- Label inizio 1 */
_clearscreen(_GCLEARSCREEN);
croce(); /* <- Disegna croce */
_outtext("Scrivere 's' per interrompere inserzione 'c' per correggere\n");


if(pa!=NULL) /* Cancellazione struct generate:prima di inserire_ */
cancella(pa,pb,pcoda,n); /* nuovi dati cancella quelli vecchi */

step0=val_step(); /* Acquisizione valore step e richiesta step dinamico */
if(step0<0)
dm=1;
else dm=0;
step0=fabs(step0);

indir=puntdati(); /* <- Acqusizione dati e costruzione struct dinamiche */
n=indir.n;
inizio2: /* <- Label inizio 2 */
pa=indir.pt1;
pb=indir.pt2;
pcoda=indir.pt3;
step=step0;

if(j=='r') /* Se il tasto premuto Š R,copia i dati originali_ */
{ /* contenuti nella "coda" in "anello 1" */
do
{
pa->x=320.0+(pcoda->x)*cos((pcoda->y)*PI/180.0);
pa->y=240.0-(pcoda->x)*sin((pcoda->y)*PI/180.0);
pa->vx=(pcoda->vx)*cos((pcoda->vy)*PI/180.0);
pa->vy=-(pcoda->vx)*sin((pcoda->vy)*PI/180.0);
pa->m=pcoda->m;
pcoda=pcoda->pt;
pa=pa->pt;
} while (pcoda !=NULL);
pcoda=indir.pt3;
}


_clearscreen(_GCLEARSCREEN);
_outtext("Premere I:inserzione nuovi dati R:risimulazione C:correzione Q:uscita\n");
sprintf(ch,"%lg",step0);
_outtext("0 Step=");_outtext(ch);
if(dm==1)
_outtext(" Step dinamico attivato");
stampa(pcoda,cl,0); /* <- Stampa dati con 0:stampa dati semplificati */
croce(); /* <-Disegna croce */
punt_start(pcoda); /* <- Disegna i punti di partenza dei grafici */

cont=0; /* <- variabile switch per routine step dinamico */

ax=0.0;ay=0.0;
do /* <- Inizio ciclo calcolo e tracciamento grafico */
{
for(q=1;q<=n;q++)
{

ax=0.0;ay=0.0; /* <- accelerazioni poste a 0 ad ogni inizio ciclo */
pn=pa;
x=pa->x;
y=pa->y;
vx=pa->vx;
vy=pa->vy;
for(p=1;p<n;p++)
{
pn=pn->pt; /* Elementi successivi dell'elemento puntato da pa */
xc=pn->x;
yc=pn->y;
mc=pn->m;


r=sqrt((x-xc)*(x-xc)+(y-yc)*(y-yc)); /* Calcolo contributi accelerazione */
ax=ax+mc*(G*(xc-x)/(r*r*r)); /* delle N masse */
ay=ay+mc*(G*(yc-y)/(r*r*r));
}

if(dm)
step=stepdm(ax,ay,step,n,q,cont); /* <- Routine step dinamico */

x=x+vx*step+1.0/2*ax*step*step; /* Spostamenti e velocita' aggiornate */
y=y+vy*step+1.0/2*ay*step*step;
vx=vx+ax*step;
vy=vy+ay*step;

pb->x=x; /* Inserimento dati aggiornati in anello 2 */
pb->y=y; /* Le masse sono gia' presenti */
pb->vx=vx;
pb->vy=vy;

pa=pa->pt; /* <-Calcolo accelerazioni sulla massa successiva */
pb=pb->pt; /* <-Indirizzamento sul successivo elemento dell'anello 2 */

_setcolor(cl[((q-1) % 7)]);
_setpixel_w(x,y);
} /* <- fine for(q) */

cont=1; /* <- Variabile switch per routine step dinamico: stepdm() */

pn=pb; /* Scambio indirizzi anelli:anello 1 diventa anello 2 e viceversa */
pb=pa;
pa=pn;

j=_bios_keybrd(_KEYBRD_READY) & 255;
inizio4:;
} while(j==0);

getch();
if(j=='i') /* <- Inserimento nuovi dati */
goto inizio1;
else if(j=='r') /* <- Risimulazione */
goto inizio2;
else if(j=='c') /* <- Correzione */
{
stampa(pcoda,cl,1); /* <- stampa dati con 1:stampa dati completo */
do
{
j=(short)correzione(indir.pt1,pcoda,n);
if(j==0) /* <-Se il valore di ritorno Š j=0 allora correggi lo step */
{
step0=val_step();
if(step0<0)
dm=1;
else dm=0;
step0=fabs(step0);
}

do /* <- Verifica se esistono elementi con stesse coordinate */
{
j=verifica(pcoda);
if(j!=0)
correzione(indir.pt1,pcoda,n);
} while (j!=0);

_settextcolor(14);
_outtext("Altro?(s\\n) ");
_settextcolor(15);
} while (getch() =='s');

j='r';
goto inizio2;
}

else if(j=='q')
{
_setvideomode(_DEFAULTMODE);
exit(0);
}
else
{
j=0;
goto inizio4;
}
} /* Fine main */


double val_step() /* Routine di richiesta step */
{
double step;
char ch[10];
_outtext("Step(tempo<=0.02) ");
scanf("%s",ch);
_outtext(ch);
step=atof(ch);
_outtext(" Step dinamico?(s\\n) ");
if(getche()=='s')
step=-step; /* Se si richiede uno step dinamico:restituisci_ */
_outtext("\n"); /* uno step negativo come parametro di controllo */
return(step);
}


double stepdm(ax,ay,step,n,q,cont) /* <- Routine step dinamico */
double ax,ay,step;
short n,q;
{
double ar;
static double amax,vstp;
ar=ax*ax+ay*ay;
if(q==1)
amax=0.0;

amax=max(amax,ar);
if((q!=n) || (amax==0.0))
return(step);

if(cont==0)
{
vstp=sqrt(amax)*step;
return(step);
}

step=vstp/sqrt(amax);
return(step);
}



struct punt puntdati() /* Ritorna una struct contenente 3 puntatori_ */
{ /* al 1øelemento degli anelli e della coda */
double x,y,vx,vy,m;
short n,c;
struct dati a,input();
struct dati *pt1b,*pt1a,*pt2b,*pt2a; /* <-Puntatori anelli */
struct dati *ptc,*pptc,*p_iniz; /* <-Puntatori coda */
struct punt b;
pt1a=NULL;pt2a=NULL;pptc=NULL;p_iniz=NULL;pt1b=NULL;
n=0; /* <- n=contatore elementi_masse inseriti */


inizio3: /* <- Label inizio3:rientro routine Correzione */
a=input(n);

/* Inserimento dati */

while (a.m>=0.0)
{ /* Importante:devo specificare (struct dati*) in malloc */

pt1b=(struct dati*)malloc(sizeof(struct dati));
pt1b->x=320.0+a.x*cos(a.y*PI/180.0); /* in a.x =r */
pt1b->y=240.0-a.x*sin(a.y*PI/180.0); /* in a.y= teta */
pt1b->vx=a.vx*cos(a.vy*PI/180.0); /* in a.vx= v */
pt1b->vy=-a.vx*sin(a.vy*PI/180.0); /* in a.vy= tetav */
pt1b->m=a.m;

if(pt1a==NULL) /* <- Costruzione anello 1 */
{
pt1a=pt1b;
pt1a->pt=pt1b;
}
pt1b->pt=pt1a->pt; /* Metti in pt della struct appena generata,il valore */
pt1a->pt=pt1b; /* di pt della struct precedente:pt dell'ultimo ele_ */
pt1a=pt1b; /* mento puntera' sempre al 1ødell'anello. Infine */
/* pt della struct precedente punta alla struct appe_ */
/* na generata */

/* <- Costruzione anello 2 */

pt2b=(struct dati*)malloc(sizeof(struct dati));
pt2b->m=a.m; /* <-inserimento massa */
if(pt2a==NULL)
{
pt2a=pt2b;
pt2a->pt=pt2b;
}
pt2b->pt=pt2a->pt;
pt2a->pt=pt2b;
pt2a=pt2b;


/* Costruzione coda per conservare dati iniziali */

ptc=(struct dati*)malloc(sizeof(struct dati));
if(pptc==NULL)
{
pptc=ptc;
p_iniz=ptc;
}
pptc->pt=ptc;
ptc->pt=NULL;
pptc=ptc;
ptc->x=a.x; /* Inserimento dati */
ptc->y=a.y;
ptc->vx=a.vx;
ptc->vy=a.vy;
ptc->m=a.m;
n++;

if(p_iniz !=NULL) /* <- Verifica se due elementi hanno uguali coordinate */
do
{
c=verifica(p_iniz);
if(c!=0)
correzione(pt1b,p_iniz,n);
} while(c!=0);


a=input(n);
} /* <- fine while */

if((n==0) && (a.m==-1))
goto inizio3;

if(a.m==-2.0)
{
correzione(pt1b,p_iniz,n); /* <- Corregge dati inseriti */
goto inizio3;
}


b.pt1=pt1b->pt; /* Restituisce indirizzo 1øelemento anello 1 */
b.pt2=pt2b->pt; /* Restituisce indirizzo 1øelemento anello 2 */
b.pt3=p_iniz; /* Restituisce indirizzo 1øelemento coda */
b.n=n; /* Restituisce numero elementi introdotti */
return(b);
}

correzione(anello,coda,n) /* In anello riceve l'ultimo indirizzo */
struct dati *anello,*coda; /* generato:quindi deve aggiornarsi al */
short n; /* valore contenuto in pt per puntare */
{ /* al 1ø elmento dell'anello */
struct dati a,input();
short p,q;
char ch[10];
_settextcolor(14);
_outtext("Correzione elemento: N=");
_settextcolor(15);
scanf("%s",ch);
_outtext(ch);
_outtext("\n");
p=(short)atoi(ch);
if(p<=0)
return(0);
if((n==0) || (p>n)) /* <- Se il dato da correggere non Š gia' stato_ */
return(1); /* memorizzato in una struct:ritorna alla label_ */
anello=anello->pt; /* inzio3. Ritorna il valore 1 perchŠ 0 serve in */
if(n>1) /* caso di richiesta di correzione dello step */
for(q=1;q<p;q++)
{
anello=anello->pt;
coda=coda->pt;
}
/* Memorizzazione dati nella "coda" */

a=input(p-1); /* Alla routine input() viene passato il numero_ */
coda->x=a.x; /* di linea da correggere-1 */
coda->y=a.y;
coda->vx=a.vx;
coda->vy=a.vy;
coda->m=a.m;

anello->x= 320.0+a.x*cos(a.y*PI/180.0); /* Memorizzazione dati in anello */
anello->y= 240.0-a.x*sin(a.y*PI/180.0);
anello->vx=a.vx*cos(a.vy*PI/180.0);
anello->vy=-a.vx*sin(a.vy*PI/180.0);
anello->m=a.m;
return(1); /* Ritorna il valore 1 perchŠ 0 serve in caso di_ */
} /* richiesta correzione step */




struct dati input(n)
short n;
{
double r,teta,m,v,tetav;
struct dati a;
int p='s',q='c';
char ch[20];
sprintf(ch,"%d ",n+1); /* <- Numerazione linee */
_outtext(ch);
_outtext("r(pixel)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
r=atof(ch);
_outtext(" angolo=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
teta=atof(ch);
_outtext(" massa(10-..)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
m=atof(ch);
_outtext(" velocita'(1-..)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
v=atof(ch);
_outtext(" angolo=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
_outtext("\n");
tetav=atof(ch);
a.x=r; /* x= r */
a.y=teta; /* y= teta */
a.vx=v; /* vx= v */
a.vy=tetav; /* vy= tetav */
a.m=m;
return(a);
fine:
if(strchr(ch,p)!=NULL)
a.m=-1.0;
else if(strchr(ch,q)!=NULL)
a.m=-2.0;
_outtext("\n");
return(a);
}


stampa(punt,cl,c) /* Routine stampa dati */
struct dati *punt; /* c:variabile per stampa completa o semplificata */
short c,cl[];
{
double r,m,v,angl1,angl2;
char ch[80];
short p=4,n=3;
if(c==0)
{
_settextposition(3,1);
_outtext("n R V M");
do
{
r=punt->x;
v=punt->vx;
m=punt->m;
punt=punt->pt;

_settextcolor(cl[((p-4) % 7)]);
_settextposition(p,1);
sprintf(ch,"%d ",p-3);
_outtext(ch);
_settextcolor(15);
_settextposition(p,n);
sprintf(ch,"%lg",r);
_outtext(ch);
_settextposition(p,n+4);
sprintf(ch,"%lg",v);
_outtext(ch);
_settextposition(p,n+8);
sprintf(ch,"%lg",m);
_outtext(ch);
p++;
} while(punt !=NULL);
return;
} /* <-Fine if(c) */

else if(c==1)
{
do
{
r=punt->x;
angl1=punt->y;
v=punt->vx;
angl2=punt->vy;
m=punt->m;
punt=punt->pt;

_settextposition(p-1,1);
_settextcolor(cl[((p-4) % 7)]);
sprintf(ch,"%d ",p-3);
_outtext(ch);
_settextcolor(15);
sprintf(ch,"r=%lg angolo=%lg m=%lg v=%lg angolo=%lg\n",r,angl1,m,v,angl2);
_outtext(ch);
p++;
} while (punt!=NULL);
} /* <-Fine else if(c) */
}


cancella(pa,pb,pcoda,n) /* Cancella struct generate:anelli,code */
struct dati *pa,*pb,*pcoda;
short n;
{
struct dati *pn;
short p;
for(p=1;p<=n;p++)
{
pn=pa->pt;
free(pa);
pa=pn;
pn=pb->pt;
free(pb);
pb=pn;
pn=pcoda->pt;
free(pcoda);
pcoda=pn;
}
return;
}


verifica(pc)
struct dati *pc;
{
double r1,r2,teta1,teta2;
struct dati *pn;
if(pc->pt ==NULL) /* <- Se solo un elemento Š stato introdotto */
return(0); /* allora -> nessuna verifica */
while (pc->pt !=NULL)
{
pn=pc;
r1=pc->x;
teta1=pc->y;

while (pn->pt !=NULL)
{
pn=pn->pt;
r2=pn->x;
teta2=pn->y;
if((r1==r2) && (teta1==teta2))
{
printf("\a");
_settextcolor(14);
_outtext("Attenzione:due elementi hanno coordinate uguali\n");
_settextcolor(15);
return(1);
}
} /* Fine while 2 */
pc=pc->pt;
} /* Fine while 1 */

return(0);
}

croce() /* Disegna croce al centro schermo */
{
_setcolor(15);
_moveto(312,240);
_lineto(328,240);
_moveto(320,235);
_lineto(320,245);
return;
}


punt_start(pcoda) /* Disegna punti di partenaza grafici */
struct dati *pcoda;
{
double x,y;
do
{
x=320.0+(pcoda->x)*cos((pcoda->y)*PI/180.0);
y=240.0-(pcoda->x)*sin((pcoda->y)*PI/180.0);
_ellipse_w(_GBORDER,x-1,y-1,x+1,y+1);
pcoda=pcoda->pt;
} while (pcoda !=NULL);
return;
}
 
Ok, deciframi questo :d:

#include"math.h"
#include"graph.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"bios.h"
#define PI 3.1415927

struct dati {
double x;
double y;
double vx;
double vy;
double m;
struct dati *pt;
}; /* <- punto e virgola */

struct punt { /* contiene gli indirizzi dei due anelli generati */
struct dati *pt1; /* e il numero delle masse introdotte n */
struct dati *pt2;
struct dati *pt3;
short n;
}

main()
{
double G,x,y,vx,vy,xc,yc,mc,r,ax,ay,step,step0;
struct punt indir,puntdati();
struct dati *pa,*pb,*pn,*pcoda;
short n,p,q,j,dm,cont;
short cl[7]= {2,4,3,14,5,7,1}; /* <- Vettore colori */
double stepdm(),val_step();
char ch[10];
_setvideomode(_VRES16COLOR);
pa=NULL;j=0;
G=1000.0; /* <- Costante gravitazionale */

inizio1: /* <- Label inizio 1 */
_clearscreen(_GCLEARSCREEN);
croce(); /* <- Disegna croce */
_outtext("Scrivere 's' per interrompere inserzione 'c' per correggere\n");


if(pa!=NULL) /* Cancellazione struct generate:prima di inserire_ */
cancella(pa,pb,pcoda,n); /* nuovi dati cancella quelli vecchi */

step0=val_step(); /* Acquisizione valore step e richiesta step dinamico */
if(step0<0)
dm=1;
else dm=0;
step0=fabs(step0);

indir=puntdati(); /* <- Acqusizione dati e costruzione struct dinamiche */
n=indir.n;
inizio2: /* <- Label inizio 2 */
pa=indir.pt1;
pb=indir.pt2;
pcoda=indir.pt3;
step=step0;

if(j=='r') /* Se il tasto premuto Š R,copia i dati originali_ */
{ /* contenuti nella "coda" in "anello 1" */
do
{
pa->x=320.0+(pcoda->x)*cos((pcoda->y)*PI/180.0);
pa->y=240.0-(pcoda->x)*sin((pcoda->y)*PI/180.0);
pa->vx=(pcoda->vx)*cos((pcoda->vy)*PI/180.0);
pa->vy=-(pcoda->vx)*sin((pcoda->vy)*PI/180.0);
pa->m=pcoda->m;
pcoda=pcoda->pt;
pa=pa->pt;
} while (pcoda !=NULL);
pcoda=indir.pt3;
}


_clearscreen(_GCLEARSCREEN);
_outtext("Premere I:inserzione nuovi dati R:risimulazione C:correzione Q:uscita\n");
sprintf(ch,"%lg",step0);
_outtext("0 Step=");_outtext(ch);
if(dm==1)
_outtext(" Step dinamico attivato");
stampa(pcoda,cl,0); /* <- Stampa dati con 0:stampa dati semplificati */
croce(); /* <-Disegna croce */
punt_start(pcoda); /* <- Disegna i punti di partenza dei grafici */

cont=0; /* <- variabile switch per routine step dinamico */

ax=0.0;ay=0.0;
do /* <- Inizio ciclo calcolo e tracciamento grafico */
{
for(q=1;q<=n;q++)
{

ax=0.0;ay=0.0; /* <- accelerazioni poste a 0 ad ogni inizio ciclo */
pn=pa;
x=pa->x;
y=pa->y;
vx=pa->vx;
vy=pa->vy;
for(p=1;p<n;p++)
{
pn=pn->pt; /* Elementi successivi dell'elemento puntato da pa */
xc=pn->x;
yc=pn->y;
mc=pn->m;


r=sqrt((x-xc)*(x-xc)+(y-yc)*(y-yc)); /* Calcolo contributi accelerazione */
ax=ax+mc*(G*(xc-x)/(r*r*r)); /* delle N masse */
ay=ay+mc*(G*(yc-y)/(r*r*r));
}

if(dm)
step=stepdm(ax,ay,step,n,q,cont); /* <- Routine step dinamico */

x=x+vx*step+1.0/2*ax*step*step; /* Spostamenti e velocita' aggiornate */
y=y+vy*step+1.0/2*ay*step*step;
vx=vx+ax*step;
vy=vy+ay*step;

pb->x=x; /* Inserimento dati aggiornati in anello 2 */
pb->y=y; /* Le masse sono gia' presenti */
pb->vx=vx;
pb->vy=vy;

pa=pa->pt; /* <-Calcolo accelerazioni sulla massa successiva */
pb=pb->pt; /* <-Indirizzamento sul successivo elemento dell'anello 2 */

_setcolor(cl[((q-1) % 7)]);
_setpixel_w(x,y);
} /* <- fine for(q) */

cont=1; /* <- Variabile switch per routine step dinamico: stepdm() */

pn=pb; /* Scambio indirizzi anelli:anello 1 diventa anello 2 e viceversa */
pb=pa;
pa=pn;

j=_bios_keybrd(_KEYBRD_READY) & 255;
inizio4:;
} while(j==0);

getch();
if(j=='i') /* <- Inserimento nuovi dati */
goto inizio1;
else if(j=='r') /* <- Risimulazione */
goto inizio2;
else if(j=='c') /* <- Correzione */
{
stampa(pcoda,cl,1); /* <- stampa dati con 1:stampa dati completo */
do
{
j=(short)correzione(indir.pt1,pcoda,n);
if(j==0) /* <-Se il valore di ritorno Š j=0 allora correggi lo step */
{
step0=val_step();
if(step0<0)
dm=1;
else dm=0;
step0=fabs(step0);
}

do /* <- Verifica se esistono elementi con stesse coordinate */
{
j=verifica(pcoda);
if(j!=0)
correzione(indir.pt1,pcoda,n);
} while (j!=0);

_settextcolor(14);
_outtext("Altro?(s\\n) ");
_settextcolor(15);
} while (getch() =='s');

j='r';
goto inizio2;
}

else if(j=='q')
{
_setvideomode(_DEFAULTMODE);
exit(0);
}
else
{
j=0;
goto inizio4;
}
} /* Fine main */


double val_step() /* Routine di richiesta step */
{
double step;
char ch[10];
_outtext("Step(tempo<=0.02) ");
scanf("%s",ch);
_outtext(ch);
step=atof(ch);
_outtext(" Step dinamico?(s\\n) ");
if(getche()=='s')
step=-step; /* Se si richiede uno step dinamico:restituisci_ */
_outtext("\n"); /* uno step negativo come parametro di controllo */
return(step);
}


double stepdm(ax,ay,step,n,q,cont) /* <- Routine step dinamico */
double ax,ay,step;
short n,q;
{
double ar;
static double amax,vstp;
ar=ax*ax+ay*ay;
if(q==1)
amax=0.0;

amax=max(amax,ar);
if((q!=n) || (amax==0.0))
return(step);

if(cont==0)
{
vstp=sqrt(amax)*step;
return(step);
}

step=vstp/sqrt(amax);
return(step);
}



struct punt puntdati() /* Ritorna una struct contenente 3 puntatori_ */
{ /* al 1øelemento degli anelli e della coda */
double x,y,vx,vy,m;
short n,c;
struct dati a,input();
struct dati *pt1b,*pt1a,*pt2b,*pt2a; /* <-Puntatori anelli */
struct dati *ptc,*pptc,*p_iniz; /* <-Puntatori coda */
struct punt b;
pt1a=NULL;pt2a=NULL;pptc=NULL;p_iniz=NULL;pt1b=NULL;
n=0; /* <- n=contatore elementi_masse inseriti */


inizio3: /* <- Label inizio3:rientro routine Correzione */
a=input(n);

/* Inserimento dati */

while (a.m>=0.0)
{ /* Importante:devo specificare (struct dati*) in malloc */

pt1b=(struct dati*)malloc(sizeof(struct dati));
pt1b->x=320.0+a.x*cos(a.y*PI/180.0); /* in a.x =r */
pt1b->y=240.0-a.x*sin(a.y*PI/180.0); /* in a.y= teta */
pt1b->vx=a.vx*cos(a.vy*PI/180.0); /* in a.vx= v */
pt1b->vy=-a.vx*sin(a.vy*PI/180.0); /* in a.vy= tetav */
pt1b->m=a.m;

if(pt1a==NULL) /* <- Costruzione anello 1 */
{
pt1a=pt1b;
pt1a->pt=pt1b;
}
pt1b->pt=pt1a->pt; /* Metti in pt della struct appena generata,il valore */
pt1a->pt=pt1b; /* di pt della struct precedente:pt dell'ultimo ele_ */
pt1a=pt1b; /* mento puntera' sempre al 1ødell'anello. Infine */
/* pt della struct precedente punta alla struct appe_ */
/* na generata */

/* <- Costruzione anello 2 */

pt2b=(struct dati*)malloc(sizeof(struct dati));
pt2b->m=a.m; /* <-inserimento massa */
if(pt2a==NULL)
{
pt2a=pt2b;
pt2a->pt=pt2b;
}
pt2b->pt=pt2a->pt;
pt2a->pt=pt2b;
pt2a=pt2b;


/* Costruzione coda per conservare dati iniziali */

ptc=(struct dati*)malloc(sizeof(struct dati));
if(pptc==NULL)
{
pptc=ptc;
p_iniz=ptc;
}
pptc->pt=ptc;
ptc->pt=NULL;
pptc=ptc;
ptc->x=a.x; /* Inserimento dati */
ptc->y=a.y;
ptc->vx=a.vx;
ptc->vy=a.vy;
ptc->m=a.m;
n++;

if(p_iniz !=NULL) /* <- Verifica se due elementi hanno uguali coordinate */
do
{
c=verifica(p_iniz);
if(c!=0)
correzione(pt1b,p_iniz,n);
} while(c!=0);


a=input(n);
} /* <- fine while */

if((n==0) && (a.m==-1))
goto inizio3;

if(a.m==-2.0)
{
correzione(pt1b,p_iniz,n); /* <- Corregge dati inseriti */
goto inizio3;
}


b.pt1=pt1b->pt; /* Restituisce indirizzo 1øelemento anello 1 */
b.pt2=pt2b->pt; /* Restituisce indirizzo 1øelemento anello 2 */
b.pt3=p_iniz; /* Restituisce indirizzo 1øelemento coda */
b.n=n; /* Restituisce numero elementi introdotti */
return(b);
}

correzione(anello,coda,n) /* In anello riceve l'ultimo indirizzo */
struct dati *anello,*coda; /* generato:quindi deve aggiornarsi al */
short n; /* valore contenuto in pt per puntare */
{ /* al 1ø elmento dell'anello */
struct dati a,input();
short p,q;
char ch[10];
_settextcolor(14);
_outtext("Correzione elemento: N=");
_settextcolor(15);
scanf("%s",ch);
_outtext(ch);
_outtext("\n");
p=(short)atoi(ch);
if(p<=0)
return(0);
if((n==0) || (p>n)) /* <- Se il dato da correggere non Š gia' stato_ */
return(1); /* memorizzato in una struct:ritorna alla label_ */
anello=anello->pt; /* inzio3. Ritorna il valore 1 perchŠ 0 serve in */
if(n>1) /* caso di richiesta di correzione dello step */
for(q=1;q<p;q++)
{
anello=anello->pt;
coda=coda->pt;
}
/* Memorizzazione dati nella "coda" */

a=input(p-1); /* Alla routine input() viene passato il numero_ */
coda->x=a.x; /* di linea da correggere-1 */
coda->y=a.y;
coda->vx=a.vx;
coda->vy=a.vy;
coda->m=a.m;

anello->x= 320.0+a.x*cos(a.y*PI/180.0); /* Memorizzazione dati in anello */
anello->y= 240.0-a.x*sin(a.y*PI/180.0);
anello->vx=a.vx*cos(a.vy*PI/180.0);
anello->vy=-a.vx*sin(a.vy*PI/180.0);
anello->m=a.m;
return(1); /* Ritorna il valore 1 perchŠ 0 serve in caso di_ */
} /* richiesta correzione step */




struct dati input(n)
short n;
{
double r,teta,m,v,tetav;
struct dati a;
int p='s',q='c';
char ch[20];
sprintf(ch,"%d ",n+1); /* <- Numerazione linee */
_outtext(ch);
_outtext("r(pixel)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
r=atof(ch);
_outtext(" angolo=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
teta=atof(ch);
_outtext(" massa(10-..)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
m=atof(ch);
_outtext(" velocita'(1-..)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
v=atof(ch);
_outtext(" angolo=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
_outtext("\n");
tetav=atof(ch);
a.x=r; /* x= r */
a.y=teta; /* y= teta */
a.vx=v; /* vx= v */
a.vy=tetav; /* vy= tetav */
a.m=m;
return(a);
fine:
if(strchr(ch,p)!=NULL)
a.m=-1.0;
else if(strchr(ch,q)!=NULL)
a.m=-2.0;
_outtext("\n");
return(a);
}


stampa(punt,cl,c) /* Routine stampa dati */
struct dati *punt; /* c:variabile per stampa completa o semplificata */
short c,cl[];
{
double r,m,v,angl1,angl2;
char ch[80];
short p=4,n=3;
if(c==0)
{
_settextposition(3,1);
_outtext("n R V M");
do
{
r=punt->x;
v=punt->vx;
m=punt->m;
punt=punt->pt;

_settextcolor(cl[((p-4) % 7)]);
_settextposition(p,1);
sprintf(ch,"%d ",p-3);
_outtext(ch);
_settextcolor(15);
_settextposition(p,n);
sprintf(ch,"%lg",r);
_outtext(ch);
_settextposition(p,n+4);
sprintf(ch,"%lg",v);
_outtext(ch);
_settextposition(p,n+8);
sprintf(ch,"%lg",m);
_outtext(ch);
p++;
} while(punt !=NULL);
return;
} /* <-Fine if(c) */

else if(c==1)
{
do
{
r=punt->x;
angl1=punt->y;
v=punt->vx;
angl2=punt->vy;
m=punt->m;
punt=punt->pt;

_settextposition(p-1,1);
_settextcolor(cl[((p-4) % 7)]);
sprintf(ch,"%d ",p-3);
_outtext(ch);
_settextcolor(15);
sprintf(ch,"r=%lg angolo=%lg m=%lg v=%lg angolo=%lg\n",r,angl1,m,v,angl2);
_outtext(ch);
p++;
} while (punt!=NULL);
} /* <-Fine else if(c) */
}


cancella(pa,pb,pcoda,n) /* Cancella struct generate:anelli,code */
struct dati *pa,*pb,*pcoda;
short n;
{
struct dati *pn;
short p;
for(p=1;p<=n;p++)
{
pn=pa->pt;
free(pa);
pa=pn;
pn=pb->pt;
free(pb);
pb=pn;
pn=pcoda->pt;
free(pcoda);
pcoda=pn;
}
return;
}


verifica(pc)
struct dati *pc;
{
double r1,r2,teta1,teta2;
struct dati *pn;
if(pc->pt ==NULL) /* <- Se solo un elemento Š stato introdotto */
return(0); /* allora -> nessuna verifica */
while (pc->pt !=NULL)
{
pn=pc;
r1=pc->x;
teta1=pc->y;

while (pn->pt !=NULL)
{
pn=pn->pt;
r2=pn->x;
teta2=pn->y;
if((r1==r2) && (teta1==teta2))
{
printf("\a");
_settextcolor(14);
_outtext("Attenzione:due elementi hanno coordinate uguali\n");
_settextcolor(15);
return(1);
}
} /* Fine while 2 */
pc=pc->pt;
} /* Fine while 1 */

return(0);
}

croce() /* Disegna croce al centro schermo */
{
_setcolor(15);
_moveto(312,240);
_lineto(328,240);
_moveto(320,235);
_lineto(320,245);
return;
}


punt_start(pcoda) /* Disegna punti di partenaza grafici */
struct dati *pcoda;
{
double x,y;
do
{
x=320.0+(pcoda->x)*cos((pcoda->y)*PI/180.0);
y=240.0-(pcoda->x)*sin((pcoda->y)*PI/180.0);
_ellipse_w(_GBORDER,x-1,y-1,x+1,y+1);
pcoda=pcoda->pt;
} while (pcoda !=NULL);
return;
}
peccato che devo andare in montagna...
 
E un programma, basta avere l'interprete e copiarlo sul termimale. Se è bash cellò, anche Phyton...

E poi vedere che salta fuori
 
Ok, deciframi questo :d:

#include"math.h"
#include"graph.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"bios.h"
#define PI 3.1415927

struct dati {
double x;
double y;
double vx;
double vy;
double m;
struct dati *pt;
}; /* <- punto e virgola */

struct punt { /* contiene gli indirizzi dei due anelli generati */
struct dati *pt1; /* e il numero delle masse introdotte n */
struct dati *pt2;
struct dati *pt3;
short n;
}

main()
{
double G,x,y,vx,vy,xc,yc,mc,r,ax,ay,step,step0;
struct punt indir,puntdati();
struct dati *pa,*pb,*pn,*pcoda;
short n,p,q,j,dm,cont;
short cl[7]= {2,4,3,14,5,7,1}; /* <- Vettore colori */
double stepdm(),val_step();
char ch[10];
_setvideomode(_VRES16COLOR);
pa=NULL;j=0;
G=1000.0; /* <- Costante gravitazionale */

inizio1: /* <- Label inizio 1 */
_clearscreen(_GCLEARSCREEN);
croce(); /* <- Disegna croce */
_outtext("Scrivere 's' per interrompere inserzione 'c' per correggere\n");


if(pa!=NULL) /* Cancellazione struct generate:prima di inserire_ */
cancella(pa,pb,pcoda,n); /* nuovi dati cancella quelli vecchi */

step0=val_step(); /* Acquisizione valore step e richiesta step dinamico */
if(step0<0)
dm=1;
else dm=0;
step0=fabs(step0);

indir=puntdati(); /* <- Acqusizione dati e costruzione struct dinamiche */
n=indir.n;
inizio2: /* <- Label inizio 2 */
pa=indir.pt1;
pb=indir.pt2;
pcoda=indir.pt3;
step=step0;

if(j=='r') /* Se il tasto premuto Š R,copia i dati originali_ */
{ /* contenuti nella "coda" in "anello 1" */
do
{
pa->x=320.0+(pcoda->x)*cos((pcoda->y)*PI/180.0);
pa->y=240.0-(pcoda->x)*sin((pcoda->y)*PI/180.0);
pa->vx=(pcoda->vx)*cos((pcoda->vy)*PI/180.0);
pa->vy=-(pcoda->vx)*sin((pcoda->vy)*PI/180.0);
pa->m=pcoda->m;
pcoda=pcoda->pt;
pa=pa->pt;
} while (pcoda !=NULL);
pcoda=indir.pt3;
}


_clearscreen(_GCLEARSCREEN);
_outtext("Premere I:inserzione nuovi dati R:risimulazione C:correzione Q:uscita\n");
sprintf(ch,"%lg",step0);
_outtext("0 Step=");_outtext(ch);
if(dm==1)
_outtext(" Step dinamico attivato");
stampa(pcoda,cl,0); /* <- Stampa dati con 0:stampa dati semplificati */
croce(); /* <-Disegna croce */
punt_start(pcoda); /* <- Disegna i punti di partenza dei grafici */

cont=0; /* <- variabile switch per routine step dinamico */

ax=0.0;ay=0.0;
do /* <- Inizio ciclo calcolo e tracciamento grafico */
{
for(q=1;q<=n;q++)
{

ax=0.0;ay=0.0; /* <- accelerazioni poste a 0 ad ogni inizio ciclo */
pn=pa;
x=pa->x;
y=pa->y;
vx=pa->vx;
vy=pa->vy;
for(p=1;p<n;p++)
{
pn=pn->pt; /* Elementi successivi dell'elemento puntato da pa */
xc=pn->x;
yc=pn->y;
mc=pn->m;


r=sqrt((x-xc)*(x-xc)+(y-yc)*(y-yc)); /* Calcolo contributi accelerazione */
ax=ax+mc*(G*(xc-x)/(r*r*r)); /* delle N masse */
ay=ay+mc*(G*(yc-y)/(r*r*r));
}

if(dm)
step=stepdm(ax,ay,step,n,q,cont); /* <- Routine step dinamico */

x=x+vx*step+1.0/2*ax*step*step; /* Spostamenti e velocita' aggiornate */
y=y+vy*step+1.0/2*ay*step*step;
vx=vx+ax*step;
vy=vy+ay*step;

pb->x=x; /* Inserimento dati aggiornati in anello 2 */
pb->y=y; /* Le masse sono gia' presenti */
pb->vx=vx;
pb->vy=vy;

pa=pa->pt; /* <-Calcolo accelerazioni sulla massa successiva */
pb=pb->pt; /* <-Indirizzamento sul successivo elemento dell'anello 2 */

_setcolor(cl[((q-1) % 7)]);
_setpixel_w(x,y);
} /* <- fine for(q) */

cont=1; /* <- Variabile switch per routine step dinamico: stepdm() */

pn=pb; /* Scambio indirizzi anelli:anello 1 diventa anello 2 e viceversa */
pb=pa;
pa=pn;

j=_bios_keybrd(_KEYBRD_READY) & 255;
inizio4:;
} while(j==0);

getch();
if(j=='i') /* <- Inserimento nuovi dati */
goto inizio1;
else if(j=='r') /* <- Risimulazione */
goto inizio2;
else if(j=='c') /* <- Correzione */
{
stampa(pcoda,cl,1); /* <- stampa dati con 1:stampa dati completo */
do
{
j=(short)correzione(indir.pt1,pcoda,n);
if(j==0) /* <-Se il valore di ritorno Š j=0 allora correggi lo step */
{
step0=val_step();
if(step0<0)
dm=1;
else dm=0;
step0=fabs(step0);
}

do /* <- Verifica se esistono elementi con stesse coordinate */
{
j=verifica(pcoda);
if(j!=0)
correzione(indir.pt1,pcoda,n);
} while (j!=0);

_settextcolor(14);
_outtext("Altro?(s\\n) ");
_settextcolor(15);
} while (getch() =='s');

j='r';
goto inizio2;
}

else if(j=='q')
{
_setvideomode(_DEFAULTMODE);
exit(0);
}
else
{
j=0;
goto inizio4;
}
} /* Fine main */


double val_step() /* Routine di richiesta step */
{
double step;
char ch[10];
_outtext("Step(tempo<=0.02) ");
scanf("%s",ch);
_outtext(ch);
step=atof(ch);
_outtext(" Step dinamico?(s\\n) ");
if(getche()=='s')
step=-step; /* Se si richiede uno step dinamico:restituisci_ */
_outtext("\n"); /* uno step negativo come parametro di controllo */
return(step);
}


double stepdm(ax,ay,step,n,q,cont) /* <- Routine step dinamico */
double ax,ay,step;
short n,q;
{
double ar;
static double amax,vstp;
ar=ax*ax+ay*ay;
if(q==1)
amax=0.0;

amax=max(amax,ar);
if((q!=n) || (amax==0.0))
return(step);

if(cont==0)
{
vstp=sqrt(amax)*step;
return(step);
}

step=vstp/sqrt(amax);
return(step);
}



struct punt puntdati() /* Ritorna una struct contenente 3 puntatori_ */
{ /* al 1øelemento degli anelli e della coda */
double x,y,vx,vy,m;
short n,c;
struct dati a,input();
struct dati *pt1b,*pt1a,*pt2b,*pt2a; /* <-Puntatori anelli */
struct dati *ptc,*pptc,*p_iniz; /* <-Puntatori coda */
struct punt b;
pt1a=NULL;pt2a=NULL;pptc=NULL;p_iniz=NULL;pt1b=NULL;
n=0; /* <- n=contatore elementi_masse inseriti */


inizio3: /* <- Label inizio3:rientro routine Correzione */
a=input(n);

/* Inserimento dati */

while (a.m>=0.0)
{ /* Importante:devo specificare (struct dati*) in malloc */

pt1b=(struct dati*)malloc(sizeof(struct dati));
pt1b->x=320.0+a.x*cos(a.y*PI/180.0); /* in a.x =r */
pt1b->y=240.0-a.x*sin(a.y*PI/180.0); /* in a.y= teta */
pt1b->vx=a.vx*cos(a.vy*PI/180.0); /* in a.vx= v */
pt1b->vy=-a.vx*sin(a.vy*PI/180.0); /* in a.vy= tetav */
pt1b->m=a.m;

if(pt1a==NULL) /* <- Costruzione anello 1 */
{
pt1a=pt1b;
pt1a->pt=pt1b;
}
pt1b->pt=pt1a->pt; /* Metti in pt della struct appena generata,il valore */
pt1a->pt=pt1b; /* di pt della struct precedente:pt dell'ultimo ele_ */
pt1a=pt1b; /* mento puntera' sempre al 1ødell'anello. Infine */
/* pt della struct precedente punta alla struct appe_ */
/* na generata */

/* <- Costruzione anello 2 */

pt2b=(struct dati*)malloc(sizeof(struct dati));
pt2b->m=a.m; /* <-inserimento massa */
if(pt2a==NULL)
{
pt2a=pt2b;
pt2a->pt=pt2b;
}
pt2b->pt=pt2a->pt;
pt2a->pt=pt2b;
pt2a=pt2b;


/* Costruzione coda per conservare dati iniziali */

ptc=(struct dati*)malloc(sizeof(struct dati));
if(pptc==NULL)
{
pptc=ptc;
p_iniz=ptc;
}
pptc->pt=ptc;
ptc->pt=NULL;
pptc=ptc;
ptc->x=a.x; /* Inserimento dati */
ptc->y=a.y;
ptc->vx=a.vx;
ptc->vy=a.vy;
ptc->m=a.m;
n++;

if(p_iniz !=NULL) /* <- Verifica se due elementi hanno uguali coordinate */
do
{
c=verifica(p_iniz);
if(c!=0)
correzione(pt1b,p_iniz,n);
} while(c!=0);


a=input(n);
} /* <- fine while */

if((n==0) && (a.m==-1))
goto inizio3;

if(a.m==-2.0)
{
correzione(pt1b,p_iniz,n); /* <- Corregge dati inseriti */
goto inizio3;
}


b.pt1=pt1b->pt; /* Restituisce indirizzo 1øelemento anello 1 */
b.pt2=pt2b->pt; /* Restituisce indirizzo 1øelemento anello 2 */
b.pt3=p_iniz; /* Restituisce indirizzo 1øelemento coda */
b.n=n; /* Restituisce numero elementi introdotti */
return(b);
}

correzione(anello,coda,n) /* In anello riceve l'ultimo indirizzo */
struct dati *anello,*coda; /* generato:quindi deve aggiornarsi al */
short n; /* valore contenuto in pt per puntare */
{ /* al 1ø elmento dell'anello */
struct dati a,input();
short p,q;
char ch[10];
_settextcolor(14);
_outtext("Correzione elemento: N=");
_settextcolor(15);
scanf("%s",ch);
_outtext(ch);
_outtext("\n");
p=(short)atoi(ch);
if(p<=0)
return(0);
if((n==0) || (p>n)) /* <- Se il dato da correggere non Š gia' stato_ */
return(1); /* memorizzato in una struct:ritorna alla label_ */
anello=anello->pt; /* inzio3. Ritorna il valore 1 perchŠ 0 serve in */
if(n>1) /* caso di richiesta di correzione dello step */
for(q=1;q<p;q++)
{
anello=anello->pt;
coda=coda->pt;
}
/* Memorizzazione dati nella "coda" */

a=input(p-1); /* Alla routine input() viene passato il numero_ */
coda->x=a.x; /* di linea da correggere-1 */
coda->y=a.y;
coda->vx=a.vx;
coda->vy=a.vy;
coda->m=a.m;

anello->x= 320.0+a.x*cos(a.y*PI/180.0); /* Memorizzazione dati in anello */
anello->y= 240.0-a.x*sin(a.y*PI/180.0);
anello->vx=a.vx*cos(a.vy*PI/180.0);
anello->vy=-a.vx*sin(a.vy*PI/180.0);
anello->m=a.m;
return(1); /* Ritorna il valore 1 perchŠ 0 serve in caso di_ */
} /* richiesta correzione step */




struct dati input(n)
short n;
{
double r,teta,m,v,tetav;
struct dati a;
int p='s',q='c';
char ch[20];
sprintf(ch,"%d ",n+1); /* <- Numerazione linee */
_outtext(ch);
_outtext("r(pixel)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
r=atof(ch);
_outtext(" angolo=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
teta=atof(ch);
_outtext(" massa(10-..)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
m=atof(ch);
_outtext(" velocita'(1-..)=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
v=atof(ch);
_outtext(" angolo=");
scanf("%s",ch);
if(strchr(ch,p)!=NULL || strchr(ch,q)!=NULL)
goto fine;
_outtext(ch);
_outtext("\n");
tetav=atof(ch);
a.x=r; /* x= r */
a.y=teta; /* y= teta */
a.vx=v; /* vx= v */
a.vy=tetav; /* vy= tetav */
a.m=m;
return(a);
fine:
if(strchr(ch,p)!=NULL)
a.m=-1.0;
else if(strchr(ch,q)!=NULL)
a.m=-2.0;
_outtext("\n");
return(a);
}


stampa(punt,cl,c) /* Routine stampa dati */
struct dati *punt; /* c:variabile per stampa completa o semplificata */
short c,cl[];
{
double r,m,v,angl1,angl2;
char ch[80];
short p=4,n=3;
if(c==0)
{
_settextposition(3,1);
_outtext("n R V M");
do
{
r=punt->x;
v=punt->vx;
m=punt->m;
punt=punt->pt;

_settextcolor(cl[((p-4) % 7)]);
_settextposition(p,1);
sprintf(ch,"%d ",p-3);
_outtext(ch);
_settextcolor(15);
_settextposition(p,n);
sprintf(ch,"%lg",r);
_outtext(ch);
_settextposition(p,n+4);
sprintf(ch,"%lg",v);
_outtext(ch);
_settextposition(p,n+8);
sprintf(ch,"%lg",m);
_outtext(ch);
p++;
} while(punt !=NULL);
return;
} /* <-Fine if(c) */

else if(c==1)
{
do
{
r=punt->x;
angl1=punt->y;
v=punt->vx;
angl2=punt->vy;
m=punt->m;
punt=punt->pt;

_settextposition(p-1,1);
_settextcolor(cl[((p-4) % 7)]);
sprintf(ch,"%d ",p-3);
_outtext(ch);
_settextcolor(15);
sprintf(ch,"r=%lg angolo=%lg m=%lg v=%lg angolo=%lg\n",r,angl1,m,v,angl2);
_outtext(ch);
p++;
} while (punt!=NULL);
} /* <-Fine else if(c) */
}


cancella(pa,pb,pcoda,n) /* Cancella struct generate:anelli,code */
struct dati *pa,*pb,*pcoda;
short n;
{
struct dati *pn;
short p;
for(p=1;p<=n;p++)
{
pn=pa->pt;
free(pa);
pa=pn;
pn=pb->pt;
free(pb);
pb=pn;
pn=pcoda->pt;
free(pcoda);
pcoda=pn;
}
return;
}


verifica(pc)
struct dati *pc;
{
double r1,r2,teta1,teta2;
struct dati *pn;
if(pc->pt ==NULL) /* <- Se solo un elemento Š stato introdotto */
return(0); /* allora -> nessuna verifica */
while (pc->pt !=NULL)
{
pn=pc;
r1=pc->x;
teta1=pc->y;

while (pn->pt !=NULL)
{
pn=pn->pt;
r2=pn->x;
teta2=pn->y;
if((r1==r2) && (teta1==teta2))
{
printf("\a");
_settextcolor(14);
_outtext("Attenzione:due elementi hanno coordinate uguali\n");
_settextcolor(15);
return(1);
}
} /* Fine while 2 */
pc=pc->pt;
} /* Fine while 1 */

return(0);
}

croce() /* Disegna croce al centro schermo */
{
_setcolor(15);
_moveto(312,240);
_lineto(328,240);
_moveto(320,235);
_lineto(320,245);
return;
}


punt_start(pcoda) /* Disegna punti di partenaza grafici */
struct dati *pcoda;
{
double x,y;
do
{
x=320.0+(pcoda->x)*cos((pcoda->y)*PI/180.0);
y=240.0-(pcoda->x)*sin((pcoda->y)*PI/180.0);
_ellipse_w(_GBORDER,x-1,y-1,x+1,y+1);
pcoda=pcoda->pt;
} while (pcoda !=NULL);
return;
}
Si diceva dei pipponi di @Claire...
 

Users who are viewing this thread

Back
Alto