Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] funzioni di controllo spaziale

    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;
    }
    ]

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Si fa cosi' a postare il codice:
    [code]
    codice:
    codice indentato[/ code]
    (senza spazio)
    Per il resto non so aiutarti.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: [C] funzioni di controllo spaziale

    Originariamente inviato da Mandibola
    (scusate ma non so come si scrive con i TAG)
    Nel Regolamento interno, al punto 6, c'è anche un esempio di uso dei tag CODE...

    [code]

    qui tutto il codice indentato

    [/code]

    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).
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.