Buscar

Atividade 2

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

Atividade 2 - Técnicas de Programação
1- Para essa questão, suponha o seguinte enunciado: “O imposto de renda incidirá sobre o salário de todos os assalariados de modo que o desconto seja proporcional ao seu salário e de acordo com as faixas de valores”. Para esse enunciado foi implementada uma função cuja chamada ocorrerá na forma:
 
. . .
float salarioLiquido;
salarioLiquido = CalculaIRPF(salario_bruto, &imposto_retido);
. . .
 
Assinale a opção abaixo que represente a interface mais apropriada para a questão:
R: 
· . float CalculaIRPF(float, float *); .
2- Na definição do protótipo da função, em sua interface, temos que definir o tipo de retorno da função e, também, a lista de parâmetros. Para essa questão, suponha o trecho de código a seguir:
 
#include <stdio.h>
#include <stdlib.h>
 
int func(int a, int __b, char __c[])
{
 a +=++__b;
 itoa(a,c,10);
 return a;
}
 
int main()
{
 char c[10];
 int x=5, y=6;
 printf("%d %s %d %d",func(x,&y,c),c,x,y);
}
 
 
Escolha a afirmativa que contém o resultado da impressão pela função “ printf” e os trechos a serem inseridos nas lacunas:
R: 
· .12 12 ; * ; deixar em branco ; * .
3- 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 finalizada, o computador saiba voltar ao ponto de chamada. Dentre as afirmativa 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:
R: 
· .V; F; F; V.
4- Na computação, existem várias formas de representação numérica, dentre as quais, podemos citar as representações decimal, hexadecimal, octal e binária. Para realizar a conversão, por exemplo, de um valor formatado na base decimal para uma base K, basta realizar divisões sucessivas por K e coletar o último quociente e todos os restos das divisões em ordem inversa. 
Suponha a necessidade de criar uma função recursiva para a conversão de um número na base decimal para a representação binária (base 2). Para essa questão, suponha o trecho a seguir:
 
#include <stdio.h>
 
void Dec2Bin(int n)
{ 
 if(__) printf("%d",n);
 else
	{
 	___;
 	___;
	}
}
 
int main()
{
 
 Dec2Bin(14);
 return 0;
}
 
Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas:
R: 
· . n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) .
5- Funções são blocos funcionais modulares presentes nas linguagens de programação estruturadas. A criação de funções, por exemplo, em C, deve seguir a sintaxe: <tipo_de_retorno> nome_da_função (lista_de_parâmetros). Para essa questão, suponha o trecho de código a seguir:
 
int funcao(int a, int *b)
 {
 	a++;
 	*b = a * 2;
 	return b+5;
 }
 
int main()
{
 int x=4,y=8,z;
 z = funcao(x,&y);
 printf(“%d	%d	%d\n”,x,y,z);
 return 0;
}
 
Assinale a alternativa que apresenta os valores impressos pela função “printf”:
R: 
· .4	10	15.
6- Quando se implementa uma fução, devemos seguir a sintaxe da linguagem de programação utilizada e, também, realizar a definição de sua interface de acordo com as nossas necessidades. Para essa questão, suponha o trecho de código a seguir para procurar uma sequência dentro de uma cadeia de DNA:
 
#include <stdio.h>
#include <string.h>
 
___ ProcuraDNA(char ___dna[],char ___seq[],int ___ret[])
{
 int indice=0;
 for(int i=0; i<strlen(dna); i++)
	if(!strncmp(&(dna[i]),seq,3)) ret[indice++]=i;
 ret[indice]=-1; //apenas para marcar o último item adicionado
}
 
int main()
{
 int i=0, pos[19];
 char str[19] = "GATGATCATGTCGTACATC", //uma sequencia de DNA qualquer
 	seq_proc[4] = "ATG"; //Adenina, Timina, Guanina - uma cadeia exemplo
 ProcuraDNA(str,seq_proc,pos);
 printf("posicoes:");
 while(pos[i]!=-1)
	{
 	printf("%d ",pos[i]);
 	i++;
	}
 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:
R: 
· . void ; deixar em branco ; deixar em branco ; deixar em branco .
7- Os compiladores C/C++, para realizar a verificação de consistência de uso das funções, faz uso dos arquivos de cabeçalhos (headers). Nestes arquivos, por exemplo, o protótipo das funções são declarados. Desta forma, o compilador verifica se as chamadas implementadas estão compatíveis com as definições das funções. Para essa questão, suponha a existência de dois arquivos: um contendo o arquivo header e outro contendo a implementação em C.
 
(A) Arquivo header:
 
#ifndef _ARQHEADER
#define _ARQHEADER
 
int func1(int *, int);
float func2(float, char []);
void func3(int *, int *, float);
int func4(char[],int, char);
 
#endif
 
(B) Arquivo de implementação
 
int main()
{
 int a,b,c; 
 float f1,f2;
 char str[20],carac;
 c=func1(a,b); 	//Linha 1
 f2=func2(f1,str[0]);	//Linha 2
 c=func3(&a, &b, f1);	//Linha 3
 c=func4(str,a,carac); //Linha 4
 func1(&c,a); 	 //Linha 5
 return 0;
}
 
Analisando a parte de implementação com o arquivo header, assinale a alternativa que contém os possíveis erros que seriam acusados pelo compilador:
R: 
· .Na linha 1, o parâmetro “ a” não está sendo passado por referência (falta o “ &”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“ str”; na linha 3, está sendo atribuído um valor à variável “ c” por intermédio de uma função que nada retorna ( func3); as demais linhas estão corretas.
8- 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):
R: 
· . * ; * ; * ; * ; * ; * ; & ; & .
9- 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:
R: 
. int; * ; deixar em branco ; * ; * ; & .
10- 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:
R: 
· .F ; V ; V ; F .

Continue navegando