Dubbio su programma di C.

di il
37 risposte

Dubbio su programma di C.

Ho questo pezzo di programma e mi viene detto di inserire i dati input da tastiera e se sono pari allocarli in un altro vettore... come posso agire ? , sono arrivato in questo punto ma non so andar oltre..

for(i=0;i<=n-1;i++)
      {
                         printf("Inserire elemento a[%d]:\t\t",i);
                         
                         scanf("%d",&a[i]);
                         
                         }



37 Risposte

  • Re: Dubbio su programma di C.

    Se sono pari: basta vedere se sono divisibili per 2! (ti conviene usare l'operatore %, che ritorna il resto di una divisione intera)

    allocarli: un'alternativa e' la realloc() di stdlib.h ( )
  • Re: Dubbio su programma di C.

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {
          int *a;
          int *b;
          int *c;
          int i,y,j,n;
          srand(time(NULL));
          int somma;
          
          double media;
          somma=0;
          media=0.0;
          int minimo=0;
          int massimo=0;
       
          
          printf("Inserire numero elementi:\t");
          scanf("%d",&n);
          // allocazione dinamica del vettore
          a=(int*)malloc(n*sizeof(int));
     for(i=0;i<=n-1;i++){
                                 printf("Inserire elemento a[%d]:\t\t",i);
                                 if (a[i]%2==0)            
                                 scanf("%d",&b[j]);
                                 else 
                                 scanf("%d",&c[y]);
                                 } 
    
    for(j=0;i<=n-1;j++){
          minimo=massimo=b[j];
          somma=somma+b[j];
          media=(double)somma/n;
          }
          for(i=0;j<=n-1;j++){
          if(b[j]>massimo) massimo=b[j];
          if(b[j]<minimo) minimo=b[j];}
          printf("\n\nSomma=%4d\tMedia=%4lf\tMinimo=%4d\tmassimo=%4d\t\n\n",somma,media,minimo,massimo);
          
          system("pause");
          //getchar();
          //getchar();
          }
    
    
    
    
    Ho fatto cosi ma nn funziona!
  • Re: Dubbio su programma di C.

    Stai usando i vettori b e c senza allocare il loro spazio.
  • Re: Dubbio su programma di C.

    Hai ragione , ho aggiunto :
    b=(int*)malloc(n*sizeof(int));
    c=(int*)malloc(n*sizeof(int));


    ma non mi funziona ugualmente!!
  • Re: Dubbio su programma di C.

    Dove l'hai aggiunto?

    Cosa vuol dire "non funziona"?
  • Re: Dubbio su programma di C.

    L'ho aggiunto subito dopo quello che allocava a.
    Non funziona nel senso che il programma parte ma subito dopo non appena inserisco la dimensione , cioè n , si blocca e non va piu avanti!!
  • Re: Dubbio su programma di C.

    Le variabili che usi dopo, la j e la y non sono mai state inizializzate. Che valore hanno all'inizio?

    E poi perché fai la scanf nei vettori b e c facendo il controllo di a con la if ?
    Il vettore a non è mai stato riempito ... la scanf la devi fare con il vettore a.

    E perché altri due vettori dato che servono solo i pari?
  • Re: Dubbio su programma di C.

    Lo aggiustato cosi , ma non va ugualmente..



    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main()
    {
          int *a;
          int *b;
          int *c;
          int i,y;
          int j=0;
          int n;
          srand(time(NULL));
          int somma;
          
          double media;
          somma=0;
          media=0.0;
          int minimo=0;
          int massimo=0;
       
          
          printf("Inserire numero elementi:\t");
          scanf("%d",&n);
          a=(int*)malloc(n*sizeof(int));
          b=(int*)malloc(n*sizeof(int));
          
           for(i=0;i<=n-1;i++){
                              
                                              
                                 printf("Inserire elemento a[%d]:\t\t",i);
                                 scanf("%d",&a[i]);
                                 if (a[i]%2==0)            
                                 scanf("%d",&b[j]);
                                 }
                                 
                for(j=0;j<=n-1;j++){
          minimo=massimo=b[j];
          somma=somma+b[j];
          media=(double)somma/n;
          }
          for(j=0;j<=n-1;j++){
          if(b[j]>massimo) massimo=b[j];
          if(b[j]<minimo) minimo=b[j];}
          printf("\n\nSomma=%4d\tMedia=%4lf\tMinimo=%4d\tmassimo=%4d\t\n\n",somma,media,minimo,massimo);
          
          system("pause");
          }                   
    
    
    
  • Re: Dubbio su programma di C.

    Ma non devi fare la scanf di b !

    Il testo dell'esercizio parla di passare i valori pari nell'altro vettore.
    Quindi, quando trovi un valore pari lo copi da a[] in b[].
  • Re: Dubbio su programma di C.

    E come???
  • Re: Dubbio su programma di C.

    Come si copia un elemento di un vettore in un altro?

    b[j]=a;
  • Re: Dubbio su programma di C.

    Con queste modifiche non mi funziona nemmeno!!
  • Re: Dubbio su programma di C.

    Sì, ma non puoi andare avanti così ...

    I suggerimenti ti portano vicino alla soluzione non sono la soluzione.

    Se non aumenti anche l'indice j durante il ciclo, ovviamente non memorizzerai gli altri numeri pari.
    E quando devi trattarli/visualizzarli devi sfruttare il valore di j per accedere a tutti i valori di b.

    Insomma, il programma non te lo scrivo tutto pronto e funzionante ...
  • Re: Dubbio su programma di C.

    Avevo provato pure ametterlo il ciclo for subito dopo quello che ho messo con la variabile j.
    ma nn mi funziona
Devi accedere o registrarti per scrivere nel forum
37 risposte