Inscription / Connexion Nouveau Sujet
Niveau école ingénieur
Partager :

Scilab, problème invalid index dans boucle for

Posté par
marca
12-11-12 à 22:04

Bonjour,

J'essayes d'écrire le programme suivant mais il y a une erreur Invalid index et je ne vois pas où elle est et comment faire pour qu'elle n'y soit plus.

-->A=[3200,7680,12800,19200,36000,32000,28800,8400,3840,1600];

-->Yref=[3200,10880,23680,42880,78880,110880,139680,148080,151920,153520];

-->L=ceil(max(Yref)/2);

-->i=1; B=A(1); C=[0,0,0,0,0,0,0,0,0,0];

-->for i=[1:10], if B+A(i+1)>L then C(i)=1, B=0;
-->elseif B+A(i+1)<=L then B=B+A(i+1); end;
-->end;
C  =

    0.    0.    0.    1.    0.    0.    0.    0.    0.    0.  
                          !--error 21
Invalid index.

Posté par
Simpom
re : Scilab, problème invalid index dans boucle for 13-11-12 à 19:05

Salut.

Juste en lisant ton code qqch me choque : A est de taille 10, or tu boucles sur i de 1 à 10, donc i+1 varie de 2 à 11, ce qui dépasse de la taille de ton tableau.

Du moins il me semble...

Posté par
marca
re : Scilab, problème invalid index dans boucle for 13-11-12 à 21:59

Et bien pour ca non. Car i varie de 1 à 10, comme tu le dis i+1 donc de 2 à 11, ce qui fait toujours 10 valeurs. Donc pour B+A(i+1) il y a 10 valeurs. Donc c'est bon pour C qui doit contenir au final les 10 valeurs "résultats"
(Enfin pour moi ca c'est bon il n'y a pas d'erreur ici, j'espere!)

Mais quel est ce problème d'invalid index....??

Posté par
marca
re : Scilab, problème invalid index dans boucle for 15-11-12 à 21:33

Des idées svp?

Posté par
Simpom
re : Scilab, problème invalid index dans boucle for 16-11-12 à 12:15

Désolé du délais pour répondre...

Certes tu cherches bien à utiliser 10 valeurs pour A, mais A est un tableau de 10 valeurs, donc ces 10 valeurs sont A(1), A(2), ... A(10)
Comme tu le fais remarquer i+1 varie de 2 à 11, donc tu cherches à un moment à accéder à A[11], qui n'est pas défini !

Et maintenant je confirme (je viens de faire le test en recopiant ton code) : la même chose avec "for i=[1:9]" tourne sans problème.

Posté par
marca
re : Scilab, problème invalid index dans boucle for 17-11-12 à 00:18

Parfait c'est bien ca, merci beaucoup!

J'en profite pour mettre ici mon blocage suivant dans ce problème:

Pour y voir clair: A représente donc des activités, L une limite à ne pas dépassée par la somme des activités et C les positions des contrôles et leur nombre afin de ne pas dépasser cette limite L.

Arrivé ici j'obtiens donc un vecteur C qui me donne le nombre de contrôle à faire ainsi que leur positions sur les 10 positions de contrôle.
Pour L=ceil(max(Yref)/5), on obtient C=[0,0,1,1,1,0,1,0,0,0]. On a donc 4 contrôle. Maintenant je veux vérifier si la position des contrôles données plus haut est la seule solution (pour ainsi au final déterminer la plus otpimale). Je voudrais alors générer une matrice établissant toute les combinaisons possibles pour 4 contrôles.
Matrice=[1 0 0 1 0 0 1 1 0 0
         1 1 0 0 0 1 0 0 1 0
         0 0 1 0 1 0 1 0 1 0
         ...................]
Une fois cette matrice générée je réutilise un algorithme pour vérifier si chacune des combinaisons permettent ou non de respecter la limite L.

Ma question est: comment généré ce genre de matrice sur scilab? Et cela est-il possible sur ce logiciel?

Merci

Posté par
marca
re : Scilab, problème invalid index dans boucle for 19-11-12 à 17:14

Des idées pour générer ce genre de matrice?

Posté par
Matae
re : Scilab, problème invalid index dans boucle for 20-11-12 à 00:18

J'ai pas d'idee pour la matrice, mais pour ta boucle i, de [1,9] ca ne fait que 9 valeurs et non 10.
La premiere position d'un tableau est A[0] et non A[1].



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1741 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !