PDA

Visualizza la versione completa : [C] Ottenere minimo e massimo da un array di interi


Alex_ken
14-03-2011, 19:09
errore
segmentation fault
L'esercizio mi chiede che, dato un array a e la sua lunghezza len, scrive il valore del
massimo e del minimo elemento di a nelle celle puntate da min e max.
Scrivere un programma che utilizzi rand() per la generazione di un
array di 10 elementi interi casuali in [0,100] e provare le funzione
stampando il valore del minimo e il suo indirizzo.




void minmax(int a[], int len, int *min, int *max)
{
int i;

for (i=1; i<len; i++){
{
if (a[i] <min) min=a[i];
else max=a[i];
}
*min=min;
*max=max;
}


int main()
{
int a[10];
int min=a[0];
int max=a[0];

srand(time(NULL));

for (i=0; i< 10; i++)
a[i] = rand()%100;

minmax(a,10,&min,&max);
printf("L'indice del minimo a %d\n",min);
printf("L'indirizzo del minimo a %p\n",&min);

return 0;
}

Celebron
14-03-2011, 19:40
il titolo non rispetta il regolamento, non spieghi dove di preciso ti da l'errore e devi usare il tag CODE per mettere il codice

comunque non capisco

void minmax(int a[], int len, int *min, int *max)
{
int i;

for (i=1; i<len; i++){
{
if (a[i] <min) min=a[i];
else max=a[i];
}
*min=min;
*max=max;
}


ogni volta che fai riferimento a min e max, avendoli passati per puntatore, devi usare *min e *max
i min e max che usi nel for devono avere gli asterischi, a meno che tu non intendi usare variabili temporanee per quelli. In tal caso però li devi ridefinire, non li puoi usare in quel modo, e soprattutto non con lo stesso nome

EDIT: hai anche fatto crossposting (sempre segnalato nel regolamento) cancella il post identico a questo nell'altra tua discussione, altrimenti si finisce di discutere parallelamente sulla stessa cosa in posti diversi

lolide
14-03-2011, 19:43
Originariamente inviato da Alex_ken

void minmax(int a[], int len, int *min, int *max)
{
int i;

for (i=1; i<len; i++){
{
if (a[i] <min) min=a[i];
else max=a[i];
}
*min=min;
*max=max;
}

Intanto esiste il tag BB CODE per indentare il codice. Così ci aiuti a leggerlo.

Poi nella funzione che ho riportato sopra, nel ciclo con questo codice

min=a[i];
else max=a[i];
cambi l'indirizzo puntato da min e max con il numero in a[i].

Anche
if (a[i] <min) è sbagliato, in quanto accedi all'indirizzo non al valore di min.

LeleFT
15-03-2011, 10:37
Si veda il Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887) per conoscere le norme di apertura di una discussione.

Titoli delle discussioni, descrizione dei problemi e posting del codice sono tutte caratteristiche descritte nel suddetto regolamento.

Il titolo deve dire qual è il problema trattato e deve essere obbligatoriamente indicato il linguaggio.
Il codice va postato indentato all'interno degli appositi tag CODE (qui non hai fatto uso dei tag, né il codice è indentato).

Sistemo io il titolo di questa discussione, aspettando di sapere qual è il problema.


Ciao. :ciauz:

Loading