• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównywanie elementów tablicy jednowymiarowej

Cloud VPS
0 głosów
1,865 wizyt
pytanie zadane 20 czerwca 2019 w C i C++ przez Mr.EndiX Początkujący (470 p.)
#include <iostream>
#include <string>
#include <ctime>
#include <windows.h>

using namespace std;

int rozmiarTab=10; //nadalem narazie warotsc zeby pozniej ja usunac jak dodam opcje samodzilengo ustalania rozmiaru

void wyswietlTablice(int tablica[], int rozmiarTab) //wyswietla tablice1
{
            cout<<"[";
        for (int i=0; i<rozmiarTab; i++)
        {
            if(i!=0)
            {
                cout<<",";
            }
            cout<<tablica[i];
            //Sleep (500);
        }
        cout<<"]";
}
void wyswietlTablice2(int tablica2[], int rozmiarTab) //wyswietla tablice 2 (chyba da sie to poloczyc z wyswietlaniem tablicy1 ale nie probowalem)
{
            cout<<"[";
        for (int i=0; i<rozmiarTab; i++)
        {
            if(i!=0)
            {
                cout<<",";
            }
            cout<<tablica2[i];
            //Sleep (500);
        }
        cout<<"]";
}

void sortuj(int tablica[],int rozmiarTab) //sortowanie babelkowe
{
       int n;
     for (int j=n-1; j>0; --j)
     {

    for (int i=0; i<j; ++i)
    {
      if (tablica[i]>tablica[i+1])
      {
        int temp=tablica[i];
        tablica[i]=tablica[i+1];
        tablica[i+1]=temp;
      }
    }
    }
}

void wczytanieTablicy(int tablica[], int rozmiarTab) // zapisuje tablice1 randomowo lub po koleji(zeby sprawdzic czy program poprawnie rozpoznaje)
{
    srand(time(NULL));
 for(int i=0; i<rozmiarTab; i++)
 {
     tablica[i]=i;// rand()%100;
 }

}

void duplikacjaTablicyISortowanie2(int tablica[], int tablica2[], int rozmiarTab) //najpierw zapisuje tablice1 i ja wyœwietla, potem kopiuje tablice 1 do tablicy 2, soruje tablice1
                                                                                     //i nastepnie sortuje tablice2 i ja wyswietla
{
    wczytanieTablicy(tablica, rozmiarTab);
    cout<<"Tablica 1 wejsciowa: \n";
    wyswietlTablice(tablica, rozmiarTab);
    cout<<" \n";

for(int i=0; i<rozmiarTab; i++)
{
    tablica2[i]=tablica[i];
}
 cout<<"Tablica 1 posortowana: \n";
 sortuj(tablica, rozmiarTab);
 wyswietlTablice(tablica, rozmiarTab);
 cout<<" \n";
cout<<"Tablica 2 skopiowana: \n";
 wyswietlTablice2(tablica2, rozmiarTab);
 cout<<" \n";

}

void sprawdzanieZgodnosci(int tablica[], int tablica2[], int rozmiarTab)
{
bool powtarza;
duplikacjaTablicyISortowanie2(tablica, tablica2, rozmiarTab);

for (int i=0; i<rozmiarTab; i++)
{
    for(int j=0; j<i; j++)
    {
        if(tablica2[j]==tablica[i])
        {
            powtarza=true;
        }
        else if(tablica2[j]!=tablica[i])
        {
           powtarza=false;
        }
    }
}


        if (powtarza==true)
        {
            cout<<"Posortowane\n";
        }
        else if (powtarza==false)
            {
            cout<<"Nie posortowane\n";
        }
}
int main()
{
    int tablica[rozmiarTab];
   int tablica2[rozmiarTab];
    sprawdzanieZgodnosci(tablica, tablica2, rozmiarTab);
} 

Witam, robiąc zadanie z książki które polega na tym aby napisać program który będzie sprawdzał czy tablica wpisana jest posortowana czy nie. I natrafiłem na problem ze sprawdzaniem czy jest czy nie. Jedyny sposób jaki udało mi się to zrobić to napisanie warunku: 

     if(tablica2[1]==tablica[1] && tablica2[rozmiarTab/2]==tablica[rozmiarTab/2] && tablica2[rozmiarTab-1]==tablica[rozmiarTab-1])
        {
            powtarza=true;
        }
        else
        {
           powtarza=false;
        }


        if (powtarza==true)
        {
            cout<<"Posortowane\n";
        }
        else if (powtarza==false)
            {
            cout<<"Nie posortowane\n";
        }
}

Ale zakładam że nie jest to najwydajniejszy sposób, także zwracam się z prośbą o pomoc.

komentarz 20 czerwca 2019 przez Velta Maniak (52,890 p.)

rozmiarTab nie jest stałą, dodaj const.

1 odpowiedź

0 głosów
odpowiedź 20 czerwca 2019 przez Szfierzak Gaduła (3,750 p.)

Twój warunek sprawdza tylko, czy trzy liczby są na "odpowiednim" miejscu. Tablica  1,3,2,4,5,7,6,8,9,10 zgodnie z tym warunkiem będzie równa 1,2,3,4,5,6,7,8,9,10.

Najszybciej to byłoby chyba zrobić pętle i sprawdzić czy każdy następny element jest odpowiednio mniejszy lub większy od poprzedniego.

bool sorted = true;
for(int i=1; i<n; i++)
  if(tab[i]>tab[i-1]){ //dla tablicy posortowanej malejąco
    sorted = false;
    break;
  }

 

Podobne pytania

0 głosów
3 odpowiedzi 472 wizyt
0 głosów
1 odpowiedź 1,642 wizyt
–3 głosów
1 odpowiedź 541 wizyt

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,904 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...