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