Buscar

TÉCNICAS DE PROGRAMAÇÃO - N2 (A5)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Pergunta 1
Uma das manipulações recorrentes sobre vetores ou outras estruturas para o armazenamento de informações na forma de
registros é representada pela ordenação. Ordenar significa organizar as informações de acordo com algum critério, como por
exemplo, em ordem alfabética ou ordem numérica crescente. Para essa questão, considere o trecho de código abaixo: 
#include <stdio.h> 
#include <string.h> 
int main() 
{ 
char vet[11]="hiedagfbjc",aux; 
int i,j; 
for(i=0; i<strlen(vet)-1;i++) 
for( ___ ; ___ ; ___ ) 
if(vet[i]>vet[j]) 
{ 
aux = ___; 
0 em 1 pontos
https://fmu.blackboard.com/bbcswebdav/pid-16230348-dt-content-rid-84766551_1/xid-84766551_1
Resposta Selecionada: 
Resposta Correta: 
Comentário
da
resposta:
vet[i]=___; 
vet[j]=aux; 
} 
printf("Vetor ordenado: %s",vet); 
return 0; 
} 
Escolha a alternativa que represente a ordem correta dos itens para completar as lacunas do código apresentado.
. j=i+1 ; j<i ; j++ ; vet[i] ; vet[j] .
.j=i+1 ; j<strlen(vet) ; j++ ; vet[i] ; vet[j] .
Infelizmente a sua resposta está incorreta. Para responder essa questão, pense no fato de que uma ordenação pode ser realizada pela
�xação de um elemento do vetor através do índice “ i”, para que se possa compará-lo com todos os demais itens a partir dele. Ao
encontrar algum elemento menor, realiza a troca utilizando uma variável temporária.
Pergunta 2
Resposta Selecionada: 
Resposta Correta: 
Na linguagem C, encontramos dois tipos de arquivos: os arquivos textuais e os arquivos binários. Nos arquivos textuais, as informações são gravadas
como strings, independentes de seu tipo; porém, para tal, devemos usar algumas funções especí�cas. Para os comandos abaixo, assinale com (T)
aquele(s) que serve(m) unicamente para arquivos textuais, com (B) para arquivos binários e, com (A) aquele(s) que serve(m) para ambos. 
( ) fwrite() 
( ) fputs() 
( ) fputc() 
( ) fread() 
( ) fopen() 
Assinale a alternativa cuja ordem você julgue ser correta.
B, T, T, B, A.
B, T, T, B, A.
1 em 1 pontos
Comentário
da
resposta:
Parabéns! Sua resposta foi a correta! As funções “ fputs()” e “ fputc()” são utilizadas exclusivamente nos arquivos textuais para a
gravação de strings e de caracter, respectivamente. Para os arquivos binários, utiliza-se “ fwrite()” e “ fread()”. A abertura é
realizada por meio da função “ fopen()” independentemente do tipo do arquivo.
Pergunta 3
Resposta Selecionada: 
Um valor binário pode ser representado no padrão conhecido como BCD 8421 ( Binary-coded Decimal – Decimal Codificado em
Binário). Nesta codificação, os valores 8421 representam o resultado de 2 i , onde i denota a posição do dígito dentro da palavra.
Por exemplo, 1001 (2) = 1*8 + 0*4 + 0*2 +1*1 = 9 (10) . Para essa questão, suponha o seguinte código recursivo: 
  
#include <stdio.h> 
#include <string.h> 
  
int Bin2Dec(char bin[],int pos,int exp) 
{ 
  if(____) return 0; 
  return (bin[pos]-48)*exp + Bin2Dec(bin,____,____); 
} 
  
int main() 
{ 
  char binario[9]="10011101";  //valor em decimal = 157 
  printf("Valor convertido: %d", Bin2Dec(binario,strlen(binario)-1,1)); 
  return 0; 
} 
  
Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas:
.  pos<0 ; pos-1 ; exp*2 .
1 em 1 pontos
Resposta Correta: 
Comentário
da
resposta:
.  pos<0 ; pos-1 ; exp*2 .
Parabéns! Sua resposta foi a correta! Realmente o código foi implementado para que a última posição fosse evocada antes para
facilitar o cálculo do expoente – à medida que se aproxima da posição 0 (início do vetor – posição mais signi�cativa do número
binário), o expoente vai sendo multiplicado por 2. Sendo assim, a posição foi descrementada a cada evocação da função recursiva. A
posição 0 do vetor também deveria ser manipulada – essa a razão do ( pos<0).
Pergunta 4
Resposta Selecionada: 
Resposta Correta: 
Comentário
da
resposta:
Para a evocação de uma função, algumas informações deverão ser armazenadas, como o endereço da linha que contém a evocação (registrador PC –
Program Counter – Contador de Programa), para que, quando a função for �nalizada, o computador saiba voltar ao ponto de chamada. Dentre as
a�rmativa abaixo, assinale com “V” aquela(s) que você julgar estar correta e, com “F”, a(s) falsa(s). 
  
( ) As informações para o retorno, em função da evocação da função, são empilhadas em uma região da memória principal do computador chamada “
stack” (pilha). 
( )  Não precisamos nos preocupar com a quantidade de evocações aninhadas (uma função chamando outra e assim por diante, em uma ação de
profundidade) independentemente dos dispositivo para o qual estamos implementando nosso código. 
( ) Funções recursivas são aquelas que demandam muito recurso da máquina. 
( ) O sistema operacional também empilha as informações decorrentes das funções associadas às interrupções do computador. 
  
Assinale a alternativa abaixo que contenha a sequência que você julgue ser a correta:
.V; F; F; V.
.V; F; F; V.
Parabéns! Sua resposta foi a correta! Realmente, o sistema operacional deve salvar o endereço da linha na qual ocorreu a evocação da
função para que se possa, ao término da função, voltar à linha subsequente à chamada. Esse salvamento ocorre em uma estrutura de
pilha ( stack) da memória principal. Essa região de pilha pode ser extremamente limitada em ambientes com pouca memória, tal como
nos sistemas embarcados. As interrupções da máquina são tratadas, super�cialmente falando, de forma análoga às funções.
1 em 1 pontos
Pergunta 5
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,�oat>. Desta forma, o arquivo consiste em:
<qtd_registros><int1><float1><int2><float2>...<intn,�oatn>.
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,�oat 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); 
1 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da
resposta:
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.
. int ; �oat ; wb .
. int ; �oat ; wb .
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
Quando construimos aplicações para que sejam executadas a partir do comando de linha (prompt ou console), temos a
possibilidade de passarmos informações ao programa. Para tanto, usamos os parâmetros comumente identificados por “ argc ” e
“ argv ”. Considerando o trecho: 
  
 int main(int argc, char *argv[]) 
  
Analise as afirmativas a seguir, marcando com “V” a(s) verdadeira(s) e, com “F” a(s) falsa(s): 
  
( ) caso colocarmos, em nosso código “ printf(“%s”,argv[0]) ”, será impresso o nome do próprio programa. 
( ) caso não passemos nenhum parâmetro ao programa, “ argv ” assumirá o valor 0. 
( ) o parâmetro “ argv ” é uma lista de strings . 
( ) o parâmetro “ argc ” sempre será positivo e maior ou igual a 1. 
1 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da
resposta:
  
Marque a opção que tiver a sequência que você julgue ser a correta:
.V ; F; V ; V .
.V ; F; V ; V .
Parabéns! Sua resposta foi a correta! Realmente, o parâmetro “ argv” sempre conterá pelo menos um item – que é o nome do arquivo
executável evocadopara a execução, inserido na posição 0 do parâmetro “ argv”. Desta forma, o “ argc” sempre será maior ou igual a
1.
Pergunta 7
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(____) 
{ 
palind=0; 
break; 
} 
cont--; 
0 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
} 
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] .
Infelizmente a sua resposta não está correta. Para essa questão, re�ita sobre o processo de reconhecimento de um palíndromo:
temos que testar o primeiro caractere com o último, o segundo com o penúltimo e assim sucessivamente.
Pergunta 8
Em algumas situações, surge a necessidade de agrupar informações para melhor representar uma entidade ou algo da vida real
que esteja sendo manipulado pelo programa. Para tanto, pode-se utilizar estruturas de dados heterogêneos, denominadas, em
C/C++, como “ struct ”. 
Suponha que se deseja representar uma pessoa cuja data de nascimento é quebrada em outra “ struct ” (separando dia, mês e
ano). Em relação à criação da “ struct ”, considere o seguinte trecho de código: 
  
. . . 
typedef struct 
{ 
char nome[30]; 
struct 
{ 
1 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário da
resposta:
unsigned char dia, mes; 
unsigned int ano; 
} nascimento; 
} TPessoa; 
. . . 
TPessoa tp; 
. . . 
  
Para essa questão, considere as afirmações a seguir: 
  
I – não é possível inserir uma estrutura dentro da outra; 
II – para se instaciar o dia, deve-se fazer: “ tp.nascimento.dia=20; ”; 
III – existe um erro de sintaxe pois está faltando o “ typedef ” antes da segunda ocorrência da palavra “ struct ”; 
IV – para se instanciar o mês, deve-se fazer: “ tp.mes=3; ”.
  
Assinale a alternativa que contenha a(s) afirmação(ões) que você julgue correta(s).
II, apenas.
II, apenas.
Parabéns! Sua resposta foi a correta! Realmente é possível criar estruturas dentro de estruturas e, para acessar os campos, deve-
se referenciar todo o caminho, passando pelos itens das estruturas.
Pergunta 9
Uma alocação dinâmica de memória consiste em alocar uma certa região de memória para receber informações de um certo
tamanho que poderá variar ao longo do processamento do programa. Para essa questão, enumere as linhas de código a seguir de
0 em 1 pontos
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
modo a representar a sequência correta que deverá ser programada: 1 para a primeira linha de código que deverá ocorrer, 2 para
a segunda e assim por diante: 
  
( ) vetor = (int *) malloc(sizeof(int)); 
( ) int *vetor; 
( ) free(vetor); 
( ) if(vetor==NULL) 
return; 
( ) *(vetor+i) = 5; 
  
Assinale a alternativa que apresenta a sequência correta.
2, 1, 3, 5, 4.
2, 1, 5, 3, 4.
Infelizmente a sua resposta está incorreta. Para responder essa questão, pense que apenas pode-se usar um ponteiro após a sua
completa criação. Pense, também, que toda região alocada dinamicamente deve ser liberada ao �nal de processamento.
Pergunta 10
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
1 em 1 pontos
Resposta Selecionada: 
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 .
Sábado, 26 de Junho de 2021 08h07min37s BRT
Resposta Correta: 
Comentário
da
resposta:
. 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”).

Continue navegando