c++ indeksy tablicy

0

Jak zmienić ten kod aby po indeksach nieparzystych były wyswietlane parzyste

#include <iostream>
using namespace std;
int a[1000000];
int b[1000000];
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    int d;

    cin >> d;
 
    for(int i=0; i<d; i++)
    {
            int n;
          
            cin >> n;
            for(int j=1; j<=n; j++)
            {
                        int a[j];
                        cin >> a[j];
 
                  if (j%2!=0)
                  cout<<a[j]<<endl;

 
                                    }
                                   }
                                                           
    system("pause");
    return 0;
}
0
int a[j];

Nie dość, że deklarujesz tablicę o stałym rozmiarze podczas wykonywania kodu n razy, to tylko wczytujesz jej jeden element, a reszta leży i kwiczy. Coś tu jest podupcone, że się tak wyrażę. Jaki ma być cel tego kodu? Powiedz dokładnie o co ci chodziło to ci pomożemy zrobić to normalnie.

0

Co ma znaczyć to a[j];?

0

Ale o co cho? To ja mam wiedzieć, czy pytasz się o to w moim poście? o_O

0

Podajemy
liczbę d która oznacza liczbe wierszy
potem w kazdym wierszy podajemy n -liczbe elementów i wczytujemy te elementy a[i]
Chcemy wyświetlić elementy na na miejscach nieparzystych potem nie parzystych
np
2
3 3 4 5
4 5 7 8 9
wyjcie
4 3 5
7 9 5 8

0

To w takim razie tablicę int a zadeklaruj poza pętlą z j i ustaw licznik od zera, normalnie. Tylko a musi być dynamiczna:

int* a = new int[n];

W pętli z j wczytujesz te elementy normalnie jak teraz. Koncepcji zadania dalej nie rozumiem tzn. o co chodzi z wyświetlaniem

na miejscach nieparzystych potem nie parzystych

A na co ci w ogóle tablica b? Tak w ogóle, to teraz lokalna wew. pętli tablica a miesza się z globalną a[1000000]. Na co ci ta wielka?

0

chodzi o to ze
0 1 2 3 4 5 6 - indeksy
7 8 9 0 5 1 2 - wartości w tablicy

Na wyjsciu powinno być
7 9 5 2 8 0 1

dobrze wyjaśniłaam?

0

Przerób tak jak powiedziałem i to można dwiema pętlami zrobić, jedna iteruje parzyste, druga nieparzyste indeksy albo jedną tylko nie for'em a:

int licznik = 0;

while (licznik != max_indeks)
{
    cout << tablica[indeks];
    licznik += 2;
    if (licznik > max_indeks)
         licznik = 1;
}

Taki zarys, najpierw przechodzi parzyste, potem jak wyjdzie za zakres, ustawia się na 1, dzięki temu iteruje już po nie parzystych.

0

A jak zrobić to jedym forem?

0

Hm być może można by zrobić coś takiego że po już istniejacych instrukcjach fora będzie znowu i++ coby i zwiększało się o 2 a nie jeden, tyle że wtedy trzeba by wywalić if (j%2!=0) oraz dorobić niżej warunek że jak i będzie równe lub większe od n to wtedy zmieniamy je na 2, oraz jakąś zmienna boolean (true/false) coby się nie zmieniło znowu jak przy parzystych dorówna/przekroczy.

0
gosia23 napisał(a)

A jak zrobić to jedym forem?

	for(int i = 1; i % 2 || i < n; i += 2)
	{
		if(i >= n) i = 0;
		cout << tablica[i] << " ";
	}

ale to się wywali przy n = 0
możesz też zrobić takiego potworka ;)

	for(int i = 0; i < n; i ++)
	{
		cout << tablica[(i * 2 + i * 2 / n * (1 - n % 2)) % n] << " ";
	}

ktoś ma pomysł na skrócenie? ;D

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