Buscar

A5 ou N2 - Técnicas de Programação

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 8 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 8 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

Prévia do material em texto

Usuário XXXXXXXXXXXXXXXXXXXXXXXXXX 
Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120.ead-
17808.01 
Teste 20212 - PROVA N2 (A5) 
Iniciado 04/10/21 10:06 
Enviado 04/10/21 11:48 
Status Completada 
Resultado da 
tentativa 
8 em 10 pontos 
Tempo decorrido 1 hora, 41 minutos 
Instruções Caso necessite a utilização do "EXCEL" clique no link ao lado -----------
> excel.xlsx 
PERGUNTA 1 
1. 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 listagem de todos os registros armazenados no arquivo. 
#include <stdio.h> 
 
 
int main() 
{ 
FILE *arq; 
int qtd,valor_int,i; 
float valor_float; 
arq=fopen("exercicio.dat","___"); 
if(arq==NULL) 
{ 
printf("Erro de abertura do arquivo.\n"); 
return 0; 
} 
fread(&qtd,____,1,arq); 
for(i=0; i<qtd;i++) 
{ 
____(&valor_int,sizeof(int),1,arq); 
____(&valor_float,sizeof(float),1,arq); 
printf("[%d] int=%d float=%f\n",i,valor_int,valor_float); 
} 
fclose(arq); 
return 0; 
} 
Assinale a alternativa que você julgue ser a correta. 
https://anhembi.blackboard.com/bbcswebdav/pid-18764853-dt-content-rid-84766551_1/xid-84766551_1
 
 . rb ; sizeof(int) ; fgets ; fgets . 
 
 . r ; sizeof(int) ; fread ; fread . 
 
 . wb ; sizeof(int) ; fread ; fread . 
 
 . rb ; sizeof(int) ; fread ; fread . 
 
 . rb ; sizeof(int) ; fwrite ; fwrite . 
 
 
PERGUNTA 2 
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 = ___; 
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] ; aux . 
 
 
.j=i+1 ; j>i ; j++ ; vet[i] ; vet[j] . 
 
 
.j=i+1 ; j<i ; j++ ; vet[i] ; vet[j] . 
 
 
.j=i+1 ; j<strlen(vet) ; j++ ; vet[i] ; vet[j] . 
 
 
.j=i+1 ; j<strlen(vet) ; j++ ; vet[i] ; aux . 
 
 
PERGUNTA 3 
1. Pode-se utilizar ponteiros para ponteiros para que uma matriz possa ser implementada. 
Para isso, a dimensão que representa as linhas consiste em um vetor de ponteiros para 
ponteiros. Cada item da linha faz referência à um vetor de ponteiros, com a dimensão da 
quantidade de colunas, para o armazenamento das informações propriamente dito. Para 
essa questão, analise o código a seguir para a soma de duas matrizes e preencha as 
lacunas: 
 
 
float ___SomaMatrizes(int n_linhas, int n_colunas , float ___matrizA, 
float ___matrizB) 
{ 
float ___matriz_result; 
int i,j; 
matriz_result = CriarMatriz(n_linhas,n_colunas); 
if(matriz_result==NULL) 
return NULL; 
for(i=0; i<n_linhas;i++) 
for(j=0; j<n_colunas;j++) 
matriz_result[i][j]=matrizA[i][j]+matrizB[i][j]; 
return matriz_result; 
} 
 
 
 
int main() 
{ 
float **mat1,**mat2, **mat3; 
int i,j; 
mat1 = CriarMatriz(5,5); 
mat2 = CriarMatriz(5,5); 
if((mat1==NULL)||(mat2==NULL)) 
{ 
printf("Erro criacao da matriz.\n"); 
return 0; 
} 
for(i=0;i<5;i++) 
for(j=0;j<5;j++) 
{ 
mat1[i][j]=i*5+j; 
mat2[i][j]=i*5+j+20; 
} 
mat3 = SomaMatrizes(5,5,mat1,mat2); 
printf("\nMatriz Resultante\n"); 
for(i=0;i<5;i++) 
{ 
for(j=0;j<5;j++) 
printf("%.1f ",mat3[i][j]); 
printf("\n"); 
} 
mat1 = RemoveMatriz(5,mat1); 
mat2 = RemoveMatriz(5,mat2); 
mat3 = RemoveMatriz(5,mat3); 
return 0; 
} 
Assinale a alternativa que apresenta a sequência correta relativa ao preenchimento das 
lacunas. 
 
 .** ; ** ; ** ; **. 
 
 ** ; ** ; ** ; *. 
 
 ** ; * ; * ; **. 
 
 * ; ** ; ** ; *. 
 
 * ; * ; * ; *. 
A QUESTÃO ACIMA FOI UM CHUTE COMPLETO!!! 
 
PERGUNTA 4 
1. Em algumas situações, como inversão de vetores, surge a necessidade de implementar 
uma função que realiza a troca de dois elementos entre si, ou seja, o elemento “ vet[i] ” 
recebe o valor de “ vet[j] ” e “ vet[j] ” recebe o valor de “ vet[i] ”. Sendo assim, pode-se 
codificar uma função que realizará exatamente essa permuta. Para essa questão, 
considere o código apresentado a seguir: 
 
 
#include <stdio.h> 
#include <string.h> 
 
void swap(char __c1, char __c2) 
{ 
 char tmp; 
 tmp = __c1; 
 __c1 = __c2; 
 __c2 = tmp; 
} 
 
void Ordena(char str[]) 
{ 
 for(int i=0; i < strlen(str)-1; i++) 
 for(int j=i+1; j < strlen(str); j++) 
 if(str[i]>str[j]) swap(__str[i],__str[j]); 
} 
 
int main() 
{ 
 char str[11]="icbjdgfeah"; 
 printf("Vetor original: %s\n",str); 
 Ordena(str); 
 printf("Vetor ordenado: %s\n",str); 
 return 0; 
} 
 
Assinale a opção abaixo que contenha os elementos para preencher as lacunas (nas 
opções abaixo, o símbolo ”_” significa deixar a lacuna sem preenchimento): 
 
 . _ ; _ ; _ ; _ ; _ ; _ ; _ ; _ . 
 
 . * ; * ; _ ; _ ; _ ; _ ; & ; & . 
 
 . & ; & ; * ; * ; * ; * ; & ; & . 
 
 . * ; * ; * ; * ; * ; * ; & ; & . 
 
 . * ; * ; * ; * ; * ; * ; _ ; _ . 
 
PERGUNTA 5 
1. Laços de repetição são usados para que um conjunto (blocos) de instruções seja 
executado enquanto uma certa condição esteja sendo satisfeita. Em alguns sistemas, 
como por exemplo, em sistemas embarcados, o programa consiste em um laço de 
repetição perpétua que contém as instruções a serem processadas eternamente. Para 
essa questão, assinale: com “P” a(s) alternativa(s) que represente(m) laço de repetição 
perpétua; com “N” a(s) alternativa(s) que não represente(m) laço de repetição perpétua; 
com “E” a(s) alternativa(s) que apresenta(m) erro de sintaxe: 
(P) for( ; ; ); 
(N) while(i>=0) { … } 
(P) while(1); 
(E) while( ); 
Agora assinale a alternativa correta. 
 
 E; N; N; P. 
 
 N; N; E; P. 
 
 P; P; E; N. 
 
 P; N; P; E. 
 
 P; N; E; E. 
 
PERGUNTA 6 
1. Uma das etapas iniciais da implementação das funções consiste na definição de suas 
interfaces, ou seja, definição dos tipos de retornos e de suas listas de parâmetros. Para 
essa questão, suponha o seguinte enunciado: “Um certa loja apresenta um programa de 
incentivo aos seus vendedores atribuindo premiações àqueles que realizaram mais vendas 
no mês (independentemente do valor vendido) e àqueles que conseguiram maiores 
montantes de venda (maior valor vendido independentemente do número de vendas 
efetuadas). As vendas estão lançadas em uma matriz – cada linha denota um vendedor e 
as colunas representam as vendas de cada vendedor. A última posição das colunas de 
cada vendedor contém o valor -1 indicando o término dos lançamentos. Os nomes dos 
vendedores estão lançados em um vetor de strings – cada vendedor respresenta um 
índice do vetor“. 
 
Para tanto, serão criadas as funções abaixo: 
 
NomeVendedorMaiorQtdVendas( ); 
NomeVendedorMaiorValorVendas( ); 
 
Para a questão, suponha que a quantidade máxima de vendas vale 30 e os nomes têm o 
tamanho máximo de 40 caracteres. Assinale a opção abaixo que contenha as interfaces 
das funções apropriadas ao enunciado: 
 
 
. int NomeVendedorMaiorQtdVendas(float vendas[][30], char 
nomes[40], 
 char nomemaior[]) ; 
 float NomeVendedorMaiorValorVendas(float vendas[][30], char 
nomes[40], 
 char nomemaior[]) . 
 
 
. int NomeVendedorMaiorQtdVendas(float vendas[][30], char 
nomes[][40], 
 char nomemaior[]) ; 
 float NomeVendedorMaiorValorVendas(float vendas[][30], char 
nomes[][40],char nomemaior[]) . 
 
 
. float NomeVendedorMaiorQtdVendas(float vendas[][], char 
nomes[][], 
 char nomemaior[]) ; 
 int NomeVendedorMaiorValorVendas(float vendas[][], char 
nomes[][], 
 char nomemaior[]) . 
 
 
. int NomeVendedorMaiorQtdVendas(float vendas[][], char 
nomes[][], 
 char nomemaior[]) ; 
 float NomeVendedorMaiorValorVendas(float vendas[][], char 
nomes[][], 
 char nomemaior[]) . 
 
 
. float NomeVendedorMaiorQtdVendas(float vendas[][30], char 
nomes[][40], 
 char nomemaior[]) ; 
 int NomeVendedorMaiorValorVendas(float vendas[][30], char 
nomes[][40], 
 char nomemaior[]) . 
 
PERGUNTA 7 
1. Uma string pode ser representada uma estrutura homogênea (vetor) para o 
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 string carregada 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. 
 
 N; R; R; N. 
 
 N; R; N; R. 
 
 R; N; R; N. 
 
 R; N; N; R. 
 
 R; R; N; R. 
 
PERGUNTA 8 
1. Uma variável do tipo “ string ” pode ser representada, também, como um ponteiro para 
“ char ”. Inicialmente, o ponteiro referencia a posição de memória ocupada pela primeira 
letra da string . Podemos caminhar pela string através do incremento do ponteiro que a 
representa. Para essa questão, analise o código apresentado a seguir: 
 
 
#include <stdio.h> 
#include <string.h> 
 
 
void Imprimir(char *str, int tam) 
{ 
char *carac; 
for (carac = str; carac < str + tam; carac++) 
printf ("%c", *carac); 
} 
 
 
int main() 
{ 
char frase[10]="abcdefgh"; 
Imprimir(frase,strlen(frase)); 
return 0; 
} 
Assinale a alternativa que apresenta a saída da função “ printf() ”. 
 
 .abc. 
 
 .hgfedcba. 
 
 abcdefgh. 
 
 .h. 
 
 .a. 
 
PERGUNTA 9 
1. Modularizar um sistema significa dividí-lo em blocos funcionais e, estes subdividí-los 
em funções. É recomendável que as funções tenham o seu comportamento bem 
pontual, ou seja, deve ser única a desempenhar uma função específica. Diante da 
questão sobre modularização, assinale com “V” a(s) afirmativa(s) abaixo que você 
julgue como verdadeira(s) e, com (F), a(s) falsa(s). 
 
( ) Dificulta o processo de testes pelo fato de que, com a modularização, deve-se testar 
um número muito maior de funções . 
( ) Facilita a reutilização do código pois a funcionalidade de uma função pode fazer 
parte de uma outra parte do sistema. 
( ) O programa fica mais organizado, separado por funcionalidades. 
( ) A compreensão do código se torna mais exaustiva devido ao grande número de 
chamadas de funções na implementação. 
 
Escolha a opção correta: 
 
 .F ; V ; V ; F . 
 
 .F ; V ; V ; V . 
 
 .V ; F ; V ; F . 
 
 .V ; F ; F ; V . 
 
 .F ; F ; V ; F . 
 
PERGUNTA 10 
1. Recursividade é uma técnica que permite a escrita de códigos de forma mais sucinta 
porém faz uso de forma mais massivo da pilha de memória. Para essa questão, analise 
o código a seguir: 
 
#include <stdio.h> 
 
int f(int a, int b) 
 { 
 if(!b)return a; 
 return f(b, a % b); 
 } 
 
int main() 
{ 
 int x=3, y=10; 
 printf("%d",f(x,y)); 
} 
 
Escolha a opção correta: 
 
 .O código calcula o MDC (Máximo Divisor Comum) usando o algoritmo de Euclides. 
 
 .O código calcula o MMC (Mínimo Múltiplo Comum) usando o método da 
fatoração. 
 
 .O código calcula a mediana entre os dois números. 
 
 .O código calcula o número de arranjos estatísticos de Ax,y. 
 
 .O código calcula o número de combinações estatísticas de xCy.

Outros materiais