Você está na página 1de 4

UNIVERSIDADE ZAMBEZE

FACULDADE DE CIÊNCIAS E TECNLOLOGIAS


Disciplina: ESDA Data:19/07/2022 (Duração: 120 minutos)
Exame Normal Ano: 3˚

Leia atentamente as questões e responda objectivamente (apenas o que lhe é pedido). Neste teste não é permitido
consultar os textos de apoio, colega, celular ou a qualquer outra fonte.

N°Estudante: ____________________________________ - Curso: ___________________________________________________________

Apelido: _______________________________________ Nome: ____________________________________________________________

Cotação Perguntas

Dada a estrutura pessoa, com atributos, id, nome completo e idade, considere as
funções abaixo e responda as questões.
Typedef struct pessoa{ Typedef struct no{
int Id, Pessoa pessoa;
char nome[100], Struct * no próximo;
int idade }No
}Pessoa

1. Escreva as funções push , pop e duplicar_pilha, para edição de


2X3v
uma pilha; A função push adiciona um elemento a pilha, pop remove um
elemento, enquanto que duplicar_pilha faz uma copia da pilha.
4v //funcao push, usada para adicionar um elemento no topo da pilha
void push(No **pilha, No * dado){
5v No * p=*pilha;
5v dado->proximo = *pilha;
*pilha=dado;

}
//pop, funcao usada para remover o elemento top da pilha
No * pop (No **pilha){
No * p=*pilha;
if(*pilha==NULL) return NULL;
*pilha=(*pilha)->proximo;
p->proximo=NULL;

return p;
}
//funcao usada para duplicar uma pilha
No * duplicarPilha(No **pilha){
No * nova=NULL;

Esda Exame Normal _2022 Página: 1 de 4


No * p= *pilha,*aux=NULL;
if(p==NULL) return NULL;
No * val;
while(p){
No * n =(No*)malloc(sizeof(No));
val = pop(&p);
n->p=val->p;
push(&aux,val);
push(&nova,n);

}
*pilha=aux;
return nova;
}

2. Escreva a uma função para remover segunda pessoa mais velha da pilha
//remover a segunda pessoa mais velha pilha
//1- identificar a pessoa mais velha
//2- identificar a segunda pessoa mais velh
//3 elimnar a segunda pessoa mais velha
No *segundoMaisVelho(No **pilha){
No * pt = duplicarPilha(pilha);
No * maisnovo=maisNovo(pilha);
No *maisvelho=maisVelho(pilha);
No * val,*segundomaisVelho;
Bool primeira=true;
while(pt){
val=pop(&pt);
if(primeira==true){
segundomaisVelho=maisnovo;
primeira=false;
printf("*");
}
else{
printf(".");
{
if((val->p.idade>segundomaisVelho->p.idade)&&(val-
>p.idade!=maisvelho->p.idade))
segundomaisVelho=val;
}
}
}
return segundomaisVelho;
}
No *maisNovo(No **pilha){
No * pt = duplicarPilha(pilha);
No *maisVelhoo=pt;
No * val;

while(pt){

Esda Exame Normal _2022 Página: 2 de 4


val=pop(&pt);
if(val->p.idade<maisVelhoo->p.idade)
maisVelhoo=val;
}
return maisVelhoo;
}
No *maisVelho(No **pilha){
No * pt = duplicarPilha(pilha);
No *maisVelhoo=pt;
No * val;

while(pt){
val=pop(&pt);
if(val->p.idade>maisVelhoo->p.idade)
maisVelhoo=val;
}
return maisVelhoo;
}

3. Escrever uma função que devolve o número de repetições de pessoas com idade
igual a pessoa mais velha.
//contador de pessoas com idade igual a mais velho
int contadorDeMaisVelhos(No **pilha){
int total=0;
No * pt = duplicarPilha(pilha);
int max_idade = maisVelho(&pt)->p.idade;
No * val;
while(pt){
val=pop(&pt);
if(val->p.idade==max_idade) total++;
}
return total;
}

4. Escrever uma função que remove tods as pessoa que tenha idades
correspondentes a números primos na pilha.
Bool ehPrimo(int num) {
int i, quantDivisores = 0;
for(i = 1; i <= num; i++) {
if (num%i==0) {
quantDivisores++;
}
}
if (quantDivisores == 2)
{
return true;
} else
{
return false;
}

Esda Exame Normal _2022 Página: 3 de 4


}
//funcao usada para duplicar uma pilha
void removerPessoaComIdadePrimo(No **pilha){
No * p= *pilha,*aux=NULL;
No * val;
while(p!=NULL){
val = pop(&p);
if(!ehPrimo(val->p.idade))
{
push(&aux,val);
printf("*");
}
}
*pilha=aux;
}

bool ehPrimo(int num) {


int i, quantDivisores = 0;
for(i = 1; i <= num; i++)
{
if (ehDivisaoExata(num, i)) {
quantDivisores++;
}
}
if (quantDivisores == 2) { return 1;
} else { return 0; }
}

Esda Exame Normal _2022 Página: 4 de 4

Você também pode gostar