Sobre o blog

quarta-feira, 26 de fevereiro de 2025

Perguntas que eu tinha e Respostas que achei #2

 para o contexto, leia o post 1

o que é debugging?

é procurar e consertar erros no programa. se tiver erro, o proprio PC te avisa antes de rodar o programa

 

segunda-feira, 24 de fevereiro de 2025

Manipulação e conversão de tipos de dados

manipulação de variáveis inteiras e de ponto flutuante

  • o prof começa explicando sobre as variáveis inteiras e sobre ponto flutuante, isso tudo eu já sei, mas tem motivo pela explicação:
  • a unica diferença é a divisão:
    • se a divisão não for exata, não for um número inteiro, ela vai gerar um número decimal. por exemplo, 10 dividido por 3 daria um número decimal. se ela for rodada como um número inteiro, ela vira só "3" e não o normal, que seria "3,333333". ou seja, ele seria abreviado, cortado. só mostraria a parte inteira, isso não é adequado.
    • pra evitar o problema acima, é bom usar variáveis de ponto flutuante (float e double)
nesses exemplos o professor usou TUDO inteiro e TUDO flutuante. mas agora vem a segunda parte, onde talvez você tenha que trabalhar com variáveis misturadas, seja inteira com float, vice versa, ou até outras variáveis tipo char

conversão entre tipos de dados

às vezes tu tem que converter um tipo de dado em outro pra fazer as operações direitinho, por exemplo às vezes tem que somar um inteiro com um float, e dá pra fazer isso de duas maneiras, conversão implícita e conversão explicita

conversão implícita

o próprio PC converte pra você automaticamente quando você mistura tipos de dados diferente
como pode ver aqui nessa imagem, a variável A é um inteiro e a variável B é um float, e o resultado é um float. então o pc sozinho vai automaticamente converter o inteiro de inteiro pra float

mas isso também vem com riscos, a conversão implícita é útil mas o PC fazer o bagui automaticamente pode dar problema.

  • pode ter perda de dados ou perda de precisão
    • tipo, se ele converter um float pra inteiro, a parte decimal será perdida, como já vimos que ele faz
  • se você não souber que essa conversão tá rolando, tu vai ficar confuso, e pode levar a comportamentos inesperados no seu programa

conversão explícita

pra evitar problemas com a conversão implícita, melhor usar a conversão explícita. é uma conversão feita usando operadores de casting pra forçar a conversão de um tipo de dado pra outro... (ou seja, é só usar uns parenteses)

como pode ver, antes do resultado ali tem um (float). é isso. se você colocar esse (float) usando casting, o resultado dessa divisão vai dar "3.33" direitinho mas se você tirar, vai ficar "3.00". forçando a mudança e não causando problema nenhum que a conversão implícita pode causar.

dicas gerais

algumas dicas pra tu realizar operações sem problema
  • verifique os tipos de dados ao realizar essas operações, pra evitar resultados inesperados
    • "tô fazendo int com int, float com float" = de boas
    • "tô trabalhando com variáveis diferentes" = hora de usar o casting
  • use casting quando necessário
  • cuidado com a precisão. lembre que float ainda podem ter alguns erros de precisão. use double pra ter precisão máxima

Operadores matemáticos

no curso de programação eu não entendi nada, então procurei no youtube e salvei 12 vídeos sobre. ainda não anotei nada nem vi nenhum vídeo, se no fim eu entender, legal! se no fim eu ainda não tiver entendido, vou passar pra próxima aula e aprendo isso naturalmente enquanto programo no futuro.

operadores aritméticos

são soma, subtração, multiplicação e divisão

int a = 5;
int b = 3;
int [NOME DO OPERADOR] = a [SÍMBOLO DO OPERADOR] b;

exemplo com soma:

int a = 5;
int b = 3;
int soma = a + b; // soma será 8


todos os outros parecem ser a mesma coisa, só mudando o símbolo
  • soma +
  • subtração -
  • multiplicação *
  • divisão / (algo minimamente notável sobre esse é que se você inteiros usando "int" o resultado vai ser um inteiro também, sem vírgula)

operadores de atribuição

atribuem valores as variáveis. podem ser combinados com os operadores aritméticos pra você fazer uma operação aritmética e depois atribuir o resultado a variável. não entendi nada do que acabei de escrever, vou seguir vendo a aula e ver se depois dela eu entendo: assisti o vídeo, continuo achando confusíssimo, depois vou procurar mais sobre o assunto. pelo que eu entendi até agora é que você pode, em sequência, calcular o problema matemático, achei confuso demais, nem consigo falar direito o que é, depois procuro mais e vejo se entendo, e então, anoto aqui

finalmente eu acho que entendi, puta que pariu. acho que o professor que era burro? (não, é só que ele usou a mesma aula pra explicar TUDO, o que me deixou muito confuso.)

os operadores de atribuição é basicamente só uma conta feita numa sequencia, se tu tem um número inicial, por exemplo, 10, ela vai ser assim:

int numero1;
numero1 = 10;

o valor inicial é 10, né? você pode usar o código numero1 += 5; pra automaticamente já somar o número com 5, ou seja, vai dar 15! mas aí! depois, se você colocar, em sequencia, o código numero1 -= 1; o PC vai subtrair do 15, não do 10! vai virar 14, ou seja, esses códigos estacam! depois, se você usar algum outro desse, ele vai agir em cima do 14, não do 15 ou 10. e é isso basicamente.

no fim, se você quiser, você pode escrever por extenso, então ao invés de numero1 += 5; vai ficar numero1 = numero1 + 5

operadores de incremento ou decremento

aumentam ou diminuem o valor de uma variável em 1 unidade. significa somar 1 ou subtrair 1 e depois armazenar o resultado na própria variável

por exemplo:


é basicamente numero 1 + 1:
e o prof disse que dá pra usar os operadores de atribuição junto com isso se tu usar numero1 += 1 

outro prof ensinou de forma mais clara, normalmente vc escreveria numero1 = numero1 + 1 mas com esse operador pode escrever só numero1++

pré e pós incremento/decremento


esses baguis podem ter funções e operações e coisa assim DIFERENTES quando usados como prefixo ou sufixo do nome da variável, ou seja numero1++ e  ++numero1 vão ser diferentes



tô tentando entender essa porra...

se o operador ++ for usado depois do nome da variável, ou seja, o sufixo, ele vai ser a última coisa feita na expressão matemática. só depois da soma e o resultado que 5 vira 6. ou seja, é assim

5 é somado com 3 e dá 8, depois disso tudo, 5 vira 6

agora se o ++ for usado antes, sendo o prefixo, ai sim ele realmente vai somar normal.

o 5 que virou 6 agora vira 7, soma com 3 e dá o resultado 10

outro exemplinho

x = 1
y = 0

y = ++x

com o ++ sendo o prefixo, significa que o x primeiro vai ser incrementado e virar 2, e então o valor dela vai pro y e o y vai virar 2 também. ou seja, vai acabar com x = 2 e y = 2

y = x++

nesse caso, y primeiro vai imitar o valor de x, ou seja 1. e depois disso x vai ser incrementado e virar 2. ou seja, vai acabar com x = 2 e y = 1

quinta-feira, 13 de fevereiro de 2025

Planejamento de soluções

nessa aula do curso aí é basicamente só duas dicas do que usar pra te ajudar antes mesmo de você começar a programar, pseudocódigos e fluxogramas

pseudocódigos e fluxogramas são beneficiais por causa da simplicidade de fazer eles, a clareza que eles dão e um foco maior na lógica do negocio

pseudocódigos

  • basicamente é escrever descrições das partes dos códigos
  • descreve a lógica do algoritmo só que em linguagem normal

  • basicamente só isso, só escrever uma lista antes de fazer o código onde cada coisa vai ficar pra te ajudar
  • da pra escrever em ferramentas online e offline ou até em papel e caneta
  • PQP GENTE É SÓ UMA LISTA DE COISA MANO, ISSO DEVIA ESTAR EM TIPO UMA LISTA DE DICAS, NÃO SER O ASSUNTO PRINCIPAL ASSIM

fluxogramas

  • eu sei oq diabos é um fluxograma mermão, não precisava de 150 parágrafos não

quarta-feira, 12 de fevereiro de 2025

Perguntas que eu tinha e Respostas que achei #1

nesse curso de programação que tô fazendo, o professor sugeriu ir pesquisando algumas coisas que eu tiver dúvida e ele dá algumas sugestões também de coisas pra pesquisar ás vezes, e claro, eu também gosto de pesquisar coisas pra entender tudo direitinho por mim mesmo.

aqui, vou fazer esses posts de perguntas e respostas que eu tinha, pesquisei e achei. eu vi num vídeo do youtube um cara que estudava desse jeito: ele se fazia várias perguntas, ele achava uma resposta no google e só dava copiar e colar, e depois ele lia e escrevia uma resposta dele mesmo, o que ele entendeu sobre o assunto.

se você não entendeu nada, é porque eu tô com um pouco de sono kkkkk, tá de boas, tu vai entender tudo quando eu começar.

perguntas e respostas

pra que vou usar coisa tipo especificadores de formato?

  • RESPOSTA DA NET: Especificadores de formato são usados principalmente para exibir valores na tela com a função printf() e para ler entradas com scanf(). Eles dizem ao computador como interpretar os dados que você quer exibir ou receber. [VÁRIOS EXEMPLOS] Isso é útil porque o C não sabe automaticamente como exibir certos tipos de dados. Você precisa dizer qual formato ele deve usar. O mesmo vale para scanf(), quando você quer ler entradas do usuário e armazenar em variáveis.
  • MINHA RESPOSTA: pro pc entender o que calcular, já que cada um dos especificadores representam uma variável, só colocar ela ali que fica de boas.

sobre formatar saída de ponto flutuante?

  • RESPOSTA DA NET"Formatar saída de ponto flutuante" significa controlar como os números decimais (float/double) são exibidos, e isso resolve esse problema dos valores bugados com um monte de zeros ou casas decimais estranhas. O motivo disso acontecer é que os números de ponto flutuante são armazenados de uma forma que pode gerar pequenas imprecisões, então, quando você imprime, às vezes aparecem números esquisitos tipo 0.30000000000000004 ao invés de 0.3. [DEU VÁRIOS EXEMPLOS E DICAS]

  • MINHA RESPOSTA: é o que eu suspeitava. são só formas de escrever direitinho pra sair tudo direito o número flutuante, usando coisa tipo ".2f" ou ".5f" coisa desse tipo que organiza melhor o ponto

o que é solicitação pull e git fetch no github?

  • REPOSTA DA NET: O pull request (PR) é uma maneira de propor mudanças em um repositório no GitHub. Quando você termina de trabalhar em uma branch (ramificação) local e quer que suas alterações sejam incorporadas à branch principal (geralmente main ou master), você cria um pull request. É como se fosse um "pedido" para que suas alterações sejam revisadas e, se aprovadas, mescladas ao código principal. O git fetch é um comando do Git usado para baixar (fazer download) as últimas atualizações de um repositório remoto (como o GitHub) sem fazer alterações no seu código local. Isso vai baixar todas as atualizações da origem (que geralmente é o GitHub) para o seu repositório local, mas não vai mudar nada no seu código. Para integrar essas mudanças à sua branch, você pode usar git merge ou git rebase.
  • MINHA RESPOSTA: o pull request é você pedir pra que suas alterações numa branch sejam revisadas e colocadas no código principal. o git fetch é pra baixar atualizações sem alterar seu código.

segunda-feira, 10 de fevereiro de 2025

Funções de Entrada e Saída de Dados

  • prinft: é usado pra mostrar as informações tudo direitinho na tela, é a saída de dados. o printf imprime na "saída padrão" que é um nome chique pra "tela"
  • scanf: é como o usuário bota a informação, é a entrada de dado. você lê dados botados pelo usuário pela "entrada padrão" que é um nome chique pra "teclado ou mouse". ele pega informação do usuário e coloca nas variáveis.
tem várias outras mas o foco do curso por agora são essas duas

outras inúteis que ninguém liga e não serão exploradas agora


printf

sintaxe básica: printf("texto com formatação", variavel 1, variavel 2, ...);
exemplo (sem variável, o \n é só pro pc pular linha): printf("Olá, Mundo\n");

depois, pra mostrar na tela a informação em um formato específico, SEJA LÁ OQ DIABOS ISSO SIGNIFIQUE, você usa os baguizin de formato, q é o "%formato", a sintaxe do bagui fica assim:

sintaxe com os formatos ai: printf("%formato1 %formato2 %formato3", variavel1, variavel2, variavel3);

cada um desses formatos, o 1 2 e 3, vão afetar cada uma dessas variáveis individualmente, é uma relação de 1 por 1.

tem vários tipos de formatos, os que vão ser usados no curso vão ser esses:

explicação do curso:
  • %d: Imprime um inteiro no formato decimal.
  • %i: Equivalente a %d.
  • %f: Imprime um número de ponto flutuante no formato padrão.
  • %e: Imprime um número de ponto flutuante na notação científica.
  • %c: Imprime um único caractere.
  • %s: Imprime uma cadeia (string) de caracteres.
explicação só que feita por mim pra eu entender melhor:
  • %d: mostra um número inteiro
  • %i: mesma coisa que o %d.
  • %f: mostra um número com vírgula, no formato padrão.
    • %2f: força o numero com virgula a acabar só com duas casas decimais eu acho
  • %e: número com vírgula, mas na notação científica.
  • %c: um único caracter,  tipo uma letra (A) ou número (1)
  • %s: mostra uma string de caracteres. ou seja, vários caracteres

forma de usar o printf e o especificador de formato

exemplo com uma linha só

TO DE TODAS AS FORMAS TENTANDO ENTENDER COMO USAR ESSA MERDA DE COISA, TO TENTANDO MEU MELHOR

printf("%formato1 %formato2 %formato3", variavel1, variavel2, variavel3); é assim, né? então! vamos fingir que temos esse código

int idade = 25

no printf, poderiamos colocar assim:

printf("%d", idade);

e com isso, ele imprimiria "25", porque ele pega o int (que é o inteiro) que tem ali na variável "idade" e coloca no lugar do %d. ok, agora, se a gente colocasse tipo assim:

printf("Idade: %d", idade);

ele imprimiria "Idade: 25" numa boa! ótimo, entendi essa parte, agora tá na hora de um

exemplo com mais de uma linha

se a gente tiver algo tipo

int idade = 21;
float altura = 1.64;
double salario = 666.00;
char letra = 'S';
char nome[20] = "José";

no printf, poderiamos colocar algo assim:

//novamente, os \n são só pra pular linha.

printf("Idade: %d\n", idade);
printf("Altura: %f\n", altura);
printf("Salário: %f\n", salario);
printf("Sim: %c\n", letra);
printf("Nome: %s\n", nome);

assim, com cada especificador de formato sendo amiguinho da variável, só pra eu não me esquecer, a variável são os nomezinhos tipo "int idade" "float altura" "char opcao" o nome real delas, o bagui que dá a elas a função mesmo, são os "int" "float" e "char" mas o nome que eu dei pra elas pra elas, que eu vou mandar o pc se referir a elas, são o "idade" "altura" e "opção".

então é tipo, um pouco confuso, mas "int" significa um número inteiro, e o "%d" imprime um numero inteiro, ou seja, eles se conectam, é pra eu usar o "%d" quando eu quiser imprimir um "int" acho que consegui entender o básico, mas é, no fim, se eu mandar ele imprimir esse negócio ali em cima, vai sair:

Idade: 21
Altura: 1.640000
Salário: 666.000000
Sim: S
Nome: José

merda extra que o prof tá explicando e achei pertinente anotar

dá pra fazer o bagui tudo na mesma linha, eu achei mais legal colocar em linhas separadas pra organização, mas se quiser, pode colocar tudo na mesma linha, acho que já mostrou isso na explicação da sintaxe, que é:

printf("%formato1 %formato2 %formato3", variavel1, variavel2, variavel3);

se tu quiser tu pode fazer algo semelhante, tipo

printf("Idade: %d\nAltura: %f\nSalário: %f\n", idade, altura, salario);

e vai sair o:

Idade: 21
Altura: 1.640000
Salário: 666.000000

tudo normal e bonitinho, mesmo assim, eu acho que o código fica bem mais desorganizado assim, eu prefiro tudo separadinho mesmo

scanf

sintaxe básica: scanf("formato1 formato2", &variavel, variavel2, ...)

eu fiz um monte de coisa la no curso entendi pra caramba, acho que aqui vou colocar só um pequeno recap do que eu entendi, sem ver o vídeo do curso de novo, só o que eu entendi mesmo:

primeiro tu coloca o int la em cima, tipo
int idade;

depois tu bota um printf com um textinho mandando o kra digitar algo e inserir a informação dele, exemplo: 
printf("Entre com sua idade\n");

depois tu coloca o scanf,, com a sintaxe ali em cima de formato e variavel
scanf("%d", &idade);

e ai depois disso tu coloca outro printf, mas um printf respondendo a pessoa, respondendo o usuario, tipo, com o formato e a variavel ali:
printf("Sua idade é: %d.\n", idade);

não entendi TOTALMENTE exatamente como funciona, mas entendi como fazer e pratiquei no curso também, então, depois eu faço, eu entendi como fazer um pouco

scanf lendo strings

o scanf sabe ler strings, mas ele só lê até o primeiro espaço em branco. ou seja, se o usuario colocar "joao da silva" o nome dele só vai ser "joao" o "da silva" não

pra ler strings com espaços, é bom usar "fgets" eu nem sabia oq é siso, isso não foi explicado na ultima vez q eu fiz o curso acho q foi atualizado. pra ler strings com espaços em brancos é legal usar "fgets" então, ela lê uma linha inteira de entrada, incluindo espaços, vou testar aqui no meu programa, KKKKK testei e gostei mano, funcionou



quinta-feira, 6 de fevereiro de 2025

Variáveis e Tipos de Dados

Me falaram pra não tentar decorar TODAS porque é difícil demais. Vou só anotar algumas dicas sobre como escrever elas direitinho e vou aprendendo elas com o tempo.

Regras para a criação de nomes de variáveis em C

  • Comece com letra ou _, não pode começar com número
  • Em seguida, use apenas letras, números e _
  • Case sensitive: cuidado com letras maiúsculas e minúsculas, "idade" e "Idade" vão ser diferentes
  • Evite usar palavras da linguagem C, tipo outros nomes de variáveis pra não confundir o programa
  • Escolha nomes fáceis de entender e lembrar
  • Pras variáveis do tipo char funcionar, tem que colocar o caractere entre aspas simples ' '

algumas variáveis

  • int: numeros inteiros sem casas decimais | ex: int idade = 25;
  • float e double: usados pra números com virgula. double é mais preciso mas float ocupa menos espaço na memória | ex: float altura = 1.75; e double salario = 3000.50;
    • se precisa de precisão muito alta nos calculos, use double
  • void: aparentemente é quando não tem nada, é a ausência de um tipo, não usei esse ainda
  • char: tu usa pra colocar caracteres | ex: char inicial = 'A';
    • char nome[20] = "Alice"; da pra tu colocar mais q um caractere no char, se tu usar strings, que é basicamente tu colocando um limite de letras

Primeiro Programa em C

 

  • Inclusão da biblioteca: #include inclui a biblioteca padrão de entrada e saída, necessária para usar a função printf.
  • Função principal: int main() é onde o programa começa a execução. Toda aplicação em C começa pela função main.
  • Saída de dados: A linha printf("Olá, Mundo!\n"); imprime a mensagem "Olá, Mundo!" na tela. O \n adiciona uma nova linha ao final da mensagem.
  • Fim do programa: return 0; indica que o programa terminou com sucesso.


segunda-feira, 3 de fevereiro de 2025

Processo de Programação e Linguagem C

 Processo de programação

  1. Entendimento do problema
  2. Planejamento de como resolver o problema
  3. Escrever o código
  4. Compilar o código
  5. Testar o código
  6. Corrigir erros até funcionar direito
  7. Manutenção: depois de tudo, ajustar e melhorar no futuro. Guardar o código pra usar novamente no futuro.

Linguagem de programação

É um tipo de linguagem. Tem vários tipos, por exemplo: C, HTML, CSS, etc. Cada uma tem sua forma de escrever, estilo, sintaxe e semântica, e etc.

Vantagens da linguagem C

Eficiência, versatilidade, fundamentos sólidos (outras linguagens são baseadas em C, então você já se liga nelas), sintaxe simples, pode ser executada em PCs de tipos diferentes com pouca modificação, várias bibliotecas, etc.

Processo de tradução

  1. Escrevemos o código e o programa e salvamos o arquivo (chamado código fonte). Vai ficar tipo "meu_programa.c"
  2. Usamos o compilador pra converter esse arquivo escrito em C e criar um executável.
  3. Usamos um linker, combinando o código criado com bibliotecas necessárias pra criar o arquivo executável.
  4. Executamos o arquivo.

Conceitos de Solução Estruturada

Organização no código

É importante pra dedéu pra facilitar a leitura e manutenção do código, que não só vai ser feita por tu, mas pelo coleguinha programador também. Abaixo, dicas de organização de código que li no curso que tô fazendo:
  • INDENTAÇÃO: Espaço extra no início de uma linha de código pra mostrar que ela tá dentro de um bloco de código específico.
  • COMENTÁRIOS: Anotações breves nos códigos, não aparecem na versão final, só pro povo programando.
    • Comentários de linha única: Começam com // e se estendem até o final da linha, super breve. Normalmente usados pra uma só linha.
    • Comentários de múltiplas linhas: Começam com /* e terminam com */. Usados pra anotações maiores.
  • NOMES SIGNIFICATIVOS: Use nomes de variáveis e funções que façam sentido. Ao invés de x ou y use soma ou resultado. Mais fácil.

Raciocínio lógico e pensamento computacional

  • RACIOCÍNIO LÓGICO: É a capacidade de pensar de forma clara e ordenada.
  • PENSAMENTO COMPUTACIONAL: Nos permite abordar problemas de forma que um computador possa entender. Definir os passos que o PC deve usar pra resolver o problema de uma forma estruturada (esses passos são chamados algoritmos).
Abaixo, dicas pra desenvolver essas habilidades.
  • DECOMPOSIÇÃO: Dividir o problema em partes menores para a resolução ficar mais fácil. Dividir ele e ir fazendo cada passo de uma vez.
  • RECONHECIMENTO DE PADRÕES: Identificar soluções parecidas para problemas similares.
  • ABSTRAÇÃO: Focar apenas no importante. Se tu tem por exemplo uma função que vai conter o processamento de dados de uma coisa, você não precisa de preocupar com cada coisinha dentro dessa função no futuro, só saber como e onde usar a função inteira e tá de boas
  • ALGORITMOS: São os procedimentos pra resolver um problema. Uma lista de instruções. Você pode passar isso pro computador para ele resolver algum problema.
  • MODULARIDADE: No início, eu achei que era o mesmo que decomposição, mas não, é diferente. Modularidade é dividir um grande problema em subproblemas menores, mas ao contrário de decomposição, é pra fazer isso LOGO NO CÓDIGO!
    • Exemplo: se você for fazer um programa pra calcular a média de temperaturas de uma semana. Você cria uma por uma com FUNÇÕES DIFERENTES (e dando nome pra elas) para a entrada de dados, uma função para o processamento dos dados (pra calcular essa média), e uma função pra saída de dados (pra exibir uma média), uma por uma bem organizadinho
    • Ai depois você coloca o int main() { e coloca as funções pra rodarem nele, fica bem mais organizadinho assim
    • Com isso aí tu pode até reutilizar o mesmo código pra outras coisas, e também pode mudar cada função uma por uma só aquela função. Facin, facin

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...