Ciao a tutti. Ho un problema con la creazione di un un algoritmo. Il fine è poi applicarlo a un programma che gestisce il parcheggio di un istituto privato. Devo effettuare le turnazioni, e per semplicità ho diviso in 52 settimane(MAXTURNI). Il problema chiede che venga lasciato un posto libero e che ogni auto parcheggi lo stesso tanto delle altre, nessuna deve parcheggiare di più o di meno. In poche parole l'ultima auto inserita deve corrispondere a n_auto, e poi deve essere seguita esclusivamente da spazi vuoti. Vi passo il codice
Code (Hide rownumbers)
#include <stdio.h>
#include <stdlib.h>
#define R 2
#define C 5
#define MAXTURNI 52
typedef struct
{
int Auto[R][C];
}turni;
int main()
{
int r,c,i,n_auto=19,tot_posti,postiLib,_auto=1,movC=0,flag,pubblico,app=0,contN=0,indice=0; //movC: movimenti della colonna;
turni v[MAXTURNI];
pubblico=((R*C)*10)/100;
if (pubblico==0) pubblico++; //Nel caso in cui il 10% della griglia sia uguale a 0, il parcheggio dovrà tenere almeno un posto libero;
tot_posti=MAXTURNI*(R*C);
postiLib=((tot_posti%n_auto));
if ((n_auto<(R*C)))
{
flag=1;
}else flag=2;
for (i=0;i<MAXTURNI;i++)
{
for (r=0;r<R;r++)
{
for (c=0;c<C;c++)
{
switch(flag)
{
case 1://caso 1 n_auto<(R*C)
{
if (movC<n_auto)
{
v[i].Auto[r][c]=_auto++;
movC++;
}else v[i].Auto[r][c]=0;
}
break;
case 2://caso 2 n_auto>(R*C)
{
printf("tot_posti: %d -movC:%d, %dn",tot_posti,movC,tot_posti-movC);
if ((movC<=(tot_posti-postiLib-1)))
{
if (_auto==n_auto+1) _auto=1;
v[i].Auto[r][c]=_auto++;
movC++;
if (app<(R*C))
{
app++;
}else app=1;
//printf("app: %dn",app);
if ((app>((R*C)-pubblico)))
{
//printf("entran");
v[i].Auto[r][c]=0;
_auto--;
}
}else v[i].Auto[r][c]=0;
//if (v[i].Auto[r][c]==n_auto) contN++;
}
break;
}
indice++;
}
}
if (flag==1) v[i]=v[0];
}
for (i=0;i<MAXTURNI;i++)
{
for (r=0;r<R;r++)
{
printf("%d) Turno ",i+1);
for (c=0;c<C;c++)
{
printf("%d ",v[i].Auto[r][c]);
}
printf("n");
}
printf("nn");
}
printf("Movimento indice movC: %dn",movC);
printf("Indice vettore 'i': %dn",i);
printf("Numero macchine: %dn",n_auto);
printf("Posti Totali: %dn",tot_posti);
printf("Posti da lasciare liberi: %dn",postiLib);
printf("Posti pubblici: %dn",pubblico);
printf("(R*C)-pubblico: %dn",(R*C)-pubblico);
printf("tot_posti/n_auto+pubblico: %dn",tot_posti/(n_auto+pubblico));
printf("contN: %dn",contN);
printf("Indice: %dn",indice);
printf("tot_posti-movC: %d",tot_posti-movC);
return 0;
}
Non fate caso alle ultime stampe, sono informazioni che usavo per farmi qualche calcolo...
Il problema sia nel calcolo dei posti liberi da lasciare alla fine (postiLib=((tot_posti%n_auto));)
Questa formula vale nel caso in cui non ci sia il 10% da lasciare libero di ogni parcheggio, ma ovviamente con il 10% sfasa tutto....