Odbieranie tablicy w funkcji main, utworzonej w innej funkcji!

0

Potrzebuje od was pomocy w prostym jak dla was pewnie zadaniu.
Jak można odebrać całą tablice z funkcji "szescian" do głównej funkcji main. Z tego co już w wydedukowałem to potrzebne są wskaźniki ale jak ich użyć w drugą stronę to nie wiem.

Oto zadanie..
Zaprojektować i zaimplementować funkcję w języku C++ wypełniającą tablicę
T o rozmiarze n sześcianami kolejnych liczb naturalnych dodatnich.
Tablicę utworzyć wewnątrz funkcji i odebrać od funkcji poprzez wskaźnik

A o to mój kod

#include <iostream>
#include <math.h>

using namespace std;

int *szescian(int n ){
 int *T;
   T=new int[n];
    for(int i=0;i>0;i++){
        T[i]=pow(i,6);
        }

}

int main()
{

    int n=5;

cout<<*szescian(n)<<endl;


    return 0;
}

 

.
Dziękuje za pomoc.

5
  1. Sześcian to trzecia potęga, nie szósta :D
  2. nic nie zwracasz z funkcji (UB)
  3. for(int i=0;i>0;i++){ zły warunek pętli (i < n ma być)
  4. mają być sześciany liczb dodatanich, więc pewnie pow(i+1, 3)
  5. formatuj kod. Jak nie umiesz to http://format.krzaq.cc
  6. odebrany wskaźnik musisz poprawnie obsłużyć, na razie wyświetlasz tylko pierwszy element zaalokowanej tablicy
  7. temu kto wymyślił zadanie należy się klaps w dziąsło. Ręczne używanie new i delete to zło. Tutaj powinieneś użyć std::vector albo unique_ptr<int[]>
0

Jak funkcja ma nic nie zwracać, to jak odebrać tą tablice?

Poprawiony kod..

 #include <iostream>
#include <math.h>

using namespace std;

void  szescian(int n)
{
    int* T;
    T = new int[n];
    for (int i = 0; i < n; i++)
    {
        T[i] = pow(i + 1, 3);
    }
}

int main()
{
    int n = 5;
    szescian(n);
    return 0;
}
2
  1. Ma zwracać. Nie zwracasz - wskaż mi proszę w tej funkcji return.
  2. Funkcja powinna zwracać wskaźnik na int, nie na void
  3. nie odbierasz wartości zwróconej przez funkcję w main
0

Po wielu próbach i błędach zrobiłem. Rozwiązanie w miarę proste, pętla w funkcji

main

z przesunięciem o i

 miejsce w tablicy.

```cpp
 #include <iostream>
#include <math.h>

using namespace std;

int* szescian(int n)
{
    int* T;
    T = new int[n];

    for (int i = 0; i < n; i++) {
        T[i] = pow(i + 1, 3);
    }

    return T;
}

int main()
{

    int n = 9;

    for (int i = 0; i < n; i++) {
        cout << *(szescian(n) + i) << endl;
    }

    return 0;
}

Dziękuje za pomoc i wyrozumiałość.
ps. Późna godzina może dlatego była potrzebna :p

1

No pomijając to, że liczysz te potęgi n razy.

4

Teraz w pętli generujesz n tablic n-elementowych i nigdzie ich nie zwalniasz. Przypisz wynik działania funkcji przed pętlą do wskaźnika, iteruj po nim, po wyświetleniu wyników skasuj je za pomocą operatora delete[]

1
#include <iostream>
 using namespace std;
 
int *szescian(int n)
  {
   int *T=new int[n];
   for(int i=1;i<=n;++i) T[i-1]=i*i*i; // i*i*i będzie z 10 razy szybsze od pow(i,3)
   return T;
  }

int main()
  {
   int n=9;
   int *T=szescian(n);
   for(int i=0;i<n;++i)  cout<<T[i]<<endl;
   delete[] T;
   return 0;
  }

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