Baixe o app para aproveitar ainda mais
Prévia do material em texto
Usuário EDUARDO OLIMPIO RAMOS Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 Teste 20211 - PROVA N2 (A5) Iniciado 18/06/21 11:56 Enviado 18/06/21 12:32 Status Completada Resultado da tentativa 8 em 10 pontos Tempo decorrido 35 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: Para essa questão, suponha o seguinte enunciado. “A resistência de uma liga metálica se dá pelos percentuais de utilização de carbono misturados a outros elementos, essencialmente o ferro. Suponha a necessidade de se implementar uma função que, dada uma métrica de resistência (tipo de resistência – suponha que existam disponíveis 10 níveis de resistência) e um volume de ferro (em toneladas) calcule e retorne o percentual e a massa (em toneladas) de carbono a ser utilizada na liga metálica”. Para esse enunciado foi implementada uma função cuja chamada ocorrerá na forma: . . . �oat massaCarbono; massaCabono = CalculaQtdCarbono(tipo_resist,massaFerro, &percentual_carbono); . . . Assinale a opção abaixo que represente a interface mais apropriada para a questão: . �oat CalculaQtdCarbono(unsigned char, float, float *); . . float CalculaQtdCarbono(unsigned char, float, float *); . Parabéns! Sua resposta foi a correta! Você interpretou corretamente o enunciado! Realmente, a função deve retornar dois valores: a massa de carbono (colocado como float em razão dos valores fracionários) e o percentual de carbono (passado como referência, como float, na lista de parâmetros da função). Foi utilizado o “ unsigned int” para o tipo da liga em função de uma escala com poucos valores (por exemplo, de 1 a 10). Pergunta 2 Na linguagem C/C++, encontramos alguns comandos capazes de modificar o fluxo de execução de um programa: “ return ” (retorno de uma função), “ break ” (finaliza, por exemplo, um laço de repetição) e “ continue ” que volta para a linha que contém a definição do laço de repetição (por exemplo, a linha que contém a palavra “ for ”). Para essa questão, suponha que seja necessário implementar uma função hipotética que, passados como parâmetros os valores de “ início ” e de “ �nal ” de uma contagem, imprima os elementos de acordo com o seguinte conjunto de regras: não imprimir os números ímpares; caso seja encontrado um valor múltiplo de 5, sair de laço de repetição; caso seja encontrado o valor 48, sair da função. Para tanto, analise o código a seguir: #include <stdio.h> void func(int inicio, int �nal) { 1 em 1 pontos 1 em 1 pontos https://anhembi.blackboard.com/bbcswebdav/pid-16229536-dt-content-rid-84766551_1/xid-84766551_1 Resposta Selecionada: Resposta Correta: Comentário da resposta: int i=inicio; for(; i<�nal; i++) { if(i%2) ____; printf("%d ",i); if(!(i%5)) ____; if(i==48) { printf("\nSaindo da funcao pois encontrou 48.\n"); ____; } } if(i==�nal) printf("\nsaiu do laco pelo limite da contagem\n"); else printf("\nsaiu do laco pois encontrou um multiplo de 5\n"); } int main() { printf("Execucao 1:\n"); func(6,15); printf("Execucao 2:\n"); func(46,55); printf("Execucao 3:\n"); func(36,39); return 0; } Assinale a opção abaixo que contenha a ordem correta de aparição dos comandos “ return ”, “ break ” e “ continue ”: . continue ; break ; return . . continue ; break ; return . Parabéns! Sua resposta foi a correta! Realmente, para pular os ímpares, deve-se incrementar o contador de contagem e voltar ao início do laço de repetição, usando, para tal, o “ continue”. Por sua vez, a �nalização do laço (quando for múltiplo de 5) é conseguido pelo comando “ break”. Por �m, para encerrar totalmente a função, ao se deparar com o valor 48, utiliza-se o comando “ return”. Pergunta 3 Resposta Selecionada: Resposta Correta: Comentário da Na linguagem C, encontramos dois tipos de arquivos: os arquivos textuais e os arquivos binários. Nos arquivos textuais, as informações são gravadas como strings, independentes de seu tipo; porém, para tal, devemos usar algumas funções especí�cas. Para os comandos abaixo, assinale com (T) aquele(s) que serve(m) unicamente para arquivos textuais, com (B) para arquivos binários e, com (A) aquele(s) que serve(m) para ambos. ( ) fwrite() ( ) fputs() ( ) fputc() ( ) fread() ( ) fopen() Assinale a alternativa cuja ordem você julgue ser correta. B, T, T, B, A. B, T, T, B, A. Parabéns! Sua resposta foi a correta! As funções “ fputs()” e “ fputc()” são utilizadas exclusivamente nos arquivos textuais para a gravação de strings e de caracter, respectivamente. Para os arquivos binários, utiliza- 1 em 1 pontos resposta: se “ fwrite()” e “ fread()”. A abertura é realizada por meio da função “ fopen()” independentemente do tipo do arquivo. Pergunta 4 Resposta Selecionada: Resposta Correta: Comentário da resposta: Para a manipulação de arquivos temos que, inicialmente, realizar a instanciação do ponteiro do arquivo por intermédio da operação de abertura. Para tanto, usa-se a função “ fopen()” passando como parâmetros o nome físico do arquivo e o modo de abertura. Para essa questão, suponha que o programa em questão, tenha em seu código, as seguintes linhas: if(! fread (&item,sizeof(tipo_do_item),1,arq)) return -1; ... if(! fwrite (&item,sizeof(tipo_do_item),1,arq)) return -2; ... Levando em conta as linhas de código acima, o fato de que o arquivo binário deve existir previamente e as suas informações deverão ser mantidas, selecione a opção que contém a forma de abertura adequada. . arq=fopen("arq.dat","rb+"); . . arq=fopen("arq.dat","rb+"); . Parabéns! Sua resposta foi a correta! O fato do código apresentar as funções “ fread()” e “ fwrite()” já determina que está sendo manipulado um arquivo binário. Como o arquivo deve existir previamente e serão realizadas operações de leitura e de escrita, o modo de abertura deverá ser, necessariamente “ rb+”. Pergunta 5 Suponha que existe, em um arquivo textual, uma matriz 4x4 que relaciona os custos de um certo produto A (linhas) combinado com um produto B (colunas) como ilustra o exemplo a seguir: 00 03 06 02 03 00 04 07 06 04 00 01 02 07 01 00 O produto não poderá ser combinado com ele mesmo. Por exemplo, combinando-se o produto dois com o produto três, teremos o valor 01. Cada valor de custo é representado, sempre, por dois caracteres e separados por um espaço em branco. Analise o código a seguir que imprima, na tela, o custo da combinação solicitada pelo usuário e preencha as lacunas. #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char linha[30],custoStr[3]; int prodA,prodB,i=0; FILE *arq; arq=fopen("matrizcustos.txt","___"); if(arq==NULL) { printf("Erro de abertura de arquivo origem."); return 0; } printf("Produto A (de 0 a 3):"); scanf("%d",&prodA); printf("Produto B:(de 0 a 3): "); scanf("%d",&prodB); for(;i<=prodA;i++) 1 em 1 pontos 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: ____(linha,30,arq); printf("linha selecionada: %s\n",linha); strncpy(custoStr,&linha[___],2); custoStr[3]='\x0'; fclose(arq); printf("Custo = %d",atoi(custoStr)); return 0; } Assinale a alternativa que você julgue ser a correta. . r ; fgets ; prodB*3 . . r ; fgets ; prodB*3 . Parabéns! Sua resposta foi a correta! Você associou corretamente os trechos de código às lacunas observando de maneira certa o modo de abertura do arquivo (“ r”), a função de leitura de uma linha a partir de um arquivo textual (“ fgets()”) e o deslocamento dentro da linha (“ prodB*3”). Pergunta 6 Resposta Selecionada: Resposta Correta: Comentário da resposta: Programas devem manipular informações através das instruções. Porém, as informações devem ser escolhidas de acordocom o seu tipo, de modo que a escolha proporcione funcionalidade compatível com o seu objetivo e, também, com o objetivo de otimizar os recursos computacionais. Para essa questão, suponha que você desenvolverá um programa necessitando declarar variáveis cujos limites de valores a serem manipulados são: 0 a 60.000; 'a' até 'z'; ±150.000; ±20.000 e 0 a 230. Dentre as alternativas a seguir, marque aquela que você julgue possuir a sequência correta associando de forma mais otimizada, os tipos de dados às faixas de valores: char; char; long int; int; unsigned char. char; char; long int; int; unsigned char. Parabéns! Sua resposta foi a correta! Você associou acertadamente os tipos inteiros às faixas de valores, observando que no modi�cador de tipo “ unsigned” o limite positivo seja dobrado, por exemplo, o tipo “ char” tem a sua faixa de -128 a 127, por sua vez, o “ unsigned char” pode variar de 0 a 255. Pergunta 7 Resposta Selecionada: Resposta Correta: Uma alocação dinâmica de memória consiste em alocar uma certa região de memória para receber informações de um certo tamanho que poderá variar ao longo do processamento do programa. Para essa questão, enumere as linhas de código a seguir de modo a representar a sequência correta que deverá ser programada: 1 para a primeira linha de código que deverá ocorrer, 2 para a segunda e assim por diante: ( ) vetor = (int *) malloc(sizeof(int)); ( ) int *vetor; ( ) free(vetor); ( ) if(vetor==NULL) return; ( ) *(vetor+i) = 5; Assinale a alternativa que apresenta a sequência correta. 2, 1, 3, 5, 4. 2, 1, 5, 3, 4. 1 em 1 pontos 0 em 1 pontos Comentário da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, pense que apenas pode-se usar um ponteiro após a sua completa criação. Pense, também, que toda região alocada dinamicamente deve ser liberada ao �nal de processamento. Pergunta 8 Resposta Selecionada: Resposta Correta: Comentário da resposta: Uma variável do tipo “ string ” pode ser representada, também, como um ponteiro para “ char ”. Inicialmente, o ponteiro referencia a posição de memória ocupada pela primeira letra da string . Podemos caminhar pela string através do incremento do ponteiro que a representa. Para essa questão, analise o código apresentado a seguir: #include <stdio.h> #include <string.h> void Imprimir(char *str, int tam) { char *carac; for (carac = str; carac < str + tam; carac++) printf ("%c", *carac); } int main() { char frase[10]="abcdefgh"; Imprimir(frase,strlen(frase)); return 0; } Assinale a alternativa que apresenta a saída da função “ printf() ”. . hgfedcba. abcdefgh. Infelizmente a sua resposta está incorreta. Para responder essa questão, analise melhor a instanciação inicial do ponteiro “ carac”. Analise, também, a manipulação do ponteiro “ carac”, respondendo à pergunta: o que acontece quando incrementamos um ponteiro? Pergunta 9 Na computação, muito se manipula informações no sistema binário de numeração. A representação binária básica é chamada de BCD8421 . O número 8421 representa o valor de cada bit na posição i (2 i ) com i iniciando em 0 na posição mais à direita. Por exemplo, o valor 1011 (2) equivale à 8 + 0 + 2 + 1 = 11 (10) . Suponha um número decimal armazenado em uma variável denominada “ decimal ” do tipo “ unsigned char ” ( unsigned char decimal=103 ). Suponha a necessidade de converter esse número para o sistema binário de numeração e armazená-lo em uma string “ numbin ”. Analise os trechos de código a seguir: I → for(i=0;i<8;i++,decimal/=2) numbin[i]=decimal%2+48; numbin[8]=0; II → for(i=7;i>=0;i--,decimal/=2) numbin[i]=decimal%2+48; numbin[8]=0; 0 em 1 pontos 1 em 1 pontos Sábado, 13 de Novembro de 2021 22h12min41s BRT Resposta Selecionada: Resposta Correta: Comentário da resposta: III → for(i=7;i>=0;i--) { decimal = decimal / 2; numbin[i]=decimal%2+48; } numbin[8]=0; IV → for(i=7;i>=0;i--,decimal/=2) numbin[i]=decimal/2+48; numbin[8]=0; Após analisar os trechos acima, podemos dizer que realiza (m) a conversão de decimal para binário, apenas o (s) código (s): II e III. II e III. Parabéns! Sua resposta foi a correta! No caso, as alternativas II e III contém o mesmo código, porém alterando apenas o local para a divisão da variável “decimal”. A soma por 48 foi realizada pelo fato de que o valor do caractere “0”, na tabela ASCII, vale 48. Ao �nal, foi adicionado o caractere nulo à última posição da string ( numbin[8]=0;) para representar o seu �nal. Pergunta 10 Resposta Selecionada: Resposta Correta: Comentário da resposta: Quando construimos aplicações para que sejam executadas a partir do comando de linha (prompt ou console), temos a possibilidade de passarmos informações ao programa. Para tanto, usamos os parâmetros comumente identificados por “ argc ” e “ argv ”. Considerando o trecho: int main(int argc, char *argv[]) Analise as afirmativas a seguir, marcando com “V” a(s) verdadeira(s) e, com “F” a(s) falsa(s): ( ) caso colocarmos, em nosso código “ printf(“%s”,argv[0]) ”, será impresso o nome do próprio programa. ( ) caso não passemos nenhum parâmetro ao programa, “ argv ” assumirá o valor 0. ( ) o parâmetro “ argv ” é uma lista de strings . ( ) o parâmetro “ argc ” sempre será positivo e maior ou igual a 1. Marque a opção que tiver a sequência que você julgue ser a correta: .V ; F; V ; V . .V ; F; V ; V . Parabéns! Sua resposta foi a correta! Realmente, o parâmetro “ argv” sempre conterá pelo menos um item – que é o nome do arquivo executável evocado para a execução, inserido na posição 0 do parâmetro “ argv”. Desta forma, o “ argc” sempre será maior ou igual a 1. 1 em 1 pontos
Compartilhar