Il 12/04/2013 17.26, Vincenzo Mercuri ha scritto:
> Per me è ok, forza vai avanti, ti aspettiamo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int codice_modello;
int durata_batteria;
int peso;
float prezzo_acquisto;
int tot_pezzi_modello;} scheda_cellulare;
typedef struct {
scheda_cellulare c;
float prezzo_vendita;
int pezzi_arrivati_modello;} scheda_magazzino;
#define Smax 2
#define Nmax 2
typedef scheda_cellulare S[Smax];
typedef scheda_magazzino N[Nmax];
void leggi(S S1);
int magazzino(N Neg);
void stampaS(S S1);
void stampaN(N Neg);
void aggiorna(S S1,N Neg,int pezzi_arrivati_modello );
void ordinaInsertionSort(N Neg, int numero_arrivi);
void merce(N N1,N N2,int numero_arriviN1, int numero_arriviN2 );
void crealista(N Neg, int numero_arrivi);
int main() {
S S1={0};
N N1={0},N2={0};
char nome_negozio[3];
int numero_arriviN1=0;
int numero_arriviN2=0;
int done=0;
leggi(S1);
stampaS(S1);
do {
printf("Digita il nome del negozio nel quale vuoi inserire gli
arrivi\n");
scanf("%s",nome_negozio);
if(strcmp(nome_negozio,"N1")==0) {
numero_arriviN1=magazzino(N1);
done=1;}
else if(strcmp(nome_negozio,"N2")==0) {
numero_arriviN2=magazzino(N2);
done=1;}
else printf("Nome negozio errato, ridigitare\n");
} while(!done);
aggiorna(S1, N1, numero_arriviN1);
stampaS(S1);
ordinaInsertionSort(N1,numero_arriviN1);
stampaN(N1);
merce(N1,N2,numero_arriviN1,numero_arriviN2);
crealista(N1, numero_arriviN1);
system("PAUSE");
return 0;
}
void leggi(S S1) {
int i;
for(i=0;i<Smax;i++) {
S1[i].codice_modello=i+1;
printf("Inserire la durata batteria del modello cell %d\n",i+1);
scanf("%d",&S1[i].durata_batteria);
printf("Inserire il peso del modello cell %d\n",i+1);
scanf("%d",&S1[i].peso);
printf("Inserire il prezzo di acquisto del modello cell
%d\n",i+1);
scanf("%f",&S1[i].prezzo_acquisto);}
}
int magazzino(N Neg) {
int done=0;
char conferma[3];
int numero_arrivi=0;
int i=0;
do {
printf("Ci sono degli arrivi da inserire in magazzino? dgt SI
per conferma\n");
scanf("%s",conferma);
if(!strcmp(conferma,"SI")) {
printf("Inserire codice numerico dell'arrivo Nro
%d\n",i+1);
scanf("%d",&Neg[i].c.codice_modello);
printf("Inserire il prezzo di vendita dell'arrivo
Nro %d\n",i+1);
scanf("%f",&Neg[i].prezzo_vendita);
printf("Inserire il num di pezzi arrivati
dell'arrivo Nro %d\n",i+1);
scanf("%d",&Neg[i].pezzi_arrivati_modello);
numero_arrivi++;
i++;}
else
done=1;
} while(!done);
return numero_arrivi;
}
void aggiorna(S S1, N Neg, int pezzi_arrivati_modello) {
int i,j=0;
for(i=0;i<Smax;i++)
for(j=0;j<pezzi_arrivati_modello;j++)
if(Neg[j].c.codice_modello==i+1)
S1[i].tot_pezzi_modello+=Neg[j].pezzi_arrivati_modello;
}
void ordinaInsertionSort(N Neg, int numero_arrivi) {
int i,j;
N tmp;
int num_cell_totali=0;
for (i=1;i<numero_arrivi;i++)
{
tmp[i]=Neg[i];
for (j= i-1;(j>=0) &&
(Neg[j].prezzo_vendita>tmp[i].prezzo_vendita);j--)
Neg[j+1]=Neg[j];
Neg[j+1]=tmp[i];
}
for(i=0;i<numero_arrivi;i++)
num_cell_totali+=Neg[i].pezzi_arrivati_modello;
printf("Il numero totale di cellulari arrivati in magazzino è:
%d\n",num_cell_totali);
}
void merce(N N1,N N2,int numero_arriviN1, int numero_arriviN2 ) {
int arrivi_totali=numero_arriviN1+numero_arriviN2;
int v[arrivi_totali];
int i,j;
scheda_magazzino Neg[arrivi_totali];
scheda_magazzino tmp[arrivi_totali];
for(i=0;i<numero_arriviN1;i++)
Neg[i]=N1[i];
for(i=numero_arriviN1;i<arrivi_totali;i++)
Neg[i]=N2[i-numero_arriviN1];
for(i=0;i<arrivi_totali;i++) {
printf("\n\nCodice modello:%d, prezzo vendita:%f, tot
pezzi:%d\n\n",
Neg[i].c.codice_modello,Neg[i].prezzo_vendita,Neg[i].pezzi_arrivati_modello);}
for (i=1;i<arrivi_totali;i++)
{
tmp[i]=Neg[i];
for (j= i-1;(j>=0) &&
(Neg[j].prezzo_vendita>tmp[i].prezzo_vendita);j--)
Neg[j+1]=Neg[j];
Neg[j+1]=tmp[i];
}
for(i=0;i<arrivi_totali;i++)
v[i]=Neg[i].c.codice_modello;
}
struct nodo{
scheda_magazzino cellulare;
struct nodo *next;};
void crealista(N Neg, int numero_arrivi) {
struct nodo *testaL1;
struct nodo *nuovoElementoL1;
testaL1=NULL;
struct nodo *testaL2;
struct nodo *nuovoElementoL2;
testaL2=NULL;
int i;
for(i=0;i<numero_arrivi;i++) {
if(Neg[i].c.peso>100)
{
nuovoElementoL1=(struct nodo*)malloc(sizeof(struct nodo));
nuovoElementoL1->cellulare=Neg[i];
nuovoElementoL1->next=testaL1;
testaL1=nuovoElementoL1;
}
else if(Neg[i].c.peso<100)
{
nuovoElementoL2=(struct nodo*)malloc(sizeof(struct nodo));
nuovoElementoL2->cellulare=Neg[i];
nuovoElementoL2->next=testaL2;
testaL2=nuovoElementoL2;
}
}
struct nodo *tmp;
tmp=testaL1;
while(tmp!=NULL)
{
printf("%d ",tmp->cellulare.c.codice_modello);
tmp=tmp->next;
}
}
void stampaS(S S1) {
int i=0;
for(i=0;i<Smax;i++) {
printf("\n\nCodice modello:%d, durata batteria:%d, peso:%d,
prezzo acquisto:%f, tot pezzi:%d\n\n",
S1[i].codice_modello,S1[i].durata_batteria,S1[i].peso,S1[i].prezzo_acquisto,S1[i].tot_pezzi_modello);}
}
void stampaN(N Neg) {
int i=0;
for(i=0;i<Nmax;i++) {
printf("\n\nCodice modello:%d, prezzo vendita:%f, tot
pezzi:%d\n\n",
Neg[i].c.codice_modello,Neg[i].prezzo_vendita,Neg[i].pezzi_arrivati_modello);}
}
La funzione "crealista" non funziona, deve esserci un errore negli if ma
non sono riuscito a trovarlo.
Per il resto funziona anche se sicuramente ci saranno state soluzioni
migliori per risolvere l'esercizio.
Grazie ciao