eccolo qua tutto il programma, dovrebbe esserci tutto quello che chiede il testo
codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
struct dati
{
char codice[4];
int portata;
};
typedef struct dati codiceautocarro;
int scelta_autocarro(int peso, int cont,codiceautocarro c[MAX]);
int due_autocarri(int sped,int z,codiceautocarro d[MAX]);
int main()
{
FILE *autocarri;
int pesospedizione=0,i=0,flag=0;
codiceautocarro a[MAX];
autocarri=fopen("trasporti.txt","r");
if(autocarri==NULL)
{
printf("\n\nErrore nell'apertura del file\n\n");
exit(1);
}
fscanf(autocarri,"%s %d", a[i].codice, &a[i].portata);
i++;
while(!feof(autocarri) && i<100)
{
fscanf(autocarri,"%s %d", a[i].codice, &a[i].portata);
i++;
}
printf("Sono stati letti %d autocarri\n",i);
fclose(autocarri);
while(i<=MAX && flag!=3)
{
printf("\nInserire il peso della prossima spedizione da effettuare >");
scanf("%d",&pesospedizione);
flag=scelta_autocarro(pesospedizione,i,a);
}
return 0;
}
int scelta_autocarro(int peso, int cont,codiceautocarro c[MAX])
{
int j=0,k=0,minimo=0,x=0,l=0;
minimo=c[0].portata;
for(j=0;j<cont;j++)
{
if(c[j].portata>=peso)
{
if(c[j].portata<=minimo)
{
l++;
minimo=c[j].portata;
k=j;
}
}
}
if(l!=0)
{
strcpy(c[k+1].codice,c[k].codice);
c[k].portata=c[k+1].portata;
k++;
printf("\n\nAutocarro utilizzato per la spedizione > %s\n\n",c[k].codice);
}
else
x=due_autocarri(peso,cont,c);
return x;
}
int due_autocarri(int sped,int z,codiceautocarro d[MAX])
{
int flg=0,g=0,t=0,y=0,min=0,u=0,p=0;
min=(d[0].portata+d[1].portata);
for(g=0;g<z;g++)
{
for(t=0;t<z;t++)
{
if(t!=g)
{
if((d[g].portata+d[t].portata)>=sped)
{
y++;
if((d[g].portata+d[t].portata)<=min)
{
min=(d[g].portata+d[t].portata);
u=g;
p=t;
}
}
}
}
}
if(y==0)
{
flg=3;
printf("\n\nLa spedizione non puo essere effettuata\n\n");
}
else
{
//Serve per eliminare il codice dell'autocarro già utilizzato....ma non funziona!
strcpy(d[u+1].codice,d[u].codice);
d[u].portata=d[u+1].portata;
u++;
strcpy(d[p+1].codice,d[p].codice);
d[p].portata=d[p+1].portata;
p++;
printf("\n\nAutocarri utilizzati per la spedizione: %s %s\n\n",d[u].codice,d[p].codice);
}
return flg;
}
Unico problema, ho messo un commento, non riesco a eliminare nella seconda funzione, gli autocarri già utilizzati....qualcuno ha qualche idea?