PROBLEMA Esercizio di programmazione con Array

slyhardrock

Nuovo Utente
115
5
CPU
i7 7700k
Dissipatore
Cooler Master Seidon 120v
Scheda Madre
MSI z-270 GAMING M3
RAM
2 x 8gb Corsair Vengeance LED
GPU
ASUS Strix GTX 1070
Monitor
HP Pavilion 22xi Full HD
PSU
Antec 620 80 + Bronze
OS
Windows 10 pro
Salve a tutti, ho da poco iniziato a programmare e non riesco a fare correttamente questo esercizio. Non riesco ad ottenere il risultato desiderato. Ecco l'esercizio:

Scrivere un programma che acquisisca da tastiera un intero
x
e un array
di 5 altri interi e restituisca il numeri di elementi maggiori di
x
presenti
nell’array.Il programma deve usare una funzione
count
larger
che prende
come parametri
x
, l’array e la lunghezza dell’array e restituisce il numero
di elementi maggiori di
x
.

Esempio input esempio output:
5 2
0
3
65
52
1


Ecco il mio codice
https://imgur.com/a/5TYbU

Per favore non mi insultate, sono alle primissime armi. Grazie in anticipo.
 

Roberto_Trevigiani

Nuovo Utente
68
17
Ciao, prima di parlare dell'esercizio, vorrei dirti di utilizzare il tag code per mostrare il codice e non le immagini, e di dare più dettagli sull'errore che ti da il programma, così sarà più facile darti un aiuto. Ad una prima occhiata nel main manca l'istruzione "return 0;"
 
  • Mi piace
Reazioni: slyhardrock

qwerty92

Nuovo Utente
97
17
Ciao,
la soluzione è "banale"... quando passi la variabile "c" non devi dargli il numero 5 ma lo zero o il numero dal quale vuoi partire... Se scrivi &c[5] vuol dire che vuoi passare alla variabile c[5], c[6], ecc, che ovviamente sono numeri random per lui. (se vuoi verificarlo aggiungi printf("%d\n", arr[0]) dopo l'inizializzazione di "j" e vedrai che non sono assolutamente i numeri da te passati.
In alternativa se vuoi passare tutto l'array puoi semplicemente scrivere solo "c".
C:
#include <stdio.h>

void count (int x, int *arr)
{
int trovato=0;

for (int j=0; j<5; j++)
{
if (arr[j] > x )
trovato++;
}

printf("%d\n", trovato);

return;
}

int main()
{
    int a=0;
    int c[5];
    int m=0;
    scanf("%d", &a);

    for (int i=0; i<5; i++)
    {
    scanf("%d", &m);
    c[i]=m;
    }

    count (a, &c[0]);  //oppure count (a, c)


    return 0;
}

qualche piccoli appunto:
1 - Inizializza sempre una variabile quando la dichiari.
2 - Come dice anche Roberto verifica che ci sia sempre un codice di uscita dalla funzione (return).
3 - Se la variabile ti serve solo come contatore del ciclo puoi inzializzarla all'interno delle parentesi.
4 - Se vuoi farlo ancora più "bello" usa "int *arr" nella funzione ricevente. L'asterisco sta ad indicare che la funzione riceverà un riferimento e non un solo valore.

Il codice comunque dovrebbe essere a posto, non l'ho testato completamente. Facci sapere.
Buona serata!
 
  • Mi piace
Reazioni: slyhardrock

slyhardrock

Nuovo Utente
115
5
CPU
i7 7700k
Dissipatore
Cooler Master Seidon 120v
Scheda Madre
MSI z-270 GAMING M3
RAM
2 x 8gb Corsair Vengeance LED
GPU
ASUS Strix GTX 1070
Monitor
HP Pavilion 22xi Full HD
PSU
Antec 620 80 + Bronze
OS
Windows 10 pro
Ciao,
la soluzione è "banale"... quando passi la variabile "c" non devi dargli il numero 5 ma lo zero o il numero dal quale vuoi partire... Se scrivi &c[5] vuol dire che vuoi passare alla variabile c[5], c[6], ecc, che ovviamente sono numeri random per lui. (se vuoi verificarlo aggiungi printf("%d\n", arr[0]) dopo l'inizializzazione di "j" e vedrai che non sono assolutamente i numeri da te passati.
In alternativa se vuoi passare tutto l'array puoi semplicemente scrivere solo "c".
C:
#include <stdio.h>

void count (int x, int *arr)
{
int trovato=0;

for (int j=0; j<5; j++)
{
if (arr[j] > x )
trovato++;
}

printf("%d\n", trovato);

return;
}

int main()
{
    int a=0;
    int c[5];
    int m=0;
    scanf("%d", &a);

    for (int i=0; i<5; i++)
    {
    scanf("%d", &m);
    c[i]=m;
    }

    count (a, &c[0]);  //oppure count (a, c)


    return 0;
}

qualche piccoli appunto:
1 - Inizializza sempre una variabile quando la dichiari.
2 - Come dice anche Roberto verifica che ci sia sempre un codice di uscita dalla funzione (return).
3 - Se la variabile ti serve solo come contatore del ciclo puoi inzializzarla all'interno delle parentesi.
4 - Se vuoi farlo ancora più "bello" usa "int *arr" nella funzione ricevente. L'asterisco sta ad indicare che la funzione riceverà un riferimento e non un solo valore.

Il codice comunque dovrebbe essere a posto, non l'ho testato completamente. Facci sapere.
Buona serata!
Ciao,
la soluzione è "banale"... quando passi la variabile "c" non devi dargli il numero 5 ma lo zero o il numero dal quale vuoi partire... Se scrivi &c[5] vuol dire che vuoi passare alla variabile c[5], c[6], ecc, che ovviamente sono numeri random per lui. (se vuoi verificarlo aggiungi printf("%d\n", arr[0]) dopo l'inizializzazione di "j" e vedrai che non sono assolutamente i numeri da te passati.
In alternativa se vuoi passare tutto l'array puoi semplicemente scrivere solo "c".
C:
#include <stdio.h>

void count (int x, int *arr)
{
int trovato=0;

for (int j=0; j<5; j++)
{
if (arr[j] > x )
trovato++;
}

printf("%d\n", trovato);

return;
}

int main()
{
    int a=0;
    int c[5];
    int m=0;
    scanf("%d", &a);

    for (int i=0; i<5; i++)
    {
    scanf("%d", &m);
    c[i]=m;
    }

    count (a, &c[0]);  //oppure count (a, c)


    return 0;
}

qualche piccoli appunto:
1 - Inizializza sempre una variabile quando la dichiari.
2 - Come dice anche Roberto verifica che ci sia sempre un codice di uscita dalla funzione (return).
3 - Se la variabile ti serve solo come contatore del ciclo puoi inzializzarla all'interno delle parentesi.
4 - Se vuoi farlo ancora più "bello" usa "int *arr" nella funzione ricevente. L'asterisco sta ad indicare che la funzione riceverà un riferimento e non un solo valore.

Il codice comunque dovrebbe essere a posto, non l'ho testato completamente. Facci sapere.
Buona serata!
Grazie mille per la risposta, appena torno a casa lo testo! :)
 

slyhardrock

Nuovo Utente
115
5
CPU
i7 7700k
Dissipatore
Cooler Master Seidon 120v
Scheda Madre
MSI z-270 GAMING M3
RAM
2 x 8gb Corsair Vengeance LED
GPU
ASUS Strix GTX 1070
Monitor
HP Pavilion 22xi Full HD
PSU
Antec 620 80 + Bronze
OS
Windows 10 pro
Ciao,
la soluzione è "banale"... quando passi la variabile "c" non devi dargli il numero 5 ma lo zero o il numero dal quale vuoi partire... Se scrivi &c[5] vuol dire che vuoi passare alla variabile c[5], c[6], ecc, che ovviamente sono numeri random per lui. (se vuoi verificarlo aggiungi printf("%d\n", arr[0]) dopo l'inizializzazione di "j" e vedrai che non sono assolutamente i numeri da te passati.
In alternativa se vuoi passare tutto l'array puoi semplicemente scrivere solo "c".
C:
#include <stdio.h>

void count (int x, int *arr)
{
int trovato=0;

for (int j=0; j<5; j++)
{
if (arr[j] > x )
trovato++;
}

printf("%d\n", trovato);

return;
}

int main()
{
    int a=0;
    int c[5];
    int m=0;
    scanf("%d", &a);

    for (int i=0; i<5; i++)
    {
    scanf("%d", &m);
    c[i]=m;
    }

    count (a, &c[0]);  //oppure count (a, c)


    return 0;
}

qualche piccoli appunto:
1 - Inizializza sempre una variabile quando la dichiari.
2 - Come dice anche Roberto verifica che ci sia sempre un codice di uscita dalla funzione (return).
3 - Se la variabile ti serve solo come contatore del ciclo puoi inzializzarla all'interno delle parentesi.
4 - Se vuoi farlo ancora più "bello" usa "int *arr" nella funzione ricevente. L'asterisco sta ad indicare che la funzione riceverà un riferimento e non un solo valore.

Il codice comunque dovrebbe essere a posto, non l'ho testato completamente. Facci sapere.
Buona serata!
Funziona! Grazie mille ancora!
 

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili