Wyświetlanie zawartości tablicy dynamicznej

0

Napisalem program pobierajacy od uzytkownika ilosc liczb, a nastepnie sprawdzajacy ktora jest parzysta a ktora nieparzysta.
Nie wiem co zmienic aby najpierw wczytac liczby a nasepnie po kolei wyswietlic np
liczba 1 - parzysta
liczba 2 - nieparzysta

#include <iostream>

int main()
{
	using namespace std;

	int n;
	int rozmiar;
	cout << "Podaj wielkosc tablicy: ";
	cin >> rozmiar;
	
	int *liczby = new int[rozmiar];
	
	for(int i=0; i < rozmiar; i++){
		cout << "podaj liczbe: " << i+1 << " : ";
		cin >> liczby[i];
	for(int a=0; a<=liczby[rozmiar]; a++){
		if (liczby[a]%2==0) 
			cout << liczby[a] << "PARZYSTA\n";
		else
			cout << liczby[a] << "NIEPARZYSTA\n";		
	}
	}
	cin.get();
	cin.get();

	return 0;
}
0

@Freusz ta linijka

for(int a=0; a<=liczby[rozmiar]; a++)

jest głupia, użyj jakijś funkcji do odczytania długości tablicy.

0

Skąd ci do głowy przyszło a<=liczby[rozmiar]?
Przecież przechodzenie po tej tablicy w obu pętlach powinno być identyczne.

0

zmienilem na takie samo przejscie ale to nic nie dalo

0
a<=liczby[rozmiar]

Błąd zakresu. Tablica ma rozmiar elementów, więc największy indeks to rozmiar-1.
Poza tym Ty chcesz indeksem a lecieć od 0 do rozmiar-1, a nie liczby[rozmiar-1], przecież tam może być dowolna wartość liczbowa.

int *liczby = new int[rozmiar];

Jest new[], a gdzie jest delete[]? A w ogóle to nie używaj ręcznej alokacji pamięci, tylko std::vector.

1
  1. czemu masz pętle do wypisywania zawartą w pętli do wprowadzania?
  2. jesli chcesz zapisywać do jednej tablicy a potem wypisac osobno to możesz dać 2 pętle alb w jednej pętli zapisywanie do 2 stringów a po przejściu pętli wypisac stringi z przystymi/nieparzystymi
  3. jak c++ to zamiast tablic przez wskaźniki uzyj vectora np.
  4. masz wyciek pamięci nie robisz delete []
  • to co mówi @Nju - powinno być rozmiar a nie liczby[rozmiar] sprawdzane w pętli
0
#include <iostream>

int main()
{
	using namespace std;

	int n;
	int rozmiar;
	cout << "Podaj wielkosc tablicy: ";
	cin >> rozmiar;
	
	int *liczby = new int[rozmiar];
	
	for(int i=0; i < rozmiar; i++){
		cout << "podaj liczbe: " << i+1 << " : ";
		cin >> liczby[i];
	for(int i=0; i<=liczby[rozmiar-1]; i++){
		if (liczby[i]%2==0) 
			cout << liczby[i] << " PARZYSTA\n";
		else
			cout << liczby[i] << " NIEPARZYSTA\n";		
	}
	}
	delete liczby;
	cin.get();
	cin.get();

	return 0;

	
}

teraz tak napisalem tylko nie wiem jak zrobic std:: vector ( nie czytalem jeszcze o tym) napisalem ten prgram bo zaczalem tablice i wskazniki i tak na przecwiczenie

0

ok wszystko napisalem tak jak radziliscie

  • 2 osobne petle
  • rozmiar-1
    -delete
    teraz wszystko dziala
    dziekuje
0

Używasz new int[rozmiar], czyli new[], więc musisz używać delete[] liczby. I to co zauważył @Johnny_Bit, masz drugą pętlę w pierwszej!

    for(int i=0; i < rozmiar; i++){
        cout << "podaj liczbe: " << i+1 << " : ";
        cin >> liczby[i];                        // tu powinien być nawias zamykający tę pętlę!
    for(int i=0; i<=liczby[rozmiar-1]; i++){
        if (liczby[i]%2==0) 
            cout << liczby[i] << " PARZYSTA\n";
        else
            cout << liczby[i] << " NIEPARZYSTA\n";        
    }          // jeden z tych 2 nawiasów powinien trafić tam na górę
    }
0

teraz poprawilem

#include <iostream>

int main()
{
	using namespace std;

	int n;
	int rozmiar;
	cout << "Podaj wielkosc tablicy: ";
	cin >> rozmiar;
	
	int *liczby = new int[rozmiar];
	
	for(int i=0; i < rozmiar; i++){
		cout << "podaj liczbe: " << i+1 << " : ";
		cin >> liczby[i];
	}
		for(int i=0; i<=rozmiar-1; i++){
		if (liczby[i]%2==0) 
			cout << liczby[i] << " PARZYSTA\n";
		else
			cout << liczby[i] << " NIEPARZYSTA\n";		
	}
	delete liczby;
	cin.get();
	cin.get();

	return 0;

	
}

i dziala tak jak chcialem

0

Proszę, pomóż sobie i włącz warningi kompilatora - powie Ci że masz uzyc m.in. delete[] liczby; a nie delete liczby;

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