Besoin d'aide:programmation C++

Lise -  
 Utilisateur anonyme -
Bonjour! Je suis débutante en C++ et j'ai de la misère à faire 2 de mes exercices de programmation (je ne comprends pas pourquoi ça ne fonctionne pas). Voici ce que disent ces 2 exercices et ce que j'ai fait :
1) Écrire un programme C++, en utilisant des fonctions, qui permet de lire une séquence de caractères qui se termine par '.' et affiche les éléments suivants:
- le pourcentage des lettres majusucles ;
- le pourcentage des chiffres lus ;
- le pourcentage des caractères lus.

Voici ce que j'ai fait :
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int MAJ (char sequence) {

int comptMAJ = 0 ;
int compteur = 0 ;
int maj ;

while (sequence != '.') {
compteur++ ;
if ( (sequence >= 'A') && (sequence <= 'Z') ) {
comptMAJ++ ;
}}

maj = (comptMAJ/compteur)*100 ;
return maj ;
}

int CHIFFRE (char sequence) {

int comptCHIFFRE =0 ;
int compteur ;
int chiffre ;

while (sequence != '.') {
compteur++ ;
if ( (sequence >= '0') && (sequence <= '9') ) {
comptCHIFFRE++ ;
}}

chiffre = (comptCHIFFRE/compteur)*100 ;

return chiffre ;
}

int ESPACE (char sequence) {

int comptESP = 0 ;
int compteur = 0 ;
int espace ;

while (sequence != '.') {
compteur++ ;
if (sequence == ' ') {
comptESP++ ;
}}

espace = (comptESP/compteur)*100 ;

return espace ;
}

main () {

char sequence ;
int espace, chiffre, maj ;

printf("Entrer une sequence de caracteres\n") ;
scanf("%s", sequence) ;

maj = MAJ (sequence) ;
printf("Le % des lettres majuscules lues est : %d\n", maj) ;

chiffre = CHIFFRE (sequence) ;
printf("Le % des chiffres lus est : %d\n", chiffre) ;

espace = ESPACE (sequence) ;
printf("Le % des caracteres espaces lus est : %d\n", espace) ;

return 0 ;
}
************************************************
2) Écire un programme C++, en utilisant des fonctions, qui lit des entiers entrés au clavier jusqu'à ce qu'il rencontre le nombre 0 et affiche le nombre d'entiers impairs et non nuls, leur minimum et leur maximum.
Voici ce que j'ai fait :
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int IMPAIR (int entier) {

int compteur = 0 ;

while (entier != 0) {
if (entier % 2 == 1) {
compteur++ ;
}}

return compteur ;
}

int MAX (int entier) {

int max = entier ;

while (entier != 0) {
if ( (entier % 2 == 1) && (max < entier) ) {
max = entier ;
}}

return max ;
}

int MIN (int entier) {

int min = entier ;

while (entier != 0) {
if ( (entier % 2 == 1) && (min > entier) ) {
min = entier ;
}}

return min ;
}

main () {

int entier ;
int compteur , max , min ;

printf("Entrer vos entiers\n") ;
scanf("%s", &entier) ;
while (entier != 0) {
scanf("%s", &entier) ;
}

compteur = IMPAIR (entier);
printf("Le nombre d'entiers impairs et non nuls est : %d\n", compteur) ;

max = MAX (entier) ;
printf("Leur maximum est : %d\n", max) ;

min = MIN (entier) ;
printf("Leur minimum est : %d\n", min) ;

return 0 ;
}
************************************************
Pourriez-vous me corriger SVP? Merci beaucoup pour votre aide!

2 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Salut.
    1) char sequence déclare une variable d'un caractère, c'est à dire 'a' 'b'etc... en premier lieu, il faut faire une chaine de caractère, type "char *sequence" ou "char sequance[N]" (comme tu veux)
    Ensuite, il faut parcourir cette sequence dans tes fonctions type MAJ, à l'intérieur du While. Le reste semble correct.
    2) même problème, fait un tableau d'entier.
    Ensuite, %s c'est pour les chaines de caractère, pas pour les entier. mais cette erreur peut conduire à une bonne idée, traite les entrés utilisateur comme des caractère , c'est à dire reprend le code du 1) en modifiant juste les fonction, pas les type. Utilise aussi les codes ascii des chiffres.
    0
  2. Utilisateur anonyme
     
    Bonjour,

    autre suggestion, pour le premier point !
    bien sur, j'ai modifié quelques lignes !

    #include <iostream> 
    
    using std::cout; 
    using std::cin; 
    using std::endl; 
    
    int MAJ (char *);
    int CHIFFRE (char *);
    int ESPACE (char *);
    
    void main ()
    { 
    	char sequence[80]="Vide", carac=0;
    
    	int  majuscule; 
    	int espace;
    	int chiffre=0, i=0;
    
    	cout << "Entrer une sequence de caracteres\n";
    	cin.getline (sequence,80,'\n');
    
    	majuscule = MAJ (sequence);
    	chiffre = CHIFFRE (sequence); 
    	espace = ESPACE (sequence); 
    	
    	cout << "Le % des lettres majuscules lues est : " << majuscule << endl;
    	cout << "Le % des chiffres lus est : " << chiffre << endl; 
    	cout << "Le % des caracteres espaces lus est : " << espace << endl; 
    }; 
    
    int MAJ (char *sequence)
    {
    	int comptMAJ = 0 ; 
    	int compteur = 0 ;
    	int majuscule = 0;
    
    	while ( *sequence != '\0' )
    	{
    		compteur++;
    		if ( (*sequence >= 'A') && (*sequence <= 'Z') )
    		{
    			comptMAJ++ ; 
    		}
    		++sequence; 
    	}
    	--compteur;
    	majuscule = static_cast< int >((comptMAJ*100)/compteur);
    	return(majuscule); 
    }; 
    
    int CHIFFRE (char *sequence)
    {
    	int comptCHIFFRE = 0; 
    	int compteur = 0; 
    	int chiffre = 0; 
    
    	while ( *sequence != '\0' )
    	{
    		compteur++ ; 
    		if ( (*sequence >= '0') && (*sequence <= '9') ) 
    		{
    			comptCHIFFRE++ ; 
    		}
    		++sequence;
    	}
    	--compteur;
    	chiffre = static_cast< int >((comptCHIFFRE*100)/compteur); 
    	return(chiffre) ; 
    }; 
    
    int ESPACE (char *sequence)
    { 
    	int comptESP = 0; 
    	int compteur = 0; 
    	int espace = 0;
    
    	while ( *sequence != '\0' )
    	{
    		compteur++ ; 
    		if (*sequence == ' '){comptESP++;}
    		++sequence;
    	}
    	--compteur;
    	espace = static_cast< int >((comptESP*100)/compteur); 
    	return(espace); 
    }; 
    
    


    testé sous msvc++6.0

    Lupin
    0