Besoin d'aide:programmation C++
Lise
-
Utilisateur anonyme -
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!
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
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.
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.
Bonjour,
autre suggestion, pour le premier point !
bien sur, j'ai modifié quelques lignes !
testé sous msvc++6.0
Lupin
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