1 / 9
Jan 2020

Probuje rozwiazac zadanie Parzyste nieparzyste za pomoca wskaznikow. Spoj nie akceptuje i juz nie mam pomyslu dlaczego. Oto moj kod

  • created

    Jan '20
  • last reply

    Jan '20
  • 8

    replies

  • 924

    views

  • 3

    users

  • 1

    link

Program liczy dobrze. Dla dluzszych ciagow wejsciowych prawdopodobnie nastepuje blad ochrony pamieci.

przyklad wejscia
2
20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 9 8

Gdy zadeklarowalem z gory odpowiednio duza tablice to Twoj program przeszedl przez sedziego.
Mozna tez troche pozmieniac klejnosc instrukcji zeby wielkosc tablicy byla juz znana wtedy deklarowac czytac do niej wartosc itd.

Faktycznie, @pawoj20, masz częściowo rację, ale pytająca sama sobie winna. Gdyby wkleiła swój kod bardziej staranniej …, np tak:

#include <iostream>

using namespace std;

void sortowanieParzystaNieparzysta(int *tab, int ileLiczb)
{
    cin >> ileLiczb;

        for (int i=0; i<ileLiczb; i++)
        {
            cin >> tab[i];
        }
        for (int i=1; i<=ileLiczb; i++)
        {
            if (i%2==0)
            {
                cout << tab[i-1] << " ";
            }
        }
        for (int i=1; i<=ileLiczb; i++)
        {
            if (i%2!=0)
            {
                cout << tab[i-1] << " ";
            }
        }
        cout << endl;
}

int main()
{
    int ileTestow, ileLiczb;
    int *tab;

    cin >> ileTestow;

    for (int i=0; i<ileTestow; i++)
    {
        tab = new int[ileLiczb];
        sortowanieParzystaNieparzysta(tab, ileLiczb);
        delete[] tab;
        tab = NULL;
    }
    return 0;
}

W twoim kodzie wystarczy instrukcję z linii 7, przenieść do [przed] 39 i będzie AC.

Natomiast zamiast sprawdzania - if (i%2 == 0) ..... można po prostu od razu iterować:

for (int i = 1; i < n; i += 2)
//oraz
for (int i = 0; i < n; i += 2)

a nie tak jak to zrobiłaś.

Tak, wiem, chodzi o liczby na pozycjach parzystych i nieparzystych. Tak, jestem poczatkujaca i dzieki za sugestie. Nastepnym razem przy wrzucaniu watku zastosuje sie do powyzszych zasad.

Dzieki. Jest to moj drugi program pisany przy uzyciu wskaznikow, wiec czuje sie narazie jak dziecko we mgle.

Tak, teraz już wiem, że wiesz. Po prostu mało uważnie popatrzyłem na twój kod :wink: , tak mało mi się spodobał.

W twoim pierwotnym kodzie, można też wprowadzić tylko jedną małą zmianę w linii 32:
zamiast:

     int ileTestow, ileLiczb;

można wprost napisać:

    int ileTestow, ileLiczb{101}; //ileLiczb = 101;

ale wtedy idea zastosowania w twoim kodzie tablicy dynamicznej staje się trochę bezsensu. No i chociaż z taką zmianą też będzie AC, to taki kod nadal nie będzi mi się podobał :wink: .

Ja też jak dziecko, chciałbym za rączkę do najbliższej knajpki … :wink:

Na razie, może zapomnij o wskaźnikach, no i w C++14 [w C++ > C++11], można i lepiej jest stosować np <vector> z STL, zamiast “starych”, dynamicznych tablic.

W tym zadaniu, można też wykorzystać odpowiednio dużą tablicę statyczną.

Trzymam kciuki, za szybkie wydostanie się z mgieł :wink:

Zrobilam to zadanie przy pomocy zwyklej tablicy z sukcesem i bezproblemowo. Chcialam po prostu sprawdzic swoje zrozumienie wskaznikow na prostych problemach, ktore wg mojej ograniczonej jeszcze wiedzy potencjalnie sie do tego nadaja ;-).