|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
[c] ricercare il secondo massimo
ricercare il secondo massimo di un array.
delle volte riesce a trovarlo e delle volte no. Codice:
#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;
}
Ultima modifica di ninuzz : 24-02-2011 alle 17:09. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
devo usare per forza un algoritmo di ordinamento??
Codice:
#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;
}
}
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2005
Messaggi: 168
|
Puoi modificare i messaggi indentando bene il tuo codice?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
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 |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
Piccolo esempio di codice indentato a dovere
Codice PHP:
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#6 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
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;
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
E se invece di
Codice:
if(a[i]<=max && a[i]>max2) max2=a[i]; } Codice:
else if(a[i] > max[2])
max2 = a[i];
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
anche facendo
Codice:
else if(a[i]>max2) max2=a[i]; |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Controlla bene e riposta il codice della funzione modificata (indentato per piacere)
|
|
|
|
|
|
#10 | |
|
Junior Member
Iscritto dal: Jan 2011
Messaggi: 22
|
Quote:
Codice:
#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;
}
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:07.




















