Baixe o app para aproveitar ainda mais
Prévia do material em texto
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 1/10 Usuário EDUARDO OLIMPIO RAMOS Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead- 14912.01 Teste ATIVIDADE 4 (A4) Iniciado 04/06/21 17:39 Enviado 04/06/21 18:42 Status Completada Resultado da tentativa 10 em 10 pontos Tempo decorrido 1 hora, 2 minutos Resultados exibidos Respostas enviadas, Respostas corretas, Comentários Pergunta 1 Resposta Selecionada: Resposta Correta: Comentário da resposta: Para essa questão, suponha que um certo arquivo mantém, em sua primeira posição, a quantidade de registros armazenados. Após o indicativo da quantidade, são gravados os valores na forma <int,float>. Desta forma, o arquivo consiste em: <qtd_registros><int1><float1><int2><float2>...<intn,floatn>. Para essa questão, analise o código a seguir e preencha as lacunas de modo a representar o processo listagem de todos os registros armazenados no arquivo. #include <stdio.h> int main() { FILE *arq; int qtd,valor_int,i; float valor_float; arq=fopen("exercicio.dat","___"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } fread(&qtd,____,1,arq); for(i=0; i<qtd;i++) { ____(&valor_int,sizeof(int),1,arq); ____(&valor_float,sizeof(float),1,arq); printf("[%d] int=%d float=%f\n",i,valor_int,valor_float); } fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. . rb ; sizeof(int) ; fread ; fread . . rb ; sizeof(int) ; fread ; fread . Parabéns! Sua resposta foi a correta! Você observou bem o fato de que, para somente a leitura de um arquivo binário, faz-se necessário apenas o modo “ rb” 1 em 1 pontos 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 2/10 de abertura. Arquivos binários requerem a função “ fread()” para que seja processada a leitura do registro. Pergunta 2 Resposta Selecionada: Resposta Correta: Comentário da resposta: Quando se manipula um arquivo, às vezes temos a necessidade de alterar informações ou incluir novas. Para tanto, funções “ fseek()”, “ fgets()”, “ fputs()”, “ fgetc()” e “ fgets()” podem ser utilizadas. Dentre as alternativas a seguir, assinale V para verdadeiro e F para falso. ( ) a função “ fseek()“ não admite valores negativos para o seu deslocamento mesmo quando utilizada com o parâmetro “SEEK_CUR”; ( ) no caso de gravarmos uma informação no meio do arquivo, a informação será sobrescrita; ( ) no caso de gravarmos uma informação no meio do arquivo, toda a informação abaixo do ponto a receber a nova informação será deslocada; ( ) a função “ fseek()“ admite três pontos de referência para o seu deslocamento: a partir do início do arquivo (SEEK_SET), a partir da posição corrente (SEEK_CUR) e a partir do fim do arquivo (SEEK_END). Assinale a alternativa que você julgue ter a sequência correta. F, V, F, V. F, V, F, V. Parabéns! Sua resposta foi a correta! Pelo fato da função “ fseek()” utilizar, como parâmetro de deslocamento, um tipo “ long int”, valores negativos podem ser colocados para que seja realizado, um deslocamento de retrocesso do ponteiro do arquivo ou a partir do ponto referenciado. Assim como em vetores, a escrita em posições já gravadas provoca a sobreposição de informações. Pergunta 3 Resposta Selecionada: Resposta Correta: Comentário da resposta: Linguagens estruturadas permitem que informações sejam armazenadas e recuperadas de memórias não voláteis. Porém, elas são dependentes de funções e estruturas exportadas pelo sistema operacional. Dadas as afirmativas a seguir, classifique-as V para verdadeiro e F para falso. ( ) Ponteiros de arquivos (“ FILE *”) devem ser alocados dinamicamente através do uso “malloc()” antes de serem utilizados. ( ) Ponteiros de arquivos referenciam uma posição de memória mantida pelo sistema operacional que armazena atributos e status dos arquivos manipulados. ( ) Para a manipulação da posição corrente do arquivo podemos usar as funções “ ftell()” e “fseek()” que devolvem e setam a posição corrente do arquivo, respectivamente. ( ) A função “fread ()” retorna EOF quando chegar ao final do arquivo. Assinale a alternativa que você julgue ter a sequência correta. F, V, V, F. F, V, V, F. Parabéns! Sua resposta foi a correta! Descritores de arquivos são estruturas mantidas pelo sistema operacional e são endereçados através dos ponteiros de arquivos, que são instanciados pelo uso da função “fopen ()”. A função “fread ()” retorna a quantidade de itens lidos. Pergunta 4 Em diversas situações, nos arquivos textuais, faz-se necessária a substituição de palavras. Para essa questão, analise o código a seguir que coleta linha por linha de um arquivo texto e realiza a substituição de palavras. Na análise, preencha as lacunas com os códigos correspondentes. #include <stdio.h> #include <string.h> 1 em 1 pontos 1 em 1 pontos 1 em 1 pontos 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 3/10 Resposta Selecionada: Resposta Correta: void ProcessaLinha(char linha[],char nome_ret[],char nova_palavra[]) { int i=0; char tmp[40]; for(;i<strlen(linha)-strlen(nome_ret);i++) if(!strncmp(&linha[i],nome_ret,strlen(nome_ret))) { strncpy(tmp,linha,i); tmp[i]='\x0'; strcat(tmp,nova_palavra); strcat(tmp,&linha[i+strlen(nome_ret)]); strcpy(linha,tmp); } } int main() { char linha[40],nome_ret[11],nova_palavra[11]; FILE *arq,*arqtmp; arq=fopen("atividade.txt","___"); if(arq==NULL) { printf("Erro de abertura de arquivo origem."); return 0; } arqtmp=fopen("atividade_tmp.txt","___"); if(arq==NULL) { printf("Erro de abertura do arquivo temporario."); return 0; } printf("Palavra a ser substituida (ate 10 letras): "); gets(nome_ret); printf("Nova palavra (ate 10 letras): "); gets(nova_palavra); while(1) { fgets(linha,40,arq); //fgets() lê toda a linha até o <enter> if(feof(arq)) break; ProcessaLinha(linha,nome_ret,nova_palavra); ____(linha,arqtmp); } fclose(arq); fclose(arqtmp); if(remove("atividade.txt")) printf("Erro na remocao.\n"); else if(rename("____", "____")) printf("Erro no renomeamento.\n"); return 0; } Assinale a alternativa que você julgue possuir a sequência correta. . r ; w ; fputs ; atividade_tmp.txt ; atividade.txt . . r ; w ; fputs ; atividade_tmp.txt ; atividade.txt . 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 4/10 Comentário da resposta: Parabéns! Sua resposta foi a correta! Você observou corretamente os tipos de abertura necessários para o arquivo origem das informações e para o arquivo temporário; e, também, a necessidade do uso da função “ fputs()” para a gravação no arquivo temporário e os parâmetros da função “ rename()”. Pergunta 5 Resposta Selecionada: Resposta Correta: Comentário da resposta: 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 aberturade 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++) ____(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”). 1 em 1 pontos 1 em 1 pontos 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 5/10 Pergunta 6 Resposta Selecionada: Resposta Correta: Comentário da resposta: Suponha a existência de um arquivo onde a primeira posição indica a quantidade de registros armazenados. Após o indicativo da quantidade, o arquivo armazena valores na forma <int,float>. Desta forma, o arquivo consiste em: <qtd_registros><int1><float1><int2><float2>...<intn,floatn>. Para essa questão, analise o código a seguir e preencha a lacuna de modo que o programa imprima os valores relativos ao terceiro par “<int><float>”. #include <stdio.h> int main() { FILE *arq; int valor_int; float valor_float; arq=fopen("exercicio.dat","rb+"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } fseek(arq,_______________,SEEK_SET); fread(&valor_int,sizeof(int),1,arq); fread(&valor_float,sizeof(float),1,arq); printf("Terceiro registro: int=%d float=%f\n",valor_int,valor_float); fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. ( sizeof(int)+sizeof(float))*2+sizeof(int). (sizeof(int)+sizeof(float))*2+sizeof(int). Parabéns! Sua resposta foi a correta! Você analisou corretamente o fato de que o terceiro registro corresponde ao deslocamento multiplicado por dois, pelo fato de que a numeração do registro se inicia em zero. Além do “(sizeof(int)+sizeof(float))*2”, deve-se adicionar o deslocamento relativo ao valor da quantidade de registros, localizado no início do arquivo. Pergunta 7 Ao manipularmos arquivos, alguns cuidados ou estilos devem ser tomados para garantir ao programa um maior grau de eficiência e segurança. Dentre as afirmativas a seguir, identifique V para verdadeiro e F para falso. ( ) arquivos binários tendem a demandar menos espaço em relação aos arquivos texto devido ao fato de que os espaços alocados fisicamente são proporcionados pelos tamanhos dos tipos de dados utilizados; ( ) em toda operação envolvendo arquivos, é sempre conveniente testar se a operação, por exemplo, abertura, escrita e leitura, foram bem sucedidas; ( ) é mais conveniente abrir um arquivo sempre para leitura e escrita para evitar testes de acesso pelo sistema operacional, tornando, portanto, o programa mais eficiente; ( ) é conveniente abrir o arquivo com o modo justo para a demanda, ou seja, caso for realizada apenas leitura de informações, abrir o arquivo somente para leitura. Dessa forma, o programa torna-se mais seguro em relação ao acesso às informações. Assinale a alternativa que tenha a sequência correta. 1 em 1 pontos 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 6/10 Resposta Selecionada: Resposta Correta: Comentário da resposta: V, V, F, V. V, V, F, V. Parabéns! Sua resposta foi a correta! Realmente, uma das vantagens dos arquivos binários sobre os arquivos de texto é em relação ao espaço ocupado. Enquanto que, por exemplo, o valor inteiro 345789 ocupa seis bytes nos arquivos textuais, nos arquivos binários são utilizados apenas quatro bytes. Como um arquivo pode apresentar problemas, por exemplo, nos próprios dispositivos de I/O (Input/Output – Entrada/Saída), é conveniente testar se a operação foi bem-sucedida. Por fim, é também conveniente abrir o arquivo com o modo adequado à operação para tornar o programa mais seguro em relação ao acesso e manutenção das informações. Uma informação sobre eficiência que merece destaque é que deve-se evitar o uso das funções “ fprintf()” e “ fscanf()” devido ao fato de que elas realizam formatações dos valores manipulados aumentando-se, portanto, o tempo de processamento. Para maior eficiência, deve-se utilizar as funções “ fwrite()” e “ fread()”. Pergunta 8 Resposta Selecionada: Resposta Correta: Comentário da resposta: Arquivos textuais são aqueles cujo conteúdo é formado somente por strings e podem ser abertos por editores de texto do tipo “bloco de notas”. Para essa questão, analise o código a seguir: #include <stdio.h> int main() { FILE *arq; long pos,i; char carac; arq = fopen("conteudo.txt","r"); if(arq==NULL) { printf("Erro de aberura do arquivo."); return 0; } fseek(arq,0,SEEK_END); pos=ftell(arq); printf("Pos = %ld\n",pos); for(i=pos-1; i>=0; i--) { fseek(arq,i,SEEK_SET); carac = fgetc(arq); printf("%c",carac); } return 0; } Assinale a alternativa que você julgue ser a correta. O programa faz a impressão do arquivo em ordem inversa. O trecho com as linhas “ fseek(arq,0,SEEK_END);” e “ pos=ftell(arq);” servem para coletar o tamanho do arquivo. O programa faz a impressão do arquivo em ordem inversa. O trecho com as linhas “fseek(arq,0,SEEK_END);” e “pos=ftell(arq);” servem para coletar o tamanho do arquivo. Parabéns! Sua resposta foi a correta! Realmente o programa exibe o conteúdo do arquivo em ordem reversa. Para posicionar em cada caractere do arquivo, foi 1 em 1 pontos 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 7/10 realizado um laço de repetição iniciando-se no penúltimo elemento visto que o último corresponde, justamente, ao EOF. Pergunta 9 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. Pergunta 10 Em arquivos textuais, quando desejamos substituir uma informação com o mesmo tamanho da nova informação, podemos realizar sobrescrita sem a necessidade de criação de arquivo temporário para receber a nova versão do conteúdo. Para essa questão, analise o código a seguir, que realiza a troca do caractere “i” pelo caractere “y” na primeira linha do arquivo. Em sua análise preencha as lacunas. #include <stdio.h> #include <string.h> int main() { FILE *arq; char linha[40]; long pos; int i; arq=fopen("atividade.txt","___"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n");return 0; } pos=_____; //armazenar a posicao corrente do ponteiro de arquivo. fgets(linha,40,arq); for(i=0;i<strlen(linha);i++) if(linha[i]=='i') linha[i]='y'; _____; //reposicionar no ponto anterior aa leitura _____; //gravacao da linha. 1 em 1 pontos 1 em 1 pontos 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 8/10 Segunda-feira, 18 de Outubro de 2021 20h06min07s BRT Resposta Selecionada: Resposta Correta: Comentário da resposta: fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . Parabéns! Sua resposta foi a correta! Você deve ter notado que podemos salvar a posição do ponteiro do arquivo para que possamos restaurar a posição e sobrescrever o conteúdo. Para isso, foram usadas as funções “ ftell()” e “fseek()”, respectivamente. 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 9/10 18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 10/10
Compartilhar