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

Tablica wskaźnikowa

VPS Starter Arubacloud
0 głosów
257 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 (61,370 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 Mędrzec (155,460 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ź 507 wizyt
pytanie zadane 14 marca 2019 w C i C++ przez Curiosis Użytkownik (540 p.)
0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 2 listopada 2019 w C i C++ przez j4nsk Nowicjusz (160 p.)
0 głosów
1 odpowiedź 2,640 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...