Buscar

Lista1_Gabarito

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

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

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ê viu 3, do total de 10 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

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

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ê viu 6, do total de 10 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

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

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ê viu 9, do total de 10 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

Prévia do material em texto

Lista 1 - Gabarito 
 
1) Considere o programa abaixo e depois dê o que se pede: 
 
 
#include <iostream> 
#include <cstdlib> 
 
using namespace std; 
 
void Teste1(int ); 
void Teste2(int &); 
int Teste3(int); 
 
int x = 20; 
 
int main() 
{ 
 int numero = 10, outroNumero; 
 
 Teste1(numero); 
 cout << "Valor de numero (após Teste1) = " << numero << endl; 
 cout << "X = " << x << endl; 
 
 Teste2(numero); 
 cout << "Valor de numero (após Teste2) = " << numero << endl; 
 cout << "X = " << x << endl; 
 
 outroNumero = Teste3(numero); 
 cout << "Valor de outro numero (após Teste3) = " << outroNumero<< endl; 
 cout << "X = " << x << endl; 
 
 system("pause"); 
 
} 
 
void Teste1(int numero) 
{ 
 numero = numero +x ; 
 x++; 
} 
 
 
void Teste2(int &numero) 
{ 
 int valor = 100; 
 
 numero = numero + valor; 
 x++; 
 
} 
 
 
 int Teste3(int n) 
{ 
 int valor = 200; 
 n = n + valor; 
 x--; 
 return n; 
} 
 
Pede-se: 
 
 a) Identifique as variáveis globais e locais. Quando identificar uma variável local, 
especifique o escopo da mesma. 
 b) Identifique, em cada função, o tipo de passagem de parâmetros. 
 c) Mostre, passo a passo, o valor de todas as variáveis, indicando o momento em 
que as variáveis não mais ocupam espaço na memória. 
 d) Diga o que é impresso na tela 
 
 
Solução : 
 
a) 
 
Variável global : x 
Variáveis locais : 
1) numero e outroNumero – escopo : main. 
 
 Veja o trecho : 
 int main() 
 { 
 int numero = 10, outroNumero; 
 //continua 
 
 2) numero - escopo : Teste1 
 3) numero e valor – escopo : Teste2 
 4) n e valor - escopo : Teste3 
 
 
b) 
 
Função main : Não há passagem de parâmetros 
Função Teste 1 : Passagem de parâmetro por valor 
Função Teste 2: Passagem de parâmetro por referência 
FunçãoTeste 3: Passagem de parâmetro por valor 
 
 
 
 
 
 
c) 
 
Passos : 
 
1) Variável global x recebe 20. Ela será visível na main e nas outras funções. 
2) Na main, a variável local numero recebe 10, na declaração. 
3) Chamada para a função Teste1, passando o valor de numero, ou seja, 10. 
4) Na função Teste1 : Há uma variável local numero (cópia da variável numero da 
main) que recebeu o valor passado 10. A variável numero local à função Teste1 
recebe 10+20, ou seja, numero (local à Teste1) recebe 30. Depois, a variável 
global x é incrementada para 21. Terminada a função Teste1, a variável local 
numero deixa de ocupar espaço na memória. Assim, terminada a execução de 
Teste1, a variável x está visível, com a alteração sofrida, mas a variável numero 
(local a Teste1) já não mais existe na memória. 
5) Volta-se para main, para a 1ª. linha de cout. Neste momento, tem-se que numero 
(local à main) permanece com o valor 10 e a variável global x vale 21. 
6) Chamada para a função Teste2. Neste caso, há uma passagem de parâmetro por 
referência usando & (ver definição e protótipo da função). 
7) Começando a execução de Teste2, vemos o parâmetro numero, a variável local 
valor e x (variável global). A variável local valor recebe 100 na declaração. O 
argumento numero (vide chamada da função Teste2) recebe 10 + 100, ou seja, 110 
e depois, x é incrementado para 22. Ao terminar a execução de Teste2, tem-se 
que valor não mais ocupa espaço na memória, x foi de fato modificada e numero 
(variável local à main) sofreu a alteração realizada em Teste2, passando a valer 
110. 
8) Na linha outroNumero = Teste3(numero); temos que a variável outroNumero, que 
é local à main, receberá o retorno da função Teste3. O argumento de Teste3 é 
numero, que neste momento vale 110. Assim comoTeste1, a função Teste3 
trabalha com passagem de parâmetro por referência. 
9) Começando a executar Teste3 temos o parâmetro n, que é uma variável local à 
função Teste3. O parâmetro n armazena o valor do argumento numero, usado na 
chamada da função. Como numero (local à main) vale 110, o parâmetro n vale 
também 110. Dentro de Teste3 há uma variável local valor que recebe 200 na 
declaração. Em seguida, a variável local n (local à função Teste3) recebe 310 (n 
recebe 200 + 110). Em seguida, x (variável global) é decrementada para 21. O 
valor da variável local n é retornado para o ponto de chamada na função main. Ao 
término da execução de Teste3, tanto a variável n, quanto a variável valor, não 
mais ocupam espaço em memória. 
10) O valor retornado pela função Teste3 é atribuído à variável outroNumero, que 
recebe 310. A variável global x vale 21. 
11) Somente ao término da execução da função main, as variáveis x, numero e 
outroNumero são liberadas da memória. 
 
 
 
 
 
 
 
 
 
 
 
d) 
 
 
 
 
2) Construa uma função que receba um número inteiro e retorne o fatorial do número. 
 
 Números muito grandes não terão o fatorial calculado. 
Solução : 
 
#include <iostream> 
 
using namespace std; 
 
//Protótipo 
int fatorial(int ); 
 
//prog. principal 
 
int main() 
{ 
 int n; 
 
 cout << "\t\tCalculo do fatorial " << endl; 
 do { 
 cout << "Digite um valor maior ou igual a zero : "; 
 cin >> n; 
 if (n < 0) 
 cout << "ERRO: Valor negativo. Digite um valor maior ou igual a zero. " << endl; 
 } while (n <0); 
 
 cout << "Fatorial de " << n << " = " << fatorial(n) << endl; 
 system("pause"); 
} 
 
//Definição 
 
int fatorial(int n) 
{ 
 
 int fat = 1; //inicializa o produto que é o fatorial 
 
 for ( ; n >= 2; n--) 
 fat = fat * n; 
 return fat; 
} 
 
 
3) Construa uma função que receba um número inteiro e exiba se ele é, ou não, 
primo. 
 
 Solução : 
 
#include <iostream> 
 
using namespace std; 
 
//Protótipo 
void ehPrimo(int num); 
 
int main() 
{ 
 int numero; 
 cout<<"\nDigite numero: "; 
 cin>>numero; 
 
 ehPrimo(numero); 
 cout<<endl; 
 system("pause"); 
 
} 
void ehPrimo(int num) 
{ 
 int cd=0; 
 for(int x=1; x<=num && cd<=2; x++) 
 if(num % x ==0) cd++; 
 if(cd==2) 
 cout<<"\nEh primo\n"; 
 else 
 cout<<"\nNao eh primo\n"; 
} 
 
4) Construa uma função que receba um caracter como parâmetro e retorne 1 caso seja 
uma vogal, minúscula ou maiúscula, e 0 em caso contrário. 
 
Solução : 
 
#include <iostream> 
 
using namespace std; 
 
 
//Protótipo 
 
int testaLetra(char ); 
 
//Prog. principal 
int main() 
{ 
 char letra; 
 int resultado; 
 
 cout << "\t\tPrograma para verificar se letra eh vogal" << endl; 
 cout << "Digite uma letra : "; 
 cin >> letra; 
 letra = toupper(letra); //converte para maiúscula 
 resultado = testaLetra(letra); 
 if (resultado == 1) 
 cout << letra << " eh vogal." << endl; 
 else 
 cout << letra << " nao eh vogal." << endl; 
 system("pause"); 
 
} 
 
//Definição da função 
int testaLetra(char letra) 
{ 
 if (letra == 'A' || letra == 'E' || letra == 'I' || letra == 'O' || letra == 'U') 
 return 1; 
 else //o else pode ser apagado, pois o comando return nos tira da função quando executado 
 return 0; 
 
} 
 
5) Construa uma função que calcule o número de combinações de n elementos p a p . A 
fórmula da combinação é a seguinte : 
Números muito grandes não terão o fatorial calculado. Sendo assim, a combinação, 
também não poderá ser apresentada. 
 
Obs. : Pela Matemática: n > 0 , p <= n e p >= 0 
 
Solução : 
 
#include <iostream> 
 
using namespace std; 
 
//Protótipos 
int fatorial(int n); 
int combinacao(int n, int p); 
 
 
 
 
//Prog. principal 
 
int main() 
{ 
 int n, p; 
 int resultado; 
 
 cout << "\t\tCOMBINACAO DE N, P a P. " << endl; 
 do { 
 cout << "Digite uma quantidade n (n > 0) : "; 
 cin >> n; 
 if (n <= 0) 
 cout << "ERRO : entrada invalida. " << endl; 
 } while (n <= 0); 
 
 do { 
 cout << "Digite a quantidade p de elementos (p >= 0 e p <= n) : "; 
 cin >> p; 
 if (p < 0 || p > n) 
 cout << "ERRO : Entrada invalida. " << endl; 
 
 } while (p < 0 || p > n); 
 
 resultado = combinacao(n,p); 
 cout << "Resultado da combinacao de " << n << " , " << p << " a " << p << " = " 
 << resultado << endl; 
 system("pause"); 
 
} 
 
//Definições das funções 
 
int fatorial(int n) { 
 int fat = 1; //inicializa o produto, pois o fatorial é um produto de inteiros 
 
 for ( ; n >= 2; n--) 
 fat = fat * n; 
 return fat; 
} 
 
int combinacao(int n, int p) 
 { 
 
 return (fatorial(n) / (fatorial(p) * fatorial(n-p))); 
} 
 
 
6) Construa uma função que receba como parâmetros dois vetores inteiros, e um inteiro 
indicando a quantidade de elementos que os dois vetores têm. A função deverá retornar o 
produto interno dos dois vetores. 
 
 
 
Solução : 
 
#include <iostream> 
#define TAM 10 
 
using namespace std; 
 
//Protótipo 
int calculaProdutoInterno(int v[], int w[], int n); 
 
 
//Prog. principal 
 
int main() 
{ 
 int v[TAM], w[TAM], n, resultado; 
 
 do { 
 cout << "Digite a quantidade de elementos para v e w (> 0 e <= " << TAM << " ) : "; 
 cin >> n; 
 if (n < 1 || n > TAM) 
 cout << "ERRO : Quantidade invalida. " << endl; 
 }while (n < 1 || n > TAM); 
 
 cout << "Entre com valores para v e para w ... " << endl << endl; 
 for (int i = 0; i < n; i++) 
 { 
 cout << "v[ " << i << " ] = " ; 
 cin >> v[i]; 
 cout << "w[ " << i << " ] = " ; 
 cin >> w[i]; 
 cout << endl; 
 } 
 
 
 resultado = calculaProdutoInterno(v,w,n); 
 
 cout << "Produto interno = " << resultado << endl; 
 
 system("pause"); 
 
} //fim da main 
 
 
//definição da função 
int calculaProdutoInterno(int v[], int w[], int n) 
{ 
 int soma = 0; //inicializa o somatório 
 
 
 for (int i = 0; i < n; i++) 
 soma = soma + v[i] * w[i]; 
 return soma; 
} 
 
 
¨7) Construa uma função que receba uma mensagem, seu tamanho e um 
caracter e retire todas as ocorrências desse caracter na mensagem colocando 
* em seu lugar. A função deve retornar o total de caracteres retirados. 
 
Solução : 
 
#include <iostream> 
 
#include <cstring> 
 
#include <cctype> 
 
using namespace std; 
 
//ProtótipoS 
void maiuscula(char mens[], int tam); 
int criprografa(char mens[], int tam, char letra); 
 
//Função Principal 
int main() 
{ 
 char mensagem[100], letra;int t; 
 cout<<"\nDigite mensagem: "; 
 cin.getline(mensagem, 100); 
 cout<<"\nLetra: "; 
 cin>>letra; letra=toupper(letra); 
 t=strlen(mensagem); 
 maiuscula(mensagem,t); 
 cout<<criprografa(mensagem, t, letra)<<endl; 
 cout<<mensagem<<endl; 
 system("pause"); 
} 
/ 
/Definições das funções 
 
void maiuscula(char mens[], int tam) 
{ 
 for(int x=0; x<tam; x++) 
 mens[x]=toupper(mens[x]); 
} 
 
int criprografa(char mens[], int tam, char letra) 
{ 
 int troca=0; 
 for(int x=0; x<tam; x++) 
 
 if(mens[x]==letra) 
 { 
 mens[x]='*'; 
 troca++; 
 } 
 return troca; 
}

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes