funkcije max i min iz biblioteke algoritama,c++
- poruka: 15
- |
- čitano: 8.688
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Evo to bez funckija.
.....
printf("Koliko brojeva");
scanf("%d",&n);
max=a[0];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<=n;i++)
if(a[i]>max)
max=a[i];
.....
Funkcija max vraca najveci od 2 broja, a ne cijelog niza.
Evo primjer koristenja:
...
int main()
{
int A[20];
for( int i = 0; i < 20; ++i ) cin >> A[i];
int maks = -puno; // -puno znaci najmanji moguci element.
for( int i = 0; i < 20; ++i ) maks = max( maks, A[i] );
}
@Shody - ne misliš li da bi inicijalizacija max-a trebala ići nakon učitavanja niza a ne prije?
@obojica - može li to samo s jednom petljom?
U pravu si, bilo bi bolje, ali logički, nebi trebalo imati veze jer si max postavio na prvi član u nizu, nebitno je li to prije ili poslije petlje?
U pravu si, bilo bi bolje, ali logički, nebi trebalo imati veze jer si max postavio na prvi član u nizu, nebitno je li to prije ili poslije petlje?
Ali u trenutku inicijalizacije maxa ti u tom polju imaš neko smeće, a ne ono kaj bi trebo imat jer nisi još ništa učitao. Tako da svakako treba ići nakon učitavanja.
Btw ovak se to radi:
printf("Koliko brojeva: ");
scanf("%d",&n);
printf("Ucitaj 1. broj: ");
scanf("%d",&polje[0]);
maks=polje[0];
mini=polje[0];
for(i=1;i<n;++i)
{
printf("Ucitaj %d. broj: ",i+1);
scanf("%d",&polje[i]);
if (polje[i]>maks) maks=polje[i]; if (polje[i]<mini) mini=polje[i];}
Da, vidiš, nisam se sjetio "smeća".
Može i prije for petlje, ako max=a[0]; inicijaliziraš globalno.
Da, vidiš, nisam se sjetio "smeća".
Može i prije for petlje, ako max=a[0]; inicijaliziraš globalno.
Ne kužim kaj misliš s tim... ako je u polju a smeće, onda je smeće sve dok nešto unutra ne upišeš. Tek nakon što upišeš nešto smisleno, ima smisla raditi ikakvu inicijalizaciju.
Neki compileri ne ostavljaju smeće, nego automatski cijelo polje inicijaliziraju nulama, pa bi u slučaju da ćeš u polje upisati samo negativne brojeve, ispalo da jemaximalni element nula, kojeg ni nema u polju - eto greške.
Za inicijalizaciju moraš znat kaj radiš i kaj je di zapisano i dal to ima smisla.
p.s. vidi gore kak se to najelegantnije napravi.
Mene su učili u školi, da je svaka varijabla, koja je deklarirana prije main fukcije, odnosno globalno, automatski postavljena na 0.
No nije bitno, nevalja ako je postavljena na 0 prije učitavanja jer onda najmanji član može bit zaista najmanji pa će umjesto njegove vrijednosti ispisati 0.
Mene su učili u školi, da je svaka varijabla, koja je deklarirana prije main fukcije, odnosno globalno, automatski postavljena na 0.
No nije bitno, nevalja ako je postavljena na 0 prije učitavanja jer onda najmanji član može bit zaista najmanji pa će umjesto njegove vrijednosti ispisati 0.
Pa nećemo za ovo uvodit globalne varijable, nema smisla.
A i nisam siguran za ovo automatsko postavljanje, mislim da tako nešto ovisi o compileru. Al da ne bi bilo zabune fino napraviš sve bez ikakvih pretpostavki i onda si siguran da radi :D
Evo to bez funckija.
.....
printf("Koliko brojeva");
scanf("%d",&n);
max=a[0];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<=n;i++)
if(a[i]>max)
max=a[i];
.....
Njegov program će za izračun maksimuma čak dobro raditi, pošto obično ako ne dodijelimo vrijednost polju, tamo se nalazi neka visoka negativna vrijednost,
ali zato neće raditi za izračun min vrijednosti.
Jednostavno se dodijeli vrijednost polju a[0] prije ulaska u petlju, a petlja počinje sa indeksom a[1] polja, jednostavnije od Lukinog načina ne ide:
"jedna petlja + inicijalizacija varijabli prije korištenja"
Mislim da ste malo zabrijali ili ne znate koristiti STL
Dakle
// min_element/max_element
#include <iostream>
#include <algorithm>
using namespace std;
bool myfn(int i, int j) { return i<j; }
struct myclass {
bool operator() (int i,int j) { return i<j; }
} myobj;
int main () {
int myints[] = {3,7,2,5,6,4,9};
// using default comparison:
cout << "The smallest element is " << *min_element(myints,myints+7) << endl;
cout << "The largest element is " << *max_element(myints,myints+7) << endl;
// using function myfn as comp:
cout << "The smallest element is " << *min_element(myints,myints+7,myfn) << endl;
cout << "The largest element is " << *max_element(myints,myints+7,myfn) << endl;
// using object myobj as comp:
cout << "The smallest element is " << *min_element(myints,myints+7,myobj) << endl;
cout << "The largest element is " << *max_element(myints,myints+7,myobj) << endl;
return 0;
}
@Luuka Da bilo bi optimalnije samo s jednom petljom, ali cijela moja poanta je bila da se max ne moze koristiti na cijelom polju.
Evo po naški:
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int polje[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << "Najveci element polja je " << *max_element(polje, polje+9) << endl;
cout << "Najmanji element polja je " << *min_element(polje, polje+9) << endl;
return 0;
}
Ma to sam trazio ,ono s petljom i vrapci znaju ;)