ragazzo1223 ha scritto:
Ho un piccolo problema con questo esercizio, vi passo qui sotto il codice che ho scritto:
/*a) Realizzare un sottoprogramma C che riceve come parametri un array di scatole sc, la sua
dimensione dim ed un valore in virgola mobile che rappresenta un peso. Analizzando le scatole
nell’ordine in cui si trovano nell’array, il sottoprogramma valuta e restituisce il numero di scatole che
può essere immagazzinato in un container avente una capienza pari al peso ricevuto come ultimo
parametro.
b) Scrivere un programma C che chiede all’utente i dati contenuti in dieci scatole; per ciascuna scatola
il programma chiede prima quanti oggetti sono contenuti e poi i dati di ciascun oggetto. In seguito il
programma invoca la funzione sopra definita e visualizza il risultato a video.
*/
#include <stdio.h>
#include <string.h>
#define N_OGGETTI 100
#define MAX_STR 100
#define dim1 3
typedef struct{
char descrizione[MAX_STR+1];
float peso_per_unita;
int quanti;
int codice;
} t_oggetto;
typedef struct{
t_oggetto oggetti[N_OGGETTI];
int n_oggetti;
char descrizione[MAX_STR+1];
int codice;
} t_scatola;
int partea(t_scatola sc[], int dim, int a ) {
int i;
int scatole=0;
for(i=0;i<dim;i++){
if(sc[i].oggetti[i].peso_per_unita*sc[i].oggetti[i].quanti<a){
scatole++;
a=a-(sc[i].oggetti[i].peso_per_unita*sc[i].oggetti[i].quanti);
if(a<0){
scatole--;
return scatole;
}
}
}
return scatole;
}
int main(){
int i=0;
t_scatola sc[dim1];
for(i=0;i<dim1;i++){
printf("quanti oggetti ci sono nella scatola? ");
scanf("%d", &sc[i].oggetti[i].quanti);
printf("quanto pesa un singolo oggetto? ");
scanf("%d", &sc[i].oggetti[i].peso_per_unita);
}
printf("\n");
printf("il risultato di scatole che possono entrare nel container e': %d", partea(sc,dim1,25));
return 0;
}
quando mi stampa il risultato indipendentemente dal peso che metto per il container mi stampa il numero di scatole che ho inserito, mi spiego meglio....
per esempio se il peso che può reggere è: 25kg
se io registro 3 scatole dal peso di 300 kg l'una il programma mi stamperà che dentro il container ci possono stare 3 scatole, cosa non vera, dove sbaglio?
un altra cosa, ho messo dim1 uguale 2 per fare in fretta, e il peso del container è un int perché risulta più facile da fare per una prova.
Ciao, l' errore è una cavolata assurda !
Hai sbagliato specificatore di formato nella 2 scanf del main, questo è cio che hai scritto:
scanf("%d", &sc[i].oggetti[i].peso_per_unita);
questa è quella corretta:
scanf("%f", &sc[i].oggetti[i].peso_per_unita);
Se ti posso dare un consiglio comunque indenta meglio il programma e usa la parentesi, cosi è più semplice leggere il codice. Ti faccio un esempio:
È più semplice e immediato leggere questo:
if( ( (sc[i].oggetti[i].quantita) * (sc[i].oggetti[i].peso_per_unita) ) <= a ){
scatole++;
a -= ( (sc[i].oggetti[i].quantita) * (sc[i].oggetti[i].peso_per_unita) );
}
Piuttosto che questo:
if(sc[i].oggetti[i].peso_per_unita*sc[i].oggetti[i].quanti<a){
scatole++;
a=a-(sc[i].oggetti[i].peso_per_unita*sc[i].oggetti[i].quanti);
stesso discorso vale per l'indentazione, è decisamente più leggibile questo:
for(int i = 0; i < dim ;i ++){
if( ( (sc[i].oggetti[i].quantita) * (sc[i].oggetti[i].peso_per_unita) ) <= a ){
scatole++;
a -= ( (sc[i].oggetti[i].quantita) * (sc[i].oggetti[i].peso_per_unita) );
if(a < 0){
scatole--;
return scatole;
}
}
}
che questo:
for(i=0;i<dim;i++){
if(sc[i].oggetti[i].peso_per_unita*sc[i].oggetti[i].quanti<a){
scatole++;
a=a-(sc[i].oggetti[i].peso_per_unita*sc[i].oggetti[i].quanti);
if(a<0){
scatole--;
return scatole;
}
}
}