Baixe o app para aproveitar ainda mais
Prévia do material em texto
Usuário JEFFERSON GOMES LIRA Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01 Teste 20211 - PROVA N2 (A5) Iniciado 21/06/21 20:32 Enviado 21/06/21 21:52 Status Completada Resultado da tentativa 9 em 10 pontos Tempo decorrido 1 hora, 19 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: Existem duas formas para a criação de vetores: a primeira consiste em uma definição que não utiliza efetivamente ponteiros (tal como: “ int vet[5]; ”) e a segundo através da utilização de ponteiros (como por exemplo, “ int *vet; ”). Para essa questão, assinale com “V” a(s) linha(s) de código que apresentar o acesso correto à uma posição de um vetor instanciado como ponteiro e, com “F” a(s) linha(s) que apresentar uma codificação errada. Suponha que se deseja acessar a posição 3: ( ) y = (*vet)[3] ( ) y = vet[3] ( ) y = *(vet+3) ( ) y = *(vet+sizeof(int)*3) Assinale a alternativa que apresente a sequência que você julgue ser a correta. V, F, F, V. F, V, V, F. Infelizmente a sua resposta está incorreta. Para responder essa questão, reveja as formas de se trabalhar com vetores mapeados através de ponteiros. Lembre-se que desejamos acessar uma certa posição do vetor e que cada posição corresponde à um deslocamento de n bytes em relação à célula anterior, sendo n o tamanho (em bytes) do tipo utilizado. Pergunta 2 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 0 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: 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. . 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 3 Define-se como palíndromo a palavra que tem a mesma grafia e leitura caso seja lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, as palavras “anilina” e “reviver” são palíndromos. Para essa questão, suponha o código apresentado abaixo: #include <stdio.h> #include <string.h> int main() { char str[20]="reviver",palind=1; int tam = strlen(str); int i=0; cont = ____; for(; i ___ cont; i++,cont--) { if(____) 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: { palind=0; break; } cont--; } if(palind) printf("%s eh palindromo.\n",str); else printf("%s nao eh palindromo.\n",str); return 0; } Escolha a alternativa que tenha a sequência correta de preenchimento das lacunas: . tam-1 ; <= ; str[i]!=str[cont] . . tam-1 ; <= ; str[i]!=str[cont] . Parabéns! Sua resposta está correta! Você percebeu corretamente que, para se testar um palíndromo, deve-se percorrer a string nos dois sentidos simultaneamente. Desta forma, testamos o primeiro caractere com o último, o segundo com o penúltimo e assim sucessivamente. Pergunta 4 Resposta Selecionada: Resposta Correta: Comentário da resposta: Um ponteiro para ponteiro denota uma variável que armazena um valor através de uma dupla indireção. Sendo assim, um ponteiro referência um outro ponteiro que, por sua vez, aponta para um valor específico. Para essa questão, analise o código a seguir: #include <stdio.h> int main() { int a = 10, *pont, **pontpont; pont = &a; pontpont = &pont; a = 12; printf("pont = %d\t pontpont: %d\n", *pont,**pontpont); return 0; } Assinale a alternativa que apresenta os valores impressos pela função “ printf() ”. 12 12. 12 12. Parabéns! Sua resposta foi a correta! Você observou bem que as variáveis “ a”, “pontpont” e “ pont” referenciam a mesma posição de memória. Sendo assim, o valor a ser impresso corresponde ao próprio valor de “ a”. Pergunta 5 Uma string pode ser representada uma estrutura homogênea (vetor) para o 1 em 1 pontos 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: armazenamento de uma sequência de caracteres. Em C/C++, as strings são iniciadas na posição 0 do vetor e são finalizadas pelo caractere nulo ('\x0'). Para essa questão, suponha que existe uma stringcarregada em uma variável denominada “str”. Dadas as sequências de código a seguir, assinale, com “R” aquela (s) que proporciona (m) a remoção do conteúdo de uma certa posição e, com “N”, a (s) que apresentam algum erro de sintaxe ou de lógica. Suponha a posição a ser retirada = 4. ( ) i=4; do { str[i]=str[i+1]; i++; } while(str[i]!='\x0'); ( ) i=4; while(i>=0) { str[i]=str[i+1]; i--; } ( ) for(i=4;i>=0;i--) str[i]=str[i+1]; ( ) i=4; for(;str[i]!='\x0';i++) str[i]=str[i+1]; Assinale a alternativa que apresenta a sequência correta. R; N; N; R. R; N; N; R. Parabéns! Sua resposta foi a correta! Você observou bem que se deve deslocar para esquerda todo o conteúdo das posições subsequentes à célula a ser removida. Pergunta 6 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 7 1 em 1 pontos 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: 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. ab+. ab+. 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 8 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; } 1 em 1 pontos Resposta Selecionada: Resposta Correta: Comentário da resposta: ________; //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. rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) . 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 9 Resposta Selecionada: Quando se implementa uma fução, devemos seguir a sintaxe da linguagem de programação utilizada e, também, realzar a definição de sua interface de acordo com as nossas necessidades. Para essa questão, suponha o trecho de código a seguir: #include <stdio.h> //arquivo header para a funcao printf() #include <stdlib.h> //arquivo header para as funcoes srand() e rand() #include <time.h> //arquivo header para a funcao time() ___ func1(int ___x, ___ a) { ___x=rand()%a; return ___x*(rand()%5); } int main() { int aleat,ret; int a=10; srand(time(NULL)); //iniciacao do gerador de numeros aleatorios for(int i=0; i<10;i++) { ret=func1(__aleat,a); printf("valor aleatorio gerado %d: %d (limitado %d) - ret funcao: %d.\n", i,aleat,a,ret); } return 0; } Escolha a afirmativa que contém o resultado da impressão pela função “ printf ” e os trechos a serem inseridos nas lacunas: . int ; * ; deixar em branco ; * ; * ; & . 1 em 1 pontos Sexta-feira, 25 de Junho de 2021 15h51min04s BRT Resposta Correta: Comentário da resposta: .int ; * ; deixar em branco ; * ; * ; & . Parabéns! Sua resposta foi a correta! Você observou bem o fato de que a variável “ aleat”, dentro da função “ main()” não foi instanciada e que a referida instanciação ocorre dentro da função “ func1”. Desta forma, é necessário que ela seja passada como referência. Associando esse tipo de passagem, os demais preenchimentos são consequência. Pergunta 10 Resposta Selecionada: Resposta Correta: Comentário da resposta: Um programa consiste em criar uma sequência lógica de instruções de modo que possam ser manipuladas informações representadas na forma de variáveis. Em linguagens tipadas, como é o caso de C/C++, toda variável deve ser declarada associando à um tipo de dados. Dadas as declarações abaixo em C/C++, assinale com “C” a(s) que você julgue estar corretamente declarada(s) e, com “E” a(s) errada(s): ( ) int a; b; ( ) unsigned char x, y[10]; ( ) int a, char b; ( ) int [10] x; ( ) float a; int b; Assinale a alternativa que contenha a ordem correspondente à sua marcação. E; C; E; E; C. E; C; E; E; C. Parabéns! Sua resposta foi a correta! Realmente, as declarações em C/C++, caso envolvam duas ou mais variáveis, devem seguir a forma: “<tipo> variável1, variável2;”. Pode-se colocar declarações usando vários tipos de dados, porém, cada agrupamento deverá ser separado por um “;”. 1 em 1 pontos
Compartilhar