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

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
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