Porownywanie elementów tablicy

0

Siemanko, proszę pilnie o pomoc, jak przeszukiwać tablice w języku c, żeby porównać poszczególne elementy?
Treść zadania brzmi tak: 11.Napisz funkcję, która sprawdzi czy tablica N liczb rzeczywistych
(podawana jako parametr funkcji) ma symetryczną zawartość
tzn. czy element pierwszy jest równy ostatniemu, drugi – przedostatniemu, itd.

Mam już tyle, ale nie wiem jak przeszukać https://pastebin.com/swsjDsqh

#include<stdio.h>

void tab(int tablica[],int rozmiar)
{

     for(int i=0;i<rozmiar;i++)
     {
        printf("podaj el:");
        scanf("%d",&tablica[i]);

     }

    for(int i=0;i<rozmiar;i++)
     {

     //tu ma być przeszukanie xd

     }

}

int main ()
{ 
    int x;
   printf("rozmiar tablicy: ");
   scanf("%d",&x);
   int A[x];
   tab(A,x);

}
0

Użyj w jednej pętli dwóch zmiennych określających indeksy, od początku i do końca tablicy i porównuj elementy spod tych indeksów.
Jeśli elementy są nierówne opuść funkcję z informacją, że tablica nie jest symetryczna,
a jeśli pętla dojdzie do momentu minięcia się indeksów zwróć informację o symetrii tablicy.

0

Ja bym to zrobił tak

    bool result = true;
    for(int i=0;i<rozmiar/2;i++)
     {
            if(tab[i]!=tab[rozmiar-1-i])
             {
                  i = rozmiar;
                  result = false;
             }
     }

     cout<<result<<endl;
0

Zrobiłbym tak dla czytelności, w osobnej funkcji.

bool is_symetric(int arr[], int size)
{
   int first_idx = 0;
   int last_idx = size - 1;
   while (first_idx < last_idx) {
      if (arr[first_idx] != arr[last_idx]) {
         return false;
      }
      ++first_idx;
      --last_idx;
   }
   return true;
} 

i pobieranie danych od użytkownika do tablicy zostawiłbym w osobnej funkcji.
Funkcja powinna opisywać swą nazwą co robi i robić tylko tą jedną czynność.

2

A tak ... może nieco inaczej :-)

#include <stdio.h>
#include <stdbool.h>
#include <assert.h>

bool is_symetric(int * table, size_t size) {
    assert(size > 0);
    int * last = table + size - 1;
    do {
        if(*table != *last) {
            return false;
        }
    } while(table++ < last--);

    return true;
}

int main(void) {
    int table[] = { 1, 4, 4, 2, 1 };
    printf("Tablica %s symetryczna.\n",
            (is_symetric(table, sizeof(table) / sizeof(table[0]))
             ? "jest": "nie jest"));
    return 0;
}

IMHO wskaźnik jest tu jak najbardziej "koszerny" :-)

0

Dziękuję Wam bardzo, ale Wasze metody są jak dla mnie zbyt profesjonalne. Całkiem inny poziom, może jakoś to ogarnę.

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