1

Bonjour, je débute en c (sous tigcc) et j'ai des problèmes avec les matrices.
Je créé une matrice avec:
int cube[10][3];
Puis, je voudrais l'initialiser avec quelque chos du genre:
cube=[[1,1,1][1,-1,1][-1,-1,1][-1,1,1][1,1,-1][1,-1,-1][-1,-1,-1][-1,1,-1][0,1,2][0,-1,2]]; (comme en basic)
Mais ceci est incorect!
Dois je l'initialiser case par case (avec cube[1][1]=1)?
C'est long!

2

Tu peux faire comme ça:
int tableau[2][2]={{1,2},{3,4}}
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

3

Merci, cela fonctionne.
Je voudrais savoir s'il existe un myen d'effacer rapidement le contenu d'une matrice (sans remplir une à une les cases de 0)
Et aussi copier le contenu d'une matrice dans une autre.

4

pour effacer regarde memset et pour copier memcpy happy

5

immortel :
Et aussi copier le contenu d'une matrice dans une autre.


Pour ça y'a pas 36 façons :

void copie_ta_matrice()
{
int machin[x][y], machin2[x][y];

for (i=0; i<x; i++)
{
   for (j=0; j<y; j++)
   {
      machin2[i][j]=machin[i][j];
   }
}
}

6

Ben si, y en a 36 :
memcpy(machin2, machin, x*y*sizeof(int));
(ce sera à la fois plus petit et plus rapide, sauf si la matrice est petite)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

Pollux> Il faut pas pour faire ca que toutes les lignes de la matrice soient contigue?
N/A

8

ben elles le sont toujours, non ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

9

Meme dans le cas ou un 'malloc' est fait pour chaque ligne?
N/A

10

si tu fais un malloc pour chaque ligne, c'est pas une matrice.

11

... c'est un tableau de (pointeurs vers des) tableaux ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

12

ouh même là dessus y'a de quoi troller pendant des pages... peu importe, pour répondre uniquement à la question, non ça ne marche pas.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

13

J'ai encore des problèmes avec les matrices:
for( i=1; i<=8; i++)
{
draw[1][i]= (plan*cube[2,i])/cube[1,i];
draw[2][i]= (plan*cube[3,i])/cube[1,i];
}
J'ai initialisé mes matrices comme il faut mais le compilateur me dit: Invalids operands to binary *
fou

14

il faut utiliser cube[2][i] smile (les virgules ont un sens un peu spécial en C, "2,i" est identique à "i" pour le compilateur...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

j'ai un nouveau problème, j'ai rajouté:
for( i=1; i<=4; i++)
{
DrawLine(draw[1][i], draw[2][i], draw[1][1+(i%4)], draw[2][1+(i%4)], A_NORMAL);
}
Le programme se compile mais il plante sur vti en affichant: Illegal Instruction.
Quelle est mon erreur?

16

(ton code passe pas, entoure-le de balises [pre]...[/pre] :
for( i=1; i<=4; i++)
		{
			DrawLine(draw[1][i], draw[2][i], draw[1][1+(i%4)], draw[2][1+(i%4)], A_NORMAL);
		}

)

En fait les indices en C commencent à 0, pas à 1 smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

17

Je reviens à ce qui se disait quelques posts au dessus.
Remarque pour le tableau de pointeurs, t'es même pas obligé d'utiliser un malloc par ligne si toutes les lignes font la même taille et ne sont pas amenées à changer de taille au cours de l'exécution.

En allouant comme ça...
p = (int**)malloc(x*y*sizeof(int)+x*sizeof(int*));
for (int i = 0; i < x; ++i) p[i] = &p[x] + i*y;

gni
[edit: il me semble que j'ai inversé la représentation ligne/colonne, mais l'idée est là]

18

(et tu as oublié un cast)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

oué enfin là du coup, autant utiliser "int (*mat)[y]; mat = malloc(x * sizeof (*mat));" et ne pas se faire chier ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

20

Oui mais ce n'est pas aussi général : y est fixe... (sauf en C99, mais alors autant faire carrément "int (*mat)[x][y];" ^^)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

21

A_NORMAL); }
Mon problème:
for( i=1; i<=4; i++)
{
DrawLine(draw[1][i], draw[2][i], draw[1][1+(i%4)], draw[2][1+(i%4)], 

Venait du fait que certaine valeur de la matrice était négative.
Du coup je pose la question peut on en c définir une fenêtre avec xmin, xmax... ou faut il bidouiller?

22

Pollux :
(et tu as oublié un cast)

Arf, je le trouve pas :/
Il est où ? (cc)

23

p[i] = (int *)&p[x] + i*y;
immortel :
A_NORMAL); }
Mon problème:
for( i=1; i<=4; i++)
{
DrawLine(draw[1][i], draw[2][i], draw[1][1+(i%4)], draw[2][1+(i%4)], 

Venait du fait que certaine valeur de la matrice était négative.
Du coup je pose la question peut on en c définir une fenêtre avec xmin, xmax... ou faut il bidouiller?

Oui, regarde du côté de DrawClipLine. Ceci étant, tu as toujours un pb du fait que tes indices de tableau commencent à 1 et pas à 0 embarrassed A moins que tu aies déclaré draw[] comme contenant 5 éléments au lieu de 4 (et même dans ce cas-là ce serait assez gore puisque tu n'as réellement besoin que de 4 éléments), ton programme risque de planter...[/b]

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

24

ah, très juste. D'autant plus grave que si sizeof(int) est différent de sizeof(int*), le pointeur calculé était faux.
j'aurais dû essayer de compiler, il m'aurait fait un warning en principe ^^