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 :

Mettre une variable dans un Tableau


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut Mettre une variable dans un Tableau
    Bonjour à tous,
    Je suis nouveau sur ce forum et puis ... Bein j'viens poser ma petite question.
    Je sais que le titre n'est pas très très explicatif mais je ne savais pas quoi mettre.

    Voila, je suis en train de codé en C et j'ai besoin de mettre le contenu d'une variable, caractere par caractere, dans un tableau, cellule par cellule.

    exemple concrêt :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main() {
    long varUne = 0, varDeux = 3, resultat = 0;                  // Initialisation des variables
    int tab[] = {0};
     
    printf("Veuillez marquer un nombre : ");
    scanf("%ld", &varUne);                                  //Enregistre ce que marque l'USER
     
    resultat = varUne + varDeux;                            //Petit calcul nul
     
    printf("%ld + %ld = %ld", varUne, varDeux, resultat);  //Resultat
     
    /* Admettons que varUne soit egale à 3,
    resultat est egale à 6. Moi ce que je veux faire
    c'est mettre 6 dans le tableau tab[].
    Simple ? Oui mais si varUne est égale à 306, 
    ce que je veux à ce moment là c'est de 
    mettre 3 dans la premiere cellule, 0 dans la
    seconde et 9 dans la derniere ( 6 + 3 ) :
    tab[] = {3, 0, 9};  
    Comment réaliser cela étant donné que je ne 
    connais pas ce que contient varUne. */
     
    return 0;
    }
    Mon code ici est simple mais le principe est le même. Je veux créé un encrypteur avec mon propre algorithm.

    Merci de vos réponses.

  2. #2
    Membre averti Avatar de anakronox
    Inscrit en
    Novembre 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 49
    Par défaut
    Tout d'abord, bienvenu à toi. Ensuite (ce n'est pas une réponse mais une remarque sur ton code) arrives-tu à compiler ton code ?
    Car dans ton main il manque les parentheses ( main()).
    Il manque aussi les types de tes variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    varUne = 0, varDeux = 3, resultat = 0;
    Il faudrait plutot mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long varUne = 0, varDeux = 3, resultat = 0;
    Aussi, sachant que ton main est une fonction de type int, je te conseille aussi de rajouter
    Encore une fois; ce ne sont que des remarques.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut

    Merci de ces remarques!
    Non je n'arriverais pas a le compiler mais je l'ai fait à la va-vite et j'a oublier certaines choses.

    Merci pour le bienvenue et tes remarques ! Bonne journée !

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    si j'ai bien compris ton but est de decouper par unité le chiffre que tu récupères (unité, dizaine, centaine, milliers, ... ).

    une fois que tu as isolé ce que tu veux faire, il faut reflechir comment le faire.
    il y a plusieurs solution (il y a toujours plusieurs solution ).

    Une solution facile est de transformer ton nombre (par exemple 42) en chaine de caractères, tu obtiendra comme ca par la même occasion un tableau contenant le char '4' à l'indice 0 et le char '2' à l'indice 1 (chaine de caractère (char*) = tableau de char). Personnellement je n'aime pas trop cette solution, elle passe par des traitements intermédiaires qui sont inutiles (int -> char -> int).
    Si cette solution t'intéresse regarde du coté de sprintf.

    une autre solution consiste à découper ton nombre en chiffre (passer de 42 à 4 et 2 en gardant un type "int").
    Je pense que tu sais faire une division normale ( 40 / 10 = 4). Chose utile en C (comme dans bcp d'autre langage) l'opérateur '/' est la division entière c'est à dire que 40 / 10 = 4 mais 42 / 10 = 4 aussi.
    Apres il faut connaitre l'opérateur '%' qui est le modulo, c'est à dire le reste de la division entière

    ex : 42 / 10 = 4 et 42 % 10 = 2


    donc imaginons le chiffre 123456789
    il faudrait le découper voici une piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int tab[255]; //pas geniale, je t'invite à regarder comment marche l'allocation dynamique (malloc) mais ce n'est pas le sujet
    int nb = 123456789;
    int len = 0;
    while (nb != 0)
    {
      tab[len] = nb % 10; // 1ere iteration je recupere le 9, puis le 8 puis le 7 etc
      nb = nb / 10; // ici je divise par 10 (en division entiere, pas de virgule) je retire donc le 9 à la 1ere iteration
      len++;
    }
    voila ce code à priori te découpe ton int dans le tableau tab, mais attention il est à l'envers ici j'obtiens 987654321.
    Pour faire exactement ce que tu veux, il te reste à utiliser une variable supplémentaire qui te sert d'accumulateur ou tu sommes tout les chiffres 1 à 1, et à mettre la liste dans le bon sens.
    De plus je n'ai pas testé le code, donc il y a peut être des cas auquel je n'ai pas pensé.

    J'espère t'avoir un peu éclairé et avoir compris ce que tu voulais faire

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut
    Super, je vais étudier plus ta réponse et te dire quoi.

    En faite ce que je veux faire c'est dans ce principe la :

    Admettons le nombre inconnu soit égal à 1111
    Prendre 1111 le mettre au carré = 1234321
    Prendre seulement 3432 le mettre au carré = 11778624
    etc etc etc
    Pour prendre seulement les 4 du milieu, je sais faire tant que j'ai un tableau.
    Aparemment tes solutions m'interressent beaucoup!

    Je te remercie et je laisse le sujet non-resolu. Je te dis si ca marche et je le placerais [RESOLU] merci...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut
    Je prends, a partir du deuxième chiffre, les 4 chiffres suivants. Ce qui donne pour le premier exemple (Exemple 1), 1234321.
    Avec ce nombre, je prends les quatre chiffres qui suivent le second.
    Donc:
    1 2 3 4 3 2 1
    ^ ^
    1° 2°
    Deuxième chiffre = 2
    Les quatre qui suivent :
    1 2 3 4 3 2 1
    ^ ^ ^ ^ ^ ^ ^
    1° 2° 3° 4° 5° 6°
    Les soulignés, je prends ( les quatre chiffres qui suivent le 2° )

    Ce qui donne : 3432
    Je met celui ci au carré donc:
    3432² = 11778624 (exemple 2)
    Je prends ensuite les quatre chiffres qui suivent le second chiffre.
    Encore un schémas ? Aller je vais m'embêter à te le faire ...

    1 1 7 7 8 6 2 4
    ^ ^
    1° 2°
    Donc je prend 7786 CAR :
    1 1 7 7 8 6 2 4
    ^ ^ ^ ^ ^ ^ ^
    1 2 3 4 5 6 7 8
    Je prends les soulignés donc 7786!!!!!!

    Je les met au carré etc, ...

    Encore un petit exemple ? non, je pense que tu as compris.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut
    Alors, personnellement ça "déchire" ce que tu m'as donné Oniric!
    Mais j'ai un dernier soucis, c'est que, avec un tableau, je n'arrive pas a réunir mes cellules.
    Et je peux pas le faire avec une variables.
    Je te remercie de ton aide mais je crois que je ne peux plus avancer :S
    A moins que tu trouve encore une solution ... Ca m'étonnerais. Aller j'te remercie et passe une bonne journée !

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    de rien pour le coup de main, content que ca te soit utile

    Sinon c'est à dire reunir ? je comprend pas bien ce que tu entends par la. tu as un nombre decoupés par dizaine et tu veux le reconstruire ?
    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
     
    t[0] = 1;
    t[1] = 2;
    t[2] = 3;
    t[3] = 4; 
    t[4] = 5;
    t[5] = 6; 
     
    //je veux recuperer un int result = 2345
    int result = 0;
    for (i = 1; i <= 4; i++)
    {
      result *= 10 // equivalent à result = result * 10;
      result += t[i];
    }
     
    printf ("result=%d\n", result) //result=2345
    J'espere que j'ai bien compris ce que tu veux faire, essaye d'etre un peu plus explicite quand tu demandes quelque chose, car les 2 fois ou je te repond, je suis pas sur que ce soit ce que tu veuilles

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu peux aussi utilisez sprintf et strtol. Pas besoin de réinventer la roue.

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    Citation Envoyé par matafan Voir le message
    Tu peux aussi utilisez sprintf et strtol. Pas besoin de réinventer la roue.
    j'ai deja cité plus haut ces methodes, mais tu passes par un type intermediaire (char*) qui n'est pas necessaire.

    des divisions et multiplications j'appel pas ca re inventer la roue

  11. #11
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Pourquoi faire un tableau ?
    1- Déterminer par quelle puissance de 10 diviser le nombre pour que le quotient soit compris entre 10 et 99. Dans ton exemple 1234321, on obtient 100000
    2- Prendre le reste de la division du nombre par cette puissance de 10 : 1234321 %100000 = 34321
    3- Diviser cette puissance de 10 par 10000 (pour 4 chiffres à obtenir) ->10
    4- Diviser le nombre obtenu en 2 par celui obtenu en 3 et prendre le quotient : 34321/10 =3432

    Il reste quelques questions à se poser :
    Que faire si le nombre de départ a moins de 6 chiffres ? Par exemple 12345. Le résultat doit-il être 345 ?
    Pour 2345, le résultat doit-il être 45 ?
    pour 45, ou 5, ou 0, doit-il être 0 ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Par défaut
    Je vous remercie pour tous de ces réponses !!
    Mais pendant que je m'embêter en cours d'anglais, j'ai codé sur un bout de papier. En 1h j'ai trouvé tout.

    J'ai pris l'idée de Oniric, qui m'a beaucoup aidé, puis j'ai utilisé l'idée de notre modérateur : avec les puissance de 10!

    Citation Envoyé par diogene Voir le message
    Il reste quelques questions à se poser :
    Que faire si le nombre de départ a moins de 6 chiffres ? Par exemple 12345. Le résultat doit-il être 345 ?
    Pour 2345, le résultat doit-il être 45 ?
    pour 45, ou 5, ou 0, doit-il être 0 ?
    Ca, j'y avait pensé pendant un moment.
    Je met remplace les chiffres manquants par un zéro.
    Admettons : 12345 je prends 321 et 0


    Enfin, je n'ai plus qu'a recopier mon papier. Je vous remercie pour tous et surtout passez une bonne soirée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ODBC] Mettre une variable dans un tableau associatif
    Par razily dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/06/2010, 11h53
  2. Mettre le contenu d'une variable dans un tableau
    Par clement106 dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2010, 20h48
  3. Réponses: 2
    Dernier message: 10/04/2007, 23h43
  4. Réponses: 3
    Dernier message: 22/03/2007, 13h09
  5. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00

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