• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica wskaźnikowa

0 głosów
72 wizyt
pytanie zadane 29 listopada 2018 w C i C++ przez Ciecho Nowicjusz (150 p.)

Dostałem w sumie banalne zadanie odwrócenia kolejności liczb w tablicy, ale ma się to odbyć w funkcji. I w pewnym momencie napotkałem problem. W konsoli odwraca mi tylko połowę tablicy, a pozostałą połowę funkcja zwraca bez odwrócenia. Wskaźniki to mój słaby punkt, więc proszę kogoś o pomoc w tym moim namieszanym programie...

Za wszelkie sugestie wielkie dzięki :)

 

int* odwroc(int *tab, int ile)
{
	int *tablica;
	
	tablica = new int [ile];
	
	tablica = tab;
	
	for(int i=0; i<ile; i++)
	{
		tablica[i]=tab[ile-1-i];
	}
	
return tablica;	

delete [] tablica;

}


int main(int argc, char** argv) {
	
	int tablica[10];
	
	for(int i=0; i<10; i++)
		tablica[i]=rand()%100;
		
		
		odwroc(tablica, 10);
		
		for(int i=0; i<10; i++)
		{
			cout << tablica[i] << endl;
		}
		

	
	return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 29 listopada 2018 przez Bondrusiek Maniak (50,080 p.)
wybrane 1 grudnia 2018 przez Ciecho
 
Najlepsza

Witam,

pamiętaj że do funkcji możesz tylko przesłać oryginał tablicy więc nie ma sensu jej wracać. Następnie warto użyć tablicy tymczasowej, która przyjmie wartość w odwrotnej kolejności. Następnie przepisujesz do oryginału tą tymczasową tablice i ją usuwasz. Warto używać strumieni, które pozwolą Ci zdebuggować program aby sprawdzić czy wszystko działa prawidłowo.

#include <iostream>

using namespace std;

void odwroc(int *tab, int ile)
{
    int *temp = new int[10];

    for(int i=0; i<ile; i++)
    {
        temp[i] = tab[ile - i - 1];
    }

    for(int i = 0; i < ile; i++)
    {
        tab[i] = temp[i];
    }

    delete  [] temp;

}


int main(int argc, char** argv) {

    int tablica[10];

    for(int i=0; i<10; i++)
        tablica[i]=rand()%100;

    cout << "Normalna tablica " << endl;
    for(int i=0; i<10; i++)
    {
        cout << tablica[i] << endl;
    }
    cout << "Odwrocowna tablica " << endl;

        odwroc(tablica, 10);

        for(int i=0; i<10; i++)
        {
            cout << tablica[i] << endl;
        }



    return 0;
}

 

+1 głos
odpowiedź 29 listopada 2018 przez mokrowski VIP (105,020 p.)

A po co próbujesz alokować nową tablicę jeśli wystarczy zamieniać tylko jej elementy "od końca" z tymi "z początku" i kontynuować aż indeks początku będzie mniejszy od tego z końca?

#include <iostream>
#include <cstddef>
#include <cstdlib>

using std::cout;
using std::size_t;

void odwroc(int *tab, size_t ile)
{ 
    if (ile == 0)
    {
        // nie ma sensu odwracać tablicy
        return;
    }
    size_t ostatni_index = ile - 1;
    size_t pierwszy_index = 0;
    while (pierwszy_index < ostatni_index)
    {
        // zamiana wartości
        int tmp = tab[pierwszy_index];
        tab[pierwszy_index] = tab[ostatni_index];
        tab[ostatni_index] = tmp;
        ++pierwszy_index;
        --ostatni_index;
    }
}

void pokaz_tablice(int * tab, size_t ile)
{
    for(size_t i = 0; i < ile; ++i)
    {
        cout << tab[i] << ' ';
    }
    cout << '\n';
}

void wypelnij_tablice(int * tab, size_t ile)
{
    srand(time(0));
    for(size_t i = 0; i < ile; ++i)
    {
        tab[i] = rand() % 100;
    }
}
 
int main() {
     
    int tablica[10];
     
    wypelnij_tablice(tablica, 10);

    pokaz_tablice(tablica, 10);
         
    odwroc(tablica, 10);

    pokaz_tablice(tablica, 10);
         
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 51 wizyt
pytanie zadane 14 marca w C i C++ przez Curiosis Początkujący (440 p.)
0 głosów
1 odpowiedź 854 wizyt
0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 19 listopada 2017 w C i C++ przez krystian1997 Użytkownik (810 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

64,048 zapytań

110,437 odpowiedzi

231,288 komentarzy

47,817 pasjonatów

Przeglądających: 191
Pasjonatów: 7 Gości: 184

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...