Buscar

lista 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

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
tornar­se 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;
}

Continue navegando