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

Funkcja zwracająca tablicę dwuwymarową

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
344 wizyt
pytanie zadane 26 listopada 2020 w C i C++ przez patrykcyranek Nowicjusz (160 p.)

Napisz funkcję, która dostaje jako argumenty dwuwymiarową prostokątną tablicę tablic tab1 o wymiarach n × m i elementach typu int oraz jej wymiary, i zwraca jako wartość wskaźnik do nowo utworzonej dwuwymiarowej tablicy tablic tab2 o wymiarach m × n zawierającej transponowaną macierz przechowywaną w tablicy tab1 (czyli dla dowolnych k i j zachodzi tab1[k][j] = tab2[j][k].

Wyżej jest mój problem i wymyśliłem do niego taki program. Po odpaleniu wypisuje się tylko pierwszy element tablicy poprawnie a reszta to losowe liczby, nie wiem czy dobrze zwracam wskaźnik do tablicy ani czy dobrze tworze nową i zapisuję nową tablicę którą wyświetlam w funkcji main. Nigdzie nie mogłem znaleźć rozwiązania i proszę o pomoc.

Dodam że sprawdzałem wypisywanie tej tablicy wewnątrz funkcji i działa poprawnie więc problem mam z samym zwracaniem i wyświetlaniem w mainie.

#include <iostream>

using namespace std;

int transponowanie(int **tab1, int k, int j)
{
    int** tab2;
    tab2 = new int* [j] {};
    for (int i = 0; i < j; i++)
    {
        tab2[i]= new int[k] {};
    }

    for (int i = 0; i < k; i++)
    {
        for (int l = 0; l < j; l++)
        {
            tab2[l][i] = tab1[i][l];
        }
    }

    return **tab2;
}

int main()
{
    int n, m;
    cout << "Podaj wymiary tablicy: ";
    cin >> n >> m;
    int** tab1;
    tab1 = new int* [n];
    for (int i = 0; i < n; i++)
    {
        tab1[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            cin >> tab1[i][j];
        }
    }

    int** tab2;
    tab2 = new int* [m];
    for (int i = 0; i < m; i++)
    {
        tab2[i] = new int [n];
    }

    **tab2 = transponowanie(tab1, n, m);

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << tab2[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 26 listopada 2020 przez tangarr Mędrzec (155,140 p.)

Masz kilka błędów.
Spójrz na komentarze w kodzie

#include <iostream>
 
using namespace std;
 
// zwracasz jedną liczbę zamiast tablicy dwuwymiarowej
int transponowanie(int **tab1, int k, int j)
{
    int** tab2;
    tab2 = new int* [j] {};
    for (int i = 0; i < j; i++)
    {
        tab2[i]= new int[k] {};
    }
 
    for (int i = 0; i < k; i++)
    {
        for (int l = 0; l < j; l++)
        {
            tab2[l][i] = tab1[i][l];
        }
    }
 
    // zwracasz jedną liczbę zamiast tablicy dwuwymiarowej
    return **tab2;
}
 
int main()
{
    int n, m;
    cout << "Podaj wymiary tablicy: ";
    cin >> n >> m;
    int** tab1;
    tab1 = new int* [n];
    for (int i = 0; i < n; i++)
    {
        tab1[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            cin >> tab1[i][j];
        }
    }
 
    int** tab2;

   // Cały poniższy kod jest niepotrzebny
   // i powoduje wyciek pamięci
    /*
    tab2 = new int* [m];
    for (int i = 0; i < m; i++)
    {
        tab2[i] = new int [n];
    }
    */
 
    **tab2 = transponowanie(tab1, n, m);
 
    // Iterujesz po tablicy n x m
    // zamiast m x n 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << tab2[i][j] << " ";
        }
        cout << "\n";
    }
 
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,234 wizyt
pytanie zadane 12 listopada 2018 w Java przez Tom_Ja Dyskutant (7,970 p.)
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 9 maja 2019 w C i C++ przez Kuciniak Użytkownik (920 p.)
0 głosów
2 odpowiedzi 1,673 wizyt

93,191 zapytań

142,206 odpowiedzi

322,041 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 3053p. - dia-Chann
  2. 2884p. - Łukasz Piwowar
  3. 2876p. - Łukasz Eckert
  4. 2854p. - CC PL
  5. 2704p. - Tomasz Bielak
  6. 2678p. - Łukasz Siedlecki
  7. 2666p. - rucin93
  8. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2418p. - Michal Drewniak
  12. 2239p. - Michał Telesz
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...