Que tal aprimorar o software de locação de filmes on-line?
A melhoria é informar se o filme desejado está disponível para ser locado e quantos anos faltam para que a classificação do filme seja adequada à faixa etária do cliente.

Fonte: Shutterstock.
Deseja ouvir este material?
Áudio disponível no material digital.
sem medo de errar
Para ampliar sua visão acerca das possibilidades de aplicação dos conhecimentos obtidos até o momento, vamos retomar a situação-problema: seu chefe solicitou que você aprimore um programa que vem sendo desenvolvido na empresa onde trabalha. Vamos então recordar o que já sabemos?
#include <stdio.h>
#define TAM_NOME_CLIENTE 100
struct cliente {
char nome[TAM_NOME_CLIENTE];
int idade;
};
int main(void){
struct cliente cli;
int classificacao_filme;
printf("\n Informe o nome do cliente: ");
fflush(stdin);
fgets(cli.nome, TAM_NOME_CLIENTE, stdin);
printf("\n Informe a idade do cliente: ");
scanf("%d", &cli.idade);
printf("\n Informe a classificação do filme: ");
scanf("%d", &classificacao_filme);
printf("\n Cliente: %s", cli.nome);
printf("\n Idade: %d anos", cli.idade);
printf("\n Classificação do filme: %d anos", classificacao_filme);
}
A versão atual do seu programa é capaz de ler a idade e o nome do cliente, bem como a classificação do filme que ele deseja locar e, posteriormente, imprimir todas essas informações na tela.
Uma das novas funcionalidades propostas por seu chefe é que o programa informe ao cliente se o filme desejado está disponível para ser locado ou não. Nós já temos uma informação a respeito do filme, que é sua classificação. Então, para que nosso código fique organizado, vamos criar uma struct denominada Filme, assim como fizemos com o cliente.
struct filme {
int classificacao_filme;
int esta_disponivel;
};
Você também precisa de um trecho de código capaz de ler a informação se o filme está disponível ou não do teclado e imprimi-la na tela. Com os conhecimentos aprendidos, você consegue realizar essa etapa.
A próxima melhoria a ser feita no programa é informar se o filme desejado pode ser locado pelo cliente, levando em consideração se o filme está disponível e se é indicado para a sua faixa etária. Nós já temos as informações necessárias para efetuar esse processamento. Então, vamos criar uma expressão lógica que resultará em 0 (falso) ou 1 (verdadeiro), dependendo dos valores das variáveis de entrada. Para que o resultado seja 1 (verdadeiro), a idade do cliente deve ser maior ou igual à classificação do filme e o filme deve estar disponível. Com base na versão atual do código do programa, a expressão lógica a ser utilizada é:
(fi.esta_disponivel) && (cli.idade >= fi.classificacao_filme))
Por fim, o programa deve informar quantos anos faltam para que a classificação do filme seja adequada à faixa etária do cliente. Nesse caso, precisamos pensar um pouco mais para resolver esse problema com os recursos que aprendemos até o momento. Você se lembra de que o resultado de uma expressão lógica é 0 ou 1. Então, se pensarmos na expressão (cli.idade < fi.classificacao_filme), seu resultado será 0 quando a idade do cliente for maior ou igual à classificação do filme ou 1, quando a idade do cliente for menor do que a classificação do filme.
(cli.idade < fi.classificacao_filme) * (fi.classificacao_filme - cli.idade))
O resultado dessa expressão será um número inteiro, que responde à seguinte pergunta: “quantos anos faltam para que a classificação do filme seja adequada à faixa etária do cliente?”.
O código completo do programa que resolve a situação-problema encontra-se a seguir:
#include <stdio.h>
#define TAM_NOME_CLIENTE 100
struct cliente {
char nome[TAM_NOME_CLIENTE];
int idade;
};
struct filme {
int classificacao_filme;
int esta_disponivel;
};
int main(void){
struct cliente cli;
struct filme fi;
printf("\n Informe o nome do cliente: ");
fflush(stdin);
fgets(cli.nome, TAM_NOME_CLIENTE, stdin);
printf("\n Informe a idade do cliente: ");
scanf("%d", &cli.idade);
printf("\n Informe a classificação do filme: ");
scanf("%d", &fi.classificacao_filme);
printf("\n Informe (0) se o filme não está disponível e (1) caso contrário: ");
scanf("%d", &fi.esta_disponivel);
printf("\n Cliente: %s", cli.nome);
printf("\n Idade: %d anos", cli.idade);
printf("\n Classificação do filme: %d anos", fi.classificacao_filme);
printf("\n Está disponível: %d", fi.esta_disponivel);
printf("\n Filme pode ser locado pelo cliente: %d", (fi.esta_disponivel) && (cli.idade >= fi.classificacao_filme));
printf("\n Anos restantes: %d", (cli.idade < fi.classificacao_filme) * (fi.classificacao_filme - cli.idade ));

Agora é com você!
Avançando na prática
CÁLCULO DE DESCONTO
Uma pizzaria o procurou, pois gostaria de automatizar seu caixa. A princípio, foi-lhe solicitado apenas implementar um cálculo simples, em que, dado o valor total da conta de uma mesa, o programa calcula o desconto concedido e divide esse valor pela quantidade de integrantes da mesa. O programa deve receber como dados de entrada o valor da conta, a quantidade de pessoas e o percentual de desconto (%). Com os dados no programa, como deverá ser feito o cálculo do valor total da conta com o desconto e o valor que cada pessoa deverá pagar?
O código, no Código 1.14, apresenta o resultado do problema. Um ponto importante é o cálculo do desconto feito na linha 15, para cuja montagem utilizamos uma regra de três simples. Outro ponto é o cálculo do valor por pessoa, feito na linha 18 diretamente dentro do comando de impressão. Esse recurso pode ser usado quando não é preciso armazenar o valor.
#include <stdio.h>
int main(){
float valor_bruto = 0;
float valor_liquido = 0;
float desconto = 0;
int qtd_pessoas = 0;
printf("\n Digite o valor total da conta: ");
scanf("%f", &valor_bruto);
printf("\n Digite a quantidade de pessoas: ");
scanf("%d", &qtd_pessoas);
printf("\n Digite o desconto (em porcentagem): ");
scanf("%f", &desconto);
valor_liquido = valor_bruto - (valor_bruto * desconto/100);
printf("\n Valor da conta com desconto = %f", valor_liquido);
printf("\n Valor a ser pago por pessoa = %f", valor_liquido/qtd_pessoas);
}

Agora é com você!