Problema in un esercizio di programmazione in C

di il
2 risposte

Problema in un esercizio di programmazione in C

Salve a tutti, sono un nuovo membro del forum. Mi chiedevo,se potevate(se volete)aiutarmi a risolvere questo problema che ho in questo esercizio di programmazione in C: Acquisiti e memorizzati in un vettore valori interi la cui quantità' è indicata dall'utente, si devono effettuare le seguenti elaborazioni con la relativa visualizzazione: a.valore massimo e minimo. b.percentuale valori multipli di 7 c.media dei valori maggiori di 340. d.quantità dei valori maggiori della media calcolata nel punto c. e multipli di 11. e.costruire un vettore che contenga le posizioni del minimo trovato al punto a. Visualizzare tale vettore. Io sono riuscito a fare tutto, ma non riesco a fare il punto e. poichè quando visualizzo il vettore mi escono numeri altissimi, potreste aiutarmi a capire dove sbaglio(il vettore del punto e. l'ho chiamato posmin)?Vi posto il codice sotto.Grazie a tutti quelli che mi risponderanno!

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

int main()

{int v[100],i,n,max,min,contp=0,cont=0,cont1=0,somma=0,posmin[100];
float media;
    
do{
printf("\nInserisci la quantita' di valori da inserire:\n");
scanf("%d",&n);
}while(n<=0||n>100);
          
for(i=0;i<n;i++)
          
{
printf("\nInserire il %d' valore: \n",i+1);
scanf("%d",&v[i]);

                           
}
for(i=0;i<n;i++)
{
if(i==0)
{
max=v[i];
min=v[i];
                                                    
}
if(i!=0&&v[i]>max)
{
max=v[i];
}
else if(i!=0&&v[i]<max)   
{                                                                   
min=v[i];
posmin[i]=i;
}
if(v[i]%7==0)
{contp++;}
if(v[i]>340)
{
cont++;
somma=somma+v[i];

}
}
printf("\nIl valore massimo e' %d e quello minimo e' %d\n",max,min);
printf("\nLa percentuale dei multipli di 7 e' %d%%\n",contp*100/n );
if(cont==0)
{
printf("\nLa media dei valori maggiori di 340 e' impossibile\n");
}
else 
{media=somma/cont;
printf("\nLa media dei valori maggiori di 340 e' %f\n",media);
}
if(v[i]>media&&v[i]%11==0)
{
cont1++;}
if(cont==0)
{
printf("\nNon esistono valori che siano sia maggiori della media e sia multipli di 11 poiche' la media e' impossibile\n");
}
else
{
printf("\nI valori maggiori della media e multipli di 11 sono %d\n",cont1);
}
for(i=0;i<n;i++)
{
printf("\nIl valore minimo si trova la %d' volta nella posizione %d \n",i+1,posmin[i]);
}
system("PAUSE");
return(0);
}

2 Risposte

  • Re: Problema in un esercizio di programmazione in C

    Non usare il tag code per scrivere, usalo per postare il tuo codice (cosa che manca a quanto vedo) e così magari possiamo esserti d'aiuto. Se non ci mostri il codice non sapremo mai dove sia il tuo errore...
  • Re: Problema in un esercizio di programmazione in C

    Scusatemi per il doppio post e per la risposta un pò in ritardo..(bhè si anche l'orario non è molto normale )
    In pratica il codice è molto contorto potrebbe essere riscritto in modo molto più chiaro e semplice. Comunque io non volendo intromettermi nel tuo esercizio, magari a te risulta molto chiaro e semplice, all'occhio di altri però non lo è e ti ho aiutato modificando il tuo codice. In pratica tu non lo utilizzavi proprio l'array posmin nonostante tu lo avessi dichiarato, e non memorizzavi mai la posizione del minimo durante la ricerca. Ti scrivo il codice e tra gli asterischi le aggiunte fatte, spero sia chiaro altrimenti scrivi pure:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    
    {int v[100],i,n,max,min,contp=0,cont=0,cont1=0,somma=0,posmin[100];
    float media;
    
    do{
    printf("\nInserisci la quantita' di valori da inserire:\n");
    scanf("%d",&n);
    }while(n<=0||n>100);
    
    for(i=0;i<n;i++)
    
    {
    printf("\nInserire il %d' valore: \n",i+1);
    scanf("%d",&v[i]);
    
    
    }
    for(i=0;i<n;i++)
    {
    ***posmin[i] = posmin[i-1];***
    if(i==0)
    {
    max=v[i];
    min=v[i];
    ***posmin[i] = 0;***
    }
    if(i!=0&&v[i]>max)
    {
    max=v[i];
    }
    else if(i!=0&&v[i]<***min) //NON MAX COME TU AVEVI MESSO, FACEVI UN DOPPIO CONTROLLO PER IL MAX***
    {
    min=v[i];
    ***posmin[i]=i;***
    }
    if(v[i]%7==0)
    {contp++;}
    if(v[i]>340)
    {
    cont++;
    somma=somma+v[i];
    
    }
    }
    printf("\nIl valore massimo e' %d e quello minimo e' %d\n",max,min);
    printf("\nLa percentuale dei multipli di 7 e' %d%%\n",contp*100/n );
    if(cont==0)
    {
    printf("\nLa media dei valori maggiori di 340 e' impossibile\n");
    }
    else
    {media=somma/cont;
    printf("\nLa media dei valori maggiori di 340 e' %f\n",media);
    }
    if(v[i]>media&&v[i]%11==0)
    {
    cont1++;}
    if(cont==0)
    {
    printf("\nNon esistono valori che siano sia maggiori della media e sia multipli di 11 poiche' la media e' impossibile\n");
    }
    else
    {
    printf("\nI valori maggiori della media e multipli di 11 sono %d\n",cont1);
    }
    for(i=0;i<n;i++)
    {
    printf("\nIl valore minimo si trova la %d' volta nella posizione %d \n",i+1,posmin[i]);
    }
    system("PAUSE");
    return(0);
    }
    
    
Devi accedere o registrarti per scrivere nel forum
2 risposte