PROBLEMA Esercizio di Programmazione in C

Pubblicità

Cristian02

Nuovo Utente
Messaggi
25
Reazioni
2
Punteggio
24
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:
Ti prego di postare il codice usando il TAG opportuno, è impossibile commentare linee di codice lette in una fotografia.
 
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.
 
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
 
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.
 
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.webp
    1632061778292.webp
    37.6 KB · Visualizzazioni: 44
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.
 
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 ?
 
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.
 
Pubblicità
Pubblicità
Indietro
Top