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

[C++] Tablica Dynamiczna

Ostatnio zmodyfikowano 2014-12-04 15:28
Autor Wiadomość
Vixos
Temat założony przez niniejszego użytkownika
[C++] Tablica Dynamiczna
» 2014-12-02 11:39:59
Jak zrobić taką tablice dynamiczną? Jakoś nie mogę tego rozgryźć.

W pierwszej linii znajduje się jedna liczba N oznaczająca liczbę wierszy tablicy. ( 1 ≤ N ≤231-2).

Następne linie zawierają opisy kolejnych wierszy tablicy. Opis każdej linii mieści się w dwóch liniach: pierwsza zawiera pojedynczą liczbę M oznaczającą liczbę liter w wierszu, a druga zawiera opis elementów tego wiersza w postaci
n1 c1 ... nk ck
gdzie ni oznacza ilość wystąpień litery c1. Zakładamy, że 1 ≤ ni ≤231-2 dla każdego i. Zawsze spełniona jest zależność M = n1 + ... + nk Przykład:

8
2 a 2 b 1 x 3 a

opisuje wiersz tablicy postaci

a a b b x a a a

W programie zabronione jest używanie nawiasów kwadratowych: [, ] (oraz równoważnych im sekwencji <:, :>), operatora new oraz klasy string i pojemników z biblioteki standardowej. Zabronione jest także wykorzystanie plików nagłówkowych innych niż cstdlib i iostream.

Tyle udało mi się zrobić na razie.

C/C++
#include <iostream>
#include <cstdlib>

using namespace std;

int N, M, c;
char ** tab;

int main() {
    cin >> N;
    tab =( char ** ) malloc( sizeof( N ) );
    for( int k = 0; k < N; k++ ) {
        cin >> M;
        *( tab + k ) =( char * ) malloc( sizeof( M + M ) );
       
    }
   
    for( int k = 0; k < N; k++ ) {
        for( int l = 0; l < M; l++ ) {
           
            cin >>*( *( tab + k ) + l );
        }
    }
   
    for( int k = 0; k < N; k++ ) {
        for( int l = 0; l < M; l++ ) {
            cout <<*( *( tab + k ) + l ) << " ";
        }
        cout << endl;
    }
}
P-121919
kubawal
» 2014-12-02 17:08:02
podejrzewam, że skoro nie można uzywać new to malloc() raczej też.

W takim przypadku polecam użycie puli (jeśli obiekty mają stały rozmiar, a w tym przypadku tak:
C/C++
template < class T, int N >
// pula N obiektów typu T ( w twoim przypadku char )
class Pool
{
    T[ N ]; // dane
    //...
   
public:
    T * alloc(); // alokuje obiekt T
    void free( T * ); // zwalnia wcześniej zaalokowany obiekt
}
Pool < char,( 231 - 2 ) *( 231 - 2 ) > myspace;
Z implementacją nie powinno być problemów.
P-121953
Vixos
Temat założony przez niniejszego użytkownika
» 2014-12-04 14:30:15
Bardziej mi chodzi o to jak zrobić byle jaką tablice nawet kwadratowa, ale aby spełniało warunki zadania. Bo nie wiem jak to zrobić że jak mu podaje wartość, a potem wczytuje dane to będzie to tak długo robił aż suma danych z intów będzie równa wcześniej podanej wartości, a potem wypisze tablice z danymi, które były podawane, a takiej samej formie.
P-122171
Monika90
» 2014-12-04 15:00:05
Po co Ci tablica? Jeżeli masz wypisać wiersze tablicy w takiej samej kolejności w jakiej pojawiają się na wejściu, to po prostu wypisuj je na bieżąco.

Czy przez
1 ≤ N ≤231-2
rozumiesz 1 ≤ N ≤ 231-2?
P-122177
Vixos
Temat założony przez niniejszego użytkownika
» 2014-12-04 15:28:05
Tak
Tablica jest po to abym mógł później wykonywać na niej operacje, a mnie chodzi o to żeby w ogóle uzyskać taką tablice.
P-122178
« 1 »
  Strona 1 z 1