PROBLEMA Esercizio di Programmazione in C

Cristian02

Nuovo Utente
25
2
Salve, sono uno studente dei superiori sono al quarto.
la mia professoressa di informatica ci ha dato questo esercizio, una parte l'ho risolto ma poi mi sono bloccato. ?

L'esercizio mi chiedeva:
Memorizzare in un vettore "A" "N" numeri interi letti da tastiera. Calcolare la media aritmetica e copiare in un vettore "B" solo gli elementi di "A" superiori alla media. Visualizzare i contenuti dei due vettori su righe separate, ogni valore è separato dal successivo da due trattini.

C:
#include <stdio.h>

void copia (int *a,int *b,int dim,){

}
void media (int *a,int dim){
            int som=0,media;
            for (int i=0;i<dim;i++){
                     som=a[I]+som;
             }
           media=som/dim;
           printf ("la media dei voti : %d",media);
return;
}
void caricamento (int *a,int dim){
      for (int i=0;i<dim;i++){
              printf ("inserisci un numero : ");
              scanf ("%d",&a[I]);
       }
return;
}
int main(){
            int N;
            printf ("inserisci una dimensione : ");
            scanf ("%d",&N);
            int A[N];
            int B[N];
            caricamento(A,N);
            media(A,N);
            copia(A,B,N);
return 0;
}
 
Ultima modifica da un moderatore:

Andretti60

Utente Èlite
6,440
5,091
Ti prego di postare il codice usando il TAG opportuno, è impossibile commentare linee di codice lette in una fotografia.
 

Andretti60

Utente Èlite
6,440
5,091
Nel tuo codice c’è un errore sintattico, dichiari la variabile i con la minuscola, ma poi usi la maiuscola, non compila nemmeno.
Un piccolo errore: la media in genere non è un numero intero, ma frazionario (devi usare float o double)
Il metodo ‘copia’ è molto semplice, hai bisogno di due indici, per ogni vettore, se l’elemento A è maggiore della media, lo copi nel vettore B[j] e aumenti j (che ovviamente deve inizializzare a zero). Alla fine il valore del indice j ti dirà anche quanti elementi hai copiato, io cambierei il metodo copia() in una funzione che ritorna appunto tale valore.
Devi inoltre scrivere il metodo stampa() a cui passi un vettore e il numero di elementi di tale vettore, e lo stampi come richiesto.
 
  • Mi piace
Reazioni: Cristian02

Cristian02

Nuovo Utente
25
2
Nel tuo codice c’è un errore sintattico, dichiari la variabile i con la minuscola, ma poi usi la maiuscola, non compila nemmeno.
Un piccolo errore: la media in genere non è un numero intero, ma frazionario (devi usare float o double)
Il metodo ‘copia’ è molto semplice, hai bisogno di due indici, per ogni vettore, se l’elemento A è maggiore della media, lo copi nel vettore B[j] e aumenti j (che ovviamente deve inizializzare a zero). Alla fine il valore del indice j ti dirà anche quanti elementi hai copiato, io cambierei il metodo copia() in una funzione che ritorna appunto tale valore.
Devi inoltre scrivere il metodo stampa() a cui passi un vettore e il numero di elementi di tale vettore, e lo stampi come richiesto.
Ok, In che senso se A è maggiore della media ?
Se cambio i valori di A cambia la media
 

Andretti60

Utente Èlite
6,440
5,091
I valori del vettore A vengono inizializzati nel metodo caricamento(), dopodiché rimangono fissi (o almeno rimangono tali secondo la traccia dell’esercizio)
Altro errore: il metodo copia() ha bisogno del valore della media, che quindi deve essere ritornato dal metodo media() come valore di ritorno.
 

Cristian02

Nuovo Utente
25
2
I valori del vettore A vengono inizializzati nel metodo caricamento(), dopodiché rimangono fissi (o almeno rimangono tali secondo la traccia dell’esercizio)
Altro errore: il metodo copia() ha bisogno del valore della media, che quindi deve essere ritornato dal metodo media() come valore di ritorno.
Allora, alla funzione "mediaCopia"ho pensato di fare tutto su unica funzione che deve fare la media poi deve fare un controllo se A > media. Deve essere copiato in B
 

Allegati

  • 1632061778292.png
    1632061778292.png
    48.7 KB · Visualizzazioni: 44

Andretti60

Utente Èlite
6,440
5,091
No, come ti ho detto in precedenza devi usare due indici, uno per A e uno per B, in quanto non tutti gli elementi di A sono copiati in B.
PS impara a usare il tag CODE, ci sono regole nei forum che vanno rispettate, non le si fanno per sfizio ma per aiutare tutti e rendere la consultazione del forum più facile.
 
  • Mi piace
Reazioni: Mursey

Cristian02

Nuovo Utente
25
2
C:
void mediaCopia (int *a,int *b,int dim){
    int som=0,media;
    for (int i=0;i<dim;i++){
        som=a[i]+som;
    }
    media=som/dim;
    printf ("la media dei voti : %d",media);
    for (int i=0;i<dim;i++){
        if (a[i]>media){
            b[i]=a[i];
        }
    }
    printf ("\n\nLa media : %d",b);
return;
}
void caricamento (int *a,int dim){
    for (int i=0;i<dim;i++){
        printf ("inserisci un numero : ");
        scanf ("%d",&a[i]);
    }
return;
}
int main(){
    int N;
    printf ("inserisci una dimensione : ");
    scanf ("%d",&N);
    int A[N];
    int B[N];
    caricamento(A,N);
    mediaCopia(A,B,N);
return 0;
}
No, come ti ho detto in precedenza devi usare due indici, uno per A e uno per B, in quanto non tutti gli elementi di A sono copiati in B.
PS impara a usare il tag CODE, ci sono regole nei forum che vanno rispettate, non le si fanno per sfizio ma per aiutare tutti e rendere la consultazione del forum più facile.
Scusami, sono le prime volte che vado sul forum ?
 

Andretti60

Utente Èlite
6,440
5,091
Non ti scusare… lo si era capito ?

Adesso pensa ai due indici da usare nel codice che copia il vettore, ti ho dato tutte le indicazioni.
Ti do anche un ulteriore suggerimento: scrivi il metodo stampa() (come ti ho suggerito in precedenza, che è anche un requisito dell’esercizio) così ti accorgi subito se hai fatto errori.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili