Você está na página 1de 8

Ministrio da Cincia, Tecnologia e Ensino Superior

p-Flio
U.C. 21090 Programao XX de XX de XX

-- INSTRUES - O tempo de durao da prova de p-flio de 90 minutos. O estudante dever responder no enunciado e preencher o cabealho e todos os espaos reservados sua identificao, com letra legvel, pelo que o mesmo dever ser entregue ao vigilante, no sendo permitido ao estudante levar o enunciado. Verifique no momento da entrega do enunciado se todas as pginas esto rubricadas pelo vigilante. Em hiptese alguma sero aceites folhas de ponto dobradas ou danificadas. Exclui-se, para efeitos de classificao, toda e qualquer resposta apresentada em folhas de rascunho. Os telemveis devero ser desligados durante toda a prova e os objectos pessoais deixados em local prprio da sala de exame. A prova constituda por 8 pginas e termina com a palavra FIM. Verifique o seu exemplar e, caso encontre alguma anomalia, dirija-se ao professor vigilante nos primeiros 15 minutos da mesma, pois qualquer reclamao sobre defeito(s) de formatao e/ou de impresso que dificultem a leitura no ser aceite depois deste perodo. Utilize unicamente tinta azul ou preta. O p-flio constitudo por quatro Grupos, com a cotao de 3 valores cada. A resposta a cada grupo deve ser dada no espao de resoluo do grupo respectivo, e ocupando apenas o espao destinado para o efeito. No grupo I apenas deve ser preenchida a tabela com a execuo passo-a-passo, e os restantes grupos devem respeitar a tabela com as 40 linhas de cdigo. Ao resolver os grupos III e IV, pode e deve utilizar as funes definidas nos grupos anteriores. Se no tiver espao suficiente no grupo IV, pode utilizar o espao vazio dos grupos II e III para implementar funes necessrias apenas no grupo IV. Os programas devem ser escritos em linguagem C podendo utilizar funes da biblioteca standard. Em anexo est uma lista com as funes da biblioteca standard mais utilizadas, no sendo necessrio utilizar a primitiva #include.

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Grupo I (3 valores) Considere o programa e execuo de exemplo seguintes, e efectue a execuo passo-a-passo com a entrada de dados utilizada na execuo de exemplo. No caso de serem necessrios mais de 25 passos, deve parar no passo 25. Programa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> /* programa que calcula a soma dos primeiros K nmeros mltiplos de 2, e no mltiplos de 3 */ int main() { int i, k, resultado=0; printf("Indique K: "); scanf("%d",&k); for(i=1; i<=k; i++) if(i%2==0 && i%3!=0) resultado+=i; printf("Resultado: %d", resultado); }

Execuo de exemplo:
C:\>tipog1 Indique K: 4 Resultado: 6

Grupo II (3 valores) Implemente um procedimento Limites que recebe um vector de inteiros e respectiva dimenso, e calcula os valores mnimos e mximos dos elementos no vector, que retorna em variveis passadas por referncia. Em baixo est um programa que utiliza a funo e uma execuo de exemplo. Programa:
/* programa que demonstra a utilizao do procedimento Limites */ int main() { /* vector de teste, com 10 inteiros */ int vector[]={1234,233,-1223,433,5,655,711,482,5697,1200}; int minimo, maximo; Limites(vector, 10, &maximo, &minimo); printf("Valor minimo: %d\nValor maximo: %d\n", minimo, maximo); }

Execuo de Exemplo:
C:\>tipog2 Valor minimo: -1223 Valor maximo: 5697

Ministrio da Cincia, Tecnologia e Ensino Superior

-2-

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Grupo III (3 valores) Implemente um procedimento Histograma que recebe um vector de inteiros e respectiva dimenso, e coloque em dois vectores de retorno o seu histograma, e os limites das classes. O nmero de classes deve ser passado como argumento. Para obter a classe (0 a nclasses-1) a que um valor x do vector pertence, se x o valor mximo, ento pertence classe nclasses-1, caso contrrio, utilize a frmula da esquerda (arredondar o valor da expresso final para inteiros). Para obter o limite inferior de uma dada classe k, utilize a frmula da direita. max min x min lim(k ) = k + min classe( x ) = nclasses nclasses max min O limite superior da classe k o limite inferior da classe k+1, pelo que no necessita de guardar valores distintos para os limites superiores. Em baixo est um programa que utiliza essa funo e uma execuo de exemplo. Programa:
/* programa que demonstra a utilizao do procedimento Histograma */ int main() { int v1[]={0,1,2,3,4,5,6,7,8,9}; int classes[3],limites[4],i; Histograma(v1,10,classes,limites,3); for(i=0;i<3;i++) printf("\nclasse [%d;%d[: %d", limites[i], limites[i+1], classes[i]); }

Execuo de Exemplo:
C:\>tipog3 classe [0;3[: 3 classe [3;6[: 3 classe [6;9[: 4

Grupo IV (3 valores) Faa um programa que pea ao utilizador o nmero de dados de jogar K (cada dado tem uma face numerada de 1 a 6), o nmero de lanamentos W, e o nmero de classes Z, e gere uma sequncia de W lanamentos de K dados, e mostre um histograma da soma dos lanamentos dos dados com Z classes. Deve apresentar em cada classe tantos cardinais (#) na linha conforme o nmero apresentado, sendo 40 cardinais para a classe com maior frequncia. O programa deve assumir definida uma macro MAXVECTOR, com o valor mximo para o nmero de lanamentos e nmero de classes, no sendo necessrio dar erro no caso de no existir memria suficiente para a simulao pretendida. Em baixo est uma execuo de exemplo do programa pretendido. Execuo de Exemplo:
C:\>tipog4 Numero de dados: 2 Numero de lancamentos: 10000 Numero de classes: 11 classe [ 2; 2[: 250 ##### classe [ 2; 3[: 546 ############# classe [ 3; 4[: 780 ################## classe [ 4; 5[: 1117 ########################## classe [ 5; 6[: 1468 ################################### classe [ 6; 7[: 1677 ####################################### classe [ 7; 8[: 1330 ############################### classe [ 8; 9[: 1167 ########################### classe [ 9; 10[: 844 #################### classe [ 10; 11[: 551 ############# classe [ 11; 12[: 270 ###### Ministrio da Cincia, Tecnologia e Ensino Superior

-3-

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Resoluo Grupo I:
Passo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Instruo: colocar o nome da funo, e no ciclo for indicar a componente em execuo Resultado: colocar input / output do programa, e resultado de expresses lgicas Utilize as colunas extra para colocar uma varivel por coluna

Linha

Instruo

Resultado

Ministrio da Cincia, Tecnologia e Ensino Superior

-4-

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Resoluo Grupo II:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Ministrio da Cincia, Tecnologia e Ensino Superior

-5-

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Resoluo Grupo III:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Ministrio da Cincia, Tecnologia e Ensino Superior

-6-

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Resoluo Grupo IV:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Ministrio da Cincia, Tecnologia e Ensino Superior

-7-

Nome: ................................................................................................................................................... N de Estudante: ....................................... Turma: ................... B. I. n ............................................... Assinatura do Vigilante: ..............................................

Anexo
Funes standard mais utilizadas
Exemplos de chamadas: printf(texto %d %g %s %c, varInt, varDouble, varStr, varChar); printf Imprime no ecran uma string formatada, em que substitudo o %d pela varivel inteira seguinte na lista, o %g pela varivel real na lista, o %s pela varivel string na lista, o %c pela varivel caracter na lista. scanf(%d, &varInt); gets gets(str); scanf scanf a funo inversa do printf, l um inteiro e coloca o seu resultado em varInt, cujo endereo fornecido. A funo gets l uma string para str.

Prottipos: int atoi atoi(char *str); float atof atof(char *str); Converte uma string num nmero inteiro/real respectivamente int strlen strlen(char *str); Retorna o nmero de caracteres da string str strcpy(char *dest, char *str); [strcat strcat] strcpy strcat Copia str para dest, ou junta str no final de dest, respectivamente char *strstr strstr(char *str, char *find); char *strchr strchr(char *str, char find); strstr strchr Retorna a primeira ocorrncia de find em str, ou NULL se no existe. Na verso strchr find um caracter. char *strtok strtok(char *string, char *sep); char *strtok strtok(NULL, char *sep); strtok strtok Retorna um apontador para uma token, delimitada por sep. A segunda chamada retorna a token seguinte, na mesma string, podendo-se continuar a chamar a funo at que retorne NULL, o que significa que a string inicial no tem mais tokens para serem processadas. sprintf(char *str, ); sscanf sscanf(char *str,); sprintf Estas funes tm o mesmo funcionamento de printf/scanf, mas os dados so colocados (ou lidos) em str. int strcmp strcmp(char *str1, char *str2); Retorna 0 se str1 igual a str2, retornando um valor negativo/positivo se uma string maior/menor que a outra int isalpha isalpha(int c); [isdigit isalnum islower isupper isprint isdigit,isalnum,islower isupper,isprint isdigit isalnum islower,isupper isprint] Retorna true se c uma letra / dgito numrico / letra ou dgito / minscula / maiscula / imprimivel. void *malloc malloc(size_t); free(void *pt); free malloc malloc retorna um apontador para um bloco de memria de determinada dimenso, ou NULL se no h memria suficiente, e a funo free liberta o espao de memria apontado por pt e alocado por malloc FILE *fopen fopen(char *fich, char *mode); fclose fclose(FILE *f); fopen fopen abre o ficheiro com nome fich, no modo mode (rt leitura em modo texto, wt escrita em modo texto), e fclose fecha um ficheiro aberto por fopen fprintf(f,); fscanf fscanf(f,); fgets fgets(char *str, int maxstr, FILE *f); fprintf idnticos ao printf/scanf mas direccionados para o ficheiro, e fgets uma verso do gets mas com limite mximo da string indicado em maxstr. int feof feof(FILE *f); feof retorna true se o ficheiro f est no fim, e false c.c. fseek(f,posicao,SEEK_SET); fwrite fread fwrite/fread fread(registo,sizeof(estrutura),1,f); fseek funes de leitura binria (abrir em modo rb e wb). fseek posiciona o ficheiro numa dada posio, fwrite/fread escrevem/lm um bloco do tipo estrutura para o endereo de memria registo. int rand rand(); srand srand(int seed); rand retorna um nmero pseudo-aleatrio e srand inicializar a sequncia pseudo-aleatria time_t time time(NULL); clock_t clock clock ck(); time retorna um nmero segundos que passaram desde uma determinada data, e clock o nmero de instantes (h CLOCKS_PER_SEC instantes por segundo) double sin sin(double x); [cos log log10 sqrt double pow cos,log log10,sqrt pow(double x,double y); cos log,log10 sqrt] Funes matemticas mais usuais, com argumentos e valores retornados a double

FIM

Ministrio da Cincia, Tecnologia e Ensino Superior

-8-

Você também pode gostar