Baixe o app para aproveitar ainda mais
Prévia do material em texto
Avaliação Online 1 Entrega 18 set em 23:59 Pontos 15 Perguntas 10 Disponível 18 set em 21:00 - 22 set em 23:59 4 dias Limite de tempo 120 Minutos Tentativas permitidas 2 Instruções Histórico de tenta�vas Tentativa Tempo Pontuação MANTIDO Tentativa 2 51 minutos 12 de 15 MAIS RECENTE Tentativa 2 51 minutos 12 de 15 Tentativa 1 120 minutos 1,5 de 15 As respostas corretas estarão disponíveis em 21 set em 0:00. Pontuação desta tentativa: 12 de 15 Enviado 19 set em 17:44 Esta tentativa levou 51 minutos. Leia com atenção as orientações abaixo antes de iniciar esta prova: Serão permitidas duas tentativas para realizar esta avaliação, prevalecendo a maior nota. Programe-se para realizar suas avaliações com tranquilidade, pois você terá 120 minutos cronometrados (por tentativa) para conclusão e envio das respostas. Ao iniciar a avaliação o cronômetro não para, independentemente da plataforma estar aberta ou não; Durante a realização da prova: Será exibido uma questão por vez, podendo “Avançar” ou “Voltar” quando necessário dentro do período da tentativa; A tentativa somente será contabilizada após clicar no botão “Enviar”. 1,5 / 1,5 ptsPergunta 1 Matrizes são recursos muito utilizados tanto na matemática quanto na computação. Uma matriz pode organizar os dados de mesmo tipo em um programa entre linhas e colunas, permitindo o uso posterior das informações de forma mais prática. Quando é necessário percorrer uma matriz, é importante que se observem os 2 índices necessários para acesso a cada campo, assim como acontece com os pontos de um plano cartesiano. Seu amigo programador precisa criar uma matriz na qual todas as linhas devem ser preenchidas com valores de 0 a 2. Ele enviou-lhe um trecho do código que havia criado para que você fizesse um teste; porém, no trecho que enviou, não havia a declaração da matriz. Como você necessita do código completo para https://newtonpaiva.instructure.com/courses/8900/quizzes/17712/history?version=2 https://newtonpaiva.instructure.com/courses/8900/quizzes/17712/history?version=2 https://newtonpaiva.instructure.com/courses/8900/quizzes/17712/history?version=1 realizar o teste, como ficará a declaração dessa matriz para que o programa funcione corretamente? A seguir, está o código enviado pelo seu amigo: for(i=0;i<=3;i++) for(j=0;j<=2;j++) matriz[i][j]=j; Após analisar o código, pode-se afirmar que a forma correta para a declaração da matriz para que esse código funcione corretamente é int matriz: Fonte: Adaptado de CUNHA, Claudia, 2018. [2][3] [3][2] [4][3] [3][4] [4][2] Como a repetição mais externa (i) é responsável por mudar a linha, e a mais interna (j) é responsável por preencher as colunas de cada linha, o “i” vai de 0 a 3 (4 posições) e o “j” vai de 0 a 2 (3 posições), além de receber o valor e o “j” nas posições, podemos afirmar que a matriz é (Int matriz[4] [3]). 1,5 / 1,5 ptsPergunta 2 Analise o código a seguir. int main() { int linha; int coluna; int i; int somaprod; int mat1[3][3]={{5,4,3},{1,3,4},{5,7,9}}; int mat2[3][3]={{1,0,0},{0,1,0},{0,0,1}}; int mat3[3][3]; int M1L=3, M1C=3, M2L=3, M2C=3; for(linha=0; linha<M1L; linha++) for(coluna=0; coluna<M2C; coluna++){ somaprod=0; for(i=0;i<M1L; i++) somaprod+=mat1[linha][i]*mat2[i][coluna]; mat3[linha][coluna]=somaprod; } for(linha=0; linha<M1L; linha++){ for(coluna=0; coluna<M2C; coluna++) printf("%d ", mat3[linha][coluna]); printf("\n"); } system("PAUSE"); return 0; } Após a execução do código anterior é correto o que se afirma em: O valor de mat3[1][2] = 6. O valor de mat3[1][1] = 8. O valor de mat3[0][1] = 3. O valor de mat3[2][1] = 21. O valor de mat3[2][2] = 9 O algoritmo descrito no texto, inicialmente declara três matrizes mat1, mat2 e, mat 3 , sendo cada uma delas de dimensão 3x3.Posteriormente inicializa das duas primeiras, e, em seguida, realiza a multiplicação destas , armazenando seu resultado em mat3, por fim o algoritmo imprime a matriz resultante. Importante observar que mat2 consiste na matriz identidade, logo o produto de mat1 por mat2 consiste em mat1 , o qual é armazenada em mat3. Como apresentado na unidade 1, no tópico 1.1.4. Linguagem de Programação 1,5 / 1,5 ptsPergunta 3 O programador, que estava desenvolvendo um programa para a escola onde você trabalha, criou uma lógica que compara a palavra Aluno com o conteúdo da variável str. Para que a comparação seja feita de forma simplificada, foi utilizada a função strlwr, da biblioteca string.h; porém, o desenvolvedor começou o código e não pôde terminá-lo. Como você tem um conhecimento avançado em programação, foi chamado para continuar o desenvolvimento do programa e viu que o programador havia começado a configurar a comparação da string (str) com a palavra (Aluno) utilizando o strlwr, e a única coisa que faltou para terminar foi a constante literal da comparação. Com base nas informações apresentadas, de que modo deve ser escrita a constante no código para que a comparação com a função strlwr(str) seja executada quando o usuário escrever Aluno? “ALUNO” “Aluno ou aluno” “Aluno” “aluno” “ALUNO ou aluno” A função strlwr retorna o conteúdo da string minúsculo. No caso proposto na questão, independentemente da forma como o usuário digitar a palavra aluno (Aluno, ALUNO, aluno, AlUnO, ALuNo), ele retornará que são iguais se a constante a ser comparada for “aluno”. 1,5 / 1,5 ptsPergunta 4 Avalie o seguinte trecho de código: #define NLIN 10 #define NCOL 20 int Matriz[NLIN][NCOL]; for(i=0; i < NLIN; i++) for(j=0; j < NCOL; j++) Matriz[i][j] = i+j; Sobre o trecho de código apresentado, assinale a alternativa correta. A variável Matriz possui 100 elementos. O valor armazenado em Matriz [2][2] é igual a 4. O valor armazenado em Matriz[3][3] é igual a 6. A variável Matriz possui o mesmo número de linhas e colunas. O valor armazenado em Matriz[0][0] é igual a 0. O valor armazenado em Matriz[0][0] é igual a 0. O trecho de código apresentado define uma matriz de contendo 10 linhas e 20 colunas, neste código, a variável Matriz recebe na posição i,j a soma destes, como em linguagem C , os índices se iniciam em 0, então para Matriz[0][0]=0. Como apresentado na unidade 1, no tópico 1.1.4. Linguagem de Programação. 1,5 / 1,5 ptsPergunta 5 O uso de ponteiros e a manipulação da memória na linguagem C são feitos por meio de operadores próprios, sendo o operador de endereço o responsável por passar o endereço de uma variável para um ponteiro ao invés de passar/copiar seu conteúdo para outra variável comum. Nesse contexto, é apresentado o seguinte trecho de código: int pt, x; pt=&x; Considerando que todo o resto do código de onde foi retirado esse trecho está correto, ao se tentar compilar e executar o código, o que acontecerá? Compilará, mas nenhum valor será atribuído, pois o & não pode ser usado assim. Compilará normalmente, e a pt receberá o endereço da variável x. Não compilará, pois o tipo do conteúdo de pt é diferente do tipo do conteúdo de x. Compilará normalmente, e a pt receberá o valor da variável x. Não compilará, pois a variável pt não é um ponteiro e não pode receber endereços. O código não compilará, pois a variável pt não é um ponteiro e não pode receber endereços. Embora o nome pareça de um ponteiro, na declaração não foi utilizado o asterisco e, por isso, ele não é um ponteiro. 0 / 1,5 ptsPergunta 6IncorretaIncorreta Observe o trecho do código a seguir: char *p1,*ptnome; int *temp, *ptinício, *ptnota; *temp=125; É correto afirmar que o risco de execução na declaração de ponteiros diz respeito à(ao): Fato de um ponteiro estar recebendo um valor inteiro, o que trará um problema em tempo de execução. Uso do asterisco na atribuição de um valor inteiro, o que causará um erro em tempo de projeto.Alteração indevida do conteúdo de endereços de memória, pois os ponteiros não foram inicializados. Uso de mais de uma posição de memória, pois, na alocação dinâmica,o ponteiro só pode se referenciar a um valor que ocupe uma posição. Alteração do endereço no ponteiro tempo por um endereço que não existe na memória, uma vez que 125 não é um endereço de memória. A atribuição de valores indiretamente a um ponteiro sem que este tenha sido inicializado (recebendo NULL ou a posição de uma variável) antes pode trazer problemas de instabilidade ao programa e até a outros programas que utilizam a memória, pois o ponteiro, quando criado, tem um endereço aleatório que pode já estar em uso e, ao alterar o valor contido na memória usando o operador indireto (*), gerar o problema. 1,5 / 1,5 ptsPergunta 7 Um ponteiro é um espaço reservado de memória usado para guardar o endereço de memória de uma outra variável. Além disso, um ponteiro é uma variável como qualquer outra do programa, sua diferença é que ela não armazena um valor inteiro, real, caractere ou booleana. Ela serve para armazenar endereços de memória (são valores inteiros sem sinal. Disponível em:<http://www.facom.ufu.br/~backes/gsi002/Aula10-Ponteiros.pdf (http://www.facom.ufu.br/~backes/gsi002/Aula10-Ponteiros.pdf) >Acesso.06. Ago.2019. Nesse contexto, avalie as asserções a seguir e a relação proposta entre elas. I - Se um ponteiro p armazena o endereço de uma variável i, podemos dizer o ponteiro p aponta para i ou p é o endereço de i. PORQUE II - Se um ponteiro p tem valor diferente de NULL então *p é o valor da variável apontada por p. A respeito dessas asserções, assinale a opção correta As asserções I e II são proposições falsas. A asserção I é uma proposição falsa e a II é uma proposição verdadeira. As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I. http://www.facom.ufu.br/~backes/gsi002/Aula10-Ponteiros.pdf A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I. A primeira afirmação versa sobre as propriedades de um ponteiro, e a segunda explana o conceito sobre como exibir o valor para o qual o ponteiro aponta. 1,5 / 1,5 ptsPergunta 8 O desenvolvimento de uma aplicação envolve a utilização de recursos de memória, e gerenciar esses recursos com um código mais bem planejado torna a aplicação menos propença a falhas. Usando as funções de alocação de memória da linguagem C, é possível manipular áreas de memória livre e, nelas, poderemos alocar as variáveis. Se a região, porém, não tiver espaço para essa alocação, qual retorno receberíamos se usássemos as funções malloc( ) e realloc( )? false true full null 0 Todas as funções de alocação de memória retornam uma informação para o código, mas somente quando retornam null saberemos que houve erro. 0 / 1,5 ptsPergunta 9IncorretaIncorreta Analise o seguinte trecho de código. #include <stdio.h> #include <stdlib.h> struct x{ int a; int b; int c; }; int main(void){ struct x estrutura; int *y = malloc ( sizeof(estrutura)); printf(“%li”, sizeof(estrutura)); } Sobre o trecho de código apresentado é correto apenas o que se afirma em: Declara uma estrutura de números reais. Aloca dinamicamente uma estrutura. Imprime a posição de memória da estrutura através do comando printf. Lê a partir do teclado três números inteiros. Imprime uma estrutura através do comando printf. 1,5 / 1,5 ptsPergunta 10 Analise a codificação a seguir: #include <stdio.h> #include <stdlib.h> struct x{ int a; int b; int c; }; int main(void){ struct x estrutura; int *y = malloc ( 2* sizeof(estrutura)); printf("%li", sizeof(estrutura)); } Considerando que o tipo inteiro (int) aloca 4 bytes na arquiterura utilizada por esse programa, conclui-se que, usando alocação dinâmica na codificação, a quantidade de bytes alocados para uma variável do tipo x será de: 128 bytes. 16 bytes. 12 bytes. 64 bytes. 32 bytes. Pontuação do teste: 12 de 15
Compartilhar