CIÊNCIA DA COMPUTAÇÃO PROVA PARA

Propaganda
COM. – 1
CIÊNCIA DA COMPUTAÇÃO
PROVA PARA TRANSFERÊNCIA
1. A CEF concederá um crédito especial com juros de 2% aos seus clientes de acordo
com o saldo médio no último ano. Escreva um programa em C que leia o saldo médio
de um cliente e calcule o valor do crédito de acordo com a tabela a seguir. Imprima
uma mensagem informando o saldo médio e o valor de crédito.
Saldo Médio
De 0 a 500
Percentual
Nenhum crédito
De 501 a 1000
30% do valor do saldo médio
De 1001 a 3000
40% do valor do saldo médio
Acima de 3001
50% do valor do saldo médio
2. Escreva uma função que receba um número inteiro. Essa função deve verificar se tal
número é primo. No caso positivo, a função deve retornar 1, caso contrário zero.
Escreva também um programa para testar tal função.
Transferência UFOP 2011/1
COM. – 2
3. Desenvolva um algoritmo com ordem de complexidade O( n log k ) para encontrar os k
menores valores num vetor não ordenado de n elementos (onde n > k). Considere que
operações/funções sobre estruturas de dados já estão implementadas.
Transferência UFOP 2011/1
COM. – 3
4. Considere a função iterativa de busca binária em um vetor previamente ordenado
apresentada abaixo. Construa uma função recursiva que realize a mesma busca.
int BinariaIterativa(Tabela *T,TChave x,int n)
{
int Meio, Esq, Dir;
Esq = 0;
Dir = n-1;
do {
Meio = (Esq + Dir) / 2;
if (x > T->Registro[Meio].Chave) Esq = Meio + 1;
else
Dir = Meio - 1;
} while ( (x != T->Registro[Meio].Chave) && (Esq <= Dir) );
if (x == T->Registro[Meio].Chave)
return Meio;
else
return -1;
}
Transferência UFOP 2011/1
COM. – 4
5. Considere uma pilha P vazia e uma fila F não vazia. Utilizando apenas os testes de fila
e pilha vazias (FilaVazia, PilhaVazia e FazPilhaVazia), as operações Enfileira,
Desenfileira, Empilha, Desempilha e uma variável aux do tipo TItem, escreva uma
função em C/C++ que inverta a ordem dos elementos da fila (a função recebe somente
a fila como parâmetro). Uma sugestão para a definição (protótipo) da função é:
void InverteFila(TFila* pFila);
Transferência UFOP 2011/1
COM. – 5
6. Suponha que um vetor (P) seja representado por suas coordenadas polares, o módulo
(Γ
Γ) e o angulo (α
α), como apresentados na figura abaixo.
Obs.: Os dados referentes a angulo podem ser tratados todos em radianos.
Faça o que se pede.
A) Crie um tipo abstrato de dados TPolar para armazenar um número polar usando
dois números reais: o módulo (dGama) e o angulo (em radianos - dTeta).
B) Escreva uma função que receba um número polar (representado por dois números
reais), crie uma estrutura para representá-lo e retorne essa estrutura.
Transferência UFOP 2011/1
COM. – 6
C) Escreva uma função que receba uma estrutura TPolar e retorne as coordenadas
cartesianas ( x e y ) deste número polar usando decomposição por trigonometria
(considere que as funções sin(arc) e cos(arc) estão definidas em math.h).
D) Escreva uma função que receba dois TADs TPolar, defina um terceiro TAD para
representar o resultado da soma dos dois números polares recebidos como
entrada, e finalmente retorne esse terceiro TAD (considere que as funções sqrt(X)
e atan2(CO,CA) estão definidas em math.h).
Transferência UFOP 2011/1
COM. – 7
GABARITO
Prova de transferência para Ciência da Computação
Questão 1:
#include <stdio.h>
int main(void)
{
double SALDOMEDIO, CREDITO;
printf("Digite o Saldo médio: ");
scanf("%lf",&SALDOMEDIO);
if ( SALDOMEDIO <= 500. )
CREDITO = 0;
else
if ( SALDOMEDIO <= 1000. )
CREDITO = (30./100) * SALDOMEDIO;
else
if ( SALDOMEDIO <= 3000. )
CREDITO = (40./100) * SALDOMEDIO;
else
CREDITO = (50./100) * SALDOMEDIO;
printf("Saldo médio de: %lf\n",SALDOMEDIO);
printf("Crédito especial de: %lf\n ",CREDITO);
return 0;
}
Questão 2:
#include <stdio.h>
int primo(int N)
{
int i,pri;
if ( N < 2 )
return 0;
else
{
pri = 1;
for ( i = 2; i < N ; i++ )
if ( (N % i) == 0 )
pri = 0 ;
return pri;
}
}
int main(void)
{
int X;
printf("Digite um número: ");
scanf("%d",&X);
if ( primo(X) == 1 )
printf("É primo!\n");
else
printf("Não é primo!\n");
return 0;
}
Transferência UFOP 2011/1
COM. – 8
Questão 3:
int KMenores(int* Vetor, int *Heap, int nVetor, int nHeap)
{
int i ;
int n = 0 ; /* tamanho do heap */
for( i = 1 ; i <= nVetor ; i++ )
{
if ( n >= nHeap )
{
if ( Max(Heap) > Vetor[i] )
{
RetiraMax ( Heap, &n);
Insere ( Vetor[i], Heap, &n );
}
}
else
Insere ( Vetor[i], Heap, &n );
}
return n;
}
Questão 4:
int BinariaRecursiva(Tabela* T,TChave x,int Esq,int Dir)
{
int Meio;
Meio = (Esq+Dir)/2;
if (T->Registro[Meio].Chave == x)
return Meio;
else if (Esq >= Dir)
return -1;
else if (x > T->Registro[Meio].Chave)
return BinariaRecursiva(T,x,Meio+1,Dir);
else
return BinariaRecursiva(T,x,Esq,Meio-1);
}
Transferência UFOP 2011/1
COM. – 9
Questão 5:
void InverteFila(TFila* pFila)
{
TPilha stPilhaAux;
TItem aux;
FazPilhaVazia(&stPilhaAux);
while(!FilaVazia(pFila))
{
Desenfileira(pFila,&aux);
Empilha(&stPilhaAux,aux);
}
while(!PilhaVazia(&stPilhaAux))
{
Desempilha(&stPilhaAux,&aux);
Enfileira(pFila,aux);
}
}
Questão 6:
#define PI 3.14159265
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct
{
double dGama;
double dTeta;
} TPolar;
TPolar TPolarInicializa(double _dGama, double _dTeta)
{
TPolar stAux;
stAux.dTeta = _dTeta;
stAux.dGama = _dGama;
return stAux;
}
void TPolar2Cartesiano(TPolar* pstP, double* pdX, double* pdY)
{
*pdX = pstP->dGama * cos(pstP->dTeta);
*pdY = pstP->dGama * sin(pstP->dTeta);
}
void Cartesiano2TPolar(double dX, double dY, TPolar* pstP)
{
pstP->dGama = sqrt(dX*dX+dY*dY);
pstP->dTeta = atan2(dY,dX);
}
Transferência UFOP 2011/1
COM. – 10
TPolar TPolarAdd(TPolar* pstP1,TPolar* pstP2)
{
TPolar stAdd;
double dX,dY,dX1,dX2,dY1,dY2;
TPolar2Cartesiano(pstP1,&dX1,&dY1);
TPolar2Cartesiano(pstP2,&dX2,&dY2);
dX = dX1 + dX2;dY = dY1 + dY2;
Cartesiano2TPolar(dX,dY,&stAdd);
return stAdd;
}
int main()
{
double dGama,dTeta;
TPolar stP1,stP2,stP3;
printf("Digite o modulo e o angulo do 1o. vetor: ");
scanf("%lf %lf",&dGama,&dTeta);
stP1 = TPolarInicializa(dGama,dTeta/180*PI);
printf("Digite o modulo e o angulo do 2o. vetor: ");
scanf("%lf %lf",&dGama,&dTeta);
stP2 = TPolarInicializa(dGama,dTeta/180*PI);
stP3 = TPolarAdd(&stP1,&stP2);
printf("A soma desses dois vetores eh: %lf / %6.2lfo\n",
stP3.dGama,stP3.dTeta*180/PI);
system("PAUSE");
}
Transferência UFOP 2011/1
Download