Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <cassert>
  3. using namespace std;
  4.  
  5. typedef int Item;
  6.  
  7. /**
  8. * @brief Affichage d’un entier
  9. * @param[in] l'argument
  10.  
  11. */
  12. void afficher(const Item& arg) {
  13. cout << arg;
  14. }
  15.  
  16. /* Conteneur (de capacité 15) généralisé à tout type d'item */
  17. struct ConteneurTS {
  18. enum { CAPACITE = 15 }; // Capacité du conteneur
  19. Item tab[CAPACITE]; // Conteneur primaire (tableau statique)
  20. unsigned int nbItems; // Nombre d'items stockés
  21. };
  22.  
  23. /**
  24. * @brief Initialise à vide un conteneur
  25. * @param[out] le conteneur
  26. */
  27. void initialiser(ConteneurTS& c) {
  28. c.nbItems = 0; // aucun élément n’est stocké
  29. }
  30.  
  31. /**
  32. * @brief Lecture d'un item dans un conteneur
  33. * @param[in] c : le conteneur
  34. * @param[in] i : l'indice de l'item dans le conteneur
  35. * @return l'item (à l'index i)
  36. * @pre i < c.nbItems
  37. */
  38. Item lire(const ConteneurTS& c, unsigned int i) {
  39. assert(i < c.nbItems);
  40. return c.tab[i];
  41. }
  42.  
  43. /**
  44. * @brief Ecrire un item dans un conteneur
  45. * @param[in,out] le conteneur
  46. * @param[in] l'indice où ecrire l'item
  47. * @param[in] l'item à ecrire
  48. * @pre i <= c.nbItems et c.nbItems < c.capacite
  49. */
  50. void ecrire(ConteneurTS& c, unsigned int i, const Item& item) {
  51. //assert((i < c.nbItems) || ((i == c.nbItems) && (c.nbItems < ConteneurTS::CAPACITE)));
  52. c.tab[i] = item;
  53. if (i == c.nbItems)
  54. c.nbItems++;
  55. }
  56.  
  57. /**
  58. * @brief Affichage des elements du conteneur
  59. * @param[in] le conteneur
  60. */
  61. void afficher(const ConteneurTS& c) {
  62. cout << "[ ";
  63. for (unsigned int i = 0; i < c.nbItems; ++i) {
  64. afficher(c.tab[i]);
  65. cout << " ";
  66. }
  67. cout << "]" << endl;
  68. }
  69.  
  70. int comparer(Item arg1, Item arg2) {
  71. return (arg1 - arg2);
  72. }
  73.  
  74. void extrema(ConteneurTS& c, unsigned int &min, unsigned int &max) {
  75. min = max = 0;
  76. for (unsigned int i = 0; i < c.nbItems; ++i) {
  77. if (comparer(c.tab[min], c.tab[i]) > 0) {
  78. min = i;
  79. }
  80. if (comparer(c.tab[max], c.tab[i]) < 0) {
  81. max = i;
  82. }
  83. }
  84. cout << min << " " << max << endl;
  85. }
  86.  
  87. int main() {
  88. ConteneurTS c;
  89. unsigned int min = 1;
  90. unsigned int max = 1;
  91. initialiser(c);
  92. for (int i = 0; i < 10; ++i) {
  93. ecrire(c, i, i + 1);
  94. }
  95. afficher(c);
  96. extrema(c, min, max);
  97. assert(lire(c, 0) == 1);
  98. assert(lire(c, 4) == 5);
  99. ecrire(c, 0, 10);
  100. assert(lire(c, 0) == 10);
  101. ecrire(c, 5, 11);
  102. assert(lire(c, 5) == 11);
  103. system("pause"); return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement