Sobre o blog

sexta-feira, 28 de março de 2025

Operadores lógicos em C

  • possibilitam criar condições complexas e permitem avaliar múltiplas condições de maneira eficiente

e lógico (&&)

  • o resultado é verdadeiro se as duas expressões que ele conecta forem verdadeiras


  • se a e b forem os dois maiores que 0, vai dar tudo certo pq as duas expressões são verdadeiras

ou lógico (||)

  • o resultado é verdadeiro se pelo menos uma das expressões for verdadeira. o resultado só dá errado se as duas forem falsas

não lógico (!)

  • inverte a expressão, se ela for verdadeira, ele retorna falso e vice versa

  • tem um monte de explicação no curso aqui, mas eu não to entendendo nada, depois eu vou ver alguns vídeos explicando pra ver se eu entendo
  • ok acho que entendi, puta que pariu mano que desgraça de curso, não sei pq explicaram desse jeito. mano, eles fizeram o bagui parecer insanamente complicado quando é a coisa mais simples do mundo, é literalmente só:
  • tá vendo isso? mostra uma variável positiva e manda o programa dizer se ela é positiva ou negativa, né? bem:
    • em situações normais, o programa mostraria que a variável é positiva
    • mas como tá com o !, ele vai falar que a variável é negativa!
      • mesma coisa se vc botar -10 ao invés de 10. ele vai trocar, normalmente ele falaria que a variável é negativa, mas com o ! ele vai falar que é positiva

precedência de operadores

  • é a ordem de execução dos operadores.
  • eu entendi mais ou menos o que é, depois eu vejo no vídeo pro professor se ele explica melhor.
    • ele explicou sim, entendi tudo direitinho:


    • os operadores no topo são os q vão ser realizados primeiro, os de baixo são os que vão ser executados depois
    • em cada linha tá falando como eles vão ser executados
  • acho que entendi tudo que é, na verdade, mas não consigo colocar em palavras e explicar, mas basicamente é:

a > 0 && b < 0 || c == 0
verdadeiro && verdadeiro || c == 0
verdadeiro || c == 0
verdadeiro || falso
A condição é verdadeira!
  • AGORA, SE COLOCARMOS POR EXEMPLO SÓ 10 E NÃO -10
a > 0 && b < 0 || c == 0
verdadeiro && falso || c == 0
falso || c == 0
falso || falso
A condição é falsa!
  •   Isso tudo pois não importa o que, ele calcula o && primeiro.

combinar operadores lógicos com operadores relacionais

  • é o que diz o nome, é super fácil, pra criar condições mais complexas, tu mistura os operadores lógicos e os racionais, assim dá pra fazer várias escolhas ao mesmo  tempo:

segunda-feira, 24 de março de 2025

Estruturas de decisão em C

  • faz o programa seguir diferentes tipos de execução dependendo de decisões definidas por você
  • pra tomar as decisões usamos os operadores relacionais, já anotei sobre eles no blog, eles são:
    • > : maior que
    • < : menor que
    • >= : maior ou igual a
    • == : igual a
    • <= : menor ou igual a
  • é basicamente: se eu quero saber se tem mais maçã que laranja, eu boto
se laranja > maçã então
escreva "tem mais laranja que maçã"
senão
escreva "tem menos laranja que maçã"
fim_se
    • claro... eu colocaria isso em código, né. mas isso é só pra dar uma ideia.
  • se eu quero ver se uma idade é maior ou igual (>=) a 16 eu boto
se idade >= 16 então
escreva "você pode votar!"
senão
escreva "você ainda não pode votar!"
fim_se
    • variável = int idade 16
    • se senão = comparação
  • quero ver se um valor é maior que o outro, eu coloco
programa{

função inteiro(){
    inteiro valor 1 = 76.0;
    inteiro valor 2 = 75.0;

se (valor 1 == valor 2) então
escreva ("os valores são iguais")
senão
escreva ("os valores são diferentes")
fim_se
}
}
  • ok, vamos lá, outro exemplo com ainda mais explicações detalhadinhas e mastigadinhas:
    • preço 1 = 76,0
    • preço 2 = 76,0
se (preço 1 > preço 2) então
escreva ("preço 1 maior que 2")
senão <---- o preço 1 é maior que o preço 2? NÃO! ou seja, essa informação é falsa, e vai ser ignorada e passada pra próxima etapa
se (preço 1 < preço 2)
escreva ("preço 1 menor que 2")
senão <---- o preço 1 é menor que o 2? AINDA NÃO! novamente, vai ser ignorado e vai ser passada pra próxima
escreva ("os preços são iguais") <---- isso aí sim é verdade, vai acabar aí.

Estruturas de decisão simples

  • IF: verifica se uma informação é verdadeira ou falsa. basicamente "se isso for verdade, faça isso"
    • assim ó:
if (condição) {
"código";
}
  • A condição pode ser verdadeira ou falsa, se for verdadeira tudo fica de boa, se for falsa o programa dá erro (ou continua executando o código depois do bloco if e só ignora o if)
  • dica aleatória: em C, o número 0 é considerado falso e qualquer número diferente é verdadeiro. então, se 0 for a condição o código não é executado
  • e agora mais exemplos divertidos:
int nota = 75;

if (nota >= 60){
printf ("você passou!\n");
}
    • nesse código acima, vai aparecer "você passou!" e tudo vai ter funcionado direitinho.
int idade1 = 25;
int idade2 = 30;

if (idade1 > idade2) {
printf ("idade 1 é maior que idade 2\n");
}
    • nesse código acima, vai dar erro, pois a informação é falsa, o programa vai só ignorar completamente o if

Estruturas de decisão composta

  • completa o if e faz o programa escolher entre mais de uma opção. ao invés do programa responder a opção verdadeira e só ignorar a opção falsa, você pode colocar um textinho pra opção falsa também.
  • sintaxe
if (condição) {
//código
} else {
//resto do código
}
  • por exemplo
if (temperatura > 30.0){
printf ("está calor\n"); <---- se a temperatura for maior que 30.0, vai aparecer isso
} else {
printf ("está frio\n"); <---- se for menor, vai aparecer isso
}
























quarta-feira, 12 de março de 2025

Operadores relacionais

  •  permitem a comparação entre variáveis

principais operadores relacionais

  • > (maior que)
  • < (menor que)
  • >= (maior ou igual a)
  • <= (menor ou igual a)
  • == (igual a)
    • sim, dois ==
      • um = só é sinal de atribuição
  • != (diferente de)
    • tu vai usar isso pra comparar operandos, e o PC vai falar se a informação é verdadeira ou falsa (1 pra verdadeiro e 0 pra falso)
olha aí o código comparando dez e vinte

comparação com tipos de dados diferentes

  • se você comparar, por exemplo, um dado inteiro com um float. o PC normalmente faz uma conversão implícita e transforma int em float.
  • mas ás vezes, você talvez precise fazer uma conversão explicita antes de comparar, aparentemente, segundo uma imagem aqui no curso, o código pra comparar é assim
int dez = 10;
float vinte = 20.0;

int comparison = (float)dez == vinte;

  • basicamente isso. converter explicitamente
    • é útil pq tipo, se tu tiver 10.2 e 10. se tu quiser ignorar o .2 do primeiro numero, tu faz um casting com (int) e o programa ignora o ponto flutuante e basicamente só compara 10 com 10 e dá tudo certo :D
  • dá até pra comparar caracteres, chars! por exemplo:
    • se nesse código de cima aí eu colocasse tipo char letra = 'a'; dava pra comparar na moral pq o "a" na verdade tem um valor na tabela ASCII, que é 97. então tecnicamente tem sim como comparar, compararia 10 com 97.
      • pra saber o valor de uma letra na tabela ASCII, é só colocar esse código
        • printf ("O valor ASCII de %c é %d. \n", letra, letra);
        • aí ele vai sair "O valor ASCII de a é 97."

terça-feira, 11 de março de 2025

segunda-feira, 10 de março de 2025

Modificadores de tipos de dados

  • Modificadores de dados: alteram alguns dados pra deixar mais preciso e eficiente. Os modificadores mais comuns são unsigned e long.

unsigned

  • declara variáreis que podem armazenar apenas valores positivos (incluindo zero). pode ser usado em int e char e dobra o tanto de numero positivo que pode ser armazenado
    • o int normal armazena valores positivos e negativos, o unsigned só armazena valores positivos, só que ele dobra a quantidade de valores positivos
  • a imagem abaixo dá um exemplo legal, comparando um int normal com um unsigned int e um char normal com um unsigned char:
  • onde usar unsigned: trabalhando com coisas que não usa valores negativos, tipo pontuação ou estoque ou algo do tipo. se vc tiver fazendo a pontuação do jogador num jogo e a pontuação nunca vai ser negativa, se vc usar unsigned pode fazer a pontuação ser muito maior do q com um int comum. outro exemplo é trabalhar com imagens, representadas por valores de 0 a 255, nesse caso, unsigned char é ideal
  • %u
    • %lu (long inteiro sem sinal)
    • %hu (short inteiro sem sinal)
  • existe um prefixo q é chamado signed, mas esse é o prefixo padrão, ele é como as variáveis funcionam normalmente

long

  • aumenta a capacidade de armazenamento dos dados primitivos. pode ser aplicado a int e double, pra armazenar valores maiores e com maior precisão.
  • esse aí é até mais simples que o unsigned, pq esse só aumenta tudo e fds, olha o exemplo da imagem abaixo aí

  • quando usar long: quando vc precisa trabalhar com números muito grandes né porra. tipo cálculos astronômicos ou armazenar a população mundial ou algo do tipo, long double é a escolha certa
    • tem até "long long int" que armazena MAIS AINDA!
    • %ld (long int) %lld (long long int)
  • também tem long double. long double é preciso e long long double é super preciso.
    • %lf (long double)
  • veja direitinho como ele funciona na plataforma

short

  • usado quando precisar de uma variavel inteira que ocupe menos memória
    • tipo, o int e o long int permitem que você escreva números até os milhões, né? o short deixa você escrever até trinta mil e pouco só, isso é bom, isso otimiza seu código
  • útil quando a memória é limitada
  • %hd (short int) 

dicas

  • use os modificadores direitinho. quando vc precisar armazenar valores muito grandes
  • verifique a compatibilidade dos tipos sempre, pra ver se é tudo direitinho. em alguns programas pode ter diferença. uma variável pode funcionar de um jeito no windows e de outro no linux, pesquise direitinho como cada variável funciona em cada programa quando você estiver programando
    • o long double por exemplo, ás vezes zera tudo e não funciona direito no window
      • o mesmo também apresenta erros em alguns números no github e no linux
  • use os especificadores de valores correto pra tudo sair direitinho
  • te liga, um bagui q eu nem sabia, aparentemente tem também unsigned short int e unsigned long int, eu nem sabia disso, ele nem tinha mostrado isso no curso


Sobre o blog

    Essa vai ser uma postagem que vou tentar deixar fixada, talvez no cabeçalho, pra todo mundo ver. Só pra explicar direitinho esse blog, c...