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

Symetria Tablic C++

Aruba Cloud - Virtual Private Server VPS
0 głosów
370 wizyt
pytanie zadane 4 marca 2021 w C i C++ przez zetC Nowicjusz (170 p.)

Witam forumowiczów, nie daje mi spokoju jedna rzecz w pewnym zadaniu. Mianowicie chodzi o ten mały wycinek kodu: if (tab[i] == tab[n-1-i]) cały czas nie mogę dojść do logiki tego zadania... Załóżmy, że wprowadzamy takie liczby: 1, 2, 3, 4, 3, 2, 1 - wtedy tablica jest symetryczna tylko skąd to się bierze. Program pobiera wartość tab[0] czyli 1 == i teraz 6 element tablicy czyli: 2 odjąć wartość i w tym przypadku to 0 i=0 w 1 iteracji no i wychodzi 1==2 a to nieprawda. surprise

A oto kod:

#include <iostream>

using namespace std;

int main()
{
    const int n = 7;
double tab[n];
bool symetryczna = false;


cout << "Podaj elementy tablicy: " << endl;
for (int i = 0; i < n; i++)
{
cout << "tab[" << i << "]= ";
cin >> tab[i];
} 
cout << endl;

 for (int i = 0; i < n; i++)
{
if (tab[i] == tab[n-1-i])
{
symetryczna = true;
}
else
{
symetryczna = false;
break;
}
}
if (symetryczna == true)
{
cout << "Twoja tablica jest symetryczna." << endl;
}


    return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 4 marca 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
wybrane 7 marca 2021 przez zetC
 
Najlepsza
Podstawy się kłaniają ;)

Dla tablicy siedmioelementowej mamy indeksy od 0 do 6, przy czym indeks zerowy oznacza pierwszy element tablicy, a indeks szósty oznacza siódmy element tablicy.
Stąd tab[0] -> pierwszy element tablicy, tab[7 - 1 - 0] = tab[6] -> siódmy element tablicy
komentarz 5 marca 2021 przez zetC Nowicjusz (170 p.)
Tak, ale na jakiej zasadzie to działa jak sobie to rozpisałem na kartce to cały czas nie mogę dojść prawdy.

tab[0]=1    tab[1]=2    tab[2]=3    tab[3]=4    tab[4]=3    tab[5]=2    tab[6]=1

Teraz podstawiając pod warunek: if(tab[i] == tab[n-1-i]) wychodzi w 1 poprawnie zawsze ale przy 2, 3 itd robi się coś dziwnego mianowicie

2 == (zawsze 6 element tablicy czyli wartosc 1) 1 odjąć 1 indeks czyli 1 co daje 2 == 0 (???)

3 == 1 - 2    3 ==  -1

przy tab[4]

3 == 1 - 5    3 == -4

Skoro warunek się nie zgadza to dlaczego pętla wykonuje się poprawnie?
komentarz 5 marca 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
Wow, skąd Ty te wartości wytrzasnąłeś.

W Twoim przypadku mamy kolejne porównania:

tab[0] == tab[6]

tab[1] == tab[5]

I tak dalej. Ja nie wiem, czemu Ty od wartości ostatniego elementu tablicy odejmujesz jakieś wartości (bo chyba właśnie to robisz). Porównujemy elementy tablic. Pierwszy z ostatnim, drugi z przedostatnim i tak dalej. Wygląda na to, że Ty w swoim rozumowaniu przeprowadzasz operację odejmowania nie na indeksie, a na wartości ostatniego elementu w tablicy. A to nie działa tak, że jeśli tab[n] = 1, to tab[n - 1] = 1 - 1

Ponadto szósty element tablicy to tab[5], czyli w tym przypadku wartość to 2.
komentarz 5 marca 2021 przez Whiskey_Taster Pasjonat (15,610 p.)

Tutaj masz link do poradnika odnośnie tablic, bo nie jestem w stanie z telefonu jakoś ładniej tego napisać w formie kodu, żeby Ci uświadomić różnicę 

Podobne pytania

+1 głos
2 odpowiedzi 1,046 wizyt
pytanie zadane 3 grudnia 2020 w C i C++ przez Wodnica Nowicjusz (160 p.)
+1 głos
1 odpowiedź 573 wizyt
pytanie zadane 23 stycznia 2022 w C i C++ przez Doge Gaduła (3,420 p.)
0 głosów
1 odpowiedź 1,218 wizyt
pytanie zadane 25 października 2020 w C i C++ przez hicodyn Początkujący (420 p.)

93,337 zapytań

142,332 odpowiedzi

322,423 komentarzy

62,676 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...