Você está na página 1de 15

☆ Lista 7 - Funções 2: Parâmetros de Entrada e

Saída ☆
1. (atribquad) Escreva uma função chamada atribquad() que recebe
como parâmetro um numero
real representando a medida do lado de um quadrado, devolvendo 3
valores: a área, o perímetro e o
tamanho da diagonal (dada por lado × √2).

/* Programa "atribquad" = recebe como parâmetro um numero real


representando a medida do lado de um quadrado, devolvendo 3 valores:
a área, o perímetro e o tamanho da diagonal */
#include <cmath>
#include <iostream>

using namespace std;

void atribquad ( float l)


{
cout << "Area do quadrado: " << l * l << endl;
cout << "Diagonal do quadrado: " << sqrt (2) * l << endl;
cout << "Perímetro do quadrado: " << 4 * l << endl;
}

int main ( )
{
float lado;
cout << "Insira a medida do lado do quadrado: ";
cin >> lado;

atribquad (lado);

return 0;
}

2. (tempoJogo) Escreva uma função chamada tempoJogo() que recebe 4


parâmetros inteiros, cada
par de inteiros representando dois horários (horas e minutos). A
função deve devolver o período em
minutos decorrido entre os dois horários, e também o valor 1 (um) se
o intervalo de tempo calculado
for maior que 3 horas e meia e 0 (zero) caso contrário.

/* Programa "tempoJogo" = recebe 4 parâmetros inteiros de dois


horários (horas e minutos), devolve o período em minutos decorrido
entre os dois horários, e também o valor 1 (um) se o intervalo de
tempo calculado for maior que 3 horas e meia e 0 (zero) caso
contrário. */
#include <iostream>

using namespace std;

int tempojogo (int h1, int & min1, int h2, int min2)
{
int t1, t2, t;
h1 = h1 * 60;
t1 = h1 + min1;

h2 = h2 * 60;
t2 = h2 + min2;

t = t2 - t1;
min1 = t;
if (t > 210) //Equivalente a 3h30
return 1;
else
return 0;
}

int main ( )
{
int h1, h2, min, min2, total;

cout << "Insira a duracao (horas, minutos) da primeira


partida: ";
cin >> h1 >> min;
cout << "Insira a duracao (horas, minutos) da segunda partida:
";
cin >> h2 >> min2;

total = tempojogo (h1, min, h2, min2); //min vai passar mins da
partida

if (total == 1)
cout << "O tempo entre os horarios foi maior que 3h30,
porque foi de ";
else
cout << "O tempo entre os horarios foi menor que 3h30,
porque foi de ";

cout << min / 60 << "h" << min % 60;

return 0;
}
3. (maxPot) Crie uma função chamada maxpot() que recebe como
parâmetros três inteiros: X, Y
e MAX. Esta função deve devolver 2 valores: o resultado de XY e o
valor 1 (um) se este valor
calculado for menor que MAX, ou 0 (zero) caso contrário.

4. (raizes2g) Escrever a função eq2grau() que recebe os coeficientes


reais a,b,c de uma equação
de 2o grau e devolve as duas raízes reais da equação. Deve também
retornar um valor que diga
se as raízes reais foram encontradas (1) ou não (0). A função NÃO
DEVE mostrar mensagens. O
programa principal deve solicitar diversos conjuntos de coeficientes
a, b e c (até digitar 0 0 0) e, conforme o caso, mostrar na tela as
raízes para cada conjunto ou a mensagem Sem raizes reais.

5. (ordena) Crie uma função nome ordena que recebe 3 números


inteiros A, B e C, e ordena os valores de forma que A passe a ter o
menor valor e C o maior valor. Use a função troca() definida na
vídeo-aula.

/* Programa "ordena" = ordena três valores inteiros A, B, C de forma


que A passe a ter o menor valor e C o maior valor */
#include <iostream>
using namespace std;

void ordena ( int & num1, int & num2 ) //Ordena de forma que num1 é
sempre menor
{
int tmp;

if (num1 > num2) {


tmp = num1;
num1 = num2;
num2 = tmp;
}
}

int main ( )
{
int A, B, C;
cout << "Insira tres numeros inteiros: ";
cin >> A >> B >> C;

ordena (A, B);


ordena (B, C);
ordena (A, B);
cout << "A ordem crescente deles eh: " << A << ", " << B <<
", " << C;
return 0;
}

6. (multiplos) Crie uma função de nome multiplos que receba como


entrada dois números inteiros positivos, m e n. A função deve testar
se os números são positivos e, nesse caso, devolver ao
programa o número TOTAL de múltiplos de m entre 1 e n e o MAIOR
múltiplo de m entre 1 e n.
Caso m ou n não sejam positivos ou não haja múltiplos de m no
intervalo considerado, o número
TOTAL de múltiplos de m deve ser zero e o valor do MAIOR deles é
indiferente.
☆ Avaliativos ☆
Ex. 1 - Repetições em números
Faça um programa para verificar códigos numéricos (números inteiros
positivos maiores que 0) fornecidos pelo usuário. O conteúdo de cada
código tem n dígitos no seguinte formato:

dn-1...d4 d3 d2 d1 d0

Cada par de dígitos adjacentes forma uma dezena no código informado.


Assim a dezena 0 é formada pelos dígitos d1 d0, a dezena 1 é formada
pelos dígitos d3 d2, a dezena 2 é formada pelos dígitos d5 d4, ... a
dezena n é formada pelos dígitos d2*n+1 d2*n. Caso o código tenha um
número ímpar de dígitos a dezena "mais à esquerda" terá apenas 1
algarismo.

Por exemplo, no código 5011223 termos 7 dígitos, ou seja um total de


4 dezenas, a saber:

a dezena 0 é 23, a dezena 1 é 12, a dezena 2 é 01 e a dezena 3 é 05;

OBS1: note que o dígito "mais à esquerda" pode ser 0. Por exemplo, o
código 054321 tem as mesmas dezenas do código 54321.

Note também que para trabalhar com uma quantidade maior de dígitos o
programa deve usar algumas variáveis inteiras de 64 bits (tipo long
long).

Seu programa deve ler um código (informado pelo usuário) e informar


caso não seja maior que 0.

Para um código válido o programa deve informar: quantos dígitos tem


o código, quantas dezenas tem o código, se o código possui ou não
dezenas repetidas e, caso tenha, imprimir qual dezena mais repete e
quantas vezes repete.

Seu programa deve definir e usar as seguintes funções:

Função numDigitos: essa função recebe um código em um


inteiro tipo long long (passado por valor) e deve retornar
a quantidade de dígitos no código. OBS2: essa função DEVE ser feita
usando a repetição com um while. Usar o while nessa função faz parte
do exercício.

Função numDezenas: essa função recebe um código em um


inteiro tipo long long (passado por valor) e deve retornar
a quantidade de dezenas no código. OBS3: essa função DEVE chamar a
função numDigitos.

Função dezena: essa função recebe um código em um inteiro tipo long


long (passado por valor), um número inteiro n (também passado por
valor) e deve retornar o valor da dezena n do código.

Função temRepeticoes: essa função recebe como primeiro parâmetro um


código em um inteiro tipo long long e deve retornar 1 (verdadeiro)
ou 0 (falso) indicando se o código tem ou não dezenas repetidas. A
função deve produzir também outros dois valores via parâmetros
passados por referência: o valor da dezena que mais se repete no
código e o número de vezes que se repete. Caso exista mais de uma
dezena "mais repetida" a função deve retornar a que está mais à
direita no código. OBS4: essa função DEVE chamar a funções
numDezenas() e dezena() (pelo menos essas duas, mas pode chamar
outras caso seja conveniente).

OBSERVAÇÕES:

Nenhuma das funções pode ler valores do teclado ou exibir valores na


tela.

Todos os dados digitados devem ser lidos e exibidos na tela com cin
e cout usados apenas no programa principal (main).

As funções devem ter:

tipos e ordem dos parâmetros e valor de retorno conforme


especificações acima (na descrição das funções).

OBS.: Nos exemplos, o texto em negrito/vermelho representa a entrada


do usuário e o texto em itálico representa a saída do programa.

O programa deve se comportar como indicado nos exemplos abaixo,


obtendo as entradas e mostrando as mensagens e resultados NA MESMA
SEQUÊNCIA E FORMATO (incluindo os textos das mensagens).

—————— Exemplo 1: ——————

Digite o codigo: 222233333322113311


O codigo tem 18 digito(s)
O codigo tem 9 dezena(s)
O codigo tem repeticoes
A dezena mais repetida eh: 33 e repete 4 vezes
—————— Exemplo 2: ——————

Digite o codigo: 020202111101020101


O codigo tem 17 digito(s)
O codigo tem 9 dezena(s)
O codigo tem repeticoes
A dezena mais repetida eh: 2 e repete 4 vezes

—————— Exemplo 3: ——————

Digite o codigo: 112233445566


O codigo tem 12 digito(s)
O codigo tem 6 dezena(s)
O codigo nao tem repeticoes

—————— Exemplo 4: ——————

Digite o codigo: 447744777744


O codigo tem 12 digito(s)
O codigo tem 6 dezena(s)
O codigo tem repeticoes
A dezena mais repetida eh: 44 e repete 3 vezes

—————— Exemplo 5: ——————

Digite o codigo: 6
O codigo tem 1 digito(s)
O codigo tem 1 dezena(s)
O codigo nao tem repeticoes

—————— Exemplo 6: ——————

Digite o codigo: 0
O codigo deve ser maior que 0

/* Programa "repeticoesemnumeros" = verifica códigos numéricos


positivos de n digitos n-1...n1 n0 */
#include <iostream>
using namespace std;

//Retorna a quantidade de dígitos no código dividindo por 10


int numDigitos (long long d)
{
int dig;
while (d != 0) {
d = d / 10;
dig = dig + 1;
}
return dig;
}

//Retorna a quantidade de dezenas no código dividindo por 2


int numDezenas (long long d)
{
int vpar;

vpar = numDigitos (d);

if (vpar % 2 == 0)
vpar = vpar / 2;
else
vpar = (vpar + 1) / 2;

return vpar;
}

//Retorna o valor da dezena n pelo resto de 100


int dezena (long long d, int n)
{
int dezn, cont;

cont = 0;
while (cont < n) {
dezn = d % 100;
d = d - dezn;
cont = cont + 1;
}
return dezn;
}

//Retorna 1 se o código tem dezenas repetidas, 0 se não tem


//Passa por referência a dezena mais repetida e quantas vezes ela
repete
bool temRepeticoes (long long d, int & qualrepet, int & qntrepet)
{
int n, m, nd, compara, compara2, guarepet;
nd = numDezenas (nd);

guarepet = 0;
n = 0;
while (n < nd) {
compara = dezena (d, n);
//Compara a dezena n calculada com as outras do código
m = 0;
while (m < nd) {
compara2 = dezena (d, m);

if (compara == compara2)
qntrepet = qntrepet + 1;
}
//Compara as repetições da dezena mais repetida e a nova
if (qntrepet > guarepet) {
guarepet = qntrepet;
qualrepet = compara;
}
n = n + 1;
}
//Determina se houve repetição pela presença da dezena mais
repetida
if (qualrepet != 0)
return 1;
else
return 0;
}

int main()
{
int dig, numdez, repet, qualrepet, qntrepet;
long long d;

cout << "Digite o codigo: ";


cin >> d;

if (d == 0) {
cout << "O codigo deve ser maior que 0";
return 0;
}

dig = numDigitos (d);


cout << "O codigo tem " << dig << " digito(s)" << endl;

numdez = numDezenas (d);


cout << "O codigo tem " << numdez << " dezena(s)" << endl;

qualrepet = 0;
qntrepet = 0;
repet = temRepeticoes (d, qualrepet, qntrepet);

if (repet == 1) {
cout << "O codigo tem repeticoes" << endl;
cout << "A dezena mais repetida eh " << qualrepet << "e
repete " << qntrepet<< " vezes" << endl;
}
else
cout << "O codigo nao tem repeticoes";

return 0;
}

Ex. 2 - Contabiliza
Faça um programa em C++ chamado contabiliza que leia uma sequência
indeterminada de conjuntos de 2 (três) números inteiros até que seja
digitado o conjunto 0 0 (dois zeros). O programa deve ao final
imprimir 3 (três) valores que representam as quantidades de
conjuntos que estão na ordem:
crescente, decrescente, e neutra, e também o maior
intervalo dentre todos os conjuntos de números (dado pela diferença
absoluta entre o maior e o menor número do conjunto). Ordem neutra
é quando o conjunto contém números iguais. Seu programa deve usar a
função chamada contabiliza(), que recebe 6 (seis) parâmetros: os 2
(dois) números de um conjunto, e as 3 (três) quantidades a serem
contabilizadas. A função contabiliza() retorna o valor do intervalo
do conjunto. Se os primeiros números digitados forem 0 0, a saída do
programa deve ser Sem conjunto de valores.

OBS.: Nos exemplos, o texto em negrito/vermelho representa a entrada


do usuário e o texto em itálico representa a saída do programa. O
programa deve se comportar como indicado nos exemplos
abaixo, obtendo as entradas e mostrando as mensagens e resultados NA
MESMA SEQUÊNCIA E FORMATO (incluindo os textos das mensagens).

Exemplo 1:
Digite sequencia de 2 inteiros:
1 2
3 2
2 2
1 2
1 3
2 1
3 6
0 0
Quantidade ordem crescente: 4
Quantidade ordem decrescente: 2
Quantidade ordem neutra: 1
3 6 eh o maior intervalo: 3

Exemplo 2:
Digite sequencia de 2 inteiros:
1 1
-1 2
0 0
Quantidade ordem crescente: 1
Quantidade ordem decrescente: 0
Quantidade ordem neutra: 1
-1 2 eh o maior intervalo: 3

Exemplo 3:
Digite sequencia de 2 inteiros:
1 2
9 1
0 0
Quantidade ordem crescente: 1
Quantidade ordem decrescente: 1
Quantidade ordem neutra: 0
9 1 eh o maior intervalo: 8

Exemplo 4:
Digite sequencia de 2 inteiros:

0 0

Sem conjunto de valores

/* Programa "contabiliza" = lê uma sequência indeterminada de


conjuntos de 2 números inteiros até 0 0 e imprime quantidades de
conjuntos que estão na ordem: crescente, decrescente, e neutra, e
também o maior intervalo dentre todos os conjuntos de números
(diferença absoluta entre o maior e o menor número do conjunto) */
#include <iostream>
using namespace std;

void contabiliza (int n1, int n2, int & cresc, int & decresc, int &
neutra, int & i)
{
//Valores da ordem crescente, decrescente ou neutra
if (n1 < n2)
cresc = cresc + 1;
else if (n1 > n2)
decresc = decresc + 1;
else
neutra = neutra + 1;

//Diferença absoluta entre o maior e o menor número do


conjunto
if (n1 < 0 || n2 < 0)
i = n1 + n2;

if (n1 < n2)


i = n2 - n1;
else if (n2 < n1)
i = n1 - n2;
else
i = 0;
}

int main()
{
int num1, num2, cresc, decresc, neutra, interv;
int savenum1, savenum2, saveinterv;

cout << "Digite sequencia de 2 inteiros: " << endl;


cin >> num1 >> num2;

if (num1 == 0 && num2 == 0) {


cout << "Sem conjunto de valores";
return 0;
}

cresc = 0;
decresc = 0;
neutra = 0;
saveinterv = 0;

while (num1 != 0 || num2 != 0) {


contabiliza (num1, num2, cresc, decresc, neutra, interv);

if (interv > saveinterv) {


saveinterv = interv;
savenum1 = num1;
savenum2 = num2;
}
cin >> num1 >> num2;
}

cout << "Quantidade ordem crescente: " << cresc << endl;
cout << "Quantidade ordem decrescente: " << decresc << endl;
cout << "Quantidade ordem neutra: " << neutra << endl;
cout << savenum1 << " " << savenum2 << " eh o maior intervalo:
" << interv;

return 0;
}

Ex. 3 - Analisa Dígitos


Defina a função de nome analisaDigitos que recebe como parâmetro
de entrada um inteiro n positivo
(n>0) e devolve o número de dígitos, o primeiro e último
dígitos de n . Esta função NÃO DEVE mostrar dados na tela ou
solicitar valores do usuário. Faça também um programa que leia uma
sequência de números terminada com o valor 0, e chame a função
analisaDigitos mostrando quais são seus primeiros e últimos dígitos,
bem como a quantidade de de dígitos que o número digitado possui.
Além disso o programa deverá exibir a soma de todos os valores
digitados que possuem um número de dígitos menor que 3. Se o
primeiro valor informado for 0, o programa deve exibir a mensagem
“Nao foram fornecidos numeros” e terminar sem efetuar cálculo
algum.

A função analisaDigito deve ter o seguinte tipo:


Deve ter 3 parâmetros e retornar um número inteiro (número de
dígitos de n) via return.O primeiro parâmetro n deve ser passado por
valor
O segundo e terceiro parâmetros são parâmetros de saída da função
(tipo inteiro, indicando respectivamente o primeiro e último dígitos
de n), e devem ser passados por referência

OBS.: Nos exemplos, o texto em negrito/vermelho representa a entrada


do usuário e o texto em itálico representa a saída do programa.
O programa deve se comportar como indicado nos exemplos
abaixo, obtendo as entradas e mostrando as mensagens e resultados
NA MESMA SEQUÊNCIA E FORMATO (incluindo os textos das mensagens).

Exemplo 1:
Digite a lista de numeros: 153 0

153 tem 3 digitos

Primeiro = 1

Ultimo = 3

Soma dos numeros com uma quantidade de digitos menor que 3: 0

Exemplo 2:
Digite a lista de numeros: 153 -1 14 93084 1 0

153 tem 3 digitos

Primeiro = 1

Ultimo = 3
O numero deve ser positivo

14 tem 2 digitos

Primeiro = 1

Ultimo = 4

93084 tem 5 digitos

Primeiro = 9

Ultimo = 4

1 tem 1 digitos

Primeiro = 1

Ultimo = 1

Soma dos numeros com uma quantidade de digitos menor que 3: 15

Exemplo 3:
Digite a lista de numeros: 0

Nao foram fornecidos numeros

/* Programa "analisadigitos" = mostra informações relacionadas a


números inseridos pelo usuário:
1) quantidade de dígitos de um número
2) primeiro e último dígitos do número
3)soma dos números com uma quantidade de digitos menor que 3 */
#include <iostream>
using namespace std;

//Retorna número de dígitos de n via return


//Passa como saída da função o primeiro e último dígitos de n
int analisaDigitos (int n, int & primeiro, int & ultimo)
{
int digs;

ultimo = n % 10;

digs = 1; //Compensa o comparador 10 (em vez de 0)


//While para o primeiro dígito e o número de dígitos
if (n < 10)
primeiro = ultimo;
else {
while (n >= 10) {
n = n / 10;
primeiro = n;
digs = digs + 1;
}
}
return digs;
}

int main()
{
int num, digitos, primeiro, ultimo, soma3;

cout << "Digite a lista de numeros: ";


cin >> num;

if (num == 0) {
cout << "Nao foram fornecidos numeros";
return 0;
}

soma3 = 0;
while (num != 0) {
if (num < 0)
cout << "O numero deve ser positivo" << endl;
else {
digitos = analisaDigitos (num, primeiro, ultimo);

cout << num << " tem " << digitos << " digitos" <<
endl;
cout << "Primeiro = " << primeiro << endl;
cout << "Ultimo = " << ultimo << endl;
}

if (digitos < 3) //Soma dígitos de números com menos de 3


dígitos
soma3 = soma3 + num;
cin >> num;
}

cout << "Soma dos numeros com uma quantidade de digitos menor
que 3: " << soma3 << endl;

return 0;
}

Você também pode gostar