Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - indice e valore minimo di un array
Forum - C/C++ - indice e valore minimo di un array

Avatar
bigjohn (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/10/2008

Segnala al moderatore
Postato alle 14:22
Venerdì, 10/10/2008
Salve a tutti.
Sono un principiante del linguaggio C ed è per questo che chiedo lumi in riferimento a quanto sottostante esposto:

Problema -  Scrivere una funzione C

int indMin (int a [], int n)

che opera su due parametri:
-   un array di interi parzialmente riempito a
-   un intero n, corrispondente al numero di elementi presenti in a.

La funzione deve restituire l'indice della posizione dell'array in cui si trova
l'elemento di valore minimo.

Si supponga, ad esempio, che l'array a contenga i seguenti valori:
( 3,  -4,  5,  -6,  -1,  3,  4),  con n=7.
La funzione deve restituire:
•     indice 3      (a[3]==:-6)

a seguire codice da me scritto che sembra funzionare. Siccome non sono sicuro della robustezza di tale codice, chiedo cortesemente a Voi se :
1) è corretto?
2) si può migliorare?
3) è possibile, anzichè dichiarare da codice la lunghezza dell'array (vedi const size), chiedere all'utente di digitare la lunghezza della sequenza e quindi come modificare tale codice?

//----- codice -----------
#include <stdio.h>
#include <stdlib.h>

const int size = 6;

/* Funzione da sviluppare */
int indMin(int a [], int n) {
    int i,posMin=0;
    for(i=1;i<n;i++){
        if(a<a[posMin]){
           posMin=i;
           }
    }
    return posMin;
    }

void inserimento (int a [], int n);
void stampa (int a[], int n);

main() {
      
       int piccolo;  //valore minimo array
       int a[size], n;
      
       inserimento(a, n);
       printf("\n");  //a capo con riga vuota
      
       stampa(a, n);
       printf("\n");    
       piccolo = indMin(a,size);
      
       printf("Il valore minimo dell'array si  trova in posizione %d (e vale %d)\n", piccolo, a[piccolo]);
       printf("\n");
       system("pause");  
       }
      
/* Procedura che riceve in ingresso un array e la sua dimensione n e richiede il riempimento da tastiera */
void inserimento (int a [], int n) {
    
     int i;
     for(i=0;i<size;i++){
         printf("Inserire il %do intero: ", i+1);
         scanf("%d", &a);
         }
     }
      
/* Procedura che stampa il contenuto di un array */
void stampa (int a[], int n) {
     int i;
     for (i=0;i<size;i++){
         printf("Valore in posizione %d: %d\n", i, a);    
         }
     }

Grazie per un cortese riscontro.
Gianni.

PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 17:00
Venerdì, 10/10/2008
per fare in modo che l'utente possa scegliere la dimensione dell'array devi usare l'allocazione dinamica della memoria:

la funzione calloc (dimensione, sizeof(tipo_di_dato)) restituisce il puntatore alla prima cella di un array di "dimensione" elementi di tipo "tipo_di_dato".

(cerca su qualsiasi manuale o in internet)

cmq a mio modesto parere (nn l'ho compilato xche nn ho tempo) il codice che hai scritto non funziona:

se tu scrivi
int a[100];
for (int i = 0; i < 100; i++)
  printf("stampa locazione %d, contenuto %d", i, a);

il programma stamperà come lucazioni i numeri da 0 a 100, ma come contenuto sempre quello della locazione 0, cioè a[0], che è poi l'indirizzo a cui punta a.

dovresti scrivere:
printf("stampa locazione %d, contenuto %d", i, a[ i ]);

oppure

printf("stampa locazione %d, contenuto %d", i, a++); se
hai dichiarato a come puntatore, cioè
int *a;

spero di averci visto giusto, ciao!


Ultima modifica effettuata da eddiewrc il 10/10/2008 alle 17:04


La conoscenza non ha mai fatto del male a nessuno. Caso mai hanno fatto del male quelli che hanno impiegato MALE la loro conoscenza. La conoscenza deve essere libera e quando dico libera intendo "free as freedom" e non "free as a free beer".
PM Quote
Avatar
bigjohn (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/10/2008

Segnala al moderatore
Postato alle 18:07
Venerdì, 10/10/2008
grazie per il cortese riscontro.
proverò quanto da te proposto.
saluti, gianni

PM Quote