[C] Inserire i dati una volta sola

di il
6 risposte

[C] Inserire i dati una volta sola

Salve a tutti, ho creato una struttura per definire gli elementi di un vettore v di lunghezza L. ogni elemento è un record formato da due campi inseriti da input: un carattere e un numero reale compreso tra A e B. Una volta creata la struttura, voglio calcolare media e deviazione standard dei valori numerici, scartando il valore più piccolo e quello più grande. Dopo aver inserito i dati, il programma calcola la media, ma per calcolare la deviazione standard devo reinserire i dati. Come faccio a calcolarla direttamente senza doverli reinserire? Grazie mille in anticipo

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>

#define L 5

// definisco una struttura 'elemento' per definire gli elementi di v

typedef struct Elemento {
	char lettera;
	float numero;
	struct Elemento * next;
} elemento;


//funzione per aggiungere un nuovo elemento alla struttura elemento

elemento * aggiungi_elemento(char lettera, float numero) {
  	elemento * nuovo_elemento;
  	nuovo_elemento = (elemento *) malloc(sizeof(elemento));
  	if (nuovo_elemento == NULL) {
   	 exit(EXIT_FAILURE);
	}
 	nuovo_elemento->lettera = lettera;
	nuovo_elemento->numero = numero;
	return nuovo_elemento;
}

elemento v[L];	//definisco v 



int main () {

float A, B;

printf("Inserire A e B:\n");
scanf("%f" "%f", &A, &B);

char lettera;
float numero;

elemento * testa = NULL;

float sum = 0;
float mean;
float min = FLT_MAX;
float max = FLT_MIN;
float scarto = 0;

for(int i = 0; i < L; i++) {	
	
	printf("Inserire lettera:\n");
	scanf("%s", &lettera);
	printf("Inserire numero:\n");
	scanf("%f", &numero);
	
	if(numero < A || numero > B) {
		exit(EXIT_FAILURE);
	}	
		
	elemento * nuovo_elemento = aggiungi_elemento(lettera, numero);
    	nuovo_elemento->next = testa;	
    	testa = nuovo_elemento;
	
	// trovo minimo
	if(numero < min) {
		min = numero;
	}
	
	// trovo massimo
	if(numero > max) {
		max = numero;
	}
			
	// calcolo media dei valori numerici escludendo min e max
	sum += numero;
	mean = (sum - min- max) / (L-2);

	
}

printf("media = %f\n", mean);

// calcolo std escludendo min e max

float std=0;
float scarto_tot=0;
for(int i = 0; i < L; i++) {
	scanf("%f", &numero);
	if(numero != min && numero != max) {
	scarto = numero - mean;
	printf("scarto = %f\n", scarto);
	printf("scarto*scarto = %f\n", scarto*scarto);
	scarto_tot += scarto*scarto;
	}
}

printf("scarto tot = %f\n", scarto_tot);
std = sqrt (scarto_tot / (L-2));
printf("std = %f\n", std);


return 0;
}

6 Risposte

  • Re: [C] Inserire i dati una volta sola

    Che vuol dire devo reinserire i dati? Non capisco
  • Re: [C] Inserire i dati una volta sola

    Nel primo ciclo for chiedo all'utente di inserire i dati:
    
    for(int i = 0; i < L; i++) {	
    	
    	printf("Inserire lettera:\n");
    	scanf("%s", &lettera);
    	printf("Inserire numero:\n");
    	scanf("%f", &numero);
    	...
    

    e così il programma mi calcola la media dei dati che ho inserito. per calcolare la deviazione standard ho creato separatamente un altro ciclo for:
    
    float std=0;
    float scarto_tot=0;
    for(int i = 0; i < L; i++) {
    	scanf("%f", &numero);
    	if(numero != min && numero != max) {
    	scarto = numero - mean;
    	printf("scarto = %f\n", scarto);
    	printf("scarto*scarto = %f\n", scarto*scarto);
    	scarto_tot += scarto*scarto;
    	}
    }
    
    e quindi l'utente deve reinserire i dati che ha già inserito, prima che il programma possa calcolare la deviazione standard (ho inserito "scanf").
    Ho fatto in questo modo perché non riuscivo a fare diversamente, ma c'è un modo per calcolare la deviazione standard senza che l'utente debba reinserire i dati?
    spero che ora si capisca meglio cosa intendo
  • Re: [C] Inserire i dati una volta sola

    Ma scusa, la struttura e la funzione aggiungi_elemento a che ti servono? Le hai scritte tu?
  • Re: [C] Inserire i dati una volta sola

    Si il testo del problema dice di scrivere una struttura dati per rappresentare e memorizzare gli elementi del vettore v, e ogni elemento del vettore è un record formato da una lettera e un numero. quindi ho scritto questa struttura e la funzione aggiungi_elemento serve per aggiungere un nuovo elemento alla struttura.. È sbagliato?
  • Re: [C] Inserire i dati una volta sola

    Non é sbagliato ma la devi usare per inserirci i dati una volta in modo da poterli utilizzare in seguito.
  • Re: [C] Inserire i dati una volta sola

    Quindi nel ciclo for dove calcolo la deviazione standard devo chiamare la funzione aggiungi_elemento?
Devi accedere o registrarti per scrivere nel forum
6 risposte