Baixe o app para aproveitar ainda mais
Prévia do material em texto
MC102 – Algoritmos e Programac¸a˜o de Computadores 1o semestre de 2014 – Turmas Coordenadas 2a Prova (24/06/2014) Nome: RA: Turma: Questa˜o Valor Nota 1 3,0 2 3,0 3 3,0 4 3,0 Total 12,0 Instruc¸o˜es (LEIA!!!!!) 1. A durac¸a˜o da prova e´ de 100 minutos. 2. Na˜o e´ permitida consulta a qualquer material. 3. Somente sera˜o consideradas respostas nos espac¸os indicados. 4. Use o verso das folhas apenas como rascunho. 5. Celulares, tablets, pagers, calculadoras e demais dispositivos eletroˆnicos de comunicac¸a˜o ou computac¸a˜o devem permanecer desligados durante toda a prova. 6. Nenhum aluno sera´ autorizado a deixar a sala de prova antes que tenham decor- ridos 70 minutos desde o seu in´ıcio. 7. Todo aluno que deixar a sala de prova devera´ entrega´-la em definitivo. 8. Todos os co´digos devem ser escritos na linguagem de programac¸a˜o C. 9. Nos espac¸os reservados para as respostas, cada ce´lula do formula´rio quadriculado deve conter uma letra do texto da resposta. Em adic¸a˜o, indentac¸a˜o deve ser utilizada para facilitar a leitura de toda resposta que seja um programa ou trecho de programa em C. Questo˜es cujas respostas na˜o estejam formatadas de acordo com esta regra perdera˜o 20% de seu valor nominal. 10. Nas questo˜es que pedem como respostas programas em C a clareza do programa sera´ um fator muito relevante para a avaliac¸a˜o. 11. BOA PROVA! 1. Considere o trecho de programa em C abaixo: 1 struct sA { int sc ; int ∗ s ; } ; 2 typedef struct sA∗ tipA ; 3 4 tipA criaA ( int sc ) { 5 tipA s ; 6 s = mal loc ( s izeof ( tipA ) ) ; 7 s−>sc = sc ; 8 s−>s = mal loc ( sc ∗ s izeof ( int ) ) ; 9 return s ; 10 } 11 12 tipA m i s t e r i o ( tipA x , tipA y ) { 13 tipA z ; int tc ; 14 int i , j ; 15 int i t ; 16 17 z = criaA ( ( (∗ x ) . sc )+(y−>sc ) ) ; 18 tc = 0 ; 19 for ( i=x−>sc −1; i >=0; i−−) { z−>s [ i ] = x−>s [ i ] ; t c++; } 20 for ( i =0; i<y−>sc ; i++) { 21 i t= 0 ; 22 for ( j =0; j<x−>sc ; j++) i f (y−>s [ i ] == z−>s [ j ] ) i t = 1 ; 23 i f ( ! i t ) { z−>s [ t c ] = y−>s [ i ] ; t c++; } 24 } 25 z−>sc = tc ; 26 return z ; 27 } Inicialize os atributos das instaˆncias x e y de tipA com os d´ıgitos do seu RA e com os d´ıgitos da data de ontem, respectivamente. Em seguida, invoque a func¸a˜o misterio com x e y como paraˆmetros. Escreva em z o resultado retornado por misterio. Preenchimento dos diagramas de x, y e z: A data deve ser escrita no formato DDMMAA (D de dia, M de meˆs, A de Ano). Por exemplo, se o RA fosse 077432 e a data fosse 13/06/2013 os inteiros a serem utilizados na inicializac¸a˜o de x e y seriam: 0,7,7,4,3,2 e 1,3,0,6,1,3, respectivamente. Nesse caso, os campos sc dos diagramas de x e y teriam ambos sido inicializados com o valor 6, porque o atributo sc indica o tamanho do vetor s. A notac¸a˜o “s: ↓” significa que s e´ um apontador para o vetor de inteiros, desenhado imediatamente abaixo da seta, cujas posic¸o˜es devem ser preenchidas da esquerda para a direita, de cima para baixo. x sc: s: ↓ y sc: s: ↓ z sc: s: ↓ 2. No laborato´rio 08, denominado “Killing the messenger”, um aluno de MC102 observou que a biologia molecular era apenas pano de fundo para a especificac¸a˜o do seguinte problema: Dadas duas cadeias de caracteres x e y, x ≤ y, verifique se o complemento reverso de x ocorre em y. O co´digo do programa C escrito por esse aluno encontra-se logo abaixo. Infelizmente, esse co´digo conte´m 2 erros. Escreva no espac¸o reservado para a resposta desta questa˜o a versa˜o correta do co´digo fornecido. Na˜o e´ necessa´rio copiar o co´digo todo, basta indicar, utilizando o nu´mero da linha de co´digo, onde e qual foi a correc¸a˜o realizada. Na˜o introduza novas linhas, se precisar inserir co´digo, insira-o no ponto correto de uma linha ja´ existente, modificando-a como achar necessa´rio. Por exemplo, se o erro fosse simplesmente a falta de um “;” na linha 10, voceˆ deveria escrever na folha de resposta: 1 0 c h a r * c ; . Outro exemplo, se o erro fosse a falta de iniciac¸a˜o de i, na linha 59, a correc¸a˜o seria indicada como: 5 9 i n t a c h o u = 0 ; i = - 1 ; . 1 #define MAXY 101 2 #define MAXX 26 3 void r ev e r s o (char ∗x , char∗ r ) ; 4 char∗ complemento ( char ∗x ) ; 5 int procura (char ∗c , char ∗x ) ; 6 7 int main ( ) { 8 int sx , sy , achou ; 9 char y [MAXY] , x [MAXX] , r [MAXX] ; 10 char ∗c ; 11 12 scan f ( ”%s ” , y ) ; 13 s can f ( ”%s ” , x ) ; 14 15 r eve r s o (x , r ) ; 16 c = complemento ( r ) ; 17 i f ( procura ( c , y ) ) 18 p r i n t f ( ”%s oco r r e em %s .\n” , x , y ) ; 19 else 20 p r i n t f ( ”%s nao oco r r e em %s .\n” , x , y ) ; 21 22 return 0 ; 23 } 24 25 void r ev e r s o (char ∗x , char ∗ r ) { 26 char ch ; int n ; 27 i f ( (∗ x)== ’ \0 ’ ) { (∗ r)= ’ \0 ’ ;} 28 else { 29 r eve r s o (x , r ) ; 30 n=s t r l e n ( x ) ; 31 ∗( r+n−1)=∗x ; 32 ∗( r+n)= ’ \0 ’ ; 33 } 34 } 35 36 char∗ complemento ( char ∗x ) { 37 char ∗c ; int i ; 38 int sx = s t r l e n ( x ) ; 39 c = mal loc ( ( sx +1)∗ s izeof (char ) ) ; 40 41 for ( i = 0 ; i<sx ; i++) { 42 switch ( x [ i ] ) { 43 case ’C ’ : { c [ i ] = ’G’ ; break ; } 44 case ’G ’ : { c [ i ] = ’C ’ ; break ; } 45 case ’A ’ : { c [ i ] = ’U ’ ; break ; } 46 case ’U ’ : { c [ i ] = ’A ’ ; break ; } 47 } 48 } 49 c [ i ] = ’ \0 ’ ; 50 51 return c ; 52 } 53 54 int procura (char ∗c , char ∗x ) { 55 int i , j ; int sx , sc ; 56 sx = s t r l e n ( x ) ; 57 sc = s t r l e n ( c ) ; 58 59 int achou = 0 ; 60 for ( i = 0 ; ( ( i <(sx−sc ) ) && ( ! achou ) ) ; i++) { 61 achou = 1 ; 62 for ( j = 0 ; ( ( j<sc ) && ( achou ) ) ; j++) { 63 i f ( c [ i+j ] != x [ i ] ) achou = 0 ; 64 } 65 } 66 return achou ; 67 } Espac¸o reservado para a resposta da Questa˜o 2. 3. Como vimos no Laborato´rio 10, um vetor pode ser utilizado para armazenar os elementos de uma matriz. A seguir aparece a definic¸a˜o do tipo Matriz utilizado na programac¸a˜o da soluc¸a˜o para o laborato´rio 10. 1 typedef struct matr i z { 2 int nc , n l ; /∗ nc : numero de colunas , n l : numero de l i n h a s ∗/ 3 int n ; /∗ n : nc∗ n l ( tamanho da matr iz ) ∗/ 4 int ∗v ; /∗ v : v e t o r de i n t e i r o s de tamanho de tamanho n ∗/ 5 } Matriz ; Suponha implementadas as func¸o˜es CriaMatriz, DestroiMatriz, ImprimeMatriz e CarregaMatriz, como especificadas abaixo. Portanto, voceˆ na˜o precisa implementa´-las mas deve utiliza´-las na soluc¸a˜o da questa˜o. 1 /∗ Aloca a memoria nece s sa r i a para a in s t anc iacao ∗/ 2 /∗ de uma matrix de tamanho n l inhas por ncolunas ∗/ 3 Matriz∗ CriaMatr iz ( int nl inhas , int ncolunas ) ; 4 5 /∗ Desaloca a memoria or i g ina lmente a locada para uma matr iz ∗/ 6 /∗ retornando−a para o con t r o l e do s i s tema operac iona l ∗/ 7 void Destro iMatr i z ( Matriz ∗m) ; 8 9 /∗ Imprime os e lementos da Matriz na sa ida padrao . ∗/ 10 void ImprimeMatriz ( Matriz ∗m) ; 11 12 /∗ Carrega na matr iz os $n$ e lementos l i d o s da entrada padrao ∗/ 13 void CarregaMatriz ( Matriz ∗m) ; Implemente em C as func¸o˜es especificadas a seguir e um programa main que mostra como utilizar a func¸a˜o TranspoeMatriz. 1 /∗ Retorna o ind i c e do ve to r em funcao da l i nha e coluna da matr iz ∗/ 2 int IndiceDadoLinhaColuna ( Matriz ∗m, int l inha , int coluna ) ; 3 4 Matriz∗ TranspoeMatriz ( Matriz ∗m) ; Espac¸o reservado para a resposta da Questa˜o 3. Espac¸o reservado para a resposta da Questa˜o 3. Espac¸o reservado para a resposta da Questa˜o 3. 4. Dado um inteiro n entre 0 e 999999999, escreva a func¸a˜o recursiva void imprimeEne(int n) que imprime cada digito de n, separado por um espac¸o, na ordem em que aparece em n. Por exemplo, se imprimeEne for chamada com 82134950 imprimira´ a cadeia “8 2 1 3 4 9 5 0 ”.
Compartilhar