Corrigé du TD 1 : premiers pas

Quelques éléments nouveaux en C++

// CORRIGÉ : iostream remplace stdio.h pour les entrées/sorties
#include <iostream>
// CORRIGÉ : string fournit la classe std::string pour les chaînes de caractères
#include <string>
 
// CORRIGÉ : les caractères // introduisent un commentaire jusqu'à la fin de la ligne
// ceci est une fonction qui additionne deux entiers
// CORRIGÉ : le paramètre c est passé par référence
void addition(int a, int b, int & c)
{
    c=a+b;
}
 
// ceci est une fonction qui additionne deux flottants
// CORRIGÉ : surcharge de fonction : même nom, mais signature différente
void addition(float a, float b, float & c)
{
    c=a+b;
}
 
int main(int argc, char** argv)
{
    // CORRIGÉ : déclaration de i dans la boucle
    for(int i=0; i<10; ++i)
    {
        int x1;
        addition(i,i,x1);
        // CORRIGÉ : nouvelle syntaxe, std::cout à la place de printf
        // CORRIGÉ : notion d'espace de nom (similaire au package Java) avec std::
        std::cout << "x1 : " << x1 << "n";
        float x2;
        addition(i,i,x2);
        std::cout << "x2 : " << x2 << "n";
    }
 
    // CORRIGÉ : utilisation de la classe std::string
    std::string nom;
    std::cout << "Entrez votre nom : ";
    // CORRIGÉ : nouvelle syntaxe, std::cin à la place de scanf
    std::cin >> nom;
    std::cout << "Bonjour " << nom << "n";
}

Tableau de chaînes de caractères

#include <iostream>
#include <string>
 
string* redimensionner(std::string* tableau, int ancienneTaille, int nouvelleTaille)
{
    std::string* nouveau=new string[nouvelleTaille];
    for(int i=0;i<ancienneTaille;i++)
    {
        nouveau[i]=tableau[i];
    }
    if(tableau)
    {
        delete[] tableau;
    }
 
    return nouveau;
}
 
void afficher(std::string const * const tableau,int taille)
{
    for(int i=0;i<taille;++i)
    {
        std::cout << tableau[i] << "n";
    }
}
 
int main()
{
    int taille=0;
    std::string* tableau=NULL;
 
    bool fini = false;
    while(!fini)
    {
        std::string saisie;
        std::cout << "saisisez une chaine: ";
        std::cin >> saisie;
        if(saisie=="fin")
        {
            fini = true;
        }
        else
        {
            tableau=redimensionner(tableau,taille,taille+1);
            taille++;
            tableau[taille-1]=saisie;
        }
    }
    afficher(tableau,taille);
 
    return EXIT_SUCCESS;
}

Les instructions

if(saisie=="fin")
{
     fini = true;
}

utilisent la surcharge de l'opérateur de comparaison ==, afin de pouvoir comparer des objets de type std::string. La gestion du tableau est problématique, puisqu'il doit être agrandi manuellement à chaque insertion.

Tableau dynamique de chaînes

#include <iostream>
#include <string>
#include <vector>
 
void afficher(std::vector<std::string> const & tableau)
{
    for(int i=0; i<tableau.size(); ++i)
    {
        std::cout << tableau[i] << "n";
    }
}
 
int main()
{
    std::vector<std::string> tableau;
 
    bool fini = false;
    while(!fini)
    {
        std::string saisie;
        std::cout << "Saisissez une chaine : ";
        std::cin >> saisie;
        if(saisie == "fin")
        {
            fini = true;
        }
        else
        {
            tableau.push_back(saisie);
        }
    }
 
    afficher(tableau);
 
    return EXIT_SUCCESS;
}

Tri de chaînes de caractères

#include <iostream>
#include <string>
#include <vector>
 
std::vector<std::string> saisir()
{
    std::vector<std::string> tableau;
    bool fini = false;
    while(!fini)
    {
        std::string saisie;
        std::cout << "Saisissez une chaine : ";
        std::cin >> saisie;
        if(saisie == "fin")
        {
            fini = true;
        }
        else
        {
            tableau.push_back(saisie);
        }
    }
    return tableau;
}
 
void afficher(std::vector<std::string> const & tableau)
{
    for(int i=0; i<tableau.size(); ++i)
    {
        std::cout << tableau[i] << "n";
    }
}
 
 
void echange(std::string & s1, std::string & s2)
{
    std::string temp = s1;
    s1 = s2;
    s2 = temp;
}
 
int rechercheMinimum(std::vector<std::string> const & tableau, int debut)
{
    int resultat = debut;
    for(int i=debut+1; i<tableau.size(); ++i)
    {
        if(tableau[i]<tableau[resultat])
        {
            resultat = i;
        }
    }
    return resultat;
}
 
void triChaines(std::vector<std::string> & tableau)
{
    for(int i=0; i<tableau.size(); ++i)
    {
        int min = rechercheMinimum(tableau, i);
        echange(tableau[i], tableau[min]);
    }
}
 
int main()
{
    std::vector<std::string> tableau=saisir();
    afficher(tableau);
    triChaines(tableau);
    afficher(tableau);
 
    return EXIT_SUCCESS;
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>