VettoreDiMatrici

di il
1 risposte

VettoreDiMatrici

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....

1 Risposte

  • Re: VettoreDiMatrici

    Sinceramente non ho capito molto bene il problema.
    per quello che ho capito la soluzione dovrebbe essere questa :
    numero posti utilizzabili = numero posi -1
    se vuoi fare un conteggio a settimana basta che fai:
    numero parcheggi = numero posti utilizzabili * max settimane
    numero parcheggio x auto = numero parcheggio / numero auto
    se vuoi invece fare un conteggio giornaliero basta che fai :
    numero parcheggi = numero posti utilizzabili * (max settimane * 7)
    numero parcheggio x auto = numero parcheggio / numero auto

    spero di aver capito bene il problema e di esserti stato d'aiuto nella soluzione
Devi accedere o registrarti per scrivere nel forum
1 risposte