View Full Version : [c] ricercare il secondo massimo
ricercare il secondo massimo di un array.
delle volte riesce a trovarlo e delle volte no.
#include <stdio.h>
#include <stdlib.h>
/*ricercare il secondo massimo degli elementi dell'array*/
int ric_max(int [],int);
int main()
{int a[100];
int i,n,max;
printf("inserisci il size dell array:");
scanf("%d",&n);
printf("inserisci gli elementi:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=ric_max(a,n);
printf("l'elemento massimo e':%d\n",max);
system("PAUSE");
return 0;
}
int ric_max(int a[],int n)
{
int massimo=a[0];
int i,max2=a[1];
for(i=0;i<n;i++){
if(a[i]>massimo){
max2=massimo;
massimo=a[i];
}
}
return max2;
}
devo usare per forza un algoritmo di ordinamento??
#include <stdio.h>
#include <stdlib.h>
/*ricercare il secondo massimo degli elementi dell'array*/
void ric_max(int [],int);
int main()
{int a[100];
int i,n;
printf("inserisci il size dell array:");
scanf("%d",&n);
printf("inserisci gli elementi:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
ric_max(a,n);
printf("il secondo elemento massimo e':%d\n",a[n-2]);
system("PAUSE");
return 0;
}
void ric_max(int a[],int n)
{
int max;
int i,j,max2;
for(i=n-1;i>0;i--){
max=i;
for(j=0;j<i+1;j++)
if(a[j]>a[max])
max=j;
max2=a[max];
a[max]=a[i];
a[i]=max2;
}
}
Puoi modificare i messaggi indentando bene il tuo codice?
clockover
25-02-2011, 01:29
Non devi usare algoritmi di ordinamento, non ne hai bisogno dato che comunque devi scandire tutto l'array!
Il tuo algoritmo iniziale va abbastanza bene ma devi modificarlo!
Prima di tutto fai un confronto iniziale! Tu già a priori scegli massimo = array[0] e max2 = array[1], ma non è detto che array[0] sia più grande di array[1].
Inoltre fai un controllo nel ciclo e se array[i] > massimo allora il nuovo max2 diventa massimo e il nuovo massimo diventa array[i]... ma che succede se array[i] è minore di massimo ma è maggiore di max2??
E indenta bene il codice
bobbytre
25-02-2011, 02:44
Piccolo esempio di codice indentato a dovere
#include <stdio.h>
#include <stdlib.h>
/*ricercare il secondo massimo degli elementi dell'array*/
void ric_max(int[], int);
int main()
{
int a[100];
int i, n;
printf("inserisci il size dell array:");
scanf("%d", &n);
printf("inserisci gli elementi:");
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
ric_max(a, n);
printf("il secondo elemento massimo e':%d\n", a[n - 2]);
system("PAUSE");
return 0;
}
void ric_max(int a[], int n)
{
int max;
int i, j, max2;
for (i = n - 1; i > 0; i--)
{
max = i;
for (j = 0; j < i + 1; j++)
{
if (a[j] > a[max])
{
max = j;
}
}
max2 = a[max];
a[max] = a[i];
a[i] = max2;
}
}
Non devi usare algoritmi di ordinamento, non ne hai bisogno dato che comunque devi scandire tutto l'array!
Il tuo algoritmo iniziale va abbastanza bene ma devi modificarlo!
Prima di tutto fai un confronto iniziale! Tu già a priori scegli massimo = array[0] e max2 = array[1], ma non è detto che array[0] sia più grande di array[1].
Inoltre fai un controllo nel ciclo e se array[i] > massimo allora il nuovo max2 diventa massimo e il nuovo massimo diventa array[i]... ma che succede se array[i] è minore di massimo ma è maggiore di max2??
E indenta bene il codice
if(a[0]>a[1]){
max=a[0];
max2=a[1];
}
else{
max=a[1];
max2=a[0];
}
for(i=2;i<n;i++){
if(a[i]>max){
max2=max;
max=a[i];
}
if(a[i]<=max && a[i]>max2)
max2=a[i];
}
return max2;
roba del genere?
clockover
25-02-2011, 13:17
E se invece di
if(a[i]<=max && a[i]>max2)
max2=a[i];
}
metti un semplice
else if(a[i] > max[2])
max2 = a[i];
anche facendo
else if(a[i]>max2)
max2=a[i];
clockover
25-02-2011, 15:55
Controlla bene e riposta il codice della funzione modificata (indentato per piacere)
Controlla bene e riposta il codice della funzione modificata (indentato per piacere)
#include <stdio.h>
#include <stdlib.h>
int ric_max(int [],int);
int main()
{int i,a[100],n,pepp;
printf("inserisci il size dell array:");
scanf("%d",&n);
printf("inserisci elementi dell array:");
for(i=0;i<n;i++)
scanf("\n%d\n",&a[i]);
pepp=ric_max(a,n);
printf(" il secondo massimo:%d\n",pepp);
system("PAUSE");
return 0;
}
int ric_max(int a[],int n)
{
int i,max,max2;
if (a[0]>a[1])
{
max=a[0];
max2=a[1];
}
else
{
max=a[1];
max2=a[0];
}
for(i=2;i<n;i++)
{
if(a[i]>max)
{
max2=max;
max=a[i];
}
else if(a[i]>max2)
max2=a[i];
}
return max2;
}
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.