Oppure

Loading
10/10/08 12:22
bigjohn
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[i]<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[i]);
}
}

/* 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[i]);
}
}

Grazie per un cortese riscontro.
Gianni.
aaa
10/10/08 15:00
eddiewrc
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 10/10/08 15:04
aaa
10/10/08 16:07
bigjohn
grazie per il cortese riscontro.
proverò quanto da te proposto.
saluti, gianni
aaa