PDA

Visualizza la versione completa : [C] funzioni di controllo spaziale


Mandibola
22-11-2010, 09:46
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:

[/#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;
}
]

ramy89
22-11-2010, 11:20
Si fa cosi' a postare il codice:


[code]codice indentato[/ code]

(senza spazio)
Per il resto non so aiutarti.

LeleFT
22-11-2010, 11:33
Originariamente inviato da Mandibola
(scusate ma non so come si scrive con i TAG)

Nel Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887), al punto 6, c'Ŕ anche un esempio di uso dei tag CODE...




qui tutto il codice indentato



Non ci vuole molto...


Ad ogni modo, se il codice non Ŕ indentato (come nel tuo caso), anche il tag CODE serve a poco... l'indentazione Ŕ fondamentale per poter scrivere codice comprensibile (anche a chi lo scrive, non solo a chi lo legge).

Loading