Objet qui gère les matrices ?
fouf
Membre
A propos de matrices, existe-t-il en Cocoa un objet qui gere les matrices (NSMatrix c'est surtout pour les vues). Un truc qui soit equivalent a la declaration en C
NSObject [a] matrice;
Perce qu'avec cette ligne on peut arriver a avoir des matrices en dimension 2,3 voire 4. Pratique
NSObject [a] matrice;
Perce qu'avec cette ligne on peut arriver a avoir des matrices en dimension 2,3 voire 4. Pratique
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le plus simple est d'utiliser les tableaux du C:
// tableau de 10x10 pointeurs sur NSObject
NSObject **monTableau=malloc(10*10*sizeof(NSObject*));
ou
// tableau de 10x10x10 pointeurs sur NSObject
NSObject ***monTableau=malloc(10*10*10*sizeof(NSObject*));
et pour libérer la mémoire:
free(monTableau);
On peut aussi utiliser NSArray, pour un tableau à 2 dimensions, ça sera un NSArray de NSArray, pour 3 dimensions, un NSArray de NSArray de NSArray ::) et ainsi de suite (c'est pas la soluce la plus efficace, le C est bien plus rapide), et il sera certainement plus pratique de se faire une petite classe de gestion de ces arrays pour pouvoir faire, par exemple:
[multiArray getObjectAtX:0 Y:1 Z:5];
un bon exercice de prog objet
Je vais essayer ca ce soir, je vous envoie ca quand j'ai fini. Enfin, j'essaye ... ::)
Pour remplir un élément du tableau:
multiArray[1][5]=monObject;
et pour le récupérer:
monObject=multiArray[1][5];
J'ai scindé le sujet au moment où il postait. sorry
NSObject **tableau = malloc(X*Y*sizeOf(NSObject *));
Et je recupere la valeur par
id toto = tableau[1][5];
Juste une question, a quoi sert sizeOf() ?? J'ai un peu de mal la :why?:
Bon, un exemple qui marche
Matrix.h
et Matrix.m
Il faut encore que j'ecrive le dealloc.
Je ne sais pas si c'est la meilleure methode mais ca a l'air de tenir debout.
En ce qui concerne les variable Xcount, Ycount, Zcount et dimension, elles sont la pour eviter un depassement de tableau et pour simuler un tableau de taille variable. Il faut juste que j'implemente les routines pour permettre l'utilisation de ces variables. Je ne sais pas si j'aurais le temps d'ici Lundi (commentaire composé sur Anouilh ??? Super non ? )
Pour plus de souplesse, il va falloir utiliser les pointeurs plutôt des tableau [][]
La première chose à faire, c'est d'utiliser un pointeur générique pour stocker le bloc mémoire:
void* *blocMem=null; // pointeurs de pointeurs (4octets)
si j'alloue de la mem pour 100 pointeurs:
blocMem=malloc(100*sizeof(void*);
Ce bloc mem peut représenter différents tableaux, par ex:
[10][10] ou [4][25] ou [50][2] etc
il suffira de définir le bon type de pointeurs au moment de l'écriture et la lecture dans le tableau, ex:
Jusqu'a présent on a fait des tableaux contenant des pointeurs d'objets, on peut bien sur le faire pour pour des int, long ...
blocMem=malloc(x*y*sizeof(int)); //pour un tableau de int
blocMem=malloc(x*y*sizeof(long)); //pour un tableau de long
blocMem=malloc(x*y*sizeof(maStruct)); //pour une structure perso
Dernière chose que tu peux faire, c'est un contrôle de débordement des limites du tableau, ce que le C ne fait pas, et lancer une exception lors d'un débordement (comme en java)
Voilà pas mal de boulot en fait !
Comment fait-on pour le ver des execptions en C ? (en java je sais, mais en C )
J'avance petit a petit mais c'est dur Vais-je y arriver ?? Oxitan, tu devrais faire un sondage
Itou, jamais fait ça en ObjectiveCÂ
Exception Handling
j'ai le code :
et le retour du compilo :
Avis aux programmeurs C : je suis dans la merde :why?:
Les warnings, j'ai compris ce que c'etait : rien d'important. Mais les erreures la ???
Dis mpergand, t'as deja fait tout le code. T'aurais pas une idee sur l'assignement des pointeurs ?
A L'AIIIIIIIIIIIIDDDDEEEEEEE :why?:
Si j'étais toi, je ferais des méthodes séparées:
(void) setObject:(id)object forX:(unsigned int)x
et
(void) setObject:(id)object forX:(unsigned int)x Y:(unsigned int)y
et
(void) setObject:(id)object forX:(unsigned int)x Y:(unsigned int)y Z:(unsigned int)z
C'est ce que je pensai faire.
C'est promis, jessaye ce soir (enfin j'espere )
Finalement, je pense que je vais revenir a la version avec des tableaux tout bete. C'est peut-etre mois souple, mais c'est plus simple.
mpergand, pardonne moi
C'est quoi le problème exactement ?
MultiArray Demo
Néanmoins, il m'est venu l'envie d'effectuer quelques tests et de comparer les résultats avec mon langage favori ...
Le code Java se résume à des boucles:
et il est sûr que Java fait des prouesses d'optimisation sur ce genre de boucles for imbriquées.
On pourrait chercher à optimiser la partie contrôle et recherche de l'adresse dans la classe MultiArray, mais je pense que ça ne changerait pas grand chose, les appels en ObjC sont très couteux...
Test sur iBook 600 Mhz 10.3.7 :
[Fichier joint supprimé par l'administrateur]
La difference entre les deux langages sont surprenant plus d1 seconde ???
En tout cas, bravo pour ton boulot. Je pense que j'aurais besoin de m'en servir d'ici peu. Je te dirai alors comment ca marche en Obj-C.
Re-merci