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

C Discussion :

Besoin d'aide pour une incrémentation spéciale


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut Besoin d'aide pour une incrémentation spéciale
    Bonjour à tous,

    Voilà je suis en train de faire un projet en C et je suis bloqué sur un truc que je n'arrive pas à faire, s'il y a des gens qui peuvent m'aider ça serait super.
    Voilà en fait je dois faire une boucle qui fait une incrémentation de la manière suivante :
    00000
    00001
    00002
    00003
    00010
    00011
    00012
    00013
    00020
    jusqu'a 33333, il faut que chaque chiffre soit stocké dans une case d'un tableau et il faut que la taille dans l'exemple (5) soit modifiable aussi.
    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Peut-être faire une incrémentation standard (pas le choix de toute façon) et construire une chaîne avec le nombre de zéro qu'il faut puis le chiffre incrémenté. Je ne pense que pas que ces chiffres doivent être stockées dans un tableau de int par exemple car je ne vois pas comment d'ailleurs
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre régulier
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    A priori, tu travailles en base 4.
    Je te conseille tout d'abord te créer ta propre fonction d'incrémentation.
    Petite aide:
    tu ajoutes 1, si l'unité est supérieure à 3, tu mets 0 et ajoute 1 aux dixaines et tu poursuis par la gauche.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses rapide,
    Franck j'ai pas tout saisi, sinon je suis obliger de mettre chaque chiffres dans une case d'un tableau à 2 dimensions. pareille pour alyma.
    Je doit implanter ce truc la dans le programme qui est déjà fait donc je suis un peut obliger de le faire comme ça

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Un code dans le genre ?

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <stdlib.h>
    #include <stdio.h>
    #include <stdint.h>
     
    #define ARRAY_LENGTH        5
    #define ARRAY_DATA_TYPE     unsigned char
    #define INCREMENT_LIMIT     3
     
    void print_array(ARRAY_DATA_TYPE *array, size_t len)
    {
        for(size_t cell = 0; cell < len; cell++)
        {
            printf("%d ", array[cell]);
        }
        putchar('\n');
    }
     
    int main(void)
    {
        ARRAY_DATA_TYPE array[ARRAY_LENGTH] = {0};
     
        // Initial state
        print_array(array, ARRAY_LENGTH);
     
        // Increment
        for(size_t cell = 1; cell < ARRAY_LENGTH; cell++)
        {
            while(array[cell] != INCREMENT_LIMIT)
            {
                for(unsigned int inc = 1; inc <= INCREMENT_LIMIT; inc++)
                {
                    array[0] = inc;
                    print_array(array, ARRAY_LENGTH);
                }
     
                array[0] = 0;
                array[cell] += 1;
                print_array(array, ARRAY_LENGTH);
            }
        }
     
        puts("DONE");
        return 0;
    }
    Ce n'est pas particulièrement clair sur la suite de ton incrémentation, est-ce que le résultat attendu est celui obtenu avec ce code ?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Bktero, je pense qu'il y'a un souci, quand tu incrémente il faut mettre toutes les valeurs précédentes à 0 et pas que la première.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 556
    Points : 1 426
    Points
    1 426
    Par défaut
    C'est du C99

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Khalid89 Voir le message
    Bktero, je pense qu'il y'a un souci, quand tu incrémente il faut mettre toutes les valeurs précédentes à 0 et pas que la première.
    Je ne dirais pas qu'il y a un soucis dans mon code, je dirais qu'il y a un soucis dans ton explication Montre nous plus clairement ce que tu veux faire, notamment au prochain changement de digit.

    Citation Envoyé par mith06
    C'est du C99
    Khalid89 a édité son message où il demandait si mon code était du C++ et mith06 donne la bonne réponse : c'est du C, version C99 ! Si ça avait été du C++, on aurait notamment vu std::cout << "DONE"

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Merci BKtero,
    J'ai bien expliquer avec un exemple mais il a été supprimé,
    exemple:
    pour une série de 3 chiffres je doit obtenir ça,
    000,001,002,003,010,011,012,013,020,021,022,023,030,031,032,033,100,101,.....,333.
    voila ^^j’espère que je suis plus clair

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    J'ai retrouvé dans l'historique l'exemple que tu as supprimé :
    001
    002
    003
    010
    011
    012
    013
    020
    021
    022
    023
    030
    031
    032
    033
    100
    101
    .....
    333
    C'est en effet bien plus clair comme ça

    Je pense qu'avec ce qui t'a été donné, tu dois pouvoir commencer à construire toi même un algorithme pour solutionner ton problème.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Ça donnerai quoi ton code en C normale ? car je ne comprend pas tout (je suis amateur)

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    J'ai réussis à le coder d'une manière simple, voila ce que ça donne si vous aviez des propositions d'amélioration je suis preneur
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
     
     
    int main (){
        int v,i,j,k,l,m,n,pui;
        v=5;
        int tab[100]={0};
        i=0;
        k=0;
     
     
    do{
        if(tab[k]==3 ){
            k++;
            if(tab[k]!=3){
            tab[k]++;
            for(i=0;i<k;i++){
                tab[i]=0;
            }
            k=0;
            }
        }
     
        if(tab[k]<3){
     
         //affichage:
            for(n=0;n<v;n++){
                printf("%d",tab[n]);
                }
                printf("\n");
     
                tab[k]++;
        }
    }
          while (k<v);
        return 0;
    }

  13. #13
    Membre régulier
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Points : 107
    Points
    107
    Par défaut
    Grâce à cette fonction, tu devrais t'en sortir:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define TAILLE			5
    #define VAL_ASCII_3		51
    #define VAL_ASCII_0		'0'
     
    //Incrémente de 1, renvoie 1 quand il ne peut plus incrémenter, 0 sinon
    char increment_1(char* c)
    {
    	int i = 0;
    	int n = (int) strlen(c);
    	for(i=0;i<n;i++)
    	{
    		if(i==0){
    			c[n-1-i] = c[n-1-i] + 1;
    		}
    		if(c[n-1-i]>51 && i!=(n-1))
    		{
    			c[n-1-i]	= VAL_ASCII_0;
    			c[n-2-i] = c[n-2-i] + 1;
    		}
    		else if (c[n-1-i]>VAL_ASCII_3)
    		{
    			memset(c,VAL_ASCII_3,n);
    			return 1;
    		}
    		else break;
    	}
    	return 0;
    }
     
     
    int main (void)
    {
    	char debut[5] = "0000";
     
    	printf("%s\n",debut);
    	while(!increment_1(debut)){
    		printf("%s\n",debut);
    	}
    	system("pause"); 
    }

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    Je te remercie alyma je vais tester ça, et voir ce que ça donne

Discussions similaires

  1. Besoin d'aide pour une sous requete
    Par Celia1303 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 14h09
  2. Besoin d'aide pour une requete
    Par jnc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 11h54
  3. Création requete besoin d'aide pour une date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2004, 22h03
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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