Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <string.h>
  4. #include <locale.h>
  5. #include <stdlib.h>
  6.  
  7. using namespace std;
  8. int const n=5;
  9. typedef int vector [n];
  10. int sumDigitsmultiple(vector v, int i, int n);
  11. int sumDigitslineal(vector v, int i, int n);
  12. int sumDigitsiteratiu(vector v);
  13. bool Esdigit(vector v, int i);
  14.  
  15. int main(){
  16. vector v;
  17. int i=0,d=0;
  18. char a;
  19. cout << "Entra els caracters: " << endl;
  20. while(d<n){
  21. cin >> a;
  22. v[d]=a;
  23. d++;
  24. }
  25. cout << "La suma dels digits en recursiu multiple es " << sumDigitsmultiple(v,i,n) << endl;
  26. cout << "La suma dels digits en recursiu lineal es " << sumDigitslineal(v,i,n) << endl;
  27. cout << "La suma dels digits en iteratiu " << sumDigitsiteratiu(v) << endl;
  28. }
  29. /*Analisi
  30.  
  31. Cas trivial:
  32. sumDigits(v,i,n)=v[i]-48 si i=n ^ Esdigit(v[i])=cert
  33. sumDigits(v,i,n)=0 si i=n ^ Esdigit(v[i])=fals
  34.  
  35. Cas recursiu:
  36. sumDigits= sumDigits(v,i,(i+n)/2) + sumDigits(v,(i+n)/2+1,n) si i<n
  37.  
  38. */
  39. bool Esdigit(vector v, int i){
  40. if(v[i]=='0' || v[i]=='1' || v[i]=='2' || v[i]=='3' || v[i]=='4' || v[i]=='5' || v[i]=='6' || v[i]=='7' || v[i]=='8' || v[i]=='9'){
  41. return true;
  42. }
  43. else{
  44. return false;
  45. }
  46. }
  47.  
  48. int sumDigitsmultiple(vector v, int i, int n){
  49. if(i==n){
  50. if(Esdigit(v,i)){
  51. return v[i]-48; // Restem 48 per passar de codi ASCII a "valor real"
  52. }
  53. else{
  54. return 0;
  55. }
  56. }
  57. else{
  58. return sumDigitsmultiple(v,i,(i+n)/2) + sumDigitsmultiple(v,(i+n)/2+1,n);
  59. }
  60. }
  61.  
  62. /*Analisi
  63.  
  64. Cas trivial:
  65. sumDigits(v,i,n)=v[i]-48 si i=n ^ Esdigit(v[i])=cert
  66. sumDigits(v,i,n)=0 si i=n ^ Esdigit(v[i])=fals
  67.  
  68. Cas recursiu:
  69. sumDigits= sumDigits(v,i+1,n)+1 si i<n ^ EsDigit(v[i])=cert
  70. sumDigits= sumDigits(v,i+1,n) si i<n ^ EsDigit(v[i])=fals
  71.  
  72. */
  73.  
  74. int sumDigitslineal(vector v, int i, int n){
  75. int subp;
  76. if(i==n){
  77. if(Esdigit(v,i)){
  78. return v[i]-48; // Restem 48 per passar de codi ASCII a "valor real"
  79. }
  80. else{
  81. return 0;
  82. }
  83. }
  84. else{
  85. subp= sumDigitslineal(v,i+1,n);
  86. if(Esdigit(v,i)){
  87. return subp+v[i]-48;
  88. }
  89. else{
  90. return subp;
  91. }
  92. }
  93. }
  94.  
  95. int sumDigitsiteratiu(vector v){
  96. int i=0, f=n, Iini=i, subp;
  97. while(i<f){
  98. i=i+1;
  99. }
  100. if(Esdigit(v,i)){
  101. subp=v[i]-48;
  102. }
  103. else{
  104. subp=0;
  105. }
  106. while(i!=Iini){
  107. i=i-1;
  108. if(Esdigit(v,i)){
  109. subp=subp+v[i]-48;
  110. }
  111. }
  112. return subp;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement