if(idade>=18) ou if(idade>17)
Como saber se uma pessoa já pode votar? Fácil, pela
idade:
if(idade>=16) ou if(idade>15)
Parece certo, não é? A rigor, está sim.
Está correto, mas absolutamente não recomendável. Vamos explicar isso neste tutorial de C de nossa apostila.
Como ser um programador C certificado
Como ser um programador C certificado
- Leia este conteúdo no seu computador: Apostila C Progressivo
Por que se deve evitar usar números em programação C
Imagine que você foi contratado para fazer um programa
para o governo federal.
Dentre outras coisas, seu aplicativo C deve dizer ao
cidadão se ele está apto a dirigir, votar, se alistar nas Forças Armadas, doar
sangue, viajar sozinho, idade pro homem se aposentar, pra mulher, tempo de
serviço e milhares de outras coisas.
Facilmente, em seu código, você iria ultrapassar os
milhares de testes condicionais, iria usar várias idades: 14, 16, 18, 21, 60,
65 e outras.
Isso pra você não é problema e faz todo sentido. E em um
projeto profissional, é comum um programa ter dezenas de milhares de linhas de
código.
Agora vamos mostrar os riscos do uso desses números.
Imagine que o governo mudou a maioridade penal: agora jovens
de 16 anos podem ser presos.
Devido aos acidentes, somente pessoas com 21 anos, ou
mais, podem comprar bebida alcoólica.
E como o país está crescendo e as pessoas melhoraram seu
nível profissional, podem se aposentar com menos tempo de serviço.
E agora, José? Sair vasculhando milhares de testes
condicionais, loopings, funções, bibliotecas em milhares de linhas de código,
procurando esses números?
“Ah, vai em SEARCH e REPLACE ALL”. Errado, nem tudo deve
mudar.
Nem todos os números ‘18’ (no caso da maioridade penal)
vão mudar pra ‘16’ (pra se alistar, continua 18).
Pode ter certeza, isso iria levar semanas e é quase
impossível fazer isso sem erros, sem ter deixado passar algo ou ter mudado algo
que não devia. As complicações são muitas, e o ato de usar esses números em uma
aplicação grande é irresponsabilidade, embora seja um erro catastrófico e
básico, infelizmente muitos programadores que são profissionais ainda cometem
esse tipo de barbaridade. Concordo com você, deviam ser queimados em praça
pública (brincando).
Mas não se preocupe você estudou pelo curso C Progressivo,
e caso tenha lido nossas lições e feitos os exercícios, garantimos sua
competência.
Definindo e usando constantes em C
Existem, basicamente, duas maneiras de definir constantes
em linguagem C:
Através do comando const
e da diretiva de pré-processamento: #define
Um costume dos programadores C é declarar essas
constantes no começo do programa, depois dos #include .
A sintaxe para declarar constantes usando a palavra
reservada const é:
const tipo_da_variavel nome_da_variavel =
valor_da_variavel;
Ou seja, é como declarar uma variável qualquer, como
vínhamos fazendo.
A diferença é a palavra const no início, e o fato de termos que inicializar a variável.
É como se tivéssemos definido uma variável, e de fato é
alocado um espaço em memória para essa constante, que será acessado sempre que
usarmos essa variável.
O que é diferente do #define,
que na verdade não faz parte da linguagem C, é algo que vem antes, é um comando
pro pré-processador que ocorre antes da compilação.
A sintaxe para usar o #define é a seguinte:
#defina nome_da_variavel valor_da_variavel
Isso mesmo, sem símbolo de igual, sem o tipo de variável
e sem ponto-e-vírgulo.
É como se disséssemos ao C: “Hey C, troque cada aparição
da palavra ‘nome_da_variavel’ por ‘valor_da_variavel’, e só depois compile”.
Exemplo de código:
Crie um aplicativo em C que peça ao usuário sua idade, e
diga se ele já pode dirigir (se tiver 16 anos ou mais), se alistar (se tiver 18
anos ou mais) e se já pode se aposentar(65 anos ou mais).
Use constantes: const
e #define.
#include <stdio.h> #define MAIORIDADE 18 const int aposentadoria = 65; const int motorista = 16; int main() { int idade; printf("Digite sua idade: "); scanf("%d", &idade); if( idade >= MAIORIDADE ) printf("Voce ja pode se alistar e dirigir.\n"); else if( idade >= motorista ) printf("Voce pode dirigir, mas nao pode se alistar.\n"); else printf("Voce nao pode dirigir nem se alistar\n"); if( idade >= aposentadoria ) printf("Voce ja pode se aposentar!\n"); }
Note que na #define usamos letras maiúsculas, pois é um costume entre programadores C.
14 comentários:
ultra interessante
Obrigado novamente! Coloquei algumas instruções que achei bacana no meu código e gostaria de compartilhar. Segue:
#include
#define MAIORIDADE 18
const int aposentadoria = 65;
const int motorista = 18;
int main()
{
int idade;
printf("Informe sua idade.\n");
scanf("%d", &idade);
if(idade >= MAIORIDADE)
printf("Vc pode dirigir com %d anos.\n\n", idade);
else
if(idade <= motorista)
printf("Ainda nao permitido dirigir com %d anos. Joge GTA.\n\n", idade);
if(idade <= aposentadoria)
printf("Vc ainda nao pode se aposentas com %d anos. \n", idade);
printf("Aguarde %d anos para sua aposetandoria!\n\n", aposentadoria - idade);
}
Att
Alexandre
<= se o usuário digitar 18 vai entrar na condição de não poder dirigir, de uma olhada no código e faça alguns testes.
Mas, quando devo usar const?
Quando for CONSTANTE, caso não vá mudar de condição nem tão cedo
Robson Araújo Lima, A escolha se vai usar const ou #define é sua. Pode usar qualquer um. Se quiser usar só const, não precisa do #define, e se quiser usar só o #define, não precisa do const.
Boa tarde professor tentei fazer este mesmo exercicio com uma funcao junto, esta correto o modo que fiz ? obrigado pela resposta
#include
#define APOSENTAR 65
#define DIRIGIR 16
#define ALISTAR 18
using namespace std;
int dirigir (int idade_dirigir);
int aposentar (int idade_aposentar);
int alistar (int idade_alistar);
main(){
int idade_dirigir, idade_aposentar, idade_alistar;
dirigir(idade_dirigir);
aposentar(idade_aposentar);
alistar(idade_alistar);
}
int dirigir (int idade_dirigir){
cout << "Informe a idade para ver se pode dirigir:\n";
cin >> idade_dirigir ;
if (idade_dirigir >= DIRIGIR){
cout << "Ja pode dirigir:\n";
}
else
cout << "NAO pode dirigir:\n";
}
int aposentar (int idade_aposentar){
cout << "Informe a idade para ver se pode se aposentar:\n";
cin >> idade_aposentar ;
if ( idade_aposentar >= APOSENTAR ){
cout << "Ja pode se aposentar:\n";
}
else
cout << "NAO pode se aposentar:\n";
}
int alistar (int idade_alistar){
cout << "Alistamento: informe sua idade:\n";
cin >> idade_alistar ;
if (idade_alistar >= ALISTAR ){
cout << "Ja pode se alistar:\n";
}
cout << "NAO pode se alistar:\n";
}
qual a utilidade de const e define? eu poderia simplesmente declarar uma variável e usá-la
Parabéns pelo site.
Manual fodástico sobre programação em C, direto, simples e completo.
Como foi feito o calculo e quanto tempo falta para a pessoa aposentar ou dirigir no seu programa Alexandre Richard?
Melksedek, o calculo e feito ja no printf, pois aposentadoria tem um valor fixo no codigo lembra? ele so fez o valor da aposentadoria-idade no printf.
Gostaria de saber se a escolha de aposentadoria e motorista para serem declaradas na const tem algum porque ou simplesmente para fim de exemplo, mostrando que pode ser feito tanto em define quanto em const? Se alguem souber agradeço :)
Tanto no caso de "aposentadoria" quanto "motorista", temos certeza que o número usado será inteiro e positivo; em outras palavras, um natural. Nesse caso, usar unsigned int é mais coerente. Minha opinião.
Muito bom!
100% novidades
A utilidade é que, caso você precise alterar, supondo que seu programa tenha milhares de linhas, você não precisa sair caçando as variáveis de uma a uma para alterá-las.
Postar um comentário