wylosuj 1000 liczb z przedziału do tablicy, skopiuj takie o parzystych sąsiadach do kolejnej tablicy

0

Witam,
Mam na jutro do wykonanie zadanie z tablic jednowymiarowych, jednak ciężko jest mi się za nie zabrać.
Oto treść:
"Napisz program który zapełni tablicę jednowymiarową n elementami (2<n<1000) z przedziału <0;100> a następnie wczyta do drugiej tablicy takie liczby z tablicy pierwszej które za sąsiadów mają liczby parzyste. Zadbaj o ciągłość indeksacji w drugiej tablicy.
Wypisz na ekranie zawartość obu tablic oraz sumę i średnią liczb w tablicy drugiej."

Proszę o jakieś wytłumaczenie zadania lub jego wykonanie,jeżeli nie będzie to duży problem. Właściewie to każda pomoc jest mile widziana. ;)
Z góry dziękuję.

0

Zacznij od utworzenia i wypełnienia tablicy liczbami z przedziału, nie przejmuj się dalszą częścią zadania.

przydatna lektura: https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/

0
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
    int n, i;
    cin>>n;
    int t[n];
    srand(time(NULL));
    for(i=0; i<n; i++)
        t[i]=rand()%101;
        
    return 0;
}

Czyli w ten sposob bedzie wygladala pierwsza tablica?

0

int t[n]; jest formalnie rzecz biorąc niepoprawne (powinieneś użyć std::vector, albo tablicy o wielkości znanej w czasie kompilacji), ale jeśli u Ciebie działa - to na tym poziomie uznałbym za ok. Widzę też, że zignorowałeś wskazówkę aby użyć dobrodziejstw <random> zamiast rand() i srand(), ale również tutaj, na tym poziomie jest to ok.

W skrócie - póki co dobrze.

0

Dobrze, a więc teraz mam zadeklarować drugą tablicę. Z treści wynika, że chodzi o liczby ktore posiadaja parzystych sasiadów, czyli indeks 0 oraz ostatni odpadają. Będzie to t2[n-2]?

1

Nie jestem pewien czy mają obaj sąsiedzi być parzyści, wszyscy, czy co najmniej jeden. Zakładając to co Ty, cały czas nie masz pewności, bo wielkość drugiej tablicy jest zależna od zawartości (a nie wielkości) pierwszej.

Najłatwiej będzie jak drugą tablicą będzie std::vector<int>, na którym możesz użyć metody push_back() i nie martwić się o indeksy itd.

1

Wygląda, że jak "sąsiadów", to co najmniej dwóch, czyli trzeba sprawdzać od drugiego do przedostatniego, na przyszłość się Pytaj o takie rzeczy.

0

Rozumiem, jednak zadanie ma być wykonane przy pomocy tablic jednowymiarowych nie dynamicznych ;( Załóżmy że chodzi o co najmniej dwóch, aby nie komplikować sprawy wtedy druga tablica to będzie t2[i-2]?

0

Tak, ale wtedy też musisz pamiętać gdzie się kończy.

0

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int n, i, j;
    srand(time(NULL));
    cin>>n;
    int t1[n], t2[n-2];
    for(i=0;i<n;i++)
    {
        t1[i]=rand()%101;
        cout<<t1[i]<<endl;
    }
    cout<<"*** koniec 1tab"<<endl;
    j=0;
    for(i=1;i<n-1;i++)
    if(t1[i-1]%2==0 and t1[i+1]%2==0)
    {
        t2[j]=t1[i];
        j++;
    }
    if(j==0)
        cout<<"Brak elementów"<<endl;
    else
    {
        for(i=0;i<j;i++)
            cout<<t2[i]<<endl;
            cout<<"*** koniec 2tab"<<endl;
    }


}

Zrobiłem to trochę "po swojemu", ale wydaje mi się, że działa, chyba, że jest tu jakiś błąd którego nie widzę?

1

Nie wiem co tu jest po swojemu, to prawie przykładowe rozwiązanie używające wyłącznie podstawowych narzędzi.

Jedynie ten and zamiast && trochę razi ;​) No i endl zamiast \n - ale to pierdoły na tym poziomie.

Tak patrząc na warunki zadania, jeśli n musi być większe od 2 to sugeruje to, że interpretacja o dwóch sąsiadach jest poprawna.

Jednak nie sprawdzasz nigdzie czy podane n nie jest większe od 1000.

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