Corrigé de la séance d'exercices 8, Programmation I
Sciences et Technologies du Vivant, Semestre 1

Exercice 1 - Tableaux, chaînes de caractères et pointeurs

#include <iostream>
#include <string.h>

using namespace std;

void majuscule(char *mot) {
  if (mot[0] >= 'A' && mot[0] <= 'Z')
    return;
  else
    mot[0] = mot[0] - 32;
}

char *concatenation(char *mot1, char *mot2) {
  int longueur = strlen(mot1) + strlen(mot2) + 2;
  char *mot3 = new char[longueur];

  strcpy(mot3, mot1);
  mot3[strlen(mot1)] = ' ';

  strcpy(mot3 + strlen(mot1) + 1, mot2);
  
  return mot3;
}


int main(int argc, char **argv) {
  char nom[128];
  
  cout << "Entrez un nom: ";
  cin >> nom;

  majuscule(nom);
  cout << "Nom: " << nom << endl;
  
  char *prenom;
  prenom = new char[128];
  cout << "Entrez un prenom: ";
  cin >> prenom;
  majuscule(prenom);

  char *nom_complet = concatenation(prenom, nom);

  cout << nom_complet << endl;

  delete[] prenom;
  delete[] nom_complet;

  return 0;
}

Exercice 2 - Arguments

  1. #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv) {
      if (argc < 3) {
        cout << "Le programme a besoin de deux arguments." << endl;
        return 0;
      }
    
      int a = atoi(argv[1]);
      int b = atoi(argv[2]);
    
      cout << a << " + " << b << " = " << a+b << endl;
      return 0;
    }
    

  2. #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv) {
      if (argc < 3) {
        cout << "Le programme a besoin de deux arguments." << endl;
        return 0;
      }
    
      int a = atoi(argv[1]);
      int b = atoi(argv[2]);
    
      if (b == 0) {
        cout << "Erreur: division par 0" << endl;
        return 0;
      }
    
      cout << a << " / " << b << " = " << float(a)/b << endl;
      return 0;
    }
    

  3. #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv) {
      if (argc < 2) {
        cout << "Le programme a besoin d'au moins un argument." << endl;
        return 0;
      }
    
      int somme = atoi(argv[1]);
      cout << argv[1];
    
      for (int i=2; i<argc; i++) {
        somme = somme + atoi(argv[i]);
        cout << " + " << argv[i];
      }
        
      cout << " = " << somme << endl;
    
      return 0;
    }
    

Exercice 3 - Séquences génétiques

#include <iostream>

using namespace std;

bool adn_valide(char *sequence) {
  for (unsigned int i=0; i<strlen(sequence); i++)
    if (sequence[i] != 'A' && sequence[i] != 'C' && 
        sequence[i] != 'G' && sequence[i] != 'T')
      return false;
  return true;
}

bool compare(char *seq1, char *seq2) {
  if (strlen(seq1) != strlen(seq2))
    return false;
  for (unsigned int i=0; i<strlen(seq1); i++)
    if (seq1[i] != seq2[i])
      return false;
  return true;
}

void adn_to_arn(char *adn) {
  for (unsigned int i=0; i<strlen(adn); i++)
    if (adn[i] == 'T')
      adn[i] = 'U';
}

char *complementaire(char *seq_originale) {
  char *comp = new char[strlen(seq_originale)];
  
  for (unsigned int i=0; i<strlen(seq_originale); i++) {
    switch (seq_originale[i]) {
    case 'C':
      comp[i] = 'G';
      break;
    case 'G':
      comp[i] = 'C';
      break;
    case 'T':
      comp[i] = 'A';
      break;
    case 'A':
      comp[i] = 'T';
      break;
    }
  }
  
  return comp;
}

int main(int argc, char **argv) {
  char seq1[512], seq2[512];

  do {
    cout << "Entrez une sequence ADN: ";
    cin >> seq1;
  } while (!adn_valide(seq1));

  do {
    cout << "Entrez une seconde sequence ADN: ";
    cin >> seq2;
  } while (!adn_valide(seq2));
  
  if (compare(seq1, seq2))
    cout << "Les deux sequences sont identiques." << endl;
  else
    cout << "Les deux sequences sont differentes." << endl;

  cout << "'" << seq1 << "' transcrit en ARN vaut '";
  adn_to_arn(seq1);
  cout << seq1 << "'" << endl;

  cout << "Le complementaire de '" << seq2 << "' vaut '" << 
    complementaire(seq2) << "'" << endl;
  return 0;
}

Exercice 4 - Conversion

Pour convertir une chaîne de caractères en entier, il faut tout d'abord vérifier que chaque caractère est bien un nombre.

Ensuite, pour la conversion elle-même, on parcourt la chaîne, on multiplie chaque chiffre par la puissance de 10 correspondante et on additionne le tout. Par exemple, $123 = 1\cdot 10^2+2\cdot 10^1 +
3\cdot 10^0$.

    int string_to_int(char *chaine) {
      int longueur = strlen(chaine);
      int resultat = 0;
      bool erreur = false;

      for (int i=0; i<longueur; i++)
        if (chaine[longueur - 1 - i] >= '0' && chaine[longueur - 1 - i] <= '9')
          resultat += int(pow(10, i) * (chaine[longueur - 1 - i] - '0'));
        else
          erreur = true;
      
      if (erreur)
        return 0;
      else
        return resultat;
    }

Exercice 5 - Palindrome

    bool palindrome(char *chaine) {
      bool result = true;
      int longueur = strlen(chaine);
      int i = 0;

      while (i < longueur / 2 && result) {
        if (chaine[i] != chaine[longueur - 1 - i])
        result = false;
        i++;
      }

      return result;
    }


Retour