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;
}