Noob C: Trovare i due interi più grandi in un array

di il
3 risposte

Noob C: Trovare i due interi più grandi in un array

Salve,
Sono nuovo nel mondo della programmazione C, ho un problema nell'identificare l'errore di uno dei primi programmi che ho scritto.
Il programma è il seguente e l'errore è di core dump:

#include <stdio.h>
#define N 10

/*PROTOTOPO DELLA FUNZIONE*/

void two_largest(int *a, int n, int *l, int *s);


/*QUI STA IL MAIN*/

int main (void){
int a[N], *p, *largest, *second_largest;

for(p=a; p<a+N; p++){
	printf("Scrivi %d numeri da memorizzare nel vettore:\n", N);
	scanf("%d", p);
	}

(void) two_largest(a, N, largest, second_largest);

printf("I due numeri più grandi sono: %d %d\n", *largest, *second_largest);


return 0;
}


/**************************DEFINIZIONE DELLA FUNZIONE********************************/

void two_largest(int *a, int n, int *largest, int *second_largest){

int stack=0;

for(second_largest = a, largest = a+1; largest < a+n; largest++ && second_largest++){

	if(*largest > *second_largest)
		NULL;
	else if(*largest < *second_largest){
		stack = *largest;
		*second_largest = stack;
		*largest = *second_largest;
		}
	else if(*largest == *second_largest)
		*second_largest=0;	
	}
}



Potreste indicarmi qual è il problema? Temo che mi sfuggano alcuni alias tra puntatori e vettori perché non ho ancora una grande dimestichezza, se corredate di una brevissima spiegazione ve ne sarò ancora più grato.
A presto! (spero)

3 Risposte

  • Re: Noob C: Trovare i due interi più grandi in un array

    In effetti hai fatto un ... gran mischione.
    per caso hai fatto il "copia incolla" da qualche parte?
  • Re: Noob C: Trovare i due interi più grandi in un array

    No, non ho fatto il copia-incolla... ma dovrebbe essere abbastanza semplice come programma, non capisco perché non funzioni.
  • Re: Noob C: Trovare i due interi più grandi in un array

    Hai usato un sacco di puntatori, alcuni dei quali senza molto senso, direi, più un paio d'altre cose che non ho capito. A meno che l'uso dei puntatori fosse una richiesta specifica dell'esercizio, non sarebbe stato più semplice così? (ho messo i valori in un array fisso solo per pigrizia, per non star lì a inserirli a mano ogni volta)
    #include <stdio.h>
    #define N 10
    
    int main (void){
        int a[N] = { -10,8,6,5,15,-3,0,2,10,8 }; // valori qualsiasi
        int i, m1, m2;
    
        // trova il valore massimo della serie
    
        for( m1=0, i=0; i<N; ++i )
            if( m1<a[i] ) m1 = a[i];
    
        // trova il valore minimo della serie
    
        for( m2=m1, i=0; i<N; ++i )
            if( m2>a[i] ) m2 = a[i];
    
        // trova i due valori maggiori nella serie
    
        for( i=0; i<N; ++i )
            if( m2<a[i] && a[i]<m1 ) m2 = a[i];
    
        printf("I due numeri maggiori sono %d e %d\n\n", m1, m2);
        printf( "Premi \"invio\" per lasciare il programma...\n\n" );
    
        getchar();
        return 0;
    }
Devi accedere o registrarti per scrivere nel forum
3 risposte