In pratica io ho il programma seguente (scusate ma non so come si scrive con i TAG) che deve prendere le dimensioni di un container, il numero di pacchi contenuti e le dimensioni dei pacchi contenuti e verificare se sbordano, se non si compenetrano e se sono stabili.
Il problema è che mi da sempre errore di compenetrazione anche quando non c'è.
Allego il file e alcuni esempi:
codice:#include <stdio.h> #include <stdlib.h> #define MAX_PACCHI 100 #define MAX_VOL 100 struct coordinate { double x; double y; double z; }; struct Pacco { struct coordinate posizione; struct coordinate dimensioni; }pacchi[MAX_PACCHI]; int WrongPosition (struct coordinate posizione, struct coordinate dimensioni, struct coordinate container); int Compenetrazione (struct coordinate posizione, struct coordinate dimensioni); int Stabilita (struct coordinate posizione, struct coordinate dimensioni); int main(int argc, char *argv[]) { long int TotalVolume=0; long int i,j, numpacchi; FILE *fp; struct coordinate container; if (argc!=2) { printf("\ne' necessario allegare 1 file.\n"); exit (EXIT_FAILURE); } if ((fp=fopen(argv[1],"r"))==NULL) { printf("\nil file non è stato trovato.\n"); exit (EXIT_FAILURE); } fscanf(fp,"%lf %lf %lf", &container.x, &container.y, &container.z); fscanf(fp,"%ld", &numpacchi); //Verifica che il volume totale non superi quello del container for(i=0; i<numpacchi; i++) { fscanf(fp,"%lf %lf %lf", &pacchi[i].posizione.x, &pacchi[i].posizione.y, &pacchi[i].posizione.z); fscanf(fp,"%lf %lf %lf", &pacchi[i].dimensioni.x, &pacchi[i].dimensioni.y, &pacchi[i].dimensioni.z); TotalVolume += pacchi[i].dimensioni.x * pacchi[i].dimensioni.y * pacchi[i].dimensioni.z; if (TotalVolume >= (container.x * container.y * container.z)) { printf ("Container sottodimensionato.\n"); return -1; } ; if (WrongPosition(pacchi[i].posizione, pacchi[i].dimensioni, container)) { printf ("Il pacco #%ld e' in posizione scorretta.\n", i); return -1; } for (j=i+1; j<numpacchi; j++) { if (Compenetrazione(pacchi[MAX_PACCHI].posizione, pacchi[MAX_PACCHI].dimensioni)) { printf ("Compenetrazione tra pacchi.\n"); return -1; } if (Stabilita(pacchi[MAX_PACCHI].posizione, pacchi[MAX_PACCHI].dimensioni)) { printf ("Mancata stabilità tra pacchi.\n"); return -1; } } } return 0; } int WrongPosition (struct coordinate posizione, struct coordinate dimensioni, struct coordinate container) { if ((posizione.x + dimensioni.x > container.x) || (posizione.y + dimensioni.y > container.y) || (posizione.z + dimensioni.z > container.z)) { return 1; } return 0; } int Compenetrazione (struct coordinate posizione, struct coordinate dimensioni) { int i = 0,j = 1; if ((pacchi[j].posizione.x < (pacchi[i].posizione.x + pacchi[i].dimensioni.x)) && (pacchi[j].posizione.y < (pacchi[i].posizione.y + pacchi[i].dimensioni.y))) { return 1; } if ((pacchi[j].posizione.x < (pacchi[i].posizione.x + pacchi[i].dimensioni.x)) && (pacchi[j].posizione.z < (pacchi[i].posizione.z + pacchi[i].dimensioni.z))) { return 1; } if ((pacchi[j].posizione.z < (pacchi[i].posizione.z + pacchi[i].dimensioni.z)) && (pacchi[j].posizione.y < (pacchi[i].posizione.y + pacchi[i].dimensioni.y))) { return 1; } return 0; } int Stabilita (struct coordinate posizione, struct coordinate dimensioni) { long int i,j; if ((pacchi[j].posizione.y == (pacchi[i].posizione.y + pacchi[i].dimensioni.y))) { if ((pacchi[j].dimensioni.z) * (pacchi[j].dimensioni.x) > (pacchi[i].dimensioni.z) * (pacchi[i].dimensioni.x)) { return 1; } } return 0; } ]

Rispondi quotando