Programma in C

Lady_chaos
Qualcuno è in grado di svolgere questo esercizio in linguaggio C, ho provato ma sinceramente non sò nemmeno da dove iniziare


Si scriva un programma che consiste di:
• una funzione main() che
1. legga da tastiera una sequenza di numeri reali che rappresentano i valori di temperatura
rilevati nei primi 10 giorni del mese di giugno e li inserisca in un vettore dati vett1
2. legga da tastiera un ulteriore numero reale tip che rappresenta la temperatura media
stagionale per il mese di giugno
3. Verifichi quali temperature contenute in vett1 sono superiori alla temperatura media
stagionale tip, e le inserisca in un vettore vett2
4. stampi a video il vettore vett2
5. rilevi poi le temperature anomale presenti in vett1, ovvero le temperature che differiscono
dalla temperatura tipica tip per più del 10% (che risultano inferiori a tip*0.9 oppure
superiori a tip*1.1). Per ogni temperatura contenuta in vett1, richiami una funzione
controlla(), descritta di seguito, e le passi come parametri la temperatura rilevata e quella
tipica. A seconda del valore di ritorno restituito dalla funzione controlla(), si stampi a video
la temperatura soltanto se risulta anomala
• una funzione controlla() che riceve come parametri d'ingresso due numeri reali, la temperatura
rilevata e quella tipica, e verifica se la temperatura rilevata rappresenta un valore anomalo; il
risultato del controllo deve essere espresso come valore di ritorno.
Esempio di temperature inserite
31.5
33.7
36.8
29.3
26.8
32.6
35.4
37.6
32.0
31.2
Esempio di tip = 30.0
Temperature anomale: sotto 27 gradi e sopra 33 gradi
Dati scritti a video da punto 5:
giorno 2 33.7
giorno 3 36.8
giorno 5 26.8
giorno 7 35.4
giorno 8 37.6

Risposte
_overflow_1
beh è abbastanza facile come problema, precisamente cosa non riesci a fare? Si tratta solo di tradurre in C quello che c'è scritto, niente di che...
comunque inizia a postare quello che hai fatto poi vediamo insieme dove stai sbagliando...

Lady_chaos
#include
#define N 10

main()
{
int i;
int vett1[N];
float temp, tip;
printf("Inserisci le temperature rilevate nei primi 10 giorni del mese di giugno:\n");
for(i=0; i {scanf("%f", &temp); vett1=temp;}
printf("Inserisci temperatura media stagionale per il mese di giugno:\n");
scanf("%d",&tip);

e poi non riesco a continuare

hee136
Vai pure avanti col punto 3. Prova a descrivere a parole l'algoritmo.

Lady_chaos
Ma mi da già un errore in fase di compilazione

_overflow_1
allora prima di tutto devi dichiarare vett1 come float visto che deve contenere numeri reali, secondo nel ciclo for è inutile assegnare prima il valore a temp e poi assegnarlo a vett1, nella scanf assegnalo direttamente a vett1.

quindi il tuo codice diventa:


#include <stdio.h>
#define N 10

int main()
{
   int i;
   float vett1[N], tip;

   printf("Inserisci le temperature rilevate nei primi 10 giorni del mese di giugno:\n");

   for(i=0; i<N; i++)
      scanf("%f", &vett1[i]);

   printf("Inserisci temperatura media stagionale per il mese di giugno:\n");
   scanf("%f",&tip);


ora per il prossimo punto dobbiamo dichiarare un altro vettore vett2 sempre float e fare un ciclo for che scandisce il primo vettore e verifica se sono presenti, in vett1, temperature maggiori a tip, e in questo caso dobbiamo copiare la temperatura in vett2,

quindi potresti fare una cosa del genere:
#include <stdio.h>
#define N 10

int main()
{
   int i, j;
   float vett1[N], vett2[N], tip;

   printf("Inserisci le temperature rilevate nei primi 10 giorni del mese di giugno:\n");

   for(i=0; i<N; i++)
      scanf("%f", &vett1[i]);

   printf("Inserisci temperatura media stagionale per il mese di giugno:\n");
   scanf("%f",&tip);

   //pezzo aggiunto

   j=0; 
   for(i=0; i<N; i++){
      if(vett1[i]>tip){
         vett2[j]=vett1[i];
         j++;
      }
   }

   for(i=0; i<j; i++)
      printf("%f ", vett2[i]);
}

Lady_chaos
Ma per l'ultimo punto la funzione controlla è nel main, ma come faccio a far ricevere a questa funzione la temperatura tipica e quella rilevata?

_overflow_1
un prototipo per la funzione controlla potrebbe essere,
 int controlla(float, float); 

Lady_chaos
No , non mi trovo.
int controlla (float, float);
for (i=0; i if ((vett>tip*1.1)||(vett return(i);

_overflow_1
mi sa che no hai capito proprio bene come funzionano le funzioni, ti consiglio una bella ripassata su tutta questa parte...

comunque il tuo codice é:


#include <stdio.h>
#define N 10

int controlla(float, float);

int main()
{
   int i, j;
   float vett1[N], vett2[N], tip;

   printf("Inserisci le temperature rilevate nei primi 10 giorni del mese di giugno:\n");

   for(i=0; i<N; i++)
      scanf("%f", &vett1[i]);

   printf("Inserisci temperatura media stagionale per il mese di giugno:\n");
   scanf("%f",&tip);

   //pezzo aggiunto

   j=0;
   for(i=0; i<N; i++){
      if(vett1[i]>tip){
         vett2[j]=vett1[i];
         j++;
      }
   }
   
   printf("\n\n");

   for(i=0; i<j; i++)
      printf("%g ", vett2[i]);

   printf("\n\n");

   for(i=0; i<N; i++){
      if(controlla(vett1[i], tip)==1)
         printf("giorno %d %g\n", i+1, vett1[i]);
   }
}

int controlla(float v, float t)
{
   if(v>t*1.1 || v<t*0.9){
      return 1;
   }
   return 0;
}


alla fine te l'ho scritto tutto io, spero che ti metterai almeno a leggere e capire dove sbagliavi lo dico per te, altrimenti di tutto questo non ti rimane un bel niente...

Lady_chaos
Ok ^_^ grazie mille, ti ho scritto un mex privato con un programma che ho fatto ieri, è solo da correggere, se hai un pò di tempo mi faresti un grande favore :)

Lady_chaos
Con DevC++ ho un problema con la compilazione. E non riesco ad eseguire il programma con i relativi risultati.

_overflow_1
che errore ti dà? comunque non usare dev, è veramente datato, scaricati visual studio express 2010, oppure codeblocks...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.