INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DA BAHIA
CAMPUS JEQUIÉ
CURSO TÉCNICO DE INFORMÁTICA
MODALIDADE SUBSEQÜENTE
PROF°.: ALEXANDRO DOS SANTOS SILVA
LINGUAGEM DE PROGRAMAÇÃO I
LISTA DE EXERCÍCIOS 05 - GABARITO
Instruções:
Para resolução das questões abaixo, será admitido o uso apenas da sintaxe adotada para escrita de programas em
C/C++.
1.
Desenvolver funções com os seguintes propósitos:
a)
Receber um caractere como parâmetro e retornar verdadeiro (1) se for dígito e falso (0), caso contrário;
Resp.: além da função solicitada, na função principal usa-se uma estrutura de repetição para que testes sucessivos
sejam realizados com a função desenvolvida, a partir da entrada de caracteres.
#include <iostream.h>
int ehDigito(char ch) {
// se o caractere for 0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9...
if (ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9') { return 1;
}
// caso contrário... else {
return 0; }
}
int main() {
char ch, resp;
do {
cout << "Informe um caractere: ";
cin >> ch; // entrada de caracatere
// verificação de caractere (é dígito?) cout << "DIGITO = " << ehDigito(ch) << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
b)
Receber um caractere como parâmetro e retornar verdadeiro (1) se o mesmo for um espaço e falso (0), caso
contrário;
Resp.:
#include <iostream.h>
int ehEspaco(char ch) {
if (ch == ' ') { // se o caractere for espaço... return 1;
}
else { // caso contrário.... return 0;
} }
int main() {
// testes com a execução da função (2 vezes) cout << "ESPACO ( ) = " << ehEspaco(' ') << "\n"; cout << "ESPACO (a) = " << ehEspaco('a') << "\n";
system("pause"); }
c)
Retornar
o resultado de um número “elevado” a outro (a
mbos recebidos como parâmetros);
Resp.: aqui ressalta-se que a operação de exponenciação (também conhecida como um número
“
elevado
”
a outro)
indica a multiplicação da base por ela mesma tantas vezes quanto indicar o expoente. Observe que o resultado
inicial atribuído é 1 (um), já que esse é resultado de potências com expoente 0 (zero). Além disso, potências com
expoentes negativos implicam na inversão do valor da base antes do início das operações sucessivas de
multiplicação. Por fim, em função da complexidade de potências com expoentes reais (ao invés de inteiros), aqui
se optou pela execução de cálculos de potências com expoentes apenas inteiros.
#include <iostream.h>
float potencia(float base, int expoente) {
float result = 1; // resultado da potência
if (expoente < 0) { // se expoente negativo...
base = 1.0 / base; // procede-se com a inversão da base
expoente = -expoente; // procede-se com a troca de sinal do expoente }
// realização de multiplicação em quantidade idêntica ao valor do expoente for (int i=0; i<expoente; i++) {
// multiplicação do último resultado pelo valor da própria base result = result * base;
}
return result; // retorno do resultado da potência }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa float base; // base de uma potência
int exp; // expoente de uma potência
float r; // resultado do cálculo da potência
do {
// entrada dos valores de base e expoente de uma potência cout << "BASE....: ";
cin >> base;
cout << "EXPOENTE: "; cin >> exp;
r = potencia(base, exp);
// cálculo de potência
cout << "POTENCIA: " << r << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
d)
Retornar o resto da divisão inteira de um número por outro (ambos recebidos como parâmetros);
Resp.: além da função solicitada, na função principal usa-se uma estrutura de repetição para que testes sucessivos
sejam realizados com a função desenvolvida, a partir da entrada de números.
#include <iostream.h>
return a % b; // retorno de resto de divisão }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int n1, n2; // números a serem divididos, para obtenção de resto int r; // resultado de resto de divisão
do {
// entrada dos valores dos números a serem divididos cout << "NUMERO 1...: ";
cin >> n1;
cout << "NUMERO 2...: "; cin >> n2;
r = resto(n1, n2);
// cálculo de resto da divisão entre os dois números cout << "RESTO DIVISAO: " << r << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
e)
Receber um caractere como parâmetro e retornar 1 caso seja uma vogal e 0 em caso contrário.
Resp.: além da função solicitada, na função principal usa-se uma estrutura de repetição para que testes sucessivos
sejam realizados com a função desenvolvida, a partir da entrada de caracteres.
#include <iostream.h>
int ehVogal(char ch) {
// se o caractere for uma vogal...
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') { return 1;
}
// caso contrário... else {
return 0; }
}
int main() {
char ch, resp;
do {
cout << "Informe um caractere: ";
cin >> ch; // entrada de caracatere
// verificação de caractere (é vogal?) cout << "VOGAL = " << ehVogal(ch) << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
Observação: elabore uma função para cada item.
Resp.:
#include <iostream.h>
int modulo(int n) {
if (n > 0) { // se o número for positivo... return n; // retorno o próprio número }
else { // caso contrário...
return -n; // troca-se o sinal e retorno o número }
}
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int n; // número a partir do qual se obterá o módulo
int r; // módulo do número
do {
// entrada do valor do número cout << "NUMERO: ";
cin >> n;
r = modulo(n);
cout << "MODULO: " << r << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
}
3.
Desenvolver uma função que receba como parâmetros valores (inteiros) de hora, minutos e segundos e retorne o valor
correspondente em segundos.
Resp.:
#include <iostream.h>
int segundos(int hr, int mn, int sg) {
// conversão de horário no formato hh:mm:ss para segundos return hr * 60 * 60 + mn * 60 + sg;
}
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int hr, mn, sg; // horário no formato hh:mm:ss
int r; // resultado da conversão do horário para segundos
do {
// entrada do horário
cout << "HORARIO (HH:MM:SS): "; cin >> hr >> mn >> sg;
r = segundos(hr, mn, sg);
cout << "TOTAL DE SEGUNDOS.: " << r << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');
4.
Desenvolver uma função que retorne o reverso de um número inteiro, recebido como parâmetro. O reverso do número
962, por exemplo, é 269.
Resp.: o algoritmo proposto aqui inclui operações de módulo (resto de divisão) do número em questão por 10 (dez)
para obtenção do enésimo dígito seguido da divisão inteiro do número por 10 (dez) para obtenção do próximo dígito;
essa sequência de operações é executada enquanto o último número apurado em função da divisão por 10 for maior
que 0 (zero). Após a extração dos dígitos, procede-se com a multiplicação dos mesmos por potências de 10 (1, 10,
100, 1000, 10000, etc.) para obtenção do reverso.
#include <iostream.h>
int reverso(int n) {
int result = 0; // resultado referente ao reverso do número n int digitos[1000]; // dígitos do número n (vetor)
int qtd = 0; // quantidade de dígitos do número n
int fator = 1; // fator de multiplicação para obtenção de reverso
for (int i=0; n>0; i++) { // identificação de dígitos do número n
int dig = n % 10; // cálculo do enésimo dígito (da direita à esquerda) digitos[i] = dig; // armazenamento do dígito no vetor
qtd++; // incremento da quantidade de dígitos do número n n = n / 10; // divisão do número n por 10 para obtenção do dígito seguinte }
// multiplicação dos dígitos por potências de 10 para obtenção do reverso for (int i = qtd - 1; i>=0; i--) {
result = result + digitos[i] * fator;
fator = fator * 10; // cálcula do próxima potência de 10 }
return result; }
int main() {
char resp; // indicativo (SIM/NÃO) de encerramento do programa int num; // número a partir do qual se obterá o inverso int rev; // reverso do número informado
do {
// entrada do valor do número cout << "NUMERO.: ";
cin >> num;
rev = reverso(num);
cout << "REVERSO: " << rev << "\n";
cout << "\nDeseja continuar (s/n)? ";
cin >> resp; // entrada de resposta SIM/NÃO
cout << "\n";
// se for informado SIM (caractere "s" ou "S")... } while (resp == 's' || resp == 'S');