• 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
75 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 (53,110 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;
}

 

0 głosów
odpowiedź 29 listopada 2018 przez mokrowski VIP (112,700 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ź 59 wizyt
pytanie zadane 14 marca w C i C++ przez Curiosis Początkujący (440 p.)
0 głosów
1 odpowiedź 888 wizyt
0 głosów
1 odpowiedź 81 wizyt
pytanie zadane 29 stycznia w C i C++ przez Giero112 Nowicjusz (170 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

67,186 zapytań

114,135 odpowiedzi

241,912 komentarzy

46,173 pasjonatów

Przeglądających: 278
Pasjonatów: 8 Gości: 270

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.

...