Prévia do material em texto
10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 1/9 Usuário BRUNO DE SOUZA Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead- 8888.08 Teste 20212 - PROVA N2 (A5) Iniciado 04/10/21 13:45 Enviado 04/10/21 18:57 Status Completada Resultado da tentativa 6 em 10 pontos Tempo decorrido 5 horas, 12 minutos Instruções Resultados exibidos Respostas enviadas, Respostas corretas, Comentários Caso necessite a utilização do "EXCEL" clique no link ao lado ----------- > excel.xlsx Pergunta 1 Resposta Selecionada: Resposta Correta: Comentário da resposta: Em C standard , uma das funções usadas para a impressão de conteúdo na tela é oprintf . Tal comando permite adequar a impressão ao tipo e ao formato da informação a ser exibida. Suponha que o usuário deseja realizar uma impressão no seguinte formato: “Valor da média = 3.21 - valor do caracter 'A' na tabela ASCII = 65 (hexa= 41)” Supondo que existam as seguintes variáveis instanciadas: float media=3.21043891; carac = 'A'; Preencha os espaços do comando com os formatos corretos: printf(“Valor da média = __ - valor do caracter '__' na tabela ASCII = __ (hexa= __)”,media,ca rac,carac,carac); Agora assinale a alternativa que contenha as marcações corretas. . %.2f ; %c ; %d; %x. .%.2f ; %c ; %d; %x. Parabéns! Sua resposta foi a correta! Como você pode ter notado, uma variável poderá ser impressa em diferentes formatos como foi o caso da variável “carac”. O formato “ x” permite que uma uma variável da família das variáveis inteiras possa ser exibida na forma hexadecimal. Pergunta 2 Denomina-se como matriz esparsa aquela que a quantidade de elementos não nulos é mínima. Sendo assim, para economia de recursos de memória, aloca-se apenas os campos que possuem valores representativos. Para essa questão, analise as afirmativas abaixo e classifique com “S” aquelas que podem contribuir para a implementação de matriz esparsa e, com “N”, aquelas que não podem. ( ) Podemos implementar matriz esparsa como uma matriz de ponteiro para 1 em 1 pontos 1 em 1 pontos https://ibmr.blackboard.com/bbcswebdav/pid-18765808-dt-content-rid-84766551_1/xid-84766551_1 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 2/9 Resposta Selecionada: Resposta Correta: Comentário da resposta: ponteiro. Cada linha de ponteiros aponta para um vetor de ponteiros, onde cada célula é uma estrutura composta pelos campos: valor e número da coluna. ( ) A matriz NxM é representada por um vetor com N*M células, onde cada célula é um registro composto pelos campos: linha, coluna e valor. ( ) A matriz é formada por uma estrutura estática, independentemente do número de elementos nulos. ( ) A matriz esparsa pode ser representada por uma matriz de ponteiro para ponteiro onde cada linha aponta para uma coluna alocada dinamicamente cujo tamanho é em função da quantidade dos elementos não nulos. Assinale a alternativa que apresenta a sequência que você considera correta. S, N, N, S. S, N, N, S. Parabéns! Sua resposta foi a correta! Realmente, é possível implementar uma matriz esparsa utilizando matrizes constituídas por ponteiro para ponteiro. Cada ponteiro da linha aponta para um vetor de ponteiros cujo tamanho é determinado pela quantidade de células não nulas. Cada célula armazenada um registro composto pelos campos “número da coluna” e valor. Pergunta 3 Estruturas ou registros servem para armazenar informações heterogêneas de modo a podermos agrupar informações de uma determinada entidade. Assim como outros tipos de dados, os registros também poderão ser manipulados como ponteiros. Suponha uma função para inserir um novo registro sempre na última posição de um vetor. Para tanto, suponha uma estrutura do seguinte formato: typedef struct { char nome_conta[30]; char cod_barras[48]; int dia_venc, mes_venc; float valor; } BOLETOS; O campo vazio é aquele que apresenta o campo “valor” igual a 0 (zero). Sendo assim, observe o código a seguir e preencha as lacunas: void CadastrarBoleto(BOLETOS b, BOLETOS ____ListaBoletos) { int pos=0; while(____.valor!=0) pos++; memcpy(____,&b,sizeof(BOLETOS)); } . . . int main() { BOLETOS *listabol, boleto; int i=0; listabol = (BOLETOS *)calloc(20,sizeof(BOLETOS)); if(listabol==NULL) { 0 em 1 pontos 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 3/9 Resposta Selecionada: Resposta Correta: Comentário da resposta: printf("Erro de alocação.\n"); return 0; } boleto.valor = 100.34; strcpy(boleto.nome_conta,"LUZ"); . . . CadastrarBoleto(boleto,____listabol); . . . Assinale a alternativa que contém a sequência correta para o preenchimento das lacunas. * ; (ListaBoletos+pos) ; (*(ListaBoletos+pos)) ; &. * ; (*(ListaBoletos+pos)) ; (ListaBoletos+pos) ; deixar em branco. Infelizmente a sua resposta está incorreta. Para responder essa questão, analise melhor o comportamento dos vetores referenciados por ponteiros sendo passados como parâmetros. Analise quando devemos usar ou não o símbolo “&” na chamada da função. Para ajudar na reflexão, deixamos uma pergunta: No comando “while”, precisamos do conteúdo ou da posição de memória? Pergunta 4 Resposta Selecionada: Resposta Correta: Comentário da resposta: Na interface das funções, podemos encontrar as variáveis passadas por valor e as variáveis passadas por referência. Para essa questão, analise as afirmativas abaixo: I – Na passagem por valor, as modificações realizadas internamente à função não impactam sobre o valor da variável na origem da chamada da função. II – Na passagem por referência, qualquer alteração dentro da função, automaticamente altera o valor da variável na origem pois ambas possuem o mesmo endereço de memória. III – No código: “ func(int a , float *b)”, a variável “ a” é passada por referência enquanto que a variável “ b” é passada por valor. IV – Para realizar modificações ou acessar o conteúdo de variáveis passadas por referência, deve- se usar variável precedida pelo sinal “ &” para indicar o seu conteúdo. Por exemplo, na função “func(int a , float *b)”, para se instanciar a variável “ b”, dentro do código, usaremos, por exemplo: “ &b = 5;”. Escolha a alternativa abaixo que você julgue ser a correta: .Apenas as afirmativas II e II estão corretas. .Apenas as afirmativas II e II estão corretas. Parabéns! Sua resposta foi a correta! Realmente, a passagem de parâmetros por referência, a posição de memória é a mesma da variável origem, o que proporciona que ambas as variáveis estarão sempre sincronizadas. O acesso às variáveis passadas por referência, no caso do função da afirmativa IV, é feito mediante o uso do símbolo “*” (por exemplo, “ &b = 5;”). Pergunta 5 Em algumas situações, temos a necessidade de contabilizar a quantidade de certos elementos dentro de uma estrutura do tipo vetor. Para essa questão, suponha que exista a necessidade de contar a quantidade de vogais para que, 1 em 1 pontos 0 em 1 pontos 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 4/9 Resposta Selecionada: Resposta Correta: Comentário da resposta: em seguida, as quantidades classificadas por cada vogal sejam impressas na tela. Para isso, observe o código a seguir: #include <stdio.h> #include <string.h> int main() { char str[50]="testando a quantidade de vogais na frase."; int qtdVogais[5]={0,0,0,0,0}; for(int i=0; i<50; i++) switch(str[i]) { case 'a': qtdVogais[0]=qtdVogais[0]++; case 'e': qtdVogais[1]=++; case 'i': qtdVogais[2]++; case 'o': qtdVogais[3]++; case'u': qtdVogais[4]++; } printf("A=%d E=%d I=%d O=%d U=%d\n",qtdVogais[0],qtdVogais[1], qtdVogais[2],qtdVogais[3],qtdVogais[4]); return 0; } O programa acima apresenta alguns erros. Com base na análise do código, selecione a opção correta: O programa está correto. No código faltam os comandos “break” associado a cada caso do “switch”. O critério de parada do laço de repetição não atende às expectativas; o correto seria usar o “strlen(str)”. Infelizmente a sua resposta não está correta. Para responder essa questão, pense na diferença entre instanciar um vetor e uma string, de como coletar o tamanho usado efetivamente por uma string e qual a composição completa do comando “ switch”. Pergunta 6 Uma das vantagens de um arquivo binário consiste na possibilidade do uso direto de registros (estruturas de dados). Sendo assim, pode-se gravar ou recuperar, com apenas uma operação, todos os dados inseridos em tal estrutura de dados. Para essa questão, analise o trecho de código a seguir e preencha as lacunas. TSTRUCT ts; . . . arq=fopen("registros.dat","rb+"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } ________; //posicionar no início do arquivo printf("Item a ser localizado: "); scanf("%d",&item); while(1) { ________; //ler a estrutura if(________) //testar se foi encontrado o final de arquivo break; if(ts.item==item) { 1 em 1 pontos 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 5/9 Resposta Selecionada: Resposta Correta: Comentário da resposta: //manipulação do registro encontrado... Assinale a alternativa que você julgue conter a sequência correta do preenchimento das lacunas. rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . Parabéns! Sua resposta foi a correta! Você associou corretamente as lacunas com as respectivas funções. Para o posicionamento no início do arquivo, poderia ser usada, também, a função “ fseek(arq,0,SEEK_SET)”. Devido ao fato de ser um arquivo binário, a leitura deve ser “ fread()” e o teste de final de arquivo, independentemente do modo textual ou binário, é feito pela função “feof()”. Pergunta 7 Resposta Selecionada: Resposta Correta: Comentário da resposta: Em algumas ocasiões, surge a necessidade de se manipular informações organizadas em uma matriz (estrutura de dados homogênea bidimensional). Assim como toda variável, uma matriz também deve ser declarada. Dados os trechos de código abaixo, marque com “V” aquele (s) que você julgue estar correto (s) e, com “F”, o (s) incorreto (s): ( ) int M[5][5]; ( ) int M[5,5]; ( ) int M[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; ( ) int M[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; ( ) int [5]M[5]; Assinale a alternativa que contenha a sequência correta. V; F; V; F; F. V; F; V; V; F. Infelizmente a sua resposta está incorreta. Para responder essa questão, lembre- se que uma matriz sempre deve obedecer possuir em sua declaração, as dimensões. Tente lembrar, também, qual seria a diferença entre a forma de instanciação de uma string e um vetor? Pergunta 8 Em certas situações, onde uma certa variável recebe, como valor de instanciação, um dentre dois valores, podemos substituir o comando “ if...else ” pelo comando condicional inline : o “ if ternário ”. Para essa questão, considere os seguintes trechos contendo as estruturas condicionais: (A) if(a == b) { c=d; } else { c=e; } (B) if(a==0) { x = x + 1; } else 0 em 1 pontos 0 em 1 pontos 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 6/9 Resposta Selecionada: Resposta Correta: Comentário da resposta: { x = x * b; } (C) if(a!=0) { x=0; } else { x=1; } (D) if((a == b)&&(c > d)) { e = f; } else { e = g; } Associe os trechos com comandos condicionais aos condicionais ternários a seguir: ( ) x = (a) ? 0 : 1; ( ) x = (!a) ? x++ : x*=b; ( ) e=((a==b)&&(c>d)) ? e : f; ( ) c=(a==b)?d:e; Escolha a opção que contém a sequência que você julgue ser a correta. A; C; D; A. C; B; D; A. Infelizmente a sua resposta não está correta. Para essa questão, lembre-se que a sintaxe genérica de um comando condicional ternário é: “ var = (expressão) ? valor_if : valor_else;”. Pergunta 9 Um valor binário pode ser representado no padrão conhecido como BCD 8421 (Binary-coded Decimal – Decimal Codificado em Binário). Nesta codificação, os valores 8421 representam o resultado de 2 i , onde i denota a posição do dígito dentro da palavra. Por exemplo, 1001 (2) = 1*8 + 0*4 + 0*2 +1*1 = 9 (10) . Para essa questão, suponha o seguinte código recursivo: #include <stdio.h> #include <string.h> int Bin2Dec(char bin[],int pos,int exp) { if(____) return 0; return (bin[pos]-48)*exp + Bin2Dec(bin,____,____); } int main() { char binario[9]="10011101"; //valor em decimal = 157 printf("Valor convertido: %d", Bin2Dec(binario,strlen(binario)-1,1)); return 0; } Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas: 1 em 1 pontos 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 7/9 Domingo, 10 de Outubro de 2021 13h32min34s BRT Resposta Selecionada: Resposta Correta: Comentário da resposta: . pos<0 ; pos-1 ; exp*2 . . pos<0 ; pos-1 ; exp*2 . Parabéns! Sua resposta foi a correta! Realmente o código foi implementado para que a última posição fosse evocada antes para facilitar o cálculo do expoente – à medida que se aproxima da posição 0 (início do vetor – posição mais significativa do número binário), o expoente vai sendo multiplicado por 2. Sendo assim, a posição foi descrementada a cada evocação da função recursiva. A posição 0 do vetor também deveria ser manipulada – essa a razão do ( pos<0). Pergunta 10 Resposta Selecionada: Resposta Correta: Comentário da resposta: Para a manipulação de um arquivo, deve-se antes, realizar a sua abertura através do comando “fopen()”. Tal comando permite associar o nome físico do arquivo assim como a sua forma de abertura. Para essa questão, analise as linhas de código a seguir: FILE *arq; arq = fopen(“arquivo.dat”,”wb+”); Assinale a alternativa que você julgue ser a correta. Será aberto um arquivo binário “ arquivo.dat” permitindo-se operações de leitura e de escrita. Sempre será criado um arquivo novo, destruindo o conteúdo caso já exista um arquivo com o mesmo nome. Será aberto um arquivo binário “arquivo.dat” permitindo-se operações de leitura e de escrita. Sempre será criado um arquivo novo, destruindo o conteúdo caso já exista um arquivo com o mesmo nome. Parabéns! Sua resposta foi a correta! Você observou bem que foi incluído o símbolo ”+”, que indica que operações de escrita poderão ser realizadas além das operações de escrita do símbolo “w”. O “w” indica ainda, que sempre será criado um arquivo novo, destruindo o conteúdo do arquivo caso já exista. Além destas informações, encontramos o símbolo “b” denotando que o arquivo a ser aberto será do tipo binário. 1 em 1 pontos 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 8/9 10/10/2021 13:34 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-8888.08 https://ibmr.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_743908_1 9/9