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 De 501 a 1000 De 1001 a 3000 Acima de 3001 Percentual Nenhum crédito 30% do valor do saldo médio 40% do valor do saldo médio 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.
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.
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; Dir = Meio - 1; while ( (x!= T->Registro[Meio].Chave) && (Esq <= Dir) ); if (x == T->Registro[Meio].Chave) return Meio; return -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);
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.
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).
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; if ( SALDOMEDIO <= 1000. ) CREDITO = (30./100) * SALDOMEDIO; if ( SALDOMEDIO <= 3000. ) CREDITO = (40./100) * SALDOMEDIO; 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; 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"); printf("não é primo!\n"); return 0;
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 ); 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; if (Esq >= Dir) return -1; if (x > T->Registro[Meio].Chave) return BinariaRecursiva(T,x,Meio+1,Dir); return BinariaRecursiva(T,x,Esq,Meio-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);
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");