Guest User

Untitled

a guest
Oct 23rd, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. /*
  2. 1) resolver n-indirecciones. Implementar la función
  3. int n_indirecciones(void* inicial, unsigned int indirecciones);
  4. asumiendo que el void* en realidad es un int****... tantos asteriscos
  5. como indirecciones sean. Si 'indirecciones' es 1, entonces es una sola
  6. derreferenciación del puntero. Tiene que asumir q al final de las indirecciones,
  7. está el valor a devolver. 'indirecciones' es un número mayor o igual a cero
  8. (precondición).
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13.  
  14. int n_indirecciones(void* inicial, unsigned int indirecciones);
  15.  
  16.  
  17.  
  18. /* -------------------------------
  19.         Testing Helper
  20.  ------------------------------- */
  21. void PrintResult(int val1, int val2, const char* title)
  22. {
  23.  
  24.   printf(title);
  25.   printf("\n");
  26.  
  27.   if(val1 == val2)
  28.     printf("  Test succeeded");
  29.   else
  30.     printf("  Test failed");
  31.  
  32.  
  33.  
  34.   printf("\n");
  35.   printf("\n");
  36. }
  37.  
  38. /*
  39.     Test cases
  40. */
  41. void Test0(const char* title)
  42. {
  43.   int val = rand();
  44.   int result = n_indirecciones(&val, 0);
  45.  
  46.   PrintResult(val, result, title);
  47.  
  48. }
  49.  
  50. void Test1(const char* title)
  51. {
  52.   int result;
  53.   int *val;
  54.   val = (int*)malloc(sizeof(int));
  55.   *val = rand();
  56.  
  57.   result = n_indirecciones(val, 1);
  58.  
  59.   PrintResult(*val, result, title);
  60.  
  61. }
  62. void Test2(const char* title)
  63. {
  64.   int result;
  65.   int **val;
  66.   val = (int**)malloc(sizeof(int));
  67.   *val  = (int*)malloc(sizeof(int));
  68.   **val = rand();
  69.  
  70.   result = n_indirecciones(val, 2);
  71.  
  72.   PrintResult(**val, result, title);
  73.  
  74. }
  75.  
  76. void Test3(const char* title)
  77. {
  78.   int result;
  79.   int ***val;
  80.  
  81.   val = (int***)malloc(sizeof(int));
  82.   *val = (int**)malloc(sizeof(int));
  83.   **val = (int*)malloc(sizeof(int));
  84.   ***val = rand();
  85.  
  86.   result = n_indirecciones(val, 3);
  87.  
  88.   PrintResult(***val, result, title);
  89.  
  90.  
  91. }
  92.  
  93. void Test4(const char* title)
  94. {
  95.   int result;
  96.   int ****val = (int****)malloc(sizeof(int));
  97.  
  98.   val = (int****)malloc(sizeof(int));
  99.   *val = (int***)malloc(sizeof(int));
  100.   **val = (int**)malloc(sizeof(int));
  101.   ***val = (int*)malloc(sizeof(int));
  102.   ****val = rand();
  103.  
  104.   result = n_indirecciones(val, 4);
  105.  
  106.   PrintResult(****val, result, title);
  107. }
  108. /*
  109. 1) resolver n-indirecciones. Implementar la función
  110. int n_indirecciones(void* inicial, unsigned int indirecciones);
  111. */
  112. int n_indirecciones(void* inicial, unsigned int indirecciones)
  113. {
  114.     int result;
  115.     unsigned int i;
  116.     if(indirecciones == 0) return *(int*)inicial;
  117.     for(i=0; i < indirecciones; ++i)
  118.     {
  119.       inicial = *(void**)inicial;
  120.     }
  121.     result = (int)inicial;
  122.     return result;
  123. }
  124.  
  125.  
  126. int main(void)
  127. {
  128.   Test0("Test with zero ");
  129.   Test1("Test with one ");
  130.   Test2("Test with two ");
  131.   Test3("Test with three  ");
  132.   Test4("Test with four  ");
  133.  
  134.   return 0;
  135. }
Add Comment
Please, Sign In to add comment