PDA

Visualizza la versione completa : problema di programmazione in C


zianello
17-01-2009, 12:22
ragazzi, qualcuno può aiutarmi a risolvere questo problema che non riesco a cavarne un ragno dal buco?

L'esercizio richiede di gestire un magazzino, in particolare le fasi di movimentazione del materiale.

Ad ogni esecuzione della verifica automatica viene generato il file archivio "magazzino.dat" (dal verificatore nella directory corrente) contenente i dati descrittivi di diversi articoli, completati dalla qualità attualmente disponibile in magazzino, alla quantità minima al di sotto della quale il materiale va ordinato ai fornitori e dalla quantità massima di stoccaggio consentita.

I dati memorizzati per ogni articolo sono nell'ordine:

codice numero intero
descrizione stringa di 100 caratteri
fornitori array di 5 stringhe di 50 caratteri cad.
peso numero intero
quantita numero intero
quantita_min numero intero
quantita_max numero intero

Generare il file con il codice C necessario per implementare la seguente funzione richiesta per la gestione del magazzino:
- La funzione <aggiorna(codice, operazione, quantita)> deve permettere di aggiornare la quantità disponibile di un articolo, il codice del quale è specificato nel parametro <codice>, in base al tipo di operazione e alla quantità specificata (dai parametri <operazione> e <quantia>):
Se il parametro <operazione>, di tipo char, è uguale a 'V', bisogna gestire la vendita di un articolo, decrementando la quantità disponibile a magazzino (aggiornando cioè il relativo record di file), segnalando eventuali errori con le modalità sotto riportate.

Se il parametro <operazione> è uguale a 'A', è necessario gestire l'acquisto di un articolo aggiornando (incrementando) la quantità disponibile a magazzino per l'articolo specificato dal parametro <codice>, segnalando il risultato dell'operazione con le modalità sotto riportate.

Altri valori del parametro <operazione> devono generare un errore, restituendo il valore -2.

I dati devono essere aggiornati direttamente sul file e comunque, a meno di errori, la funzione deve restituire la quantità attualmente disponbile a magazzino per l'articolo specificato dal codice passato come primo parametro.

Se la quantità attualmente disponibile non è sufficiente per soddisfare la vendita, il magazzino non deve essere aggiornato.
Questa situazione viene segnalata facendo restituire alla funzione <aggiorna> il valore intero -1.

Inoltre:

Se la quantità disponibile aggiornata (dopo l'operazione) è minore della quantità minima permessa, deve essere invocata la funzione
"riordino(codice)" dove <codice> è il codice dell'articolo specificato e sottoscorta.
Questa condizione non rappresenta un errore.

Se la quantità dosponibile aggiornata (dopo l'operazione) è maggiore della quantità massima permessa, deve essere invocata la funzione
"esubero(codice)" dove <codice> è il codice dell'articolo specificato e in esubero.
Questa condizione non rappresenta un errore.

NOTA: ogni articolo è sempre specificato attraverso il suo codice.

NOTA: descrizioni e fornitori sono stringhe di caratteri casuali, senza significato.

hurricane86
17-01-2009, 12:31
Ciao,

nessuno qua ti farà l'esercizio anche perchè non è questa la funzione del forum. Io ti consiglio di dividere il lavoro in moduli. Ad esempio per prima cosa realizza le strutture dati dove memorizzare i dati. Ad esempio (prendila come ultra bozza):



typedef struct Item{

unsigned int code;
char desc[100];
char shops[5][50];
unsigned int weight;
unsigned int q_max;
unsigned int q_min;

}Item;


Poi ti servirà una struttura per contenere più articoli (ad esempio una lista...):



typedef struct ItemList{

Item **items;
unsigned int nums;

}ItemList;



. Fatta questa sviluppa le funzioni per caricare i dati dal file e eventualmente per aggiornarli...

Questo può essere un inizio, se posti del codice quando sarai un po avanti, vedrai che troverai maggiori aiuti

zianello
18-01-2009, 19:46
ho tentato di svolgerlo cosi... non so quanto sia giusto..


#include<stdio.h>
struct articolo{
int codice;
char descrizione[100];
char fornitori[5][50];
int peso;
int quantita;
int quantita_min;
int quantita_max;
};
FILE *fp;
int aggiorna(int codice, char operazione, int quantita)
{
struct articolo artic={"0","","","0","0","0","0"}; /* inizializzo a zero la struct */

if((fp=fopen("magazzino.dat","r+"))==NULL)
{
printf("Non apribile");
}
else
{
fseek(fp,(codice-1)*sizeof(struct articolo),SEEK_SET);
fread(&artic, sizeof(struct articolo),1, fp);
if(operazione=='V')
{
if(quantita>artic.quantita)
{
return(-1);
}
else
{
articolo -=quantita;
fwrite(&artic, sizeof(struct articolo),1,fp);
}
}
else
{
if(operazione=='A')
{
artic.quantita += quantita;
fwrite(&artic, sizeof(struct articolo),1,fp);
}
else
{
return(-2);
}
}
if(artic.quantita<artic.quantita_min)
{
riordino(codice);
}
else
{
if(artic.quantita>artic.quantita_max)
{
esubero(codice)
}
}
return(quantita);
fclose(fp);
}
}

oregon
18-01-2009, 19:57
Non si inizializza la struttura con

struct articolo artic={"0","","","0","0","0","0"}; /* inizializzo a zero la struct */

ricorda che alcuni elementi sono numerici ...

In ogni caso, non c'e' il main, il codice non e' compilabile ed e' molto difficile seguire il codice scritto senza indentazione e senza usare i tag code ... anzi, ci si rinuncia ...

zianello
19-01-2009, 00:05
gli elementi numerici infatti sono inizializzati a zero...

il problema non richiede un main quindi a me interessa solo che la funzione funzioni correttamente...

per quanto riguarda le identazioni io posto il programma identato ma viene rappresentato senza... anche modificandolo ripresenta sempre la stessa situazione

hurricane86
19-01-2009, 07:53
Originariamente inviato da zianello
gli elementi numerici infatti sono inizializzati a zero...

il problema non richiede un main quindi a me interessa solo che la funzione funzioni correttamente...

per quanto riguarda le identazioni io posto il programma identato ma viene rappresentato senza... anche modificandolo ripresenta sempre la stessa situazione

1- per testare una funzione ci vuole sempre un main :D
2- se il codice non lo posti tra i tag PHP o CODE perdi l'indentazione

oregon
19-01-2009, 08:02
Originariamente inviato da zianello
gli elementi numerici infatti sono inizializzati a zero...

Non e' cosi'. Se compilassi la tua funzione (con un main) ti accorgeresti che quell'inizializzazione e' sbagliata.


il problema non richiede un main quindi a me interessa solo che la funzione funzioni correttamente...

Per provare che la "funzione funzioni" devi inserire un main e compilare il programma oltre che eseguirlo. La programmazione "teorica" non va bene ...


per quanto riguarda le identazioni io posto il programma identato ma viene rappresentato senza... anche modificandolo ripresenta sempre la stessa situazione

Usa i tag CODE !

Loading