Buscar

2014-1-P3-gaba

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

Outros materiais