Salve, sono nuovo del forum, sono bloccato da ieri sera in questo esercizio, in particolare non riesco a far funzionare le funzioni
Grazie per l'aiuto
Il testo dell'esercizio:
Si scriva un programma in grado di gestire un listino prezzi, ovvero un programma con cui sia possibile gestire un elenco di prodotti e i loro relativi prezzi in €. Il programma utilizza una matrice di caratteri chiamata warehouse di dimensione NxM per memorizzare i nomi dei prodotti (massimo N prodotti) e un vettore di numeri decimali chiamato price di dimensione N usato per memorizzare i prezzi dei prodotti (il prezzo presente nell’i-esima cella di price corrisponde al prezzo del prodotto il cui
nome è memorizzato nell’i-esima riga di warehouse). Di seguito la visualizzazione logica dei dati definiti.
M
N
warehouse price
Nel vettore price, il valore -2 indica linea libera (ossia nessun prodotto nella riga corrispondente in warehouse), mentre un valore positivo indica che la linea corrispondente in warehouse contiene un prodotto valido a cui è stato associato un prezzo. All’avvio del programma, il vettore price è totalmente inizializzato a -2 (ossia il listino è vuoto/non contiene prodotti).
Il programma propone all’utente un elenco di operazioni possibili sottoforma di menu. L’utente decide quale operazione eseguire selezionando il numero associato all’operazione di suo interesse. Le operazioni possibili sono: 1) Inserimento di un nuovo prodotto e relativo prezzo 2) Stampa listino attuale (elenco dei prodotti con i relativi prezzi) 3) Uscita dal programma
Le prime due operazioni devono essere realizzate tramite l’invocazione delle seguenti due funzioni di cui si forniscono prototipo e funzionalità: ? insert_product: è una funzione che permette di inserire un nuovo prodotto e il suo prezzo nel listino (il nome del prodotto deve essere di max M-1 caratteri). La funzione restituisce il valore 1 se il prodotto non era ancora presente nel listino e il suo inserimento nel listino è avvenuto con successo, 0 se già presente (ossia prodotto già inserito in precedenza), 2 se il listino è pieno (e quindi non risulta possibile inserire il nuovo prodotto). Se il prodotto non era ancora presente nel listino la funzione deve inserire il suo nome nella prima cella libera presente in warehouse e il prezzo a lui associato nella cella corrispondente di price.
int insert_product(char warehouse[][M], float price[], int n, char new_product[], float price_new_product);
Il parametro n corrisponde al numero di righe della matrice warehouse, che corrisponde anche al numero di celle del vettore price (in fase di invocazione nel nostro caso passeremo il valore N).
? print_all: è una funzione che permette di visualizzare a video il contenuto del listino (elenco prodotti e relativi prezzi). Inoltre, la funzione restituisce due valori (tramite due parametri passati per indirizzo): il prezzo medio ed il prezzo massimo dei prodotti presenti nel listino. Visualizzare a video i due valori restituiti.
void print_all(char warehouse[][M], float price[], int n, float *avg, float *max);
Avvertenza: l’esercizio suggerisce di utilizzare il vettore price contemporaneamente in due modi: per contenere il prezzo della merce, come flag di posizione vuota. Tenerne conto quando si cerca il nome di un prodotto, quando si effettua la stampa, etc
Questo è il codice che ho scritto
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define N 5
#define M 50
int insert_product(char warehouse[][M], float price[], int n, char new_product[], float price_new_product);
void print_all(char warehouse[][M], float price[], int n, float *avg, float *max);
int main()
{
char warehouse[N][M];
int price[N]={-2, -2, -2, -2, -2};
int i, men=1;
char new_product[M];
int prezzo;
int media=0, max=0;
printf("Inserisci %d prodotti:\n", N);
for(i=0; i<N; i++){
gets(warehouse[i]);
}
printf("Inserisci i prezzi dei relativi prodotti:\n");
for(i=0; i<N; i++){
scanf("%d", &price[i]);
}
printf("\n\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * *");
printf("\n* *");
printf("\n* MENU': *");
printf("\n* 1. Inserisci un nuovo prodotto e il suo prezzo *");
printf("\n* 2. Stampa listino prezzi *");
printf("\n* 3. Uscita dal programma *");
printf("\n* *");
printf("\n* * * * * * * * * * * * * * * * * * * * * * * * * * * * *");
printf("\nInserisci uno dei numeri per continuare nel programma:\n");
scanf("%d", &men);
while(men!=0){
if(men==1){
printf("\nInserisci il prodotto e il prezzo:\n");
scanf("%s %d", &new_product, &prezzo);
insert_product(warehouse, price, N, new_product, prezzo);
printf("%d", insert_product(warehouse, price, N, new_product, prezzo));
}
else if(men==2){
print_all(warehouse, price, N, &media, &max);
for(i=0; i<N; i++){
printf("%s %d\n", warehouse[i], price[i]);
}
printf("Il prezzo medio e' %f, il prezzo massimo e': %d", media, max);
}
else if (men==3){
printf("\nUscita in corso...\n\n");
return -1;
}
printf("\nInserisci uno dei numeri per continuare nel programma:\n");
scanf("%d", &men);
}
}
int insert_product(char warehouse[][M], float price[], int n, char new_product[], float price_new_product)
{
int i;
for(i=0; i<N; i++){
if (strcmp(warehouse[i], new_product)==0){
return 0;
}
}
for(i=0; i<N; i++){
if (price[i]==-2){
strcpy(warehouse[i], new_product);
return 1;
}
}
}
void print_all(char warehouse[][M], float price[], int n, float *avg, float *max)
{
int i;
int sum=0;
int massimo=0;
for(i=0; i<N; i++){
if(massimo<price[i]){
massimo = price[i];
}
if(price[i]>0){
sum+=price[i];
}
}
*avg=(float)sum/n;
*max=massimo;
}
Grazie in anticipo