wypelnienie tablicy i sprawdzenie monotonicznosci-problem

0
 

Cześć mam problem z zadaniem. Mam wygenerować losową tablicę z losowymi wartościami i następnie sprawdzić jej monotoniczność.Ale coś mi ta monotoniczność nie działa tak jak powinna. Jeżeli możecie zerknijcie okiem i powiedzcie mi co jest nie tak. Oraz mam znaleźć element największy i najmniejszy. Wszystko ma to się odbyć za pomocć jednokrotnego przeskanowania tablicy.

#include <iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
const int rozmiar=5;   - ilość liczb jaką będzie znajdowała się w tablicy
void losuj_tablice (int t[rozmiar])
{
    srand(time(NULL));
    for (int i=0;i<rozmiar;i++)
    {
        t[i]=rand()%15;
    }
}


void wypisz_tablice (int t[rozmiar])
{
    for (int i=0;i<rozmiar;i++)
        cout<<" "<<t[i];
}


void sprawdz_tablice (int t[rozmiar])
{
    
# bool rosnacy=false,malejacy=false,staly=false,nieharmoniczny=false,niemalejacy=false;
    int rosn=0,mal=0,stal=0,nieharm=0,niemal=0;
    int mini=t[0], maxi=t[0];
    for (int i=0;i<rozmiar;i++)
    {
        if (t[i]<t[i+1]) {rosn++;}   // z bool'em to tak próbowałem :  if (t[i]<t[i+1]) {rosnacy=true;} i tak dalej
        if (t[i]=t[i+1]) {stal++;}
        if (t[i]<=t[i+1]) {niemal++;}
        if (t[i]>t[i+1]) {mal++;}
       
    }

if(rosn=rozm) cout<<"Podany ciag jest rosnacy "<<endl;   
if (staly=rozm ) cout<<"Podany ciag jest staly ";
if (mal=rozm) cout<<"Podany ciag jest malejacy"<<endl;
if (niemal=rozm) cout<<"Podany ciag jest niemalejacy"<<endl;
 
Z bool'em 
if(rosnacy=true) cout<<"Podany ciag jest rosnacy"; - i tak dalej.

Nie wiem dlaczego po skompilowaniu tego wyskakują mi wszystkie możliwe wartości czyli zawsze wypisuje ze jest rosnący, stały, malejący,niemalejący.

}
int main()
{

    int t[rozmiar];
    losuj_tablice(t);
    wypisz_tablice(t);
     sprawdz_tablice(t);
}

W powyższym programie znajdują się bool'e próbowalem tez za pomocą ich to zrobić ale podobny problem wynika.

0
  1. Naucz się rozróżniać "sprawdź" od "wypisz wynik sprawdzenia".
  2. i++ - oznacza: zapamiętaj wartość i, po czym zwiększ 'i'; lepiej używaj ++i.
  3. W tablice porównujesz sąsiednie więc nie może i przemierzać cały zakres: - for(int i=1;i<rozmiar;++i) i porównuj t[i-1] z t[i]
  4. if(t[i-1]<t[i]) malający=staly=false; bo skoro poprzedni jest mniejszy w jednym z przypadków to jedyne co możemy stwierdzić że nie jest malejący i nie jest stały, inne podobnie.
  5. Lepiej użyj coś a la: - int sprawdz_tablice(int t[rozmiar],bool &rosnacy,bool &malejacy,bool &nierosnacy,bool &niemalejacy) - czy jest stały sprawdzisz: - if(nierosnacy&&niemalejacy)
1

6.Operatorem porównania jest ==, a przypisania =.

0

Uprościłem sobie zadanie, zadaniem programu jest wypisanie na ekranie czy podany ciąg jest rosnący, malejący,stały czy nieharmoniczny. Czytałem wasze komentarze powyżej, ale pomyślałem sobie ,że najpierw spróbuję na prostszym przykładzie a dopiero później zabiorę się za bardziej skomplikowany. Problem jest następujący nie wiem dlaczego ale zawsze wypisuję mi ,że ciąg jest stały chociaż tak nie jest, a jeżeli ciąg naprawdę jest stały program się wysypuje totalnie ale chyba to dlatego ,że jest problem z tymi boolami. Poniżej zamieszczam kod :

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int rozmiar=3;
void losujtablice (int t[rozmiar])
{
    srand(time(NULL));
    for (int i=0;i<rozmiar;++i)
        t[i]=rand()%2;

}
void wypisztablice (int t[rozmiar])
{
    for (int i=0;i<rozmiar;++i)
        cout<<t[i]<<", ";
}
void sprawdz_tablice (int t[rozmiar])
{
    bool rosnacy=true,malejacy=true,staly=true,nieharmoniczny=true;
    for (int i=0;i<rozmiar;++i)
    {
        if (t[i-1]=t[i]) rosnacy=malejacy=false; // czyli jest staly
        if(t[i-1]<t[i]) malejacy=staly=false;      // jest rosnacy
        if(t[i-1]>t[i]) staly=rosnacy=false;        //jest malejacy


    }
if(rosnacy==true) cout<<"Podany ciag jest rosnacy ";
if(malejacy==true) cout<<"Podany ciag jest malejacy";
if(staly==true) cout<<"Podany ciag jest staly ";
if(staly==false && rosnacy==false && malejacy==false) cout<<"Podany ciag jest nieharmoniczny ";


}
int main()
{
    int t[rozmiar];
    //bool rosnacy=true,malejacy=true,nierosnacy=true,niemalejacy=true,staly=true;
    losujtablice(t);
    wypisztablice(t);
    sprawdz_tablice(t);
}
```cpp
 
0

**

Patryk27 napisał(a):

6.Operatorem porównania jest ==, a przypisania =.
**

0

Punkty 3 oraz 6 - olałeś.

0

Przepraszam ,że olałem podpunkt 3 - chodzi o to ,że nie za bardzo rozumiem o co w nim chodzi.

0

for (int i=0 ... oraz if (t[i-1] zaczynasz od i=0 po czym sięgasz do elementu i-1 czyli 0-1 czyli -1 mam nadzieje że rozumiesz że takowy nie istnieje.
PUNKT 6 TEŻ OLAŁEŚ JUŻ DWUKROTNIE - co w nim nie rozumiesz?

0

Co do 6 podpunktu podchodzę z dystansem ponieważ nie miałem na lekcji referencji i nie wiem za bardzo do czego ona służy ale spróbuję doczytać na jej temat.

0
astro napisał(a):

Co do 6 podpunktu podchodzę z dystansem ponieważ nie miałem na lekcji referencji i nie wiem za bardzo do czego ona służy ale spróbuję doczytać na jej temat.

O czym Ty do diaska mówisz?

0
astro napisał(a):

Co do 6 podpunktu podchodzę z dystansem ponieważ nie miałem na lekcji referencji i nie wiem za bardzo do czego ona służy ale spróbuję doczytać na jej temat.
To jakieś majaczenia. Pkt 6 mówi o tym że operacja:
if(t[i-1]=t[i]) - wpisze wartość t[i] do t[i-1] zaś if "zareaguje" w przypadku jeżeli ta wpisana wartość nie jest zerem.

0

Witaj
W punkcie 6 chodzi o to, że gdy chcesz porównać zmienną A do zmiennej B używasz operatora "==" natomiast, gdy chcesz aby zmienna A przyjęła wartość zmiennej B używasz jak to ci wcześniej koledzy wytłumaczyli operatora "=" i na odwrót.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1