Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Lista de exercícios Montem (desenhem passo a passo) a situação da memória Stack (Pilha) e Heap para os programas abaixo. Essa tarefa tem como objetivo melhorar a compreensão sobre tais memórias e auxiliar o aluno a tornarse mais fluente em programação. 1) Programa 1 #include <stdlib.h> #include <stdio.h> int power(int base, int exponent) { int i, value = base; for (i = 1; i < exponent; i++) { value *= base; } return value; } int main(int argc, char *argv[]) { printf("%d\n", power(2,3)); printf("%d\n", power(2,5)); return 0; } 2) Programa 2 #include <stdlib.h> #include <stdio.h> void insertion(int *vector, int n) { int key, j, i; for (j = 1; j < n; j++) { key = vector[j]; i = j - 1; while (i >= 0 && vector[i] > key) { vector[i+1] = vector[i]; i--; } vector[i+1] = key; } } int main(int argc, char *argv[]) { int i; int v[] = {9,8,7,6,5,4,3,2,1,0}; insertion(v, 10); for (i = 0; i < 10; i++) printf("%d\n", v[i]); return 0; } 3) Programa 3 #include <stdlib.h> #include <stdio.h> void merge(int *vector, int p, int q, int r) { int k, i, j; int n1 = q - p + 2; int n2 = r - q + 1; // criando vetores auxiliares int *left = (int *) malloc(sizeof(int) * n1); int *right= (int *) malloc(sizeof(int) * n2); // copiando para vetores auxiliares for (i = 0; i < n1-1; i++) left[i] = vector[p + i]; for (j = 0; j < n2-1; j++) right[j] = vector[q + 1 + j]; left[n1-1] = 1000; right[n2-1] = 1000; i = 0; j = 0; for (k = p; k <= r; k++) { if (left[i] <= right[j]) { vector[k] = left[i]; i++; } else { vector[k] = right[j]; j++; } } } void merge_sort(int *vector, int p, int r) { if (p < r) { int q = (int) (p+r)/2.0; merge_sort(vector, p, q); merge_sort(vector, q+1, r); merge(vector, p, q, r); } } int main(int argc, char *argv[]) { int i; int v[] = {9,8,7,6,5,4,3,2,1,0}; merge_sort(v, 0, 9); for (i = 0; i < 10; i++) { printf("%d\n", v[i]); } return 0; } 4) Programa 4 #include <stdlib.h> #include <stdio.h> int fat(int n) { if (n == 1) return 1; else return n * fat(n-1); } int main(int argc, char *argv[]) { printf("%d\n", fat(3)); printf("%d\n", fat(5)); return 0; } 5) Programa 5 #include <stdlib.h> #include <stdio.h> void bubblesort(int *vector, int n) { int i, j; int aux; for (i = 0; i < n-1; i++) { for (j = n-1; j >= i+1; j--) { if (vector[j] < vector[j-1]) { aux = vector[j]; vector[j] = vector[j-1]; vector[j-1] = aux; } } } } int main(int argc, char *argv[]) { int i; int v[] = {9,8,7,6,5,4,3,2,1,0}; bubblesort(v, 10); for (i = 0; i < 10; i++) { printf("%d\n", v[i]); } return 0; }