Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491

    [C/Java]Array multidimensionali

    Java o C++ gestiscono gli array multidimensionali? fino a quante dimensioni? E si dichiarano in modo normale, del tipo int[][][]?
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  2. #2
    Sì... tutti i linguaggi di programmazione gestiscono gli array multidimensionali.

    Il grado di dimensione, almeno teoricamente, è infinito, tutto dipende da quanto occupa il tuo array... la memoria a tua disposizione non è illimitata. Esempio, un array di byte allocherà 1 byte per ogni elemento dell'array, un array di interi a 4 byte allocherà 4 byte per ogni elemento e così via... Non conta quante dimensioni ha l'array, ma di quanti elementi è composto. Un array tridimensionale 5x5x5 occupa esattamente come un array bidimensionale 25x5, che occupa esattamente come un array monodimensionale da 125 elementi.

    Il modo di dichiarare gli array è uguale sia in Java, sia in C++... anzi, in Java hai un modo in più:

    int mioArray[][]...[] = new int[dim1][dim2]...[dimN];

    oppure

    int [][]...[] mioArray = new int[dim1][dim2]...[dimN];


    Ciao.

  3. #3
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    La mia era una curiosità...ad esempio in FORTRAN sapevo che puoi dichiarare al massimo array a 7 dimensioni.
    Grazie
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Beh... Fortran è un po' vecchiotto come linguaggio, probabilmente nelle specifiche del linguaggio quella era la dimensione massima supportata (ti dirò... non ho mai fatto uso nemmeno di array tridimensionali, figuriamoci di grado 7!!)

    E' possibile che ci siano delle limitazioni anche in Java e C++, bisognerebbe dare un'occhiata alle specifiche del linguaggio... provo a documentarmi, come curiosità non è affatto male!!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Visual Basic (5 e 6 almeno sono sicuro) ha al massimo 65 dimensioni.

    Se hai bisogno di array di molte dimensioni (sarà molto difficile, e probabilmente sarebbe un caca-programma) ti sviluppi una classina o funzioni di supporto che, memorizzando i dati in uso spazio di memoria continuo (vettori) o segmentato (liste, liste di vettori,...) lo gestisca come una matrice.

    Esempio:
    matrice 2x3x5
    spazio di memoria: 2*3*5 = 30
    magari memorizzi i dati relativi alle dimensioni in un vettore
    matrice[1][2][4] = (calcolando gli indici a partire da 0) = (1 * (3*5)) + (2 * 5) + 4, come elemento del vettore.

    Insomma, anche se non puoi fare matrici, le puoi emulare.

  6. #6
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Ok, è ovvio che all'occorrenza si possa implementare una classe apposita che con un solo array di lunghezza opportuna memorizzi array multidimensionali a piacere. Che poi credo sia così che fa in realtà il computer, cioè anche in array di più dimensioni gli elementi stanno sempre in modo sequenziale no?
    Comunque a me non servono assolutamente, era solo una curiosità, mi pare strano che come dice Storn si possano dichiarare array di qualsiasi dimensione, ci dovrebbe essere un limite (non di memoria) del linguaggio...



    PS: non mi toccate il FORTRAN, è stato il primo linguaggio che ho imparato e che mi ha spinto nella programmazione :metallica
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  7. #7
    si in effetti....anche secondo me è abbastanza improbabile poter dichiarare array di qualunque dimensione, anche se non ne ho la certezza...credo si debba guardare la documentazione del compilatore perchè (credo) senza dubbio compilatori diversi supportano diverse soluzioni. Per avere un array n-dimensionale a piacere comunque come è già stato detto si puo' adoperare una classe apposita he gestisca opportunamente una zona di memoria preallocata.

    ah...il post che ho fatto sopra non è mio. l'ha fatto LeleFT...dato che lavoriamo sugli stessi pc, capita frequentemente che uno entri avendo il cookie dell'altro già impostato...

    x LeleFT : nn postare a mio nome se no ti pikkio! :zamm:

  8. #8
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Originariamente inviato da Xadoom
    Che poi credo sia così che fa in realtà il computer, cioè anche in array di più dimensioni gli elementi stanno sempre in modo sequenziale no?
    Infatti fa così.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,307
    Chiedo venia... non è stata colpa mia...


    Comunque, mi sono documentato, ho guardato, spulciato tutta la documentazione di Java e non ho trovato una sola virgola riguardo limitazioni al grado dell'array (array nesting depth, come lo chiamano loro).
    Tutto lascia presupporre che non ci siano dei limiti, ma credo che per avere ulteriori dettagli sia necessario approfondire la cosa andando a guardare l'implementazione della JVM.

    Per ora ho fatto delle prove:
    codice:
    class P {
       public static void main(String [] args) {
          char [][][][][][][][] b = new char[10][10][10][10][10][10][10][10];
          System.out.println("Allocato...");
       }
    }
    Questo codice viene perfettamente compilato, ma al momento dell'esecuzione mi genera un'ovvio errore: java.lang.OutOfMemoryError :gren:

    Comunque, non ci sono errori in compilazione, tutto tranquillo... solo in esecuzione, non riesce ad istanziarlo: 20^7 byte allocati non sono poi così pochi per un array... (ricordo che un char in Java occupa 16 bit, quindi 2 byte per consentire la codifica Unicode).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.