Witam.
Jak sprawdzic, czy wybrane argumenty tworza ciag posortowany i jezeli nie, to jak je posortowac.
Z gory wielkie dzieki
[c++][dev cpp] ciag posortowany-jak sprawdzic?
[c++][dev cpp] ciag posortowany-jak sprawdzic?
Chodzi ci o ciąg argumentów jakiejś funkcji czy też o ciąg liczb w tablicy?
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
[c++][dev cpp] ciag posortowany-jak sprawdzic?
No to poprostu mozna np tak:
Powinno byc ok. POZDRO
Kod: Zaznacz cały
int monotoniczny(int tab[], int rozmiar)
{
int result=1;
// zbadaj czy rosnacy
for(int i=0;i<rozmiar-1;i++)
if(tab[i]>tab[i+1])
{
result =2 // jeden z wyrazow nie spelnia - przerywamy
break;
}
if(result !=2) return 1; // ciag jest rosnacy
// a moze malejacy??
for(int i=0;i<rozmiar-1;i++)
if(tab[i]<tab[i+1])
return 0; // jeden z wyrazow nie spelnie - nie jest monotoniczny
return 1;
} // zwraca 1 jesli jest monotoniczny lub 0 jesli nie
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[c++][dev cpp] ciag posortowany-jak sprawdzic?
Tak żeby nie sprawdzać po dwa razy można tak:
Kod: Zaznacz cały
bool if_sorted(int *tab,int size)
{
bool sort=1;
int sign,i;
if(size>1)
{
sign=tab[0]-tab[1];
for(i=2;i<size-1;i++)
{
if(sign*(tab[i]-tab[i+1])<=0) // korzystamy z faktu, że iloczyn dwóch dowolnych różnic wyrazów ciągu a[i]-a[j], gdzie i>j dla każdego iloczynu lub i<j dla każdego iloczynu jest dla ciągu rosnącego i malejącego zawsze dodatni
{
sort=0;
break;
}
}
}
return sort;
}//funkcja zwraca 1 jeśli ciąg posortowany roznąco lub malejąco i 0 w przeciwnym wypadku
-
- Użytkownik
- Posty: 941
- Rejestracja: 17 gru 2007, o 21:48
- Płeć: Mężczyzna
- Lokalizacja: Kingdom Hearts
- Podziękował: 6 razy
- Pomógł: 222 razy
[c++][dev cpp] ciag posortowany-jak sprawdzic?
Co do sprawdzenia(u mnie, czy rosnąco, możesz modyfikować znak zależności między sąsiednimi komórkami, jeśli chcesz inne kryterium):
A jak posortować? Załączając nagłówek
i wykorzystując funkcję sort
Kod: Zaznacz cały
#include <iostream>
using namespace std;
bool posortowana(int tab[], int n)
{
for(int i=1;i<n;i++)
if(tab[i-1]>=tab[i])
return false;
return true;
}
main()
{
ios_base::sync_with_stdio(0);
int *w,n;
scanf("%d",&n);
w=new int[n];
for(int i=0;i<n;i++)
scanf("%d",&w[i]);
if(posortowana(w,n))
printf("Tak
");
else
printf("Nie
");
system("pause");
}
Kod: Zaznacz cały
#include<algorithm>