Baixe o app para aproveitar ainda mais
Prévia do material em texto
• Pergunta 1 1 em 1 pontos 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. Resposta Selecionada: 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. Resposta 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. Feedback da resposta: 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 2 1 em 1 pontos 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++) ____(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. Resposta Selecionada: . r ; fgets ; prodB*3 . Resposta Correta: . r ; fgets ; prodB*3 . Feedback da resposta: 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 3 1 em 1 pontos Suponha a existência de um arquivo textual onde as palavras são separadas pelo caractere “$” e pelo caractere “%”. Suponha também, que há a necessidade de se implementar um programa para imprimir, na tela, o conteúdo do referido arquivo de modo que, ao encontrar o caractere “$” imprime-se um espaço em branco e, ao encontrar o “%” pula-se para a linha seguinte da tela. Para essa questão, analise o código a seguir e preencha as lacunas. #include <stdio.h> int main() { FILE *arq; char carac; arq=fopen("texto.txt","___"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } while(1) { carac = ____(arq); if(___) break; switch(carac) { case '$': carac = ' '; break; case '%': carac = '\n'; break; } printf("%c",carac); } fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: . r ; getc ; carac == EOF. Resposta Correta: . r ; getc ; carac == EOF. Feedback da resposta: Parabéns! Sua resposta foi a correta! Você associou acertadamente o modo de abertura de arquivo textual para somente leitura (parâmetro “r”), usou a função correta para ler um caractere do arquivo textual (“ getc()”) e testou corretamente o fim do arquivo (“ carac == EOF”). • Pergunta 4 1 em 1 pontos 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. Resposta Selecionada: F, V, F, V. Resposta Correta: F, V, F, V. Feedback da resposta: 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 5 1 em 1 pontos 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 de criação de um arquivo novo e gravação de três registros. #include <stdio.h> void GravaArq(FILE *arq, int val_i,float val_f) { fwrite(&val_i,sizeof(____),1,arq); fwrite(&val_f,sizeof(____),1,arq); } int main() { FILE *arq; int qtd=3; arq=fopen("exercicio.dat","___"); if(arq==NULL) { printf("Erro de abertura do arquivo (1).\n"); return 0; } fwrite(&qtd,sizeof(int),1,arq); GravaArq(arq,0,2.1); GravaArq(arq,10,45.21); GravaArq(arq,20,345.87); fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: . int ; float ; wb . Resposta Correta: . int ; float ; wb . Feedback da resposta: Parabéns! Sua resposta foi a correta! Realmente, para realizar somente operações em um arquivo binário, deve-se usar o modo “ wb”. O processo de gravação ocorre mediante a utilização de “ fwrite()” onde o tamanho do item gravado deve acompanhar o tipo. No caso, foi utilizada a função “ sizeof()” vinculado ao tipo passado como parâmetro para a gravação. • Pergunta 6 0 em 1 pontos 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. Resposta Selecionada: (sizeof(int)+sizeof(float))*3+sizeof(int). Resposta Correta: (sizeof(int)+sizeof(float))*2+sizeof(int). Feedback da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, reflita melhor sobre quantos bytes deverão ser deslocados para se chegar ao terceiro registro sabendo-se que o primeiro registro vem logo em seguida do campo que corresponde à quantidade de registros no arquivo. • Pergunta 7 1 em 1 pontos 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) { //manipulação do registro encontrado... Assinale a alternativa que você julgue conter a sequência correta do preenchimento das lacunas. Resposta Selecionada: rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . Resposta Correta: rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . Feedback da resposta: 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 8 0 em 1 pontos 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. fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputc(linha,arq) . Resposta Correta: . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . Feedback da resposta: Infelizmente a sua resposta está incorreta. Para responder essa questão, reflita e tente responder à questão: como poderemos reposicionar o ponteiro do arquivo para que possamos sobrescrever o conteúdo do arquivo? • Pergunta 9 1 em 1 pontos 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. Resposta Selecionada: V, V, F, V. Resposta Correta: V, V, F, V. Feedback da resposta: 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 10 1 em 1 pontos Em algumas situações, temos a necessidade de conhecermos a quantidade de palavras em um arquivo textual. Para essa questão, analise o código a seguir e preencha as lacunas. #include <stdio.h> int ContPalavras(char linha[]) { int cont=0,i=0,esp=0; for(;linha[i]!='\x0';i++) { if((!esp) && (linha[i]!=' ')) { esp=1; cont++; } else if(esp && (linha[i]==' ')) esp=0; } return cont; } int main() { FILE *arq; char linha[40]; int cont=0; arq=fopen("atividade.txt","___"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } while(1) { ____(linha,40,arq); cont+=ContPalavras(linha); if(____) break; } printf("Qtd de palavras = %d\n",cont); fclose(arq); return 0; } Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: . r ; fgets ; feof(arq) . Resposta Correta: . r ; fgets ; feof(arq) . Feedback da resposta: Parabéns! Sua resposta foi a correta! Você observou bem que o programa manipula um arquivo textual apenas para operações de leitura. A contagem das palavras foi feita linha a linha, usando-se, portanto, a função “ fgets()”. O laço deve ser interrompido ao encontrar o final de arquivo – teste feito a partir do valor de retorno da função “ feof()”.
Compartilhar