[C] Secondo elemento più grande di un array

di il
5 risposte

[C] Secondo elemento più grande di un array

Salve a tutti!
Devo scrivere un algoritmo che mi risolva questo problema:
Sviluppare una function C che, dati come parametri di input un array di int e il suo size, determina e restituisce come parametro di output il secondo più grande elemento dell’array (N.B.: non bisogna seguire l’idea di ordinare prima l’array).
Ed io ho scritto questo:
#include <stdio.h>
#include <stdlib.h>
void legge_da_tastiera(int [], int);
int sec_max(int [], int);
int main()
{

  int i,n,a[50],secondo_massimo;
  printf ("Inserire la dimensione dell'array:");
  scanf ("%d",&n);
  printf ("Inserire la i valori dell'array:");
  legge_da_tastiera(a, n);

  secondo_massimo = sec_max(a,n);
  printf ("Il secondo massimo dell'array:%d\n",secondo_massimo);

  return 0;
}
int sec_max(int a[], int n)
{
   int i, max, max_two;
   max = a[0];

   for(i=0; i<n; i++)
      {
           if(a[i] > max)
           {
            max_two = max;
            max = a[i];
           }
           else if(a[i] > max_two)
           {
              max_two = a[i];
           }
      }

   return max_two;
}


void legge_da_tastiera(int a[], int n)
{
	int i;
		for (i=0; i<n; i++)
	        scanf("%d", &a[i]);
}




Cos'ho sbagliato?

5 Risposte

  • Re: [C] Secondo elemento più grande di un array

    Max_two può essere usato non inizializzato.
    Non viene inizializzato quando non vengono rispettate le condizuoni dei due if ()

    Attenzione che all'inizio max_two ha un valore random molto alto

    Una soluzione potrebbe essere dichiarare max_two con il valore di -1, così sarà l'else if () a settarlo correttamente
  • Re: [C] Secondo elemento più grande di un array

    Beh, per iniziare quando passi il vettore a, dichiarato nel main, alla funzione legge_da_tastiera, cambiagli nome, non è errore, ma è buona norma farlo. Poi in sostanza il tuo programma funziona, solo che ha una falla quando inserisci i valori in ordine decrescente. Puoi ovviare al problema semplicemente inizializzando il contatore i del ciclo for a 1 invece che a 0.

    Spero di esserti stato d'aiuto, ciao.
  • Re: [C] Secondo elemento più grande di un array

    Pirand92 ha scritto:


    Beh, per iniziare quando passi il vettore a, dichiarato nel main, alla funzione legge_da_tastiera, cambiagli nome, non è errore, ma è buona norma farlo. Poi in sostanza il tuo programma funziona, solo che ha una falla quando inserisci i valori in ordine decrescente. Puoi ovviare al problema semplicemente inizializzando il contatore i del ciclo for a 1 invece che a 0.

    Spero di esserti stato d'aiuto, ciao.
    Ci ho già provato, ma purtoppo non va!
  • Re: [C] Secondo elemento più grande di un array

    Il problema (come mi sembra ti sia già stato segnalato) è che max_two non viene inizializzato.
    Ti suggerisco di prendere i primi due valori, a[0] e a[1], e mettere in max il maggiore dei due e in max_two il minore; quindi il ciclo lo fai per i che va da 2 a n.
    Naturalmente devi metterci prima di tutto un controllo che la dimensione del vettore sia almeno 2 elementi ma questa poi è una finezza.
  • Re: [C] Secondo elemento più grande di un array

    Grazie di cuore!
Devi accedere o registrarti per scrivere nel forum
5 risposte