Besoin d'aide:programmation C++

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. Contributeur
    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
    1. 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