Richiesta di aiuto e chiarimenti a voi esperti in materia

di il
4 risposte

Richiesta di aiuto e chiarimenti a voi esperti in materia

Buongiorno a tutti. sono alle prime armi e perdonate eventuali scemenze da me scritte.
vi chiedo gentilmente aiuto.
ho creato in visual studio (C) una lista utilizzando i puntatori
per completare l'esercizio devo però aggiungere delle funzionalità a tale costrutto: calcolo della media, della somma dei valori e della deviazione standard. Mi trovo in difficoltà nel richiamare le variabili per risolvere tali problemi e ho a lungo provato senza giungere ai risultati cercati.
sono arrivato qua per adesso:

#include <stdio.h>
#include < malloc.h>
#include "stdafx.h"


float Meanlist( struct elemento *pun)



//struttura della lista: preimpostata da C (studiala e basta)
struct elemento {
	int inf;
	struct elemento *pun;
};
struct elemento *crea_lista();
void visualizza_lista(struct elemento*);


int main()
{
	struct elemento *lista; // puntatore della lista
	lista = crea_lista(); // crea la lista
	visualizza_lista(lista); // stampa la lista
}
// strumenti per scorrere la lista:
struct elemento *crea_lista()
{
	struct elemento *p, *punt;
	int i, n;
	// permetto all'utente di aggiungere elementi alla mia lista
	printf("Specificare il numero di elementi… ");
	scanf("%d", &n);

	if (n == 0)
	{
		p = NULL; // lista vuota

	}
	else {
		/* creazione primo elemento */
		p = (struct elemento *)malloc(sizeof(struct elemento));
		printf("Inserisci il primo valore : ");
		scanf("%d", &p->inf);
		punt = p;
		// se la lista non è vuota ggiungo il primo elemento 
		/* creazione elementi successivi */
		for (i = 2; i <= n; i++)
		{
			punt->pun = (struct elemento *)malloc(sizeof(struct elemento));
			punt = punt->pun;
			printf("Inserisci il %d elemento : ", i);
			scanf("%d", &punt->inf);
		} // chiudo il for
		                                            
		punt->pun = NULL; // marcatore fine lista
						              
	} // chiudo l’if-else
	return(p);
} // chiudo la funzione

void visualizza_lista(struct elemento *p)
{
	printf("lista = ");

	// ciclo di scansione 
	while (p != NULL)
	{
		printf("%d", p->inf); // visualizza l’informazione	
		p = p->pun; // scorre di un elemento
		
	} 
	// conta degli elementi 
	printf("numero degli elementi %d", &inf );
	// somma degli elementi 
	void totale (int *inf, int totale)
	{
		totale = *inf;

	}
	printf("toale = %d", totale)
}
Vi ringrazio per tutte le correzioni e i consigli che saprete darmi

4 Risposte

  • Re: Richiesta di aiuto e chiarimenti a voi esperti in materia

    Modifica il post inserendo il codice tra i tag
  • Re: Richiesta di aiuto e chiarimenti a voi esperti in materia

    Ho modificato poco poco e aggiunto una funzione per stampare il totale...guarda se ti torna il procedimento
    
    #include <stdio.h>
    #include <malloc.h>
    
    
    
    //struttura della lista: preimpostata da C (studiala e basta)
    struct elemento {
       int inf;
       struct elemento *next;
    };
    
    
    struct elemento *crea_lista();
    void visualizza_lista(struct elemento*);
    int totaleInf(struct elemento*);
    
    
    int main()
    {
       struct elemento *lista; // puntatore della lista
       lista = crea_lista(); // crea la lista
       visualizza_lista(lista); // stampa la lista
       printf("%d\n", totaleInf(lista));
    }
    
    // strumenti per scorrere la lista:
    struct elemento *crea_lista()
    {
       struct elemento *p, *punt;
       int i, n;
       // permetto all'utente di aggiungere elementi alla mia lista
       printf("Specificare il numero di elementi... ");
       scanf("%d", &n);
    
       if (n == 0)
       {
          p = NULL; // lista vuota
    
       }
       else {
          /* creazione primo elemento */
          p = (struct elemento *)malloc(sizeof(struct elemento));
          printf("Inserisci il primo valore: ");
          scanf("%d", &p->inf);
    	  
          punt = p;
          // se la lista non è vuota ggiungo il primo elemento
          /* creazione elementi successivi */
          for (i = 1; i < n; i++)
          {
             punt->next = (struct elemento *)malloc(sizeof(struct elemento));
             punt = punt->next;
             printf("Inserisci il %d elemento : ", i+1);
             scanf("%d", &punt->inf);
          } // chiudo il for
                                                     
          punt->next = NULL; // marcatore fine lista
                                   
       } // chiudo l’if-else
       return(p);
    } // chiudo la funzione
    
    void visualizza_lista(struct elemento *p)
    {
       printf("%s", "lista = ");
    
       // ciclo di scansione
       while (p != NULL)
       {
          printf("%d ", p->inf); // visualizza l’informazione  
          p = p->next; // scorre di un elemento
       }
       
       printf("%c", '\n');
    }
    
    int totaleInf(struct elemento * p) {
       printf("%s", "totale = ");
       
       int totale = 0;
       
       while (p != NULL)
       {
          totale+=p->inf;  
          p = p->next;
       }
       
       return totale;
    }
    
  • Re: Richiesta di aiuto e chiarimenti a voi esperti in materia

    Grazie mille intanto.
    per contare il numero di elementi (divisore della media), posso usare un altro ciclo while con lo stesso criterio?
    per esempio:
    
    int numero_di_elementi = 0;
    
    		while (p != NULL)
    		{
    			numero_di_elementi += numero_di_elementi + 1;
    			p = p->next;
    		}
    	return numero_di_elementi;
    
    poi per fare la media usare i valori assunti da "numero_di_elementi" e quello di "totale" dichiarandole come variabili int e dividendo l'uno per l'altro
  • Re: Richiesta di aiuto e chiarimenti a voi esperti in materia

    Si, se intendi dichiararle nel main con i risultati delle due funzioni va bene.
Devi accedere o registrarti per scrivere nel forum
4 risposte