Esercizio su una funzione in C

di il
4 risposte

Esercizio su una funzione in C

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

  • Re: Esercizio su una funzione in C

    Metti tutto tra i tag code.
  • Re: Esercizio su una funzione in C

    antragorn ha scritto:


    Metti tutto tra i tag code.
    Grazie mille, dovrebbe essere messo nei tag code
  • Re: Esercizio su una funzione in C

    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;
    }
    
  • Re: Esercizio su una funzione in C

    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