04.06.2008 | 22:12:22
immagine
Ing. Emanuele Scapin

C, i due valori più grandi: metodo max_secondmax.
  • Scrivete una funzione con prototipo

    void max_secondmax ( int a[], int n, int *max, int *second_max )

    che, dato un array a di lunghezza n individui la posizione dell’elemento più grande e del secondo elemento per grandezza.


  • Proposta di soluzione con main di inserimento dati e invocazione del metodo richiesto.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAX 100
    
    void max_secondmax(int a[], int n, int *max, int *secondmax);
    
    int main(int argc, char** argv) {
        
        setvbuf(stdout, 0, _IONBF, 0);
        
        int a[MAX];
        
        int n = 0;
        printf("quanti valori vuoi considerare?\n\n");
        scanf("%d", &n);
        
        int i=0;
        srand(time(NULL));
        for(i=0; i<n; i++) {
            a[i] = rand() % 100;
            printf("elemento di posto %d, valore %d\n", i, a[i]);
        }
        
        int max, secondmax;
        max_secondmax(a, n, &max, &secondmax);
        printf("max %d\n", max);
        printf("secondmax %d\n", secondmax);
        
        printf("fine!\n\n");
        
        return (EXIT_SUCCESS);
    }
    
    void max_secondmax(int a[], int n, int *max, int *secondmax) {
        if (n < MAX) {
            int i;
            *max = a[0];
            *secondmax = 0;//a[0];
            for(i=1; i<n; i++) {
                printf("*** elemento di posto %d, valore %d\n", i, a[i]);
                if (a[i] > *max) {
                    *secondmax = *max;
                    *max = a[i];
                }  
                else if (a[i] > *secondmax) {
                    *secondmax = a[i];
                }
                printf("*** %d, %d, %d, %d\n", i, a[i], *max, *secondmax);
            }
        }
    }
            

© Emanuele Scapin 2009-2018

 

Valid HTML 4.01! Valid CSS!