[C++] Ciąg bitoniczny

Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[C++] Ciąg bitoniczny

Post autor: rochaj »

no w końcu jak to będzie, bo problem wydawał się prosty
Fabix
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 18 gru 2014, o 20:22
Płeć: Mężczyzna
Lokalizacja: Zabrze

[C++] Ciąg bitoniczny

Post autor: Fabix »

Błędem jest odwoływanie się do niezdefiniowanej wartości t[n]. Spróbuj też przeanalizować przypadki równych elementów.
Kurde nie jestem pewien, bo kiedy spróbowałem dynamicznie zadeklarować tablice to dostałem jeszcze więcej błędów, poza tym jak się skompiluje program to on działa dobrze .
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] Ciąg bitoniczny

Post autor: norwimaj »

Ukryta treść:    
Nie zakładam, że ciągi muszą być długości co najmniej \(\displaystyle{ 2}\), czyli ciągi \(\displaystyle{ (1)}\) oraz \(\displaystyle{ (1,2)}\) uznaję za bitoniczne. Nie wiem, co ma być zwracane dla ciągu pustego, ale to sobie zamienisz według uznania.-- 19 gru 2014, o 21:13 --
Fabix pisze: poza tym jak się skompiluje program to on działa dobrze .
Nieprawda. Wynik działania programu jest niezdeterminowany. W ostatnim kroku pętli wychodzisz poza tablicę.
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C++] Ciąg bitoniczny

Post autor: gryxon »


Kod: Zaznacz cały

int spr(int *tab, int n){
	int i;
	int flaga=0;
	for(i=0;i<n-1;++i){
		if(flaga == 0 && tab[i]>tab[i+1]){++flaga;continue;}
		else if(flaga == 1 && tab[i]<tab[i+1])++flaga;
	}
	if(flaga<2)return 1;
	else return 0;
}
//gdy funkcja zwróci wartość jeden to ciąg spełnia warunki zadania.
Coś takiego nie wchodzi? Problem serio wydaje się łatwy. (wersja dla nierosnącego,niemalejącego.)
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[C++] Ciąg bitoniczny

Post autor: rochaj »

gryxon pisze:

Kod: Zaznacz cały

int spr(int *tab, int n){
	int i;
	int flaga=0;
	for(i=0;i<n-1;++i){
		if(flaga == 0 && tab[i]>tab[i+1]){++flaga;continue;}
		else if(flaga == 1 && tab[i]<tab[i+1])++flaga;
	}
	if(flaga<2)return 1;
	else return 0;
}
//gdy funkcja zwróci wartość jeden to ciąg spełnia warunki zadania.
Coś takiego nie wchodzi? Problem serio wydaje się łatwy. (wersja dla nierosnącego,niemalejącego.)
Ciąg stały nie jest bitoniczny.
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C++] Ciąg bitoniczny

Post autor: gryxon »

No okej czyli zakładamy wersje dla nierówności ostrych. A co powiesz o ciągu o długości 2?
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[C++] Ciąg bitoniczny

Post autor: rochaj »

gryxon pisze:No okej czyli zakładamy wersje dla nierówności ostrych. A co powiesz o ciągu o długości 2?
jest bitoniczny
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C++] Ciąg bitoniczny

Post autor: gryxon »

To chyba wystarczy zmienić znak na nierówności nieostre w warunkach. przetestuj teraz mój poprzedni link (zeedytowałem).

Kod: Zaznacz cały

int spr(int *tab, int n){
   int i;
   int flaga=0;
   for(i=0;i<n-1;++i){
      if(flaga == 0 && tab[i]>=tab[i+1]){++flaga;continue;}
      else if(flaga == 1 && tab[i]<=tab[i+1])++flaga;
   }
   if(n==2 && tab[0]==tab[1])return 0;
   if(flaga<2)return 1;
   else return 0;
}
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] Ciąg bitoniczny

Post autor: norwimaj »

rochaj pisze: Ciąg stały nie jest bitoniczny.
Jakże nie? Byłoby prościej, gdybyś porządnie zdefiniował ciąg bitoniczny. Trudno jest rozwiązywać zadanie, jeśli się nie rozumie jego treści.
szw1710

[C++] Ciąg bitoniczny

Post autor: szw1710 »

Więc dla uściślenia proponuję w sensie słabym: ciąg \(\displaystyle{ (a_n)}\) skończony bądź nieskończony nazywamy bitonicznym, jeśli istnieje \(\displaystyle{ n_0}\) takie, że

\(\displaystyle{ a_1\le\dots\le a_{n_0-1}\le a_{n_0}}\) oraz \(\displaystyle{ a_{n_0}\ge a_{n_0+1}\ge a_{n_0+2}\ge\dots}\)

Dopuszczamy do tego ciągi niemalejące. Nierosnące to ciągi bitoniczne z \(\displaystyle{ n_0=1}\).
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[C++] Ciąg bitoniczny

Post autor: rochaj »

Ciąg bitoniczny to ciąg, który najpierw rośnie, a potem maleje. W ciągu bitonicznym \(\displaystyle{ a_1, \ldots , a_n}\) istnieje takie \(\displaystyle{ i \in \{1, \ldots , n \},}\) że ciąg \(\displaystyle{ a_1, \ldots , a_i}\) jest ściśle rosnący, a ciąg \(\displaystyle{ a_i, \ldots, a_n}\) jest ściśle malejący. Ciąg (ściśle) rosnący oraz ciąg (ściśle) malejący są ciągami bitonicznymi.
Ostatnio zmieniony 20 gru 2014, o 12:13 przez Dasio11, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
szw1710

[C++] Ciąg bitoniczny

Post autor: szw1710 »

Warto jednak badania przeprowadzić dopuszczając nierówności słabe. Przynajmniej tak sądzę.
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[C++] Ciąg bitoniczny

Post autor: Vardamir »

rochaj pisze:no w końcu jak to będzie, bo problem wydawał się prosty
No w końcu może coś sam zrobisz? Problem jest prosty tylko nie podałeś dokładnych informacji.
rochaj pisze:Ciąg bitoniczny to ciąg, który najpierw rośnie, a potem maleje. W ciągu bitonicznym \(\displaystyle{ a_1, \ldots , a_n}\) istnieje takie \(\displaystyle{ i \in \{1, \ldots , n \},}\) że ciąg \(\displaystyle{ a_1, \ldots , a_i}\) jest ściśle rosnący, a ciąg \(\displaystyle{ a_i, \ldots, a_n}\) jest ściśle malejący. Ciąg (ściśle) rosnący oraz ciąg (ściśle) malejący są ciągami bitonicznymi.
To powinno się znaleźć w pierwszym poście.
Ukryta treść:    
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C++] Ciąg bitoniczny

Post autor: gryxon »

szw1710 pisze:Warto jednak badania przeprowadzić dopuszczając nierówności słabe. Przynajmniej tak sądzę.

Kod: Zaznacz cały

int spr(int *tab, int n){
   int i;
   int flaga=0;
   for(i=0;i<n-1;++i){
      if(flaga == 0 && tab[i]>tab[i+1]){++flaga;--i;continue;}
      else if(flaga == 1 && tab[i]<tab[i+1])++flaga;
   }
   if(flaga<2)return 1; // jest bitoniczny
   else return 0; //nie jest
}
ODPOWIEDZ