Baixe o app para aproveitar ainda mais
Prévia do material em texto
Gabarito P3 – 2014/1 Q1) 1.A) Módulo Interface do TAD: ___ Fracao.h ______________________ typedef struct fracao * Fracao; Fracao fraCria(int n, int d); // cria nova fracao // void fraLibera(Fracao f); // libera fracao // int fraAcessaNum(Fracao f); // acessa numerador // int fraAcessaDen(Fracao f); // acessa denominador // int fraEhSinalNeg(Fracao f); // verifica sinal // 1.B) Módulo de implementação do TAD: _______ Fracao.c __________________ // #include <stdlib.h> #include <math.h> #include "Fracao.h" struct fracao { int numerador; int denominador; int sinal; }; Fracao fraCria(int n, int d) { Fracao f; f = (Fracao)malloc(sizeof(struct fracao)); if (f==NULL) return NULL; if (n*d < 0) f->sinal = 1; else f->sinal = 0; f->numerador = abs(n); f->denominador = abs(d); return f; } void fraLibera(Fracao f) { free(f); } int fraAcessaNum(Fracao f) { return f->numerador; } int fraAcessaDen(Fracao f) { return f->denominador; } int fraEhSinalNeg(Fracao f) { return f->sinal!=0; } 1.C) Módulo usuário do TAD: meuPrograma.c #include <stdio.h> #include "Fracao.h" int fraEhMaior(Fracao p, Fracao q) { float signp = fraEhSinalNeg(p)? -1: 1; float signq = fraEhSinalNeg(q)? -1: 1; return (signp*fraAcessaNum(p)/fraAcessaDen(p)) > (signq*fraAcessaNum(q)/fraAcessaDen(q)); } int main(void) { Fracao f1 = fraCria(6,9); Fracao f2 = fraCria(2,4); Fracao f3 = fraCria(6,-9); printf("%d\n",fraEhMaior(f1,f2)); printf("%d\n",fraEhMaior(f3,f2)); // retorna 0, fraLibera(f1); fraLibera(f2); fraLibera(f3); return 0; } Q2) 2.A) struct elemento { char * info; struct elemento * prox; }; typedef struct elemento Elemento; struct pilha { Elemento * prim; }; typedef struct pilha Pilha; void pilha_push(Pilha * p, char * a) { Elemento * novo = (Elemento *)malloc(sizeof(Elemento)); novo->info = (char *)malloc(1+sizeof(a)); strcpy(novo->info,a); novo->prox = p->prim; p->prim = novo; } 2.B) #define N 100 struct pilha { int n; char * v[N]; }; typedef struct pilha Pilha; void pilha_push(Pilha * p, char * a) { if (p->n == N) { printf("Capacidade da pilha estourou.\n"); exit(1); } p->v[p->n] = (char *)malloc(1+sizeof(a)); strcpy(p->v[p->n],a); p->n++; } Q3) int temCaminho(NoArv * a, int soma) { if (a==NULL) return (soma==0); else return temCaminho(a->esq,soma-a->info) || temCaminho(a->dir,soma-a->info); }
Compartilhar