Przekształcenie programu na tablice dynamiczne

0

Witam Państwa, napotkałem problem z przerobieniem programu na tablice dynamiczne, prawdę mówiąc nie mam zielonego pojęcia jak się za to zabrać.
Starałem się kombinować coś z wskaźnikami ale wygląda to słabo. Proszę o wytłumaczenie ew. przerobienie z tłumaczeniem; z góry dzięki.

#include <iostream>
#include <conio.h>
#include <iomanip.h>

using namespace std;

void transpozycja(float tab[][4], int n);
void wyswietl_tab(float tab[][4], int n);

int main()
{
    do {

        /* deklaracja tablicy dwuwymiarowej */

        float tab[4][4] = { { 1.0, 2.2, 0.8, 0.3 },
            { 4.9, 2.0, 7.1, 1.3 },
            { 3.1, 0.1, 3.0, 2.3 },
            { 5.8, 6.8, 7.8, 4.0 } };
        int n;
        n = sizeof tab[0] / sizeof(float);

        /* wyświtlamy zawartość tablicy */
        cout << "Zawartosc tablicy przed transpozycja:\n\n";
        wyswietl_tab(tab, n);

        /* algorytm transpozycji */
        transpozycja(tab, n);

        /* wyświtlamy zawartość tablicy po transpozycji*/
        cout << "\nZawartosc tablicy po transpozycji:\n\n";
        wyswietl_tab(tab, n);

        cout << "\n";

        printf("Czy chcesz kontynuowac prace programu t/n? [ESC konczy prace]\n");

    } while (getch() != 27);
    //system( "cls" );
    return 0;
}

// funkcje

void transpozycja(float tab[][4], int n)
{
    float zm;
    int i, j;
    for (i = 0; i < n - 1; i++)
        for (j = i + 1; j < n; j++) {
            zm = tab[i][j];
            tab[i][j] = tab[j][i];
            tab[j][i] = zm;
        }
}

void wyswietl_tab(float tab[][4], int n)
{
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++)
            cout << "   " << setw(3) << tab[i][j];
        cout << "\n";
    }
}
0

I gdzie te próby ze wskaźnikami?

struct sqTable { size_t size; double *data; };
sqTable sqTableAlloc(size_t size)
  {
   sqTable st;
   st.size=size;
   st.data=new double[size*size];
  }
void sqTableShow(sqTable s)
  {
   for(size_t i=0,y=0;y<s.size;++y,cout<<endl) for(size_t x=0;x<s.size;++x,++i) cout<<' '<<setw(3)<<s.data[i];
  }
double &sqTableAt(sqTable s,size_t y,size_t x)
  {
   return s.data[y*s.size+x];
  }

sqTable t=sqTableAlloc(4);
for(size_t y=0;y<4;++y) for(size_t x=0;x<4;++x) sqTableAt(t,y,x)=(y+2)*(x+2);
sqTableShow(t);
1

A czemu nie użyjesz std::vector?

0

Program nie jest mój (nie ja to pisałem), ostatni raz z programowaniem miałem do czynienia ~5 lat temu i tego nie pamiętam. Proszę o jakieś porady ew. co zrobiłem źle.

#include <iostream>
#include <conio.h>
#include <iomanip.h>

using namespace std;


void transpozycja(float *tab[][4], int n);
void wyswietl_tab(float *tab[][4], int n);

int main()
{
    do
    {

        /* deklaracja tablicy dwuwymiarowej */

        float* s;
        float tab[4][4] = { { 1.0, 2.2, 0.8, 0.3 }, { 4.9, 2.0, 7.1, 1.3 }, { 3.1, 0.1, 3.0, 2.3 },
            { 5.8, 6.8, 7.8, 4.0 } };
        *s = tab[4][4];
        int n;
        n = sizeof tab[0] / sizeof(float);
        //cout << *s;

        /* wyświtlamy zawartość tablicy */
        cout << "Zawartosc tablicy przed transpozycja:\n\n";
        wyswietl_tab(tab, n);

        /* algorytm transpozycji */
        transpozycja(tab, n);

        /* wyświtlamy zawartość tablicy po transpozycji*/
        cout << "\nZawartosc tablicy po transpozycji:\n\n";
        wyswietl_tab(tab, n);


        cout << "\n";


        printf("Czy chcesz kontynuowac prace programu t/n? [ESC konczy prace]\n");

    } while (getch() != 27);
    // system( "cls" );
    return 0;
}


// funkcje

void transpozycja(float tab[][4], int n)
{
    float zm;
    int i, j;
    for (i = 0; i < n - 1; i++)
        for (j = i + 1; j < n; j++)
        {
            zm = tab[i][j];
            tab[i][j] = tab[j][i];
            tab[j][i] = zm;
        }
}

void wyswietl_tab(float tab[][4], int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << "   " << setw(3) << tab[i][j];
        cout << "\n";
    }
}
29 E:\studia\test\final\main.cpp cannot convert `float (*)[4]' to `float* (*)[4]' for argument `1' to `void wyswietl_tab(float* (*)[4], int)' 
32 E:\studia\test\final\main.cpp cannot convert `float (*)[4]' to `float* (*)[4]' for argument `1' to `void transpozycja(float* (*)[4], int)' 
36 E:\studia\test\final\main.cpp cannot convert `float (*)[4]' to `float* (*)[4]' for argument `1' to `void wyswietl_tab(float* (*)[4], int)' 
1

Na górze masz: void transpozycja(float *tab[][4], int n);
Na dole masz: void transpozycja(float tab[][4], int n)

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