Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C] help me please

  1. #1

    [C] help me please

    Aiutatemi che non ne esco:
    il programma deve prendere le dimensioni di un container, il numero di pacchi contenuti e le dimensioni dei pacchi contenuti; deve verificare se sbordano, se non si compenetrano e se sono stabili; io ho fatto cosi' ma non è corretto, perchè???

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

    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;
    struct Pacco pacchi[MAX_PACCHI];

    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)
    {
    long int i,j;
    struct Pacco pacchi[MAX_PACCHI];

    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;
    struct Pacco pacchi[MAX_PACCHI];

    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
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Leggi prima il Regolamento interno, poi apri una nuova discussione seguendone le direttive:

    1) Il titolo deve avere un senso: deve indicare il contenuto della discussione
    2) Il codice va postato indentato all'interno degli appositi tag CODE
    3) Devi indicare esattamente qual è l'errore che ottieni (dire "così non è corretto" non aiuta nessuno a trovare l'errore).

    Chiudo questa discussione.

    Ciao.
    "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 © 2025 vBulletin Solutions, Inc. All rights reserved.