Esercizio su una funzione in C

di Anonimizzato27782 il
4 risposte
Buonasera, sono alle prime armi con il linguaggio C. Dovrei scrivere una funzione che, avendo due liste, mi dica quale abbia il valor medio maggiore. Ho deciso di muovermi così.
#include <stdio.h>
#include <stdlib.h>
struct list1 {
	float value;
	struct list *next_ptr;
};
struct list2 {
	float value;
	struct list *next_ptr;
};
void init(struct list **ptrptr){
	*ptrptr=NULL;
}
float calcola_media(struct list1*ptr){
float sum=0;
int numero_elementi=0;
    while(ptr!=NULL){

        sum=sum+ptr->value;
        numero_elementi++;
        ptr=ptr->next_ptr;
return sum/numero_elementi;


    }
void maggior_valor_medio(struct list1*ptr1, struct list2*ptr2){
struct list1 {
	float value;
	struct list1 *next_ptr;
} t_list;
 struct list2 {
	float value;
	struct list2 *next_ptr;
} ;

float media_listaA,media_listaB;
init(&list1);
init(&list2);

media_listaA=calcola_media(list1);
media_listaB=calcola_media(list2);
if (media_listaA<media_listaB){
    printf("Le lista B è più lunga della lista A");}
     else if (media_listaA>media_listaB){
        printf("La lista A è più lunga");}
        else{
            printf("le due liste sono uguali");
        }
    }
    }
E' Corretto?
Grazie mille per la disponibilità!

4 Risposte

  • Metti tutto tra i tag code.
  • antragorn ha scritto:


    Metti tutto tra i tag code.
    Grazie mille, dovrebbe essere messo nei tag code
  • Il tuo programma è un gran casino (scusa il francesismo). Mancano interi pezzi e ci sono doppioni e ripetizioni a iosa. Perché dici "più lunga" e nell'enunciato parli di valore medio?
    Bastano una funzione, una struttura tipo lista, 4 variabili ed un if:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct list {
    	float value;
    	struct list *next_ptr;
    } Lista;
    
    float calcola_media(Lista *);
    int init(Lista *);
    
    int main(int argc, char **argv){
    	Lista * lista1 = NULL;
    	Lista * lista2 = NULL;
    	float media1, media2;
    	// -----------------------------------------------
    	// TODO: Inizializzo le due liste con i valori
    	// Non è specificato come generi i valori, ma supponiamo
    	// di poter usare un metodo random che ad ogni chiamata
    	// ti genera una lista dinamica compresa tra 1 e N elementi.
    	// -----------------------------------------------
    	int res = init(lista1);
    	// se inizializzo una lista, devo ritornare 0 o 1 a seconda se ci sono stati o no problemi
    	// durante la creazione della lista. Se ci sono stati problemi esco dal programma.
    	if (res)
    		return 1;	// Puoi mettere anche un messaggio d'errore prima di return
    	res = init(lista2);
    	if (res)
    		return 1;	// Puoi mettere anche un messaggio d'errore prima di return
    	// Calcolo del valor medio
    	media1 = calcola_media(lista1);
    	media2 = calcola_media(lista2);
    	if (media1 > media2) {
    		printf(".....");
    	}else{
    		printf(".....");
    	}
    	return 0;
    }
    
    int init(Lista *ptr){
    	// Adesso tocca a te
    }
    
    float calcola_media(Lista *ptr){
    	float sum=0;
    	int numero_elementi=0;
    	while (ptr != NULL){
    	        sum=sum+ptr->value;
            	numero_elementi++;
            	ptr=ptr->next_ptr;
            }
            return sum/numero_elementi;
    }
    
  • Andrea Quaglia ha scritto:


    Il tuo programma è un gran casino (scusa il francesismo). Mancano interi pezzi e ci sono doppioni e ripetizioni a iosa. Perché dici "più lunga" e nell'enunciato parli di valore medio?
    Bastano una funzione, una struttura tipo lista, 4 variabili ed un if:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct list {
    	float value;
    	struct list *next_ptr;
    } Lista;
    
    float calcola_media(Lista *);
    int init(Lista *);
    
    int main(int argc, char **argv){
    	Lista * lista1 = NULL;
    	Lista * lista2 = NULL;
    	float media1, media2;
    	// -----------------------------------------------
    	// TODO: Inizializzo le due liste con i valori
    	// Non è specificato come generi i valori, ma supponiamo
    	// di poter usare un metodo random che ad ogni chiamata
    	// ti genera una lista dinamica compresa tra 1 e N elementi.
    	// -----------------------------------------------
    	int res = init(lista1);
    	// se inizializzo una lista, devo ritornare 0 o 1 a seconda se ci sono stati o no problemi
    	// durante la creazione della lista. Se ci sono stati problemi esco dal programma.
    	if (res)
    		return 1;	// Puoi mettere anche un messaggio d'errore prima di return
    	res = init(lista2);
    	if (res)
    		return 1;	// Puoi mettere anche un messaggio d'errore prima di return
    	// Calcolo del valor medio
    	media1 = calcola_media(lista1);
    	media2 = calcola_media(lista2);
    	if (media1 > media2) {
    		printf(".....");
    	}else{
    		printf(".....");
    	}
    	return 0;
    }
    
    int init(Lista *ptr){
    	// Adesso tocca a te
    }
    
    float calcola_media(Lista *ptr){
    	float sum=0;
    	int numero_elementi=0;
    	while (ptr != NULL){
    	        sum=sum+ptr->value;
            	numero_elementi++;
            	ptr=ptr->next_ptr;
            }
            return sum/numero_elementi;
    }
    
    Grazie mille! Sono alle prime armi con il linguaggio C e volevo sapere un metodo per risolvere questo quesito. Ancora tante grazie per l'aiuto!
Devi accedere o registrarti per scrivere nel forum
4 risposte