IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Incrémenter une valeur dans un tableau


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut Incrémenter une valeur dans un tableau
    Bonjour
    Objectif incrémenter une valeur dans un tableau

    Je fais la lecture du fichier excel qui se presente de la forme suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1	2	3	1	5	6	222	336
    21	3	4	1	6	7	223	336
    3	4	5	1	7	9	224	336
    4	5	6	2	8	10	225	336
    5	7	12	3	9	12	226	336
    6	8	1	3	10	13	227	336
    7	9	3	5	11	14	228	336
    Quand la 4eme colonne =1
    Incrémente la 7eme colonne par z=z+50
    Soit 50 la première fois puis 100 puis 150…

    Et quand la 4ème colonne différent de 1 j’incrémente la colonne 7 par la dernière valeur de Z.

    Exemple ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1	2	3	1	5	6	272	336
    21	3	4	1	6	7	323	336
    3	4	5	1	7	9	374	336
    4	5	6	2	8	10	375	336
    5	7	12	3	9	12	376	336
    6	8	1	3	10	13	377	336
    7	9	3	5	11	14	378	336
    Pour mon code je fais une lecture du fichier qui s’appelle fic_conso et ensuite j’ai un problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    %  Variable à incrémenter
       z=0
    %   Taille du tableau pour la boucle for
       [m,n]=size(tab_conso)% permet de savoir le nombre de ligne dans mon fichier excel?
       for i=1:m
         if tab_conso(m,4)==1 
     
           z=z+50
     
           tab_conso(m,7)= tab_conso(m,7)+z
         else
             tab_conso(m,7)= tab_conso(m,7)+z
         end
     
       end

    j’espère vous pourrez m’aider ou trouverez une autre solution qui va tout aussi bien

  2. #2
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut
    Bonjour,

    et ensuite j’ai un problème
    Quel est ton problème exactement? Qu'est ce qui ne fonctionne pas, quelles erreurs obtiens-tu?
    Qu'est ce que c'est ta variable "tab_conso' exactement?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ta variable itérative est i est non m for i=1:m.

    En un peu simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if tab_conso(i,4)==1
            z=z+50;
        end
        tab_conso(i,7)= tab_conso(i,7)+z;

  4. #4
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    Voici ma proposition je pense que tu gagnes un peu de temps par rapport à ta boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    clear all
    clc;
    tab_conso=[(1:310)' ones(310,2)];
     
    L=size(tab_conso,1);
     
    z=50;
    for i=0:50:L
        if i<=L-50
            tab_conso(i+1:i+50,3)=tab_conso(i+1:i+50,3)+z;
        else
            tab_conso(i+1:end,3)=tab_conso(i+1:end,3)+z;
        end
        z=z+50;
    end

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut
    voila l'explication de tab_conso
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % Lecture du fichier de consommation
    disp(['Lecture du fichier conso: ' fic_conso])
    tic
    fid = fopen(fic_conso);
    [tab_conso,tab_conso_dim] = fscanf(fid, ['%d/%d/%d %d:%d:%d;%d;%d'] , [8 inf]);
    tab_conso_dim=tab_conso_dim/8;
    disp(['dim file:' num2str(tab_conso_dim)]);
    tab_conso=tab_conso';
    fclose(fid);
    % Calcul d'un vecteur de temps decimal pour la conso en jour julian par rapport à la
    % date_ref
    day_conso=datenum(tab_conso(:,3),tab_conso(:,2),tab_conso(:,1),...
        tab_conso(:,4),tab_conso(:,5),tab_conso(:,6))-date_ref;
    toc
    ce qui bugg ou je dois modifier

    ensuite je veux que quand il est 1H qui correspond à tab_conso(:,4) je change les valeur de tab_conso(:,7) à savoir que tab conso 7 est une valeur croissante donc quand il est 1H01, 1H02 ....
    tab_conso(:,7) s'incrémente de +50 soit 50 a 1H et a 1H01 +100 et a 1H02 +150...
    et quand il est 2H tab_conso(:,7) doit s'incrémenter de la dernière valeur de z soit 59min*50 pour une journée et 59*50*2 pour le 2eme jour...
    j'espère être assez précis

    Cordialement

  6. #6
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    j'ai choisi 310 aléatoirement mais aussi exprès (juste un exemple parce que j'ai pas le contenu de tes fichiers) et aussi pour que tu fasse attention si le size de ta colonne 7 (mois j'ai mis 3) n'est pas un multiple de 50 alors tu dois ajouter une condition (dans ce cas on utilise les commandes après le else).

    Normalement ce code fonctionne parfaitement mais juste au lieu d'utiliser mon tab_conso tu utilises le continu de tes fichiers xls

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut
    quand je fais ta solution soft001 qui me laisse perplexe sur l'idée sa me declare l'erreur suivante" Index exceeds matrix dimensions."
    pas d'autre solution ? c'est obliger pourtant il doit y avoir une solution

  8. #8
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    Tu peux mettre en pièce jointe le fichier que tu utilises et le code final.

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 22
    Par défaut probleme de syntaxe
    1ere operation de lecture de fichier qui fonctionne.
    le fichier ressemble a sa:
    01/02/2011 09:13:00;4741993;6133098
    01/02/2011 09:14:00;4742003;6133098
    01/02/2011 09:15:00;4742013;6133098
    01/02/2011 09:16:00;4742023;6133098
    01/02/2011 09:17:00;4742034;6133098
    01/02/2011 09:18:00;4742043;6133098
    01/02/2011 09:19:00;4742052;6133098
    01/02/2011 09:20:00;4742062;6133098
    01/02/2011 09:21:00;4742072;6133098

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % Lecture du fichier de consommation OK
    disp(['Lecture du fichier conso: ' fic_conso])
    tic
    fid = fopen(fic_conso);
    [tab_conso,tab_conso_dim] = fscanf(fid, ['%d/%d/%d %d:%d:%d;%d;%d'] , [8 inf]);
    tab_conso_dim=tab_conso_dim/8;
    disp(['dim file:' num2str(tab_conso_dim)]);
    tab_conso=tab_conso';
    fclose(fid);
    % Calcul d'un vecteur de temps decimal pour la conso en jour julian par rapport à la
    % date_ref
    day_conso=datenum(tab_conso(:,3),tab_conso(:,2),tab_conso(:,1),...
        tab_conso(:,4),tab_conso(:,5),tab_conso(:,6))-date_ref;
    toc

    et maintenant le probleme
    incrementer de 50 la colonne 7 a chaque fois que la colonne 4 est = a 12
    avec une incrementation donc 50+50+...
    et quand la colonne 4 est different de 12
    la colonne 7 prend la derniere valeur du 50+50+50.


    ma proposition qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      [m,n]=size(tab_conso)% objectif savoir le nombre de ligne dans mon fichier 
     
    for i=1:m
           if tab_conso(i:,4)==12 % objectif pour la ligne correspondante je vais a la colonne 4 
            z=z+50
     
             tab_conso(i:,7)= tab_conso(i:end,7)+z % objectif incrementer la 7eme colonne 
           end
             if tab_conso(i:,4)~=1
                 tab_conso(i:,7)= tab_conso(i:,7)+z
           end
    cordialement
    ( il faut donc modifier les 10 dernieres lignes que je vous proposes ci dessus.

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/01/2007, 20h04
  2. Réponses: 4
    Dernier message: 27/11/2006, 23h20
  3. Chercher une valeur dans un tableau
    Par christel1982 dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2006, 09h01
  4. Rechercher une valeur dans un tableau
    Par pafi76 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 14h23
  5. Réponses: 21
    Dernier message: 28/02/2006, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo