Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z zadaniem . tablice dynamiczne

Ostatnio zmodyfikowano 2010-12-06 16:38
Autor Wiadomość
Tymek
Temat założony przez niniejszego użytkownika
Problem z zadaniem . tablice dynamiczne
» 2010-12-05 20:40:20
Czy ktoś rozumie jak zrobić to zadanie??
Zadanie 3
Zadeklaruj dynamiczną trójwymiarową tablicę elementów typu całkowitego wypełnij ją danymi  a następnie podziel ją na K (podane przez użytkownika) tablic (plastrów) względem jednego z wymiarów (również podanego przez użytkownika). Uwzględnij brak możliwości równego podziału tzn. np. tab[10][12][15] nie da się względem ostatniego wymiaru na 2 tablice.
P-24854
Tymek
Temat założony przez niniejszego użytkownika
» 2010-12-05 21:28:31
udało mi się stworzyć
C/C++
#include<iostream>
using namespace std;

int main()
{
    cout << "______________________________________________\n\n";
    cout << "Tablica o wymiarach [a][b][c] gdzie:\n";
    cout << "a - wymiar tablicy podany przez uzytkownika\n";
    cout << "b = 4\n";
    cout << "c = 6\n";
    cout << "______________________________________________\n\n";
   
    cout << "Podaj rozmiar tablicy: ";
    int rozm;
    cin >> rozm;
   
    int( * tab )[ 4 ][ 6 ] = new int[ rozm ][ 4 ][ 6 ];
   
    for( int i = 0; i < rozm; i++ )
    for( int j = 0; j < 4; j++ )
    for( int k = 0; k < 6; k++ )
         tab[ i ][ j ][ k ] = i + j + k;
   
    cout << endl;
   
    for( int i = 0; i < rozm; i++ )
    {
        cout << "a" << i << "\n___" << endl;
        for( int j = 0; j < 4; j++ )
        {
            for( int k = 0; k < 6; k++ )
                 cout << tab[ i ][ j ][ k ] << "\t";
           
            cout << endl;
        }
        cout << endl;
    }
   
    int wym, n;
    cout << "Wzgledem ktorego wymiaru chcesz podzielic tablice? (1/2/3) ";
    cin >> wym;
   
    switch( wym )
    {
    case 1:
        cout << "\nNa ile tablic chcesz podzielic? (Wybrany wymiar tablicy musi byc podzielny przez podana liczbe.) ";
        cin >> n;
        cout << endl;
        if( rozm % n == 0 )
        {
            for( int s = 0; s < n; s++ )
            {
                for( int i = 0; i <( rozm / n ); i++ )
                {
                    cout << "a" << i << "\n___" << endl;
                    for( int j = 0; j < 4; j++ )
                    {
                        for( int k = 0; k < 6; k++ )
                             cout << tab[ i ][ j ][ k ] << "\t";
                       
                        cout << endl;
                    }
                    cout << endl;
                }
                cout << "-------------------------------\n";
            }
        }
        else cout << "Blad: Wymiar tablicy nie jest podzielny przez podana liczbe.\n";
       
        break;
    case 2:
        cout << "\nNa ile tablic chcesz podzielic? (Wybrany wymiar tablicy musi byc podzielny przez podana liczbe.) ";
        cin >> n;
        cout << endl;
        if( 4 % n == 0 )
        {
           
            for( int i = 0; i < rozm; i++ )
            {
                cout << "a" << i << "\n___" << endl;
                for( int s = 0; s < n; s++ )
                {
                    for( int j = 0; j < 4 / n; j++ )
                    {
                        for( int k = 0; k < 6; k++ )
                             cout << tab[ i ][ j ][ k ] << "\t";
                       
                        cout << endl;
                    }
                    cout << "--------------------------------------------\n";
                }
                cout << endl << endl;
            }
           
        }
        else cout << "Blad: Wymiar tablicy nie jest podzielny przez podana liczbe.\n";
       
        break;
    case 3:
        cout << "\nNa ile tablic chcesz podzielic? (Wybrany wymiar tablicy musi byc podzielny przez podana liczbe.) ";
        cin >> n;
        cout << endl;
        if( 6 % n == 0 )
        {
           
            for( int i = 0; i < rozm; i++ )
            {
                cout << "a" << i << "\n___" << endl;
                for( int j = 0; j < 4; j++ )
                {
                    for( int s = 0; s < n; s++ )
                    {
                        for( int k = 0; k < 6 / n; k++ )
                             cout << tab[ i ][ j ][ k ] << "\t";
                       
                        cout << "||\t";
                    }
                    cout << endl;
                }
                cout << endl << endl;
            }
        }
        else cout << "Blad: Wymiar tablicy nie jest podzielny przez podana liczbe.\n";
       
        break;
    }
   
    system( "pause" );
    return 0;
}

P-24858
ison
» 2010-12-05 22:08:59
@up wszystkie trzy wymiary mają być podane przez użytkownika a nie tylko 1
P-24863
TomC
» 2010-12-06 16:38:58
Kod dla wymiaru = 2. Wymaga drobnych modyfikacji - brak usuwania obiektów dynamicznie utworzonych.

C/C++
int *** CreateTable( int x1, int x2, int x3 )
{
    int *** table = new int **[ x1 ];
    for( int i = 0; i < x1; i++ ) *( table + i ) = new int *[ x2 ];
   
    for( int i = 0; i < x1; i++ )
    {
        for( int j = 0; j < x2; j++ )
        {
            table[ i ][ j ] = new int[ x3 ];
            for( int ij = 0; ij < x3; ij++ )
            {
                table[ i ][ j ][ ij ] = i * j - ij;
            }
        }
    }
    return table;
}


int main()
{
    int x1 = 100, x2 = 100, x3 = 100;
   
    int *** table = CreateTable( x1, x2, x3 );
   
    int split = 20;
    int **** tables = new int ***[ split ];
   
    for( int i = 0; i < split; i++ )
    {
        tables[ i ] = CreateTable( x1, x2 / split, x3 );
        for( int a = 0; a < x1; a++ )
        {
            for( int b = 0; b < x2 / split; b++ )
            {
                for( int ab = 0; ab < x3; ab++ )
                {
                    tables[ i ][ a ][ b ][ ab ] = table[ a ][ b + i *( x2 / split ) ][ ab ];
                }
            }
        }
    }
   
    return 0;
}
P-24888
« 1 »
  Strona 1 z 1