Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1) resolver n-indirecciones. Implementar la función
- int n_indirecciones(void* inicial, unsigned int indirecciones);
- asumiendo que el void* en realidad es un int****... tantos asteriscos
- como indirecciones sean. Si 'indirecciones' es 1, entonces es una sola
- derreferenciación del puntero. Tiene que asumir q al final de las indirecciones,
- está el valor a devolver. 'indirecciones' es un número mayor o igual a cero
- (precondición).
- */
- #include <stdio.h>
- #include <stdlib.h>
- int n_indirecciones(void* inicial, unsigned int indirecciones);
- /* -------------------------------
- Testing Helper
- ------------------------------- */
- void PrintResult(int val1, int val2, const char* title)
- {
- printf(title);
- printf("\n");
- if(val1 == val2)
- printf(" Test succeeded");
- else
- printf(" Test failed");
- printf("\n");
- printf("\n");
- }
- /*
- Test cases
- */
- void Test0(const char* title)
- {
- int val = rand();
- int result = n_indirecciones(&val, 0);
- PrintResult(val, result, title);
- }
- void Test1(const char* title)
- {
- int result;
- int *val;
- val = (int*)malloc(sizeof(int));
- *val = rand();
- result = n_indirecciones(val, 1);
- PrintResult(*val, result, title);
- }
- void Test2(const char* title)
- {
- int result;
- int **val;
- val = (int**)malloc(sizeof(int));
- *val = (int*)malloc(sizeof(int));
- **val = rand();
- result = n_indirecciones(val, 2);
- PrintResult(**val, result, title);
- }
- void Test3(const char* title)
- {
- int result;
- int ***val;
- val = (int***)malloc(sizeof(int));
- *val = (int**)malloc(sizeof(int));
- **val = (int*)malloc(sizeof(int));
- ***val = rand();
- result = n_indirecciones(val, 3);
- PrintResult(***val, result, title);
- }
- void Test4(const char* title)
- {
- int result;
- int ****val = (int****)malloc(sizeof(int));
- val = (int****)malloc(sizeof(int));
- *val = (int***)malloc(sizeof(int));
- **val = (int**)malloc(sizeof(int));
- ***val = (int*)malloc(sizeof(int));
- ****val = rand();
- result = n_indirecciones(val, 4);
- PrintResult(****val, result, title);
- }
- /*
- 1) resolver n-indirecciones. Implementar la función
- int n_indirecciones(void* inicial, unsigned int indirecciones);
- */
- int n_indirecciones(void* inicial, unsigned int indirecciones)
- {
- int result;
- unsigned int i;
- if(indirecciones == 0) return *(int*)inicial;
- for(i=0; i < indirecciones; ++i)
- {
- inicial = *(void**)inicial;
- }
- result = (int)inicial;
- return result;
- }
- int main(void)
- {
- Test0("Test with zero ");
- Test1("Test with one ");
- Test2("Test with two ");
- Test3("Test with three ");
- Test4("Test with four ");
- return 0;
- }
Add Comment
Please, Sign In to add comment