Skip to content

Latest commit

 

History

History
186 lines (131 loc) · 6.69 KB

aulas.org

File metadata and controls

186 lines (131 loc) · 6.69 KB

1º Bimestre

Aula 1 - Intro binário

Aula 2 - Codificação da informação

Importancia da posição

Vimos na aula passada que podemos codificar números por meio de sinais binários usando o Sistema Binário. Com um grande quantidade de tais bits disponíveis, podemos mapear tais números a caracteres e por tanto armazenar textos. Como no exemplo visto na aula passada, vimos que para enviar a mensagem “OI”, usando a codificação da tabela ASCII, temos que enviar os números 79 73. Mas como isso parece em binário?

79 em binário é 1001111 enquanto que 73 é 1001001. Armazenando-os em sequência, teríamos

10011111001001 mas como determinaríamos onde começa um número e onde termina outro?

Olhando no exemplo abaixo 1000100101011 como poderíamos começar a decodificar se não sabemos onde os números começam ou terminam? Não sabemos nem quantos número existem nessa sequência, um, dois, quatro?

Para solucionar esse problema, podemos padronizar o tamanho de cada número e, independente de quantos bits sejam necessários para representá-lo, sempre ocupar esse espaço. Assim, se acordarmos que cada caractér será representado por um byte, nossa mensagem de “OI” devem ser enviada da seguinte forma 0100111101001001

–O—–I—

enquanto a seguinte deveria ser 0100010000101011

Expandindo ASCII (ou como codificar mais de byte)

Na época, as pessoas que decidiram isso eram em grande parte norte-americanas e potanto só foi necessário fazê-lo com o alfabeto destes. Hoje, precisamos representar diversos caracteres, com acento, hierogrifos e de diversos alfabetos.

Para isso, o mundo decidiu em usar UTF-8 (Unicode (or Universal Coded Character Set) Transformation Format – 8-bit). Utilizando de 1 a 4 bytes, ele consegue suportar ASCII e expandir para 1.112.064 caracteres. Lembrando que a tabela ASCII só precisva de 7bits para representar seus 128 caracteres, o que deixava o primeiro bit de um byte sempre como zero. Aproveitando disso, UTF-8 define:

  • se o primeiro bit for zero, aquele é um caracter ASCII.
  • se o byte começar com 10, aquele byte é a continuação de um código de mais de byte.
  • se o byte começar com 110, o código é composto deste byte mais o próximo
  • se começar com 1110, o código é composto deste byte mais os dois próximos
  • se começar com 11110, o código é composto deste byte mais os três próximo caracteres.

Assim, vemos como podemos utilizar os próprios bits de um byte para transmitir que a informação está contida em mais de um byte.

A quantidade absurdamente grande de caracteres disponíveis nos permite codificar ainda mais coisas, como emojis, bandeiras e padrões.

Unicode Tabela de caracteres

Cores e imagens

Sabendo o que vimos, como você imagina que podemos armazenar num computador informações sobre uma cor? >> RGB https://en.wikipedia.org/wiki/8-bit_color

Esses formatos definem a quantidade de vermelho verde e azul. Muitas vezes, a quantidade de bits usados não são divisíveis por 3. Neste caso, é comum retirar um bit do azul (já que o olho humano é menos sensível a esta cor) ou adicionar um bit ao verde (que somos mais sensíveis).

Tal codificação usado em grande quantidade pode formar uma imagem, cada pixel usando este código de cor.

Vídeos

Sequencia de imagens + som.

Aula 3 - Linguagens e interpretador de python

Começamos a aula relembrando a nossa estrutura do “Problema”, com entrada, saida e “algo no meio” que transforma de uma a outra.

Para preencher esse meio pelo qual a entrada é tranformada na saída, definimos algoritmos como uma “sequencia de instruções bem-definidas”. Perceba que o conceito de bem-definida depende do contexto no qual a instrução é discutida.

Linguagens de programação

Como vimos, computadores manjam de binários e com estes podemos representar os números e textos quem compõem as entradas e saídas do nosso programa. Assim, para representarmos nossas instruções, utilizaremos a mesma ideia. Codar em binário não é uma boa ideia, tendo em vista que já foi difícil transformar um número de decimal para binário, imagine várias instruções. Assim, as pessoas decidiram fazer uma linguagem de “mais alto nível” que seja mais fácil de nós humanos entendermos mas que tenha uma grande correspondência com o código binário de máquina. Tais linguagens são chamadas de assemble.

Ainda sim, com o passar do tempo, foi-se percebendo que precisariamos de linguagens ainda mais elaboradas e ao mesmo tempo, mais fáceis de lidar/codar. Assim, surgiram linguagens como C/C++ que, por meio de programas chamados de compiladores eram capazes de serem traduzidos (com boa eficiência) para uma linguagem assemble. Perceba que nesse caso, o computador precisa ter acesso ao arquivo inteiro do programa e traduzí-lo na íntegra para binário.

Mais uma vez, as necessidades dos programadores se sofisticaram e surgiu linguagens como python que pode alavancar de recursos em C/C++ traduzindo para ele quando necessário ou utilizando seu interpretador que não precisa do arquivo inteiro de uma vez.

Interpretador de python

Podemos criar nomes chamados de variáveis e estes devem possuir valores.

Aula

Aula

Aula

Aula

Aula

Aula

Aula

2º Bimestre

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

3º Bimestre

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

4º Bimestre

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula

Aula