Baixe o app para aproveitar ainda mais
Prévia do material em texto
Atividade 4 - Técnicas de Programação 1- 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. R: 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. 2- 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. R: V, V, F, V. 3- 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. R: . int ; float ; wb . 4- 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. R: ( sizeof(int)+sizeof(float))*2+sizeof(int). 5- 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. R: ab+ 6- 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. R: 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. 7- 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. R: r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . 8- 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. R: Apenas a função da linha III não pode retornar EOF. 9- 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. R: F, V, F, V. 10- 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. R: . r ; fgets ; feof(arq) .
Compartilhar