Baixe o app para aproveitar ainda mais
Prévia do material em texto
· Pergunta 1 1 em 1 pontos 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. Resposta Selecionada: . arq=fopen("arq.dat","rb+"); . Resposta Correta: . arq=fopen("arq.dat","rb+"); . Feedback da resposta: 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 2 1 em 1 pontos 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> 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. Resposta Selecionada: . r ; w ; fputs ; atividade_tmp.txt ; atividade.txt . Resposta Correta: . r ; w ; fputs ; atividade_tmp.txt ; atividade.txt . Feedback 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 3 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 4 1 em 1 pontos Na programação em C, podemos encontrar duas formas distintas de se abrir um arquivo (textual ou binária) aliadas aos modos que esse arquivo será manipulado. Para essa questão, analise o código a seguir, que manipula um arquivo binário, e preencha a lacuna corretamente. . . . FILE *arq; int codigo; char buffer[35]="algo a ser escrito no arquivo\n"; arq=fopen("exercicio.dat","____"); if(arq==NULL) { printf("Erro de abertura do arquivo.\n"); return 0; } ... if(!fread(&codigo,sizeof(int),1,arq)) //caso o arquivo ainda esteja vazio codigo=0; else codigo++; ... if(!fwrite(&codigo,sizeof(int),1,arq)) printf("erro na gravacao do codigo.\n"); else if(!fwrite(buffer,35,1,arq)) printf("Erro na gravacao do buffer.\n"); fclose(arq); . . . Considerando que, caso o arquivo não exista, será criado um novo e caso exista, os dados deverão ser mantidos, assinale a alternativa que corresponda ao preenchimento da lacuna. Resposta Selecionada: ab+. Resposta Correta: ab+. Feedback da resposta: Parabéns! Sua resposta foi a correta! Você observou corretamente a consideração final: “ caso o arquivo não exista, será criado um novo e caso exista, os dados deverão ser mantidos”. Caso fosse colocado “ r+”, o arquivo deveria existir para ser aberto; caso a abertura fosse “ w+”, o arquivo sempre seria criado. Então, sobra o modo “ a+”. Pelo fato de aparecer “ fwrite()” e “ fread()”, então, o arquivo é binário. Sendo assim, “ ab+”. · Pergunta 5 1 em 1 pontos 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. Resposta Selecionada: F, V, V, F. Resposta Correta: F, V, V, F. Feedback da resposta: 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 6 1 em 1 pontos Em uma operação de recuperação de informações a partir de um arquivo, após a leitura de um item, deve-se sempre verificar se o final do arquivo foi alcançado. A informação de EOF ( End-Of-File – Final de Arquivo) pode ser obtida em diversas operações. Para essa questão, analise as linhas de código a seguir: I – info = fgetc(arq); II – fputs(buffer, sizeof(buffer), arq); III – fread(buffer,sizeof(buffer),1,arq); IV – fputc(carac,arq); Assinale a alternativa que você julgue ser a correta. Resposta Selecionada: Apenas a função da linha III não pode retornar EOF. Resposta Correta:Apenas a função da linha III não pode retornar EOF. Feedback da resposta: Parabéns! Sua resposta foi a correta! Apesar das funções das linhas II e IV serem de saída (gravação), podem retornar EOF em caso de erro. A função da linha I pode retornar EOF no caso do encontro de final de arquivo na operação de leitura. A função da linha III retorna a quantidade de itens lidos. · Pergunta 7 1 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); fputs(linha,arq) . Resposta Correta: . r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . Feedback da resposta: 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. · Pergunta 8 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()”. · Pergunta 9 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 10 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.
Compartilhar