Aide pour realiser un programme

djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009 - 29 oct. 2009 à 18:46
 cs_petitwistiti - 8 nov. 2009 à 15:19
bonjour j'ai un petit problème je ne vois pas comment je pourrais faire sa , si quelqu'un sait m'aider

entre une suite de caractère comprenant lettre et chiffre la saisie s'arrête après un point , avec cette suite on en affiche une nouvelle en prenant les chiffres comme coefficient de répétition du caractère suivant ex : abc3e ---> abc3eee , fgh23ij-->fgh233iiij. si quelqu'un serait m'aider pour réaliser sa merci d'avance .

24 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 oct. 2009 à 21:21
Montre nous ton code, et explique où est-ce que tu es bloqué, précisement.
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
29 oct. 2009 à 23:30
excuse j'ai oublier de mettre mon code le voila :
mais je n'arrive pas a avoir les chiffre , et apres je dois multiplier le chiffre et ou
la lettre suivante exemple : abc3e ---> abc3eee , fgh23ij-->fgh233iiij.


#include <stdio.h>
#include <conio.h>
#include <ctype.h>

int main()
{
char lettre = 0;
int valeur;

printf("\n entrez une suite de caractere avec un ou plusieurs chiffre ");

scanf("%c", &lettre);

printf("%c\n", lettre);

if(isdigit(lettre))

/*onmas di que sa servait a enlever la valeur*/
valeur=lettre-'O';

printf("%c\n", valeur);


return 0;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 01:10
#include <conio.h>

Inutile, en plus d'être spécifique à windows (tu perds en portabilité pour rien, vu que tu ne te sert pas de ce header).

scanf("%c", &lettre);

Tu dois demander une chaîne de caractère à l'utilisateur, et non un seul caractère. Exemple:
char lettres[256] = {0};
scanf("%s", lettres);
printf("La chaîne entrée est %s\n", lettres);



/*onmas di que sa servait a enlever la valeur*/
valeur=lettre-'O';


Non, ça ne retire pas une valeur. De plus c'est -'0' et non -'O'. Ca permet de récupérer la valeur entière d'un nombre ascii.
Par exemple, ça permet de convertir '3', en 3.
Pourquoi ça fonctionne: En C, un caractère est un nombre. Par exemple, le caractère ascii 'a' correspond au nombre 95. Donc 'a' équivaut à 95 parce que 'a' est à la 95ème positions dans la table ascii.
Le caractère '0' et le caractère '1' on un chiffre de décalage, donc si on soustrait la position de '1' dans la table ascii par rapport au caractère '0', ça donne 1.

printf("%c\n", valeur);

Si tu veux afficher la valeur entière c'est donc %i et non %c

Pour résoudre ton exercice, il te suffit de créer une deuxième chaîne de caractère, et de remplir celle-ci en fonction de ce que tu vois dans la première chaine. Fait le par étape:
1) Commence par faire un code qui copie la première chaine dans la deuxieme.
2) Modifie ensuite ce code, de manière à ce que les chiffres soit pris en compte, et qu'ils fassent une répétition de lettre (ce qui équivaut à dire, recopie moi plusieurs fois la lettre).
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 10:12
on ma dis de le faire avec un getchar() aussi , pour lire les entrées car les chaines de caractere normalement je ne dois pas encore vu , parce que sinon je ferai un tableau je fou mes caractere avec une boucle qui vas avanc de 1 dans ma tableau mais c'est pas comme sa que je dois le faire .


if(isdigit(lettre))

/*on mas di que sa servait a enlever la valeur*/
valeur=lettre -'0' ;

et utilise getchar pour lire les entré voila se qu'on me dis
je viens de teste CptPingu a di de faire , le programme fais une error de mémoire .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 10:27
je viens de teste CptPingu a di de faire , le programme fais une error de mémoire .

Copie colle moi le code que tu as fait, qui fait une erreur de mémoire.

Voici une base de départ, ce code te permet de récupérer une suite de caractère avec getchar.
A toi de faire la suite.

#include <stdio.h>

int main(void)
{
  char c = 0;

  while ((c = getchar()) != '\n')
    printf("%c", c);
  printf("\n");

  return 0;
}
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 10:47
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

int main()
{ 
    char lettres[256] = {0};


int valeur;

 printf("\n entrez une suite de caractere avec un ou plusieur chiffre ");

    scanf("%s", lettres);

    printf("La chaîne entrée est %s\n", lettres);


if(isdigit(lettres)) 

/*on mas di que sa servait a enlever la valeur*/
valeur=lettre -'0' ; 

printf("%d\n", valeur);



    return 0;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 10:50
Tu l'a testé au moins ? Chez moi ça ne compile même pas !
lettres est un tableau et non un caractère, donc forcément si tu l'utilise comme un caractère, ça merde.
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 10:52
oui mais j'ai tellement de version différent maintenant que je m'embrouille lol
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 10:55
tu fais comment alors pour utilise la fonction isdigit ...... si s'est un tableau , car le prof demande d'utiliser sa mais il explique pas quoi c'est le derniere ex et je bloque dessus.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 10:55
Dans ce cas, repart de celui-là.
#include <stdio.h>

int main(void)
{
  char c = 0;

  while ((c = getchar()) != '\n')
    printf("%c", c);
  printf("\n");

  return 0;
}


Pour savoir si un caractère représente un chiffre, inutile de faire un "isdigit". Un simple c >= '0' && c <= '9', suffit.
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 11:12
tampis je vois pas comment faire merci quand de même
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 14:30
je me suis reposer la tete et j'arrive a sa maintenant

int main()
{ 
    char suite;
int valeur;
printf("\n entrez une suite de caractere avec un ou plusieur chiffre ");
do
{
suite=getchar();

if(isdigit(suite)) 
valeur=suite -'0' ;

putchar(valeur);

putchar(suite);
}while(suite !='.');

    return 0;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 14:37
J'ai l'impression de parler dans le vide...
Je t'ai donné un début de structure, et t'ai conseillé des choses (ne pas utiliser isdigit par exemple). Mon explication ne convenait pas ? Si oui en quoi ?
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 14:40
le prof me l'imposse le isdigit ,
le code fonction , mais se que je veux demander tu fais comment pour dire que par exemple aa3e pour que je dis que sa soit le e qui se multiplie ,car le 3 il est dans une variable dans le prog il est dans valeur.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 14:54
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  char c = 0;
  int val = 1; // On initialise à 1, car le premier caractère n'apparait forcément qu'une fois

  while ((c = getchar()) != '\n')
  {
    // On répète "val" fois le caractère.
    printf("%c", c);
    // Ici tu regardes si "c" est un nombre (isdigit)
    // si c'est le cas tu convertit val
    // sinon val vaut 1
    // val représente le nombre de répétition du prochain caractère
  }
  printf("\n");

  return 0;
}
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 15:06
j'essaye de comprendre , tu fais comment pour préciser que s'est que c'est a sur cette lettre que tu dois multiplier ,( je sais je suis chiant j'essaye de comprendre ) et merci beaucoup de tes réponse.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 15:51
L'astuce est de se souvenir a chaque fois du nombre de répétition. S'il n'y a pas de répétition, on considère que la répétition est de 1.
Si c'est un chiffre, tu l'écrit normalement, mais tu dis que le répétition est de la valeur de ce chiffre, sinon la répétition est de 1. Avant d'écrire un caractère, on regarde le nombre de répétition à faire, sachant qu'à chaque tour, après avoir écrit le caractère, on calcul la répétition suivante.

La méthode:
- Intialiser la répétition à 1
Boucle tant qu'il reste des caractères à lire:
- Ecrire le caractère autant de fois qu'indiqué par la répétition
- Calculer la prochaine répétition d'avance pour le prochain tour

De plus, toute la méthode est décrite en commentaire de ce que je t'ai envoyé.
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 15:56
sa j'avais bien compris , mais je ne vois pas comment tu fais pour remplace cette phrase // On répète "val" fois le caractère. en code c'est koi qui vas etre multiplier par val sa que je ne vois pas je me suis peu etre mal expliquer . c=getchar*val ? sa que je ne vois pas . j'ai deja rempli tout sauf cette phrase // On répète "val" fois le caractère.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 oct. 2009 à 15:57
Une répétition c'est une boucle, par une opération mathématique :)
0
djnerak Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 2 novembre 2009
30 oct. 2009 à 15:57
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  char c = 0;
  int val = 1; 

  while ((c = getchar()) != '\n');
  {
    // On répète "val" fois le caractère.
    printf("%c", c);
   if(isdigit(c)) 
val=c -'0' ;
   
    else val=1;
 
  }
  
  printf("\n");

  return 0;
}
0
Rejoignez-nous