Boa tarde, preciso fazer um algoritmo onde eu insiro um valor inteiro e uma função booleana verifica se ele é par ou impar, mas quando eu compilo ele da erro após inserir o valor para verificação, se puderem me dar umas dicas para trabalhar com variaveis booleanas, agradeço desde ja!!!
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
bool par_impar(int num1){
bool t = true;
if(num1%2==1){
t = false;
}
return t;
}
main(){
int num;
bool a;
printf("Informe um valor: \n");
scanf("%i", num);
a = par_impar(num);
if(a==true){
printf("O numero %i e par!", num);
}
else{
printf("O numero %i e impar!", num);
}
}
1 curtida
O problema é que você está passando a cópia do valor da variável num, e
o argumento de scanf deve receber seu endereço.
Em:
scanf("%i", num);
troque por:
scanf("%i", &num);
o/
1 curtida
Nossa, um coisinha simples, muito obrigado, tirando isso a função que eu fiz esta correta?
1 curtida
Certo aparentemente está, porém está confuso e com algumas coisas desnecessárias.
O que par_impar quer responder? Se o número é par? Ou, se ele é ímpar? Não seria melhor usar algo mais direto como eh_par, ou eh_impar?
Simplificações
Tomando como base que você renomeou a sua função para eh_impar.
- Na sua função você poderia fazer apenas:
bool eh_impar(int num1) { return num1 % 2; }
O tipo bool é um açucar sintático para int. Assim, false na verdade é 0 e
true é qualquer coisa que não seja zero, e 1 se aplica.
Assim, se a expressão retorna 0 então vira false e se retorna 1 vira true.
Se você quiser renomear como eh_par então a lógica é o oposto.
bool eh_par(int num1) { return !(num1 % 2); }
Note o operador de negação “!”.
- No main, poderia ser apenas:
main() { int num; printf("Informe um valor: "); scanf("%i", &num); if (is_impar(num)) { printf("O número %i e impar!\n", num); } else { printf("O número %i e impar!\n", num); }
Eu não consegui deixar o código formatado de jeito nenhum. Então não note isso.
o/
1 curtida
Obrigado saulo, acredito que essas suas dicas vão me economizar umas boas linhas de códigos. Pra fazer uma verificação do valor que retorna na função eu preciso necessariamente atribuir a função a uma variavel, ou posso comparar a função direto?
1 curtida
Você pode comparar direto, como fiz no if dentro do main. Olhe:
> if ( is_impar(num) ) {
> // ...
>}
Isso diz que se qualquer valor retornado por is_impar for diferente de zero, então num é ímpar e o programa entra no escopo do if. Ou seja, não precisa atribuir a nada que irá funcionar.
Lembre do que disse anteriormente, qualquer valor diferente de zero é true.
Qualquer inteiro dentro de parênteses se torna uma expressão booleana.
Veja alguns exemplos:
> if (0) {
> // nunca serei executado
> }
if (1) {
// sempre serei executado
}
if (32849) {
// sempre serei executado
}
while (1) {
// sou um laço infinito, sempre executarei a menos
// que alguém declare break dentro de mim.
}
o/
1 curtida
Opa, sou iniciante em programação e me corrija se eu estiver errado, mas não seria mais fácil verificar
Bloco de citação
diretamente se o valor é par ou ímpar, sem precisar de função.
#include <stdio.h>
#include <math.h>
int main (){
int num;
printf("Digite um numero: ");
scanf("%d", &num);
if ((num % 2) == 0){
printf("O numero e par");
} else {
printf("O numero e impar");
}
return (0);
}
1 curtida
realmente assim fica muito mais facil e bem mais simples mais creio que ele queria testar em bool. seu programa está corretíssimo
acho que ele só queria testar o bool por que tem modos mais faceis de resolver isso:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main (){
int num;
setlocale(LC_ALL,“portuguese”);
printf("Digite um numero: ");
scanf("%d", &num);
if ((num % 2) == 0){
printf("O numero e par");
} else {
printf("O numero e impar");
}
return (0);
}
mais acho que ele só queria testar bool mesmo