Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

Tamanho: px
Começar a partir da página:

Download "Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)"

Transcrição

1 Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs) 1

2 AGREGADO HOMOGÊNEO Um agregado homogêneo de dados é um conjunto de dados que são necessariamente do mesmo tipo, associados a um mesmo identificador. Arrays e matrizes são agregados homogêneos. P. ex.: float notap1[n]; Cada elemento notap1[i] tem o tipo float e é associado ao mesmo identificador notap1. 2

3 AGREGADO HETEROGÊNEO Um agregado heterogêneo de dados é um conjunto de dados não necessariamente do mesmo tipo, associados a um mesmo identificador. Exemplo: os dados associados a um aluno matriculado em uma disciplina são RA (inteiro), nome (array de char), número de faltas (inteiro), nota na P1 (float) e nota na P2 (float). 3

4 STRUCT Para definir um agregado heterogêneo em C, precisamos definir uma struct. struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; A declaração acima define um agregado de dados chamado struct aluno com cinco membros, chamados ra, nome, faltas, notap1 e notap2. 4

5 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; declara novo tipo agregado de dados chamado struct aluno 5

6 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno clarice; declara variável de nome clarice com tipo struct aluno 6

7 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno clarice; clarice.ra = ; acesso ao membro ra da variável clarice 7

8 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno clarice; clarice.ra = ; strncpy(clarice.nome,"clarice Lispector",60); o membro nome da variável clarice é uma string para inicializá-la, temos que copiar os dados de outra string 8

9 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno clarice; clarice.ra = ; strncpy(clarice.nome,"clarice Lispector",60); clarice.faltas = 3; clarice.notap1 = 6.5; clarice.notap2 = 7.5; 9

10 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno clarice = {.ra = ,.nome = "Clarice Lispector",.faltas = 3,.notaP1 = 6.5,.notaP2 = 7.5 declaração de variável com atribuição 10

11 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno clarice = {.ra = ,.nome = "Clarice Lispector",.faltas = 3,.notaP1 = 6.5,.notaP2 = 7.5 lembre que só na inicialização podemos usar = para atribuir a um array de char 11

12 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno *clarice = (struct aluno *) malloc(sizeof(struct aluno)); 12

13 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno *clarice = (struct aluno *) malloc(sizeof(struct aluno)); (*clarice).ra = ; Acesso a membro de struct via ponteiro. Método 1: dereferencie o ponteiro e acesse o membro usando o operador ponto. 13

14 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno *clarice = (struct aluno *) malloc(sizeof(struct aluno)); clarice->ra = ; Acesso a membro de struct via ponteiro. Método 2: acesse o membro usando o operador -> (dereferenciação implícita) 14

15 struct aluno { int ra; char nome[61]; int faltas; float notap1; float notap2; struct aluno *clarice = (struct aluno *) malloc(sizeof(struct aluno)); clarice->ra = ; strncpy(clarice->nome,"clarice Lispector",60); clarice->faltas = 3; clarice->notap1 = 6.5; clarice->notap2 = 7.5; free(clarice); 15

16 OUTRO EXEMPLO: frações inteiras Vamos definir uma struct para representar frações inteiras. struct fracao { int num; // numerador unsigned int den; // denominador Vamos definir funções para manipular e imprimir frações. 16

17 struct fracao { int num; // numerador unsigned int den; // denominador #include <stdio.h> void fracao_imprime(struct fracao a) { printf("%d/%u", a.num, a.den); } 17

18 struct fracao { int num; // numerador unsigned int den; // denominador #include <stdio.h> void fracao_imprime(struct fracao a) { printf("%d/%u", a.num, a.den); } E se o numerador for zero? Melhor imprimir na forma mais resumida. 18

19 struct fracao { int num; // numerador unsigned int den; // denominador #include <stdio.h> void fracao_imprime(struct fracao a) { if (a.num == 0) { printf("0"); } else { printf("%d/%u", a.num, a.den); } } 19

20 struct fracao { int num; // numerador unsigned int den; // denominador #include <stdio.h> void fracao_imprime(struct fracao a) { if (a.num == 0) { printf("0"); } else { printf("%d/%u", a.num, a.den); } } E se o denominador for 1? 20

21 struct fracao { int num; // numerador unsigned int den; // denominador #include <stdio.h> void fracao_imprime(struct fracao a) { if (a.num == 0) { printf("0"); } else if (a.den == 1) { printf("%d", a.num); } else { printf("%d/%u", a.num, a.den); } } 21

22 [cling]$.l fracao.c [cling]$ struct fracao a; 22

23 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; 23

24 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ 24

25 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 25

26 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); Só para pular linha. 26

27 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ 27

28 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; 28

29 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ 29

30 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ fracao_imprime(a); puts(""); 30

31 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ fracao_imprime(a); puts(""); 0 [cling]$ 31

32 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ fracao_imprime(a); puts(""); 0 [cling]$ a.num = 10; a.den = 1; 32

33 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ fracao_imprime(a); puts(""); 0 [cling]$ a.num = 10; a.den = 1; [cling]$ 33

34 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ fracao_imprime(a); puts(""); 0 [cling]$ a.num = 10; a.den = 1; [cling]$ fracao_imprime(a); puts(""); 34

35 [cling]$.l fracao.c [cling]$ struct fracao a; [cling]$ a.num = 10; a.den = 3; [cling]$ fracao_imprime(a); puts(""); 10/3 [cling]$ a.num = 0; [cling]$ fracao_imprime(a); puts(""); 0 [cling]$ a.num = 10; a.den = 1; [cling]$ fracao_imprime(a); puts(""); 10 [cling]$ 35

36 struct fracao { int num; // numerador unsigned int den; // denominador struct fracao fracao_multiplica( struct fracao a, struct fracao b) { struct fracao result; } return result; 36

37 struct fracao { int num; // numerador unsigned int den; // denominador struct fracao fracao_multiplica( struct fracao a, struct fracao b) { struct fracao result; result.num = a.num * b.num; result.den = a.den * b.den; return result; } 37

38 struct fracao { int num; // numerador unsigned int den; // denominador struct fracao fracao_soma( struct fracao a, struct fracao b) { struct fracao result; } return result; 38

39 struct fracao { int num; // numerador unsigned int den; // denominador struct fracao fracao_soma( struct fracao a, struct fracao b) { struct fracao result; result.num = a.num*b.den + a.den*b.num; result.den = a.den*b.den; return result; } 39

40 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros topo 40

41 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) topo 41

42 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) topo 42

43 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) 33 topo 43

44 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 33 topo 44

45 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) topo 33 45

46 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 42 topo 33 46

47 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 99 topo push(99)

48 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros 18 topo push(33) push(42) 99 push(99) push(18)

49 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros 18 topo push(33) push(42) 99 push(99) push(18) 42 push(51) 33 49

50 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros 18 topo push(33) push(42) 99 push(99) push(18) 42 push(51) 33 50

51 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros 18 topo push(33) push(42) 99 push(99) push(18) 42 push(51) pop() 33 51

52 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros 18 topo push(33) push(42) 99 push(99) push(18) 42 push(51) pop() 33 52

53 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros 18 topo push(33) push(42) 99 push(99) push(18) 42 push(51) pop()

54 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 99 topo push(99) push(18) 42 push(51) pop()

55 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 99 topo push(99) push(18) 42 push(51) pop() pop() 55

56 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 99 topo push(99) push(18) 42 push(51) pop() pop() 56

57 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) 99 topo push(99) push(18) 42 push(51) pop() pop() 99 57

58 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) push(99) push(18) 42 topo push(51) pop() pop() 99 58

59 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) push(99) push(18) 42 topo push(51) pop() pop() 99 pop() 59

60 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) push(99) push(18) push(51) pop() topo pop() 99 pop() 42 60

61 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) push(99) push(18) push(51) pop() topo pop() 99 pop() 42 pop() 61

62 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) push(42) push(99) push(18) push(51) pop() 18 pop() 99 pop() 42 topo pop() 33 62

63 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) pop() push(42) push(99) push(18) push(51) pop() 18 pop() 99 pop() 42 topo pop() 33 63

64 PILHA Estrutura para armazenamento de dados onde as inserções (push) e remoções (pop) acontecem apenas em uma das pontas. Ex.: uma pilha de inteiros push(33) pop() push(42) push(99) push(18) push(51) pop() 18 pop() 99 pop() 42 topo pop() 33 64

65 struct pilha_int { int *numeros; int capacidade; int topo; 65

66 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); p->capacidade = 0; } } 66

67 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); p->capacidade = 0; } } 67

68 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); p->capacidade = 0; } } 68

69 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); E se malloc não p->capacidade = 0; conseguir alocar } memória? } 69

70 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); p->capacidade = 0; } } 70

71 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); p->capacidade = 0; } } 71

72 struct pilha_int { int *numeros; int capacidade; int topo; #include <stdlib.h> #include <stdio.h> void pilha_int_constroi(struct pilha_int *p, int capacidade) { p->capacidade = capacidade; p->topo = -1; p->numeros = (int *) malloc(capacidade*sizeof(int)); if (p->numeros == NULL) { puts("erro de alocação!"); p->capacidade = 0; } } 72

73 struct pilha_int { int *numeros; int capacidade; int topo; // Retorna verdadeiro se a pilha está vazia int pilha_int_vazia(struct pilha_int *p) { return p->topo < 0; } // Retorna verdadeiro se a pilha está cheia int pilha_int_cheia(struct pilha_int *p) { return p->topo >= p->capacidade - 1; } 73

74 struct pilha_int { int *numeros; int capacidade; int topo; // Retorna verdadeiro se a pilha está vazia int pilha_int_vazia(struct pilha_int *p) { return p->topo < 0; } // Retorna verdadeiro se a pilha está cheia int pilha_int_cheia(struct pilha_int *p) { return p->topo >= p->capacidade - 1; } 74

75 struct pilha_int { int *numeros; int capacidade; int topo; // Retorna verdadeiro se a pilha está vazia int pilha_int_vazia(struct pilha_int *p) { return p->topo < 0; } // Retorna verdadeiro se a pilha está cheia int pilha_int_cheia(struct pilha_int *p) { return p->topo >= p->capacidade - 1; } 75

76 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_push(struct pilha_int *p, int n) { if (pilha_int_cheia(p)) { puts("pilha cheia!"); } else { p->numeros[++p->topo] = n; } } 76

77 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_push(struct pilha_int *p, int n) { } ++p->topo; p->numeros[p->topo] = n; 77

78 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_push(struct pilha_int *p, int n) { } p->numeros[++p->topo] = n; 78

79 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_push(struct pilha_int *p, int n) { } E se a pilha estiver cheia? p->numeros[++p->topo] = n; 79

80 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_push(struct pilha_int *p, int n) { if (pilha_int_cheia(p)) { puts("pilha cheia!"); } else { p->numeros[++p->topo] = n; } } 80

81 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { if (pilha_int_vazia(p)) { puts("pilha vazia!"); return 0; } else { return p->numeros[p->topo--]; } } 81

82 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { } int valor = p->numeros[p->topo]; p->topo--; return valor; 82

83 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { int valor = p->numeros[p->topo--]; } return valor; 83

84 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { int valor = ; } return p->numeros[p->topo--]; 84

85 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { } int valor = ; E se a pilha estiver vazia? return p->numeros[p->topo--]; 85

86 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { if (pilha_int_vazia(p)) { puts("pilha vazia!"); return 0; } else { return p->numeros[p->topo--]; } } 86

87 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { if (pilha_int_vazia(p)) { puts("pilha vazia!"); return Somos obrigados 0; a retornar um int! } else { return p->numeros[p->topo--]; } } 87

88 struct pilha_int { int *numeros; int capacidade; int topo; int pilha_int_pop(struct pilha_int *p) { if (pilha_int_vazia(p)) { puts("pilha vazia!"); return 0; } else { return p->numeros[p->topo--]; } } 88

89 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_destroi(struct pilha_int *p) { if (p->numeros!= NULL) { free(p->numeros); p->numeros = NULL; p->capacidade = 0; p->topo = -1; } } 89

90 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_destroi(struct pilha_int *p) { if (p->numeros!= NULL) { free(p->numeros); p->numeros = NULL; p->capacidade = 0; p->topo = -1; } } 90

91 struct pilha_int { int *numeros; int capacidade; int topo; void pilha_int_destroi(struct pilha_int *p) { if (p->numeros!= NULL) { free(p->numeros); p->numeros = NULL; p->capacidade = 0; p->topo = -1; } } 91

92 STRUCTS: BOAS PRÁTICAS Sempre que definir structs, adquira o hábito de definir as funções que as manipulem. Sempre que possível, manipule as structs usando suas funções. Evite mexer manualmente nos campos fora das funções (facilita futuros refactorings). Nomenclatura sugerida: ao definir uma struct XYZ, nomeie as funções relacionadas como XYZ_nome_da_funcao para evitar conflito de nomes. 92

93 struct pilha_int { int *numeros;... void pilha_int_constroi(struct pilha_int *, int); int pilha_int_vazia(struct pilha_int *); int pilha_int_cheia(struct pilha_int *); void pilha_int_push(struct pilha_int *, int); int pilha_int_pop(struct pilha_int *); void pilha_int_destroi(struct pilha_int *); 93

94 struct pilha_int { int *numeros;... void pilha_int_constroi(struct pilha_int *, int); int pilha_int_vazia(struct pilha_int *); int pilha_int_cheia(struct pilha_int *); void pilha_int_push(struct pilha_int *, int); int pilha_int_pop(struct pilha_int *); void pilha_int_destroi(struct pilha_int *); struct pilha_dbl { double *numeros;... void pilha_dbl_constroi(struct pilha_dbl *, int); int pilha_dbl_vazia(struct pilha_dbl *); int pilha_dbl_cheia(struct pilha_dbl *); void pilha_dbl_push(struct pilha_dbl *, double); double pilha_dbl_pop(struct pilha_dbl *); void pilha_dbl_destroi(struct pilha_dbl *); 94

95 STRUCTS: BOAS PRÁTICAS Mantenha a consistência nas definições das funções relacionadas a uma struct. Sugere-se que a struct (ou o ponteiro para ela) seja sempre passada no primeiro parâmetro. void pilha_int_constroi(struct pilha_int *, int); int pilha_int_vazia(struct pilha_int *); int pilha_int_cheia(struct pilha_int *); void pilha_int_push(struct pilha_int *, int); int pilha_int_pop(struct pilha_int *); void pilha_int_destroi(struct pilha_int *); 95

96 PARA CASA 0. Altere fracao.c e: implemente a função transforme_em_irredutivel que transforma a fração passada em irredutível (use o mdc entre numerador e denominador) altere as funções soma e multiplica para que elas sempre produzam frações irredutíveis implemente a função fracao_compara conforme instruções em fracao.c 96

97 PARA CASA 1. Altere a função pilha_int_insere para transformar a pilha de inteiros em uma pilha dinâmica: se não houver espaço para inserir um número na pilha, deve ser alocado um novo espaço para a pilha com o dobro do tamanho do anterior, os elementos antigos devem ser copiados e o novo elemento é inserido. Em caso de nova alocação, lembre de liberar (free) a alocação antiga. 97

98 PARA CASA 2. Crie as funções int pilha_int_tamanho(struct pilha_int *p) que retorna a quantidade de elementos inseridos na pilha de inteiros e int pilha_int_elemento(struct pilha_int *p, int i) que retorna o i-ésimo elemento da pilha, para i entre 0 e o índice do último elemento na pilha. Sua função deve verificar se o índice é válido. Caso não seja, deve imprimir uma mensagem de erro e retornar 0. 98

99 PARA CASA 3. Crie uma pilha de alunos, onde cada elemento da pilha é uma struct aluno. As operações devem ser pilha_aluno_constroi, pilha_aluno_destroi, pilha_aluno_vazia, pilha_aluno_cheia, pilha_aluno_push, pilha_aluno_pop, pilha_aluno_tamanho e pilha_aluno_elemento. Para testar, pegue o arquivo alunos.c da aula passada e insira os dados ali contidos na pilha. 99

100 PARA CASA 4. Crie funções pilha_aluno_ordena_media e pilha_aluno_ordena_nome, que ordenam a pilha de alunos pela média (0,4 P1 + 0,6 P2) e pelo nome. Use bubble sort. Dica: a função strcmp de string.h permite comparar duas strings s1 e s2. < 0 se s1 vem antes de s2 no dicionário strcmp(s1, s2) é ==0 se s1 é igual a s2 > 0 se s1 vem após s2 no dicionário 100

101 PARA CASA 5. Crie uma struct vetor_dbl para representar um vetor cujas coordenadas são doubles, junto com seu tamanho. Crie as funções para: criar um vetor, soma, produto interno, módulo (tamanho de acordo com a distância euclidiana) e ângulo entre dois vetores. 6. Crie uma struct matriz_dbl para representar matrizes bidimensionais, junto com suas coordenadas. Crie as funções: criar matriz, soma, produto matriz x matriz e matriz x vetor. 101

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Programação Estruturada Prof. Rodrigo Hausen  Organização e Gerenciamento de Memória Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Ponteiros e Passagem de Parâmetros

Programação Estruturada Prof. Rodrigo Hausen   Ponteiros e Passagem de Parâmetros Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Ponteiros e Passagem de Parâmetros 1 AULA PASSADA - ponteiros Uma declaração tal como: tipo *nome; Declara um ponteiro: referência

Leia mais

Aula 25: Alocação Dinâmica

Aula 25: Alocação Dinâmica Aula 25: Alocação Dinâmica Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aulas anteriores Estruturas de memórias heterogêneas

Leia mais

INF 1620 P2-01/11/03 Questão 1 Nome:

INF 1620 P2-01/11/03 Questão 1 Nome: INF 1620 P2-01/11/03 Questão 1 Considere a implementação de uma lista encadeada para armazenar as notas dos alunos de uma turma dada pelo tipo abaixo: struct lista { char nome[81]; int mat; float p1, p2,

Leia mais

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Estruturas de Dados. Profa. Juliana Pinheiro Campos Estruturas de Dados Profa. Juliana Pinheiro Campos Vetores Forma mais simples de estruturar um conjunto de dados. Exemplo: int p[10]; // vetor de inteiros com 10 elementos Reserva de um espaço de memória

Leia mais

Atividade de laboratório listas encadeadas simples

Atividade de laboratório listas encadeadas simples Atividade de laboratório listas encadeadas simples 1. Estrutura básica Uma lista encadeada simples é uma estrutura de dados composta de uma seqüência de estruturas elementares chamadas nós. Cada nó contém

Leia mais

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os

Leia mais

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos

Leia mais

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011 Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto

Leia mais

Algoritmos e Estruturas de dados

Algoritmos e Estruturas de dados Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores

Leia mais

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto programa estiver executando

Leia mais

Módulo 7 Cadeias de Caracteres

Módulo 7 Cadeias de Caracteres Estruturas de Dados Módulo 7 Cadeias de Caracteres 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora

Leia mais

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Alocação de Memória Linguagem de Programação Estruturada 1 Alocação dinâmica e ponteiros Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Sumario Introdução Alocação Estática

Leia mais

Ponteiros e Alocação de Memória

Ponteiros e Alocação de Memória Algoritmos e Estrutura de Dados I Ponteiros e Alocação de Memória Prof. Paulo Henrique Pisani fevereiro/2019 Memória Podemos entender a memória como um grande vetor de bytes devidamente endereçados: 0x1051

Leia mais

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo Estruturas K&R: Capitulo 6 Estruturas Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo 2 1 Motivação Definir uma representação agregada na linguagem C para manipular

Leia mais

Ponteiros. Baseado nos slides do Prof. Mauro.

Ponteiros. Baseado nos slides do Prof. Mauro. Baseado nos slides do Prof. Mauro. A memória do computador é uma sequência de bytes, na qual endereçamos cada um sequencialmente. Como vimos, uma variável é uma região da memória que reservamos para armazenar

Leia mais

Alocação Dinâmica em C

Alocação Dinâmica em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara

Leia mais

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes? Introdução à Ciência da Computação Ponteiros em C Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros

Leia mais

11a. Aula Ponteiros e Vetores

11a. Aula Ponteiros e Vetores 11a. Aula Ponteiros e Vetores 2013.2 2 É um tipo de variável com uma ressalva...... armazena apenasendereçode memória (ou null) Se eu tiver o endereço da casa de Francisca, eu poderei visitá-la e lhe fazer

Leia mais

Linguagem C. Ponteiros. Alex Vidigal Bastos.

Linguagem C. Ponteiros. Alex Vidigal Bastos. Linguagem C Ponteiros Alex Vidigal Bastos alexvbh@gmail.com Ponteiros Ponteiros são variáveis que contém endereços. Estas variáveis apontam para algum determinado endereço da memória. Em geral, o ponteiro

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Vetores (Arrays)

Programação Estruturada Prof. Rodrigo Hausen   Vetores (Arrays) Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Vetores (Arrays) 1 AULA PASSADA - CONDICIONAIS Exercício 1: Crie a função vlrabs que recebe um double e retorna o seu valor absoluto.

Leia mais

Curso de Programação C em Ambientes Linux Aula 05

Curso de Programação C em Ambientes Linux Aula 05 Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo

Leia mais

INF 1620 P2-23/10/04 Questão 1 Nome:

INF 1620 P2-23/10/04 Questão 1 Nome: INF 1620 P2-23/10/04 Questão 1 Considere um tipo abstrato de dados para representar uma disciplina da PUC-Rio, com as seguintes informações: Nome da disciplina: com até 50 caracteres Código da disciplina:

Leia mais

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo Introdução à Ciência da Computação I Alocação Dinâmica Prof. Claudio Fabiano Motta Toledo Sumário Funções para alocação de memória Ponteiros para ponteiros 8/12/16 2 Funções para alocação de memória malloc(),

Leia mais

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos

Leia mais

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node {

Listas (cont.) K&R: Capitulo 6. Lista Simplesmente Ligada IAED, 2012/2013. Conjunto de nós. Cada nó contém. head NULL. typedef struct node { Listas (cont.) K&R: Capitulo 6 Lista Simplesmente Ligada Conjunto de nós head NULL Cada nó contém Informação útil Ponteiro para o próimo nó typedef struct node Item item; struct node *net; *link; Item

Leia mais

Métodos Computacionais. Tipos Estruturados

Métodos Computacionais. Tipos Estruturados Métodos Computacionais Tipos Estruturados Tipos Estruturados C oferece tipos primitivos que servem para representar valores simples Reais (float, double), inteiros (int), caracter (char) C oferece também

Leia mais

Aula 27: Estruturas heterogêneas e alocação dinâmica

Aula 27: Estruturas heterogêneas e alocação dinâmica Aula 27: Estruturas heterogêneas e alocação dinâmica Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2018/2 Departamento de Computação UFOP Aulas anteriores Memória

Leia mais

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto Ponteiros e alocação dinâmica de memória Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto Agenda Ponteiros Ponteiros e vetores Passagem por cópia e por referência Alocação

Leia mais

Aula 24 Ponteiros, vetores e structs

Aula 24 Ponteiros, vetores e structs Programação Aula 24 Ponteiros, vetores e structs Prof. Laura Silva de Assis Engenharia de Computação 2 o Período CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca UnED Petrópolis

Leia mais

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010 Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010 Aluno: Instruções: 1) Escreva seu nome completo, matrícula e turma em todas as folhas desta prova; 2) A prova deve ser completamente

Leia mais

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes

Leia mais

Introdução a Programação. Tipos Estruturados de Dados

Introdução a Programação. Tipos Estruturados de Dados Introdução a Programação Tipos Estruturados de Dados Tópicos da Aula Hoje aprenderemos a trabalhar com tipos de dados mais complexos Tipos Primitivos x Tipos Estruturados Conceito de Tipos Estruturados

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação ET42G Aula 21 Prof. Daniel Cavalcanti Jeronymo Conversão de tipos. Alocação dinâmica de memória. Recursão. Criação de bibliotecas, arquivos de cabeçalhos e variáveis globais.

Leia mais

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos

Leia mais

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013 Ponteiros e Tabelas K&R: Capitulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013 Ponteiros e Tabelas K&R: Capitulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos Melhores momentos AULA Endereços: a memória é um vetor e o índice desse vetor onde está uma variável é o endereço da variável. Com o operador & obtemos o endereço de uma variável. Exemplos: &i é o endereço

Leia mais

Caracteres e Cadeias de Caracteres

Caracteres e Cadeias de Caracteres Caracteres e Cadeias de Caracteres INF1005 Programação I Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC 1 caracteres e cadeias de caracteres tópicos caracteres cadeias de caracteres (strings) vetor

Leia mais

Alocação Dinâmica. Introdução à Computação

Alocação Dinâmica. Introdução à Computação Alocação Dinâmica Introdução à Computação Alocação de memória Uso da memória: uso de variáveis globais (e está>cas): O espaço reservado para uma variável global existe enquanto o programa es>ver sendo

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

INF 1620 P1-04/10/03 Questão 1 Nome:

INF 1620 P1-04/10/03 Questão 1 Nome: INF 1620 P1-04/10/03 Questão 1 a) Implemente uma função para calcular as raízes de uma equação do segundo grau do tipo ax 2 +bx+c=0. O protótipo dessa função deve ser: void raizes (float a, float b, float

Leia mais

Reinaldo Gomes Alocação Dinâmica

Reinaldo Gomes Alocação Dinâmica Algoritmos e Lógica de Programação Linguagem C Alocação Dinâmica i de Memória Reinaldo Gomes reinaldo@cefet-al.br Alocação Dinâmica Quando declaramos uma variável ou um arranjo, o compilador automaticamente

Leia mais

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0 P4 Programação II 2012.2 Departamento de Informática/PUC- Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente

Leia mais

INF 1620 P4 11/12/06 Questão 1 Nome:

INF 1620 P4 11/12/06 Questão 1 Nome: INF 1620 P4 11/12/06 Questão 1 Considere que o cálculo da multa para o pagamento de um determinado imposto varia de acordo com a tabela a seguir: Valor do Imposto Original Multa por mês de atraso até R$

Leia mais

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,

Leia mais

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Programação de Computadores II. Cap. 7 Cadeias de Caracteres Programação de Computadores II Cap. 7 Cadeias de Caracteres Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais

Leia mais

a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: ( 1)

a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: ( 1) INF 620 P - 7/04/04 Questão a) Implemente uma função que retorne uma aproximação do valor de π, de acordo com a F órmula de Leibniz: Ou seja: π 4 * + 3 π 5 7 + 9 i ( ) 4 * n i= 0 2 * i + + K Esta função

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

INF 1620 P4-09/07/03 Questão 1 Nome:

INF 1620 P4-09/07/03 Questão 1 Nome: INF 1620 P4-09/07/03 Questão 1 Um ponto geométrico no espaço 2D é representado pelas coordenadas reais x e y. Considere uma aplicação que precisa manipular pontos, através da implementação de duas funções.

Leia mais

Estrutura de Dados I Bacharelado em Sistemas de Informação FACOM UFU Lista de Exercícios

Estrutura de Dados I Bacharelado em Sistemas de Informação FACOM UFU Lista de Exercícios Estrutura de Dados I Bacharelado em Sistemas de Informação FACOM UFU Lista de Exercícios Prof. Flávio de Oliveira Silva, M.Sc. 1. Crie uma função chamada somavetor. Esta função deve receber dois vetores

Leia mais

Ponteiros e Tabelas. K&R: Capítulo 5

Ponteiros e Tabelas. K&R: Capítulo 5 Ponteiros e Tabelas K&R: Capítulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 04 Alocação Dinâmica Edirlei Soares de Lima Vetores - Declaração e Inicialização Declaração de um vetor: int meu_vetor[10]; Reserva um espaço de memória

Leia mais

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010 Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 26/11/2010 Aluno: Matrícula: Turma: Instruções: 1) Escreva seu nome completo, matrícula e turma em todas as folhas desta prova; 2) A prova

Leia mais

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos

Leia mais

Princípios de Desenvolvimento de Algoritmos MAC122

Princípios de Desenvolvimento de Algoritmos MAC122 Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória Motivação: Nossos programas pré-fixavam o número de variáveis a serem utilizadas. No caso

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

INF 1620 P3-29/06/04 Questão 1 Nome:

INF 1620 P3-29/06/04 Questão 1 Nome: INF 1620 P3-29/06/04 Questão 1 Considere um arquivo texto que descreve um conjunto de retângulos e círculos. Cada linha do arquivo contém a descrição de uma figura. O primeiro caractere da linha indica

Leia mais

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out). Fila Algumas aplicações impõem regras de acesso às informações armazenados em estruturas de dados, restringindo como os dados são inseridos e removidos da estrutura. A fila, também conhecida como QUEUE,

Leia mais

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68 INE5231 Computação Científica I Prof. A. G. Silva 25 de abril de 2017 Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de 2017 1 / 68 Conteúdo programático O computador - [3 horas-aula] Representação

Leia mais

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória Ponteiros - Parte I Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória Ponteiros Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente

Leia mais

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes Computação 2 Aula 2 Vetores e Matrizes Profª. Fabiany fabianyl@utfpr.edu.br Vetores Vetor também é conhecido como variável composta homogênea unidimensional; Um vetor computacional é um variável composta

Leia mais

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento

Leia mais

Introdução a Programação. Listas Encadeadas

Introdução a Programação. Listas Encadeadas Introdução a Programação Listas Encadeadas Tópicos da Aula Hoje aprenderemos que existem, além de vetores, estruturas de dados dinâmicas que podem armazenar coleções de dados Estruturas Dinâmicas e Vetores

Leia mais

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista Ponteiros SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa

Leia mais

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Computadores Digitais 2. Prof. Rodrigo de Souza Couto Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Tópicos Listas Encadeadas Introdução às listas encadeadas Manipulação de elementos Implementações recursivas Listas

Leia mais

Programação de Computadores II. Cap. 5 Vetores

Programação de Computadores II. Cap. 5 Vetores Programação de Computadores II Cap. 5 Vetores Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:

Leia mais

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas Introdução a Programação Ponteiros para Estruturas, Outros Tipos de Estruturas Tópicos da Aula Hoje aprenderemos a trabalhar com ponteiros para estruturas Ponteiros para estruturas Alocação dinâmica de

Leia mais

Alocação Dinâmica de Memória - Exercício

Alocação Dinâmica de Memória - Exercício Alocação Dinâmica de Memória - Exercício Construa um programa que leia da entrada padrão o número de linhas e de colunas de uma matriz de floats, aloque espaço dinamicamente para esta e a inicialize, com

Leia mais

Estrutura de dados 1. Ponteiros

Estrutura de dados 1. Ponteiros Estrutura de dados 1 Ponteiros Ponteiros Um ponteiro é um endereço de memória O valor de um ponteiro indica onde uma variável está armazenada Um ponteiro proporciona um modo de acesso a uma variável sem

Leia mais

Prova 2 - Computação

Prova 2 - Computação Prova 2 - Computação A prova consiste na elaboração de um programa utilizando a linguagem C. Seu programa deve estar correto (sintática e semanticamente), além de organizado (nomes de variáveis, identação

Leia mais

ponteiros INF Programação I Prof. Roberto Azevedo

ponteiros INF Programação I Prof. Roberto Azevedo ponteiros INF1005 -- Programação I -- 2016.1 Prof. Roberto Azevedo razevedo@inf.puc-rio.br ponteiros tópicos o que são ponteiros operadores usados com ponteiros passagem de ponteiros para funções referência

Leia mais

Módulo 5 Vetores e Alocação Dinâmica

Módulo 5 Vetores e Alocação Dinâmica Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora

Leia mais

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos

Leia mais

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

A sintaxe para se declarar uma variável do tipo ponteiro é dada por: Pense duas vezes e faça uma vez. Provérbio Chinês. PONTEIROS Um ponteiro nada mais é que uma variável capaz de armazenar um número hexadecimal que corresponde a um endereço de memória de outra variável.

Leia mais

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de 28/03/2010 Estruturas de Dados Aula 6: Cadeias de Caracteres 28/03/2010 Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis

Leia mais

Estruturas de Dados Aula 6: Cadeias de Caracteres

Estruturas de Dados Aula 6: Cadeias de Caracteres Estruturas de Dados Aula 6: Cadeias de Caracteres Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis Códigos

Leia mais

Introdução à Computação

Introdução à Computação Introdução à Computação Linguagem C Professor: André de Carvalho Aula de hoje Introdução Tipos compostos Tipo enumeração Conclusão Tipos compostos A Linguagem C permite criar tipos de dados definíveis

Leia mais

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Computadores Digitais 2. Prof. Rodrigo de Souza Couto Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Tipos Estruturados Tipo estrutura Definição de novos tipos Aninhamento de Estruturas Vetores de estruturas

Leia mais

Introdução a Programação de Jogos

Introdução a Programação de Jogos Introdução a Programação de Jogos Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição

Leia mais

INF 1620 P3-06/12/03 Questão 1 Nome:

INF 1620 P3-06/12/03 Questão 1 Nome: INF 1620 P3-06/12/03 Questão 1 Considere um cadastro com as médias por disciplina dos alunos de uma universidade. Esse cadastro é originalmente armazenado em um arquivo texto que contém, para cada disciplina,

Leia mais

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA 787878787878787878787878787878787878787878787878787878 13. ALOCAÇÃO DINÂMICA DE MEMÓRIA Sempre é necessário declarar o número de elementos do array. Mas e se ele for desconhecido? E se ele variar? Pode

Leia mais

Módulo 8 Tipos Estruturados

Módulo 8 Tipos Estruturados Estruturas de Dados Módulo 8 Tipos Estruturados 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus

Leia mais

P2 Programação II Departamento de Informática/PUC-Rio

P2 Programação II Departamento de Informática/PUC-Rio P2 Programação II 2012.2 Departamento de Informática/PUC-Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente

Leia mais

Modulo 12: alocação dinâmica de memória

Modulo 12: alocação dinâmica de memória PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick aconci@ic.uff.br, erickr@id.uff.br Roteiro porque e como utilizar a alocação dinâmica funções: malloc (

Leia mais

Aula 17: Ponteiros e Alocação Dinâmica em C

Aula 17: Ponteiros e Alocação Dinâmica em C Aula 17: Ponteiros e Alocação Dinâmica em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Ponteiros e Alocação Dinâmica Programação de Computadores

Leia mais

INF 1620 P3-25/11/05 Questão 1 Nome:

INF 1620 P3-25/11/05 Questão 1 Nome: INF 1620 P3-25/11/05 Questão 1 Dizemos que uma matriz quadrada é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos de sua diagonal principal

Leia mais

Computação Eletrônica. Aula 08 Estruturas de Dados. Prof: Luciano Barbosa. CIn.ufpe.br

Computação Eletrônica. Aula 08 Estruturas de Dados. Prof: Luciano Barbosa. CIn.ufpe.br Computação Eletrônica Aula 08 Estruturas de Dados Prof: Luciano Barbosa Tipos de Dados Primitivos vs Estruturados Tipos primitivos: reais (float, double), inteiros (int), caractere (char); Tipos estruturados:

Leia mais

Estruturas Dinâmicas - Ponteiros

Estruturas Dinâmicas - Ponteiros SSC0800 - ICC1 Teórica Introdução à Ciência da Computação I Estruturas Dinâmicas - Ponteiros Prof. Claudio Fabiano Motta Toledo: claudio@icmc.usp.br Sumário Ponteiros Ponteiros e Vetores Funções para alocação

Leia mais

Introdução a Programação. Tipos Abstratos de Dados Implementando Pilha e Fila

Introdução a Programação. Tipos Abstratos de Dados Implementando Pilha e Fila Introdução a Programação Tipos Abstratos de Dados Implementando Pilha e Fila Abstração Abstração é o processo ou resultado de generalização por redução do conteúdo da informação de um conceito ou fenômeno

Leia mais

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira # Estrutura de Dados # Aula - Revisão de C/C++ na Prática Prof. Leinylson Fontinele Pereira Na aula anterior... Ponteiros Funções Introdução 3 O que vamos aprender? Preparação do ambiente de testes Conceitos

Leia mais

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 4 Tipos Estruturados 10/23/09 (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Tipo estrutura Definição de novos tipos Aninhamento de estruturas Vetores de estruturas Vetores

Leia mais