Programma in C sugli array

di il
5 risposte

Programma in C sugli array

Ciao a tutti sono nuovo nella programmazione e avrei bisogno di una mano su un codice;devo generare casualmente un array di x elementi, e tramite inserimento di un numero da parte dell' utente devo trovare quello che si avvicina più ad esso. Questo è quello che ho scritto, dove sbaglio perchè il codice compila ma il risultato è errato.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define MIN 1
#define MAX 20
#define A 5

int main()
{
int array[A];
int i,n_inserito,cnt=0;
int min;
srand(time(NULL));
for(i=0;i<A;i++){
array= MIN + rand()%(MAX-MIN+1);
}
for(i=0;i<A;i++){
printf("\t%d",array);
}
printf("\nInserisci un numero:");
scanf("%d",&n_inserito);


array=abs(array-(n_inserito));

for(i=0;i<A;i++){
if(min>=array){
min=array;
}
}
for(i=0;i<A;i++){
if(min==array){
cnt++;
}
}
printf("La cifra inserita si avvicina alla %d",cnt);

5 Risposte

  • Re: Programma in C sugli array

    Come prima cosa un consiglio visto che sei nuovo del forum. Quando posti del codice usa il tag code.

    Leggendolo ho notato che c'è un bel po' di confusione nel tuo codice.

    Prima di tutto non capisco bene perché c'è questa linea di codice senza un for:
    array[i]=abs(array[i]-(n_inserito));
    la variabile i assume il valore A dopo che è uscita dal for precedente. Questa cosa devi farla in un nuovo ciclo for per salvarti le differenze in valore assoluto tra il numero inserito ed ogni numero random dell'array, inoltre tali differenze vanno in un nuovo array, non puoi sovrascrivere quello con i numeri random.

    Quello che mi risalta all'occhio è che usi la variabile min senza averla mai inizializzata.
    In questo caso quando esegui questo pezzo di codice :
    for(i=0;i<A;i++){
    if(min>=array[i]){
    min=array[i];
    }
    il comportamento è completamente indefinito, se ho capito bene questo dovrebbe darti il minimo valore nel vettore (immagino che cerchi il minimo tra le differenze).
    Anche di quest'ultimo for non capisco come possa essere utile ai tuoi scopi:
    for(i=0;i<A;i++){
    if(min==array[i]){
    cnt++;
    }
    
    Il problema che devi affrontare è molto semplice, dopo esserti salvato le differenze in valore assouto (dato che cerchi quello che si avvicina di più), cerchi la differenza minima nel nuovo array delle differenze. Dopo fatto questo ti salvi in che posizione si trova la differenza minima e stampi il valore a quella posizione nell'array originario.
  • Re: Programma in C sugli array

    Ciao,non capisco bene quello che vuoi trovare.
    In pratica hai un array costituito da numeri casuali,chiedi all'utente di inserire un numero e il programma deve trovare
    quale dei valori contenuti all'interno dell'array sia il più "vicino" ad esso,giusto?
  • Re: Programma in C sugli array

    python34 ha scritto:


    Ciao,non capisco bene quello che vuoi trovare.
    In pratica hai un array costituito da numeri casuali,chiedi all'utente di inserire un numero e il programma deve trovare
    quale dei valori contenuti all'interno dell'array sia il più "vicino" ad esso,giusto?
    Sì, è quello che vorrebbe fare.
  • Re: Programma in C sugli array

    Innanzitutto grazie per le risposte ... ho aggiustato un po' il codice e sono arrivato a questo:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    #define MIN 1
    #define MAX 20
    #define A 5
    
    int main()
    {
        int array[A],array_2[A];
        int i,n_inserito,cnt=0;
        int min=0;
        srand(time(NULL));
        for(i=0;i<A;i++){
            array[i]= MIN + rand()%(MAX-MIN+1);
        }
        for(i=0;i<A;i++){
            printf("\t%d",array[i]);
        }
        printf("\nInserisci un numero:");
        scanf("%d",&n_inserito);
    
        for(i=0;i<A;i++){
        array_2[A]=abs(array[i]-(n_inserito));
        }
        for(i=0;i<A;i++){
            if(min>array_2[i]){
            min=array_2[i];
            }
        }
         
    
    
    
    
        return 0;
    }
    
    ora come faccio a stampare la cifra inserita più vicina?
  • Re: Programma in C sugli array

    Intanto questo

    array_2[A]

    è sbagliato. E anche che min parta da 0 ... rifletti.

    Per la tua domanda, prova a risponderti da solo dopo ...
Devi accedere o registrarti per scrivere nel forum
5 risposte