CorrecaoExame_Recurso

8
Exame de Algoritmia e Programação 2003/2004 (1º Semestre-Época de Recurso) 1 de 8 Algoritmia e Programação Exame – Época de Recurso 6 de Fevereiro de 2004 Duração: 2 Horas e 30 minutos Responda a cada grupo numa folha separada. Indique o seu número e nome em cada folha. GRUPO 1 Cotações: a) 3 val. b) 3 val. a) Descreva um algoritmo em pseudolinguagem que verifique se existe algum factor repetitivo num número lido do teclado e indique qual é. Por exemplo, o número 101010 tem um factor repetitivo que é 10, mas o número 101102, não. b) Faça a traçagem do programa para A=25, B=44 e A=11 e B=83, indicando qual o objectivo do programa. #include<stdio.h> #include<conio.h> #include<math.h> int recurso(long num) { int cont=0, r=0; while (num!=0) { r=num%10; if(r%2!=0) cont++; num/=10; } return(cont); } void main(void) { long A,B; printf("Introduza um valor "); scanf("%ld",&A); printf("Introduza o 2 valor "); scanf("%ld",&B); if (recurso(A)>recurso(B)) printf("Valor 1"); else printf("Valor 2"); }

description

programação

Transcript of CorrecaoExame_Recurso

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 1 de 8

    Algoritmia e Programao

    Exame poca de Recurso

    6 de Fevereiro de 2004

    Durao: 2 Horas e 30 minutos

    Responda a cada grupo numa folha separada. Indique o seu nmero e nome em cada folha.

    GRUPO 1 Cotaes: a) 3 val. b) 3 val.

    a) Descreva um algoritmo em pseudolinguagem que verifique se existe algum factor repetitivo num nmero lido do teclado e indique qual . Por exemplo, o nmero 101010 tem um factor repetitivo que 10, mas o nmero 101102, no.

    b) Faa a traagem do programa para A=25, B=44 e A=11 e B=83, indicando qual o

    objectivo do programa. #include #include #include int recurso(long num) { int cont=0, r=0; while (num!=0) { r=num%10; if(r%2!=0) cont++; num/=10; } return(cont); } void main(void) { long A,B; printf("Introduza um valor "); scanf("%ld",&A); printf("Introduza o 2 valor "); scanf("%ld",&B); if (recurso(A)>recurso(B)) printf("Valor 1"); else printf("Valor 2"); }

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 2 de 8

    GRUPO 2 Cotaes: a) 3 val. b) 4 val.

    Considere que existe um vector bidimensional (matriz) de letras com 10 linhas e 10 colunas do tipo sopa de letras.

    z z d e d o b a h t a v a e i o u d s I z z e e i o d e d o a v W e i o u d s e z z E e o o u o s e a v R e d o u s s e z z o d E d u s o e a v Y e D o u s u e z z U e i o u s r e a v I e i o u s o e

    a) Construa uma funo que receba a matriz de letras, um vector com palavras a

    pesquisar e diga para cada palavra do vector, pelo menos uma sua ocorrncia na matriz de letras numa linha, numa linha invertida, numa coluna ou numa coluna invertida, sem distinguir letras maisculas de minsculas. Por exemplo, para a palavra dedo um resultado possvel seria:

    na horizontal, na 1 linha e 3 coluna, na horizontal invertida, na 7 linha e 3 coluna; na vertical, na 2 linha e 8 coluna; na vertical invertida, na 5 linha e 5 coluna.

    b) Construa uma funo que receba a matriz de letras e diga qual a letra que aparece mais vezes, sem distinguir letras maisculas de minsculas.

    Resoluo:

    #include #include #include int conta_espacos(char * s) { int i=0,cont=0; while(s[i]!='\0') if (s[i++]==' ') cont++; return cont; } /* conta quantos carteres tem at encontrar o 1 espao */ int conta_c_esp(char *s) { int i=0; while(s[i]!=' ' && s[i]!='\0') i++; return i; }

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 3 de 8

    void alinea_b(char matriz[][16]) { char letras[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int ocorrencias[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},i,j,o,max; for(i=0;i

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 4 de 8

    /* Pesquisa em linha*/ if ((str=strstr(matriz_linha,palavra))!=NULL) printf("Existe numa linha! A partir da %d linha e %d coluna\n",5-conta_espacos(str),5-conta_c_esp(str) ); strcpy(palavra_i,palavra); for(i=0,t=strlen(palavra)-1;i

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 5 de 8

    GRUPO 3 Cotaes: a) 1 val. b) 2 val. c) 2 val. d) 2 val.

    Foi encomendado aos alunos de Informtica do ISEP, um programa que permitisse gerir uma Base de Dados referente a desempregados com formao superior (Licenciados, Mestres e Doutorados). Pretende-se realizar um estudo estatstico da distribuio do nmero de desempregados Licenciados, Mestres e Doutorados por cidade e por escalo etrio. Para cada desempregado interessa armazenar a seguinte informao:

    Nome completo Nmero de bilhete de identidade Morada Data de nascimento

    o Dia o Ms o Ano

    Idade Cidade Grau acadmico

    a) Descreva a(s) estrutura(s) de dados necessria(s) resoluo do problema.

    b) Faa uma funo que permita adicionar os dados relativos a um dado desempregado.

    c) Escreva uma funo que permita visualizar o nmero de desempregados de cada cidade agrupados por grau Acadmico. Assuma que esto em anlise apenas as 18 cidades especificadas na tabela seguinte. A sada poder assumir o seguinte formato:

    Licenciados Mestres Doutorados Viana do Castelo Braga Porto Vila Real Bragana Aveiro Viseu Guarda Coimbra Leiria Castelo Branco Lisboa Santarm Portalegre Setbal vora Beja Faro

    d) Escreva uma funo que indique a cidade com maior nmero de desempregados Licenciados, com idades compreendidas entre os 35 e os 45 anos.

    Nota: As funes devem receber os argumentos que considere necessrios.

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 6 de 8

    Resoluo: #include #include typedef struct pessoa{ char nome[30]; long bi; char morada[50]; struct dt{ int dia; int mes; int ano; } dtnasc; int idade; char cidade[30]; char grau[20]; } Pessoa; void inserir(Pessoa Pessoas[], int *Indice){ Pessoa Temp; printf("Nome....................:"); gets(Temp.nome); printf("BI......................:"); scanf("%ld",&Temp.bi); fflush(stdin); printf("Morada..................:"); gets(Temp.morada); printf("Dt Nascimento[dd/mm/aa].:"); scanf("%d/%d/%d", &Temp.dtnasc.dia, &Temp.dtnasc.mes, &Temp.dtnasc.ano); printf("Idade...................:"); scanf("%d", &Temp.idade); fflush(stdin); printf("Cidade..................:"); gets(Temp.cidade); printf("Grau academico..........:"); gets(Temp.grau); Pessoas[(*Indice)++] = Temp; } int retIndice (char V[18][30], char Pesquisa[]){ int i = 0; while (i < 18 && strcmpi(V[i], Pesquisa) != 0) i++; if(i < 18) return i; return 0; } void listagem(Pessoa Pessoas[], int Indice){ int i,j, pos; char cidades[18][30] = {"Viana do Castelo", "Braga", "Porto", "Vila Real", "Braganca", "Aveiro", "Viseu", "Guarda", "Coimbra", "Leiria", "Castelo Branco", "Lisboa", "Santarem", "Portalegre", "Setubal", "Evora", "Beja", "Faro"}; char graus[3][20] = {"Licenciado", "Mestre", "Doutor"}; int valores[18][3]; for(i=0; i

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 7 de 8

    for (i=0; i

  • Exame de Algoritmia e Programao 2003/2004 (1 Semestre-poca de Recurso) 8 de 8

    listagem(Pessoas, Indice); filtro(Pessoas, Indice); }