Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [c] comparare elementi di un array

    Dovrei scrivere un programma che, letti gli elementi di un vettore a e un numero k, determini l'elemento di a più prossimo a k. Non ho ancora studiato le stringhe. Dopo avere fatto scegliere all'utente il valore di k, la lunghezza degli array e gli elementi al suo interno dovevo compararli.
    Avevo pensato di sottrarre k a ogni elemento e il risultato metterlo in valore assoluto. Ora non resterebbe che compararli e vedere qual è più piccolo. Come verrebbe?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mi sembra che la tua soluzione sia buona ... prova a scrivere il codice.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Scrivi il codice che hai pensato...
    Le stringhe non ti servono se si tratta di valori numerici per cui non vedo quale sia il problema...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Originariamente inviato da oregon
    Mi sembra che la tua soluzione sia buona ... prova a scrivere il codice.
    /* Scrivere un programma che, letti gli elementi di un vettore a e un numero k, determini l'elemento div1 più prossimo a k. */

    #include <stdio.h>
    #include <stdlib.h>

    #define MAX 100
    int main(int argc, char *argv[])
    { int a[MAX] ,n,k,i,num,j, indice;

    printf("Valore di k: \n");
    scanf("%d", &k);

    do{
    printf("Quanti numeri inserire: \n");
    scanf("%d", &n);
    } while (n<1 || n>MAX);

    for(i=0; i<n; i++)
    { printf("Inserisci valore %d di A: \n", i);
    scanf("%d", &a[i]);
    a[i]= abs(a[i]-k);
    }

    Mi fermo qui. Studio programmazione da meno di due settimane e non riesco ancora a comparare gli elementi di un array tra di loro. Immagino sia banale come cosa, ma non so come si fa.

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Per trovare il minore, che è il tuo obbiettivo, puoi fare:
    codice:
    //size -> dimensione dell'array
    //array -> nome array
    int i, min = array[0];
    for(i = 1; i < size; i++) 
      if(array[i] < min)
        min = array[i];
    //alla fine del ciclo min contiene il valore minimo
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Ma se fai così sovrascrivi il vettore e non hai più il valore originale che è quello che cerchi:

    codice:
    a[i] = abs(a[i]-k);
    Anzichè fare questa roba qui, piuttosto salva tutte le informazioni in variabili a parte, così:

    codice:
    for(i=0; i<n; i++)
    { printf("Inserisci valore %d di A: \n", i);
    scanf("%d", &a[i]);
    if(a[i]-k < dist_min){
       dist_min = a[i]-k;
       val = a[i];
    }
    }
    Ci sarebbe solo il problema di inizializzare dist_min a un valore molto alto, che probabilmente non usi (tipo 99999999).

    In alternativa, fai la stessa cosa che ti ho illustrato, solo lo fai in un altro ciclo for: in questo modo potresti inizializzare dist_min al valore più alto (supponendo che siano positivi, la distanza massima sarebbe il max(a)-0, cioè il valore massimo di a; se sono anche negativi, dist_min diventa max(a)-min(a)).

    Nel secondo caso (numeri solo positivi), verrebbe così:
    codice:
    dist_min = 0;
    
    for(i=0; i<n; i++)
    { printf("Inserisci valore %d di A: \n", i);
    scanf("%d", &a[i]);
    if(a[i] > dist_min)
       dist_min = a[i];
    }
    
    for(i=0; i<n; i++)
      if(a[i]-k < dist_min){
         dist_min = a[i]-k;
         val = a[i];
      }

  7. #7
    Originariamente inviato da Scara95
    Per trovare il minore, che è il tuo obbiettivo, puoi fare:
    codice:
    //size -> dimensione dell'array
    //array -> nome array
    int i, min = array[0];
    for(i = 1; i < size; i++) 
      if(array[i] < min)
        min = array[i];
    //alla fine del ciclo min contiene il valore minimo

    Avevo già identificato tra le int i e min.
    Dopo aver fatto scegliere all'utente k, la lunghezza di a , tutti i suoi elementi e calcolato l'assoluto della differenza tra ogni elemento e k, ho provato a usare il tuo codice così:

    min = a[0];

    for(i = 1; i < n; i++)
    if(a[i] < min)
    min = a[i];
    printf("Il numero piu' vicino a %d ha valore %d\n", k, min);

    Tuttavia dice sempre il numero più vicino a k ha valore 1...

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Il problema è semplice, prima devi popolare k e l'array e dopo fare la ricerca dell'elemento più vicino a k.

    codice:
    #include <stdio.h>
    
    #define MAX 100
    
    int main()
    {
        int a[MAX], n, k, i;
    
        // richiedo k
        printf("Valore di k: \n");
        scanf("%d", &k);
    
        // richiedo l'array
        do {
            printf("Quanti numeri inserire: \n");
            scanf("%d", &n);
        } while (n < 1 || n > MAX);
    
        for (i = 0; i < n; i++) {
            printf("Inserisci valore %d di A: \n", i);
            scanf("%d", &a[i]);
        }
        
        // ora ricerco l'elemento dell'array più vicino a k
        for (i = 0; i < n; i++) {
            // .. qui lo puoi scrivere tu
        } 
    
        // qui poi stampi il risultato
        // printf("....
     
        return 0;   
    }

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Vedi il post precedente...
    E per completare: nell'header limits.h sono definiti i valori limite dei vari tipi di dato...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.