[c++][dev cpp] ciag posortowany-jak sprawdzic?

mlody5409
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 20 sty 2008, o 16:24
Płeć: Mężczyzna
Lokalizacja: warszaa
Podziękował: 2 razy

[c++][dev cpp] ciag posortowany-jak sprawdzic?

Post autor: mlody5409 »

Witam.
Jak sprawdzic, czy wybrane argumenty tworza ciag posortowany i jezeli nie, to jak je posortowac.


Z gory wielkie dzieki
eldil
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 23 lut 2008, o 19:08
Płeć: Mężczyzna
Lokalizacja: Kraków

[c++][dev cpp] ciag posortowany-jak sprawdzic?

Post autor: eldil »

Chodzi ci o ciąg argumentów jakiejś funkcji czy też o ciąg liczb w tablicy?
soku11
Użytkownik
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?

Post autor: soku11 »

No to poprostu mozna np tak:

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

Powinno byc ok. POZDRO
Awatar użytkownika
kadiii
Użytkownik
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?

Post autor: kadiii »

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
matshadow
Użytkownik
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?

Post autor: matshadow »

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):

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");
}
A jak posortować? Załączając nagłówek

Kod: Zaznacz cały

#include<algorithm>
i wykorzystując funkcję sort
ODPOWIEDZ