Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila octave de programacao, Notas de aula de Engenharia Civil

Mini curso de programacao no octave

Tipologia: Notas de aula

2020

Compartilhado em 15/12/2020

jaks-cleiton
jaks-cleiton 🇧🇷

2 documentos

1 / 342

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdu¸ao `a Programa¸ao com Octave
Coltec - UFMG
arcio Fantini Miranda
13 de mar¸co de 2018
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Apostila octave de programacao e outras Notas de aula em PDF para Engenharia Civil, somente na Docsity!

Introdu¸c˜ao `a Programa¸c˜ao com Octave

Coltec - UFMG

M´arcio Fantini Miranda

13 de mar¸co de 2018

Sum´ario

  • 0 Apresenta¸c˜ao e Organiza¸c˜ao do Curso
    • 0.1 Introdu¸c˜ao
      • 0.1.1 Objetivos Espec´ıficos do Curso
    • 0.2 Organiza¸c˜ao
      • 0.2.1 Etapas do Curso
      • 0.2.2 Como Estudar
  • 1 Numera¸c˜ao, Bits e Bytes
    • 1.1 Introdu¸c˜ao
    • 1.2 N´umero Bin´ario
      • 1.2.1 Exerc´ıcios de Fixa¸c˜ao
    • 1.3 Convers˜ao de Decimal para Bin´ario
    • 1.4 Convers˜ao decimal para Hexadecimal
      • 1.4.1 Exerc´ıcios de Fixa¸c˜ao
    • 1.5 Base 16 e Base
      • 1.5.1 Exerc´ıcios de Fixa¸c˜ao
    • 1.6 Bits e Bytes
      • 1.6.1 Byte
    • 1.7 Convers˜ao de N´umeros Fracion´arios
      • 1.7.1 Convers˜ao Fracion´aria com Parte Inteira
    • 1.8 Opera¸c˜oes com N´umeros Bin´arios
    • 1.9 Opera¸c˜oes L´ogicas
    • 1.10 Opera¸c˜oes L´ogicas com Bits
      • 1.10.1 Opera¸c˜ao L´ogica NOT
    • 1.11 Bits e Bytes
      • 1.11.1 Exemplos e Exerc´ıcios de Revis˜ao
      • 1.11.2 Exerc´ıcios de Fixa¸c˜ao
    • 1.12 Hexadecimais e Bin´arios - SUM ARIO´
    • 1.13 Mais sobre Opera¸coes L´ogicas
    • 1.14 Tabelas Verdade
      • 1.14.1 Opera¸c˜ao AND
      • 1.14.2 Opera¸c˜ao OR
      • 1.14.3 Opera¸c˜ao NOT
      • 1.14.4 Exerc´ıcio
    • 1.15 Opera¸c˜oes Relacionais
    • 1.16 N´umero Bin´ario Negativo
      • 1.16.1 N´umero com Sinal
    • 1.17 Complemento de
    • 1.18 Complemento de
      • 1.18.1 N´umero Negativos em C-2
    • 1.19 Exerc´ıcios
  • 2 Introdu¸c˜ao ao Octave
    • 2.1 Introdu¸c˜ao
      • 2.1.1 Matlab x Octave
    • 2.2 Octave como Calculadora
      • 2.2.1 Informa¸c˜oes Importantes
      • 2.2.2 Dicas Iniciais de Como Usar o Octave
    • 2.3 Vari´aveis: Introdu¸c˜ao
      • 2.3.1 Informa¸c˜oes Importantes sobre Vari´aveis
      • 2.3.2 Exerc´ıcios de Fixa¸c˜ao
    • 2.4 Fun¸c˜oes
    • 2.5 Operadores
      • 2.5.1 Operadores Aritm´eticos
      • 2.5.2 Operadores Relacionais
      • 2.5.3 Operadores L´ogicos
    • 2.6 Exerc´ıcios de Fixa¸c˜ao
    • 2.7 Vari´aveis: mais conceitos importantes!
      • 2.7.1 Vari´aveis Compostas ou Indexadas
    • 2.8 Polinˆomios e Vetores
      • 2.8.1 Polinˆomios
      • 2.8.2 Opera¸c˜oes Importantes com Polinˆomios
      • 2.8.3 Divis˜ao de Polinˆomios
    • 2.9 Matrizes no Octave: Introdu¸c˜ao
    • 2.10 Algumas Fun¸c˜oes do Octave
    • 2.11 Programando no Octave
    • 2.12 Exerc´ıcios de Fixa¸c˜ao e Pesquisas - SUM ARIO´
  • 3 Arrays, Fun¸c˜oes e Gr´aficos no Octave
    • 3.1 Introdu¸c˜ao
    • 3.2 Acessando dados de Vari´aveis Compostas
      • 3.2.1 Operador :
    • 3.3 Exerc´ıcios de Fixa¸c˜ao
    • 3.4 Gr´aficos 2D
      • 3.4.1 Exerc´ıcios de Fixa¸c˜ao
      • 3.4.2 Sequˆencia de Comandos para Gerar um Gr´afico 2D
    • 3.5 Exerc´ıcios de Fixa¸c˜ao
    • 3.6 Explica¸c˜ao dos comandos para gerar gr´afico 2D
    • 3.7 Exerc´ıcios de Fixa¸c˜ao
      • 3.7.1 Exerc´ıcio: Script com produto sin(x)cos(x)
  • 4 Gr´aficos no Octave - Comandos Adicionais
    • 4.1 Exemplos com Gr´aficos 2D
    • 4.2 Exerc´ıcios de Fixa¸c˜ao
  • 5 Programa¸c˜ao - Entrada e Sa´ıda de Dados
    • 5.1 Motiva¸c˜ao
      • 5.1.1 Um primeiro script no Octave
    • 5.2 Por que Escrever Programas?
    • 5.3 Linguagem para Programas de Computador
      • 5.3.1 Organiza¸c˜ao dos Programas
    • 5.4 Estrutura B´asica de um Programa de Computador
    • 5.5 Exerc´ıcios de Fixa¸c˜ao
    • 5.6 Afinal, o que ´e programar?
    • 5.7 Exerc´ıcios de Fixa¸c˜ao
    • 5.8 Sa´ıda de Dados no Octave
      • 5.8.1 Fun¸c˜ao disp()
      • 5.8.2 Exerc´ıcios de Fixa¸c˜ao
      • 5.8.3 Fun¸c˜ao printf()
      • 5.8.4 Exerc´ıcio de Fixa¸c˜ao
      • 5.8.5 Fun¸c˜ao plot()
      • 5.8.6 Fun¸c˜ao fprintf()
    • 5.9 Entrada de Dados no Octave
      • 5.9.1 Fun¸c˜ao input()
    • 5.10 Exerc´ıcios de Fixa¸c˜ao
    • 5.11 Usando o help e o doc
    • 5.12 Conclus˜ao: O que ´e um Script
    • 5.13 Exerc´ıcios: Fazendo Scripts - SUM ARIO´
  • 6 Programa¸c˜ao: Estruturas de Decis˜ao
    • 6.1 Estrutura if-else
    • 6.2 Estrutura if-else no Octave
      • 6.2.1 Primeira Caso: if com else
      • 6.2.2 Exerc´ıcios de Fixa¸c˜ao
      • 6.2.3 Segundo Caso (mais simples): if sem else
      • 6.2.4 Terceiro Caso: if-elseif-else
    • 6.3 Mais exemplos com if-else
      • 6.3.1 Fun¸c˜oes de Arredondamento
      • 6.3.2 Estrutura if-else completa
    • 6.4 Exerc´ıcio de Fixa¸c˜ao
    • 6.5 Operadores Relacionais
    • 6.6 Operadores L´ogicos
    • 6.7 Informa¸c˜oes Importantes
    • 6.8 Exerc´ıcios Complementares
    • 6.9 Comando switch()
      • 6.9.1 Exerc´ıcio de Fixa¸c˜ao
  • 7 Matrizes e Vetores
    • 7.1 Detalhes sobre a nota¸c˜ao usada
    • 7.2 Conceitos Iniciais
      • 7.2.1 Matriz no Octave
    • 7.3 Matrizes no Octave
    • 7.4 Exerc´ıcio de Fixa¸c˜ao
    • 7.5 Opera¸c˜oes Matriciais
      • 7.5.1 Somas
      • 7.5.2 Matriz Transposta
      • 7.5.3 Produto de Matrizes
      • 7.5.4 Algoritmo para Multiplica¸c˜ao de Matrizes
      • 7.5.5 Matriz Inversa
      • 7.5.6 Divis˜ao Matricial
      • 7.5.7 Divis˜ao entre duas Matrizes
      • 7.5.8 Sequencias de Comandos no Octave: Exemplo com inv()
      • 7.5.9 Usando / e \
    • 7.6 Matrizes Especiais
      • 7.6.1 Matriz Triangular
      • 7.6.2 Matriz Diagonal
      • 7.6.3 Matriz Nula e Identidade
      • 7.6.4 Determinantes
      • 7.6.5 Matrizes Especiais no Octave
        • SUM ARIO´
    • 7.7 Exerc´ıcios de Fixa¸c˜ao
    • 7.8 Aplica¸c˜oes de Matrizes com Octave
      • 7.8.1 Vetores no Plano
      • 7.8.2 Exemplo Octave
      • 7.8.3 Exerc´ıcios de Fixa¸c˜ao
    • 7.9 Matrizes Operando em Vetores
  • 8 Repeti¸c˜oes
    • 8.1 Introdu¸c˜ao
    • 8.2 Estrutura do Programa de Computador
    • 8.3 Estrutura de Repeti¸c˜ao: Loop ou La¸co
      • 8.3.1 A Estrutura “while”
      • 8.3.2 Estrutura “for”
      • 8.3.3 Coment´arios
    • 8.4 Exemplos
    • 8.5 Repeti¸c˜ao para Usar Vetores e Matrizes
    • 8.6 Somat´orios
    • 8.7 Exerc´ıcios de Fixa¸c˜ao
      • 8.7.1 Somat´orios de S´eries
    • 8.8 Exerc´ıcios de Fixa¸c˜ao
    • 8.9 Loops para Tratar ´ındices de Vetores e Matrizes
      • 8.9.1 Loops para Matrizes
    • 8.10 Exerc´ıcios de Fixa¸c˜ao
  • 9 Strings
    • 9.1 Tipos de Dados no Octave
    • 9.2 Strings no Octave
      • 9.2.1 Comparando Strings
    • 9.3 Obtendo Caracteres de uma String
    • 9.4 Tipo C´elula (cell)
    • 9.5 Outras Fun¸c˜oes para Lidar com Strings
      • 9.5.1 Exemplos com str2num() e num2str()
  • 10 Somat´orios e S´eries
    • 10.1 Preliminares
      • 10.1.1 O que ´e um Somat´orio
      • 10.1.2 S´eries Num´ericas
      • 10.1.3 Algumas Somas Conhecidas
      • 10.1.4 Somat´orios em Programa¸c˜ao
      • 10.1.5 Exerc´ıcio de Fixa¸c˜ao
    • 10.2 Somat´orio de Vari´aveis - SUM ARIO´
      • 10.2.1 Somat´orios Duplos
    • 10.3 Algumas Propriedades Importantes
      • 10.3.1 Exerc´ıcio de Fixa¸c˜ao
      • 10.3.2 N´umero de Termos do Somat´orio
      • 10.3.3 Somat´orios com Restri¸c˜oes
      • 10.3.4 Propriedades
    • 10.4 Revisitando os Somat´orios Duplos
      • 10.4.1 Voltando ao Somat´orio Duplo
    • 10.5 Exerc´ıcios com Somat´orios
  • 11 Aplica¸c˜oes com Repeti¸c˜oes e Decis˜oes
    • 11.1 Figuras Geom´etricas com Repeti¸c˜oes
    • 11.2 Exerc´ıcios de Fixa¸c˜ao
    • 11.3 S´eries Num´ericas e Somat´orios
    • 11.4 Exerc´ıcios de Fixa¸c˜ao
    • 11.5 Dados em Arrays
      • 11.5.1 Loops para Trabalhar com Matrizes
      • 11.5.2 Exerc´ıcios de Fixa¸c˜ao
    • 11.6 Exemplos de Estruturas de Repeti¸c˜ao no Octave
      • 11.6.1 Conceitos Importantes
      • 11.6.2 Trechos de Scripts
  • 12 Geometria Plana e Anal´ıtica no Octave
    • 12.1 Coordenadas no Plano Cartesiano
      • 12.1.1 Uma breve Revis˜ao
    • 12.2 Exerc´ıcios
    • 12.3 Trabalhando com Equa¸c˜oes B´asicas
      • 12.3.1 Pontos Colineares
      • 12.3.2 Distˆancia e Ponto M´edio Entre dois Pontos
      • 12.3.3 Triˆangulo Retˆangulo
    • 12.4 Equa¸c˜ao da Reta
      • 12.4.1 Conceitos Fundamentais
      • 12.4.2 Equa¸c˜ao Geral
      • 12.4.3 Exerc´ıcios de Fixa¸c˜ao
    • 12.5 Coordenadas Polares
    • 12.6 Exerc´ıcio de Fixa¸c˜ao
    • 12.7 Circunferˆencia e C´ırculo Trigonom´etrico
    • 12.8 Exemplos, Roteiros e Dicas de Estudos
      • 12.8.1 Exemplos com Retas e Pontos
      • 12.8.2 Exercicios de Fixa¸c˜ao
      • 12.8.3 Exemplos com Pol´ıgonos
        • SUM ARIO´
    • 12.9 Exerc´ıcios Complementares
    • 12.10Dicas para Plotar os Gr´aficos do Cap´ıtulo
  • 13 Jogos Simples
    • 13.1 Introdu¸c˜ao
    • 13.2 Jogos sem Recursos Gr´aficos
      • 13.2.1 Jogo de Acertar o N´umero: Homem x M´aquina
      • 13.2.2 Jogo da Forca
  • 14 Jogos parte
    • 14.1 Introdu¸c˜ao
    • 14.2 Primeiro Jogo Com Recursos Gr´aficos: Genius
      • 14.2.1 Exerc´ıcios Inicias
  • 15 Criptografia no Octave
    • 15.1 introdu¸c˜ao: Strings
      • 15.1.1 Quest˜ao
    • 15.2 Criptografia muito simples
      • 15.2.1 Quest˜ao
      • 15.2.2 Quest˜ao
    • 15.3 Criptografia mais Elaborada
      • 15.3.1 Exemplo para Alterar Vetor de N´umeros
      • 15.3.2 Observa¸c˜ao
      • 15.3.3 Quest˜ao
    • 15.4 Quest˜ao 5 - Aplicativo Final
    • 15.5 Opera¸c˜oes Matriciais
  • 16 Matrizes e Vetores, parte
    • 16.1 Introdu¸c˜ao
    • 16.2 Conceitos Iniciais
    • 16.3 Figura no Plano
    • 16.4 Transforma¸c˜oes Geom´etricas no Plano
      • 16.4.1 Transla¸c˜ao
      • 16.4.2 Rota¸c˜ao
      • 16.4.3 Exerc´ıcios de Fixa¸c˜ao
      • 16.4.4 Escalonamento
      • 16.4.5 Reflex˜ao ou Espelhamento
      • 16.4.6 Cisalhamento
    • 16.5 Coordenadas Homogˆeneas
    • 16.6 Exemplos com uma Figura Fechada
    • 16.7 Exerc´ıcios de Fixa¸c˜ao - SUM ARIO´
    • 16.8 O que ´e um Mosaico ou uma Tessela¸c˜ao
    • 16.9 Criando o Mosaico, Parte
    • 16.10Etapas para Gerar Mosaico
    • 16.11C´odigos para Gerar Algumas Figuras
      • 16.11.1 Figura 16.1
      • 16.11.2 Figura 16.2
    • 16.12Figuras no Octave
  • 17 Simula¸c˜ao de Sistemas F´ısicos no Octave
    • 17.1 Exemplos de Dinˆamica
      • 17.1.1 Bungee Jump
      • 17.1.2 Circuito RLC
      • 17.1.3 Revisitando o Problema da Queda Livre
  • 18 Fun¸c˜oes no Octave
    • 18.1 Introdu¸c˜ao
    • 18.2 Scripts que chamam Scripts
    • 18.3 Fun¸c˜oes
    • 18.4 Estrutura da Fun¸c˜ao, Exemplos e Exerc´ıcios
      • 18.4.1 Exemplos
      • 18.4.2 Exerc´ıcios de Fixa¸c˜ao
  • 19 Tratamento e An´alise de Dados
    • 19.1 Introdu¸c˜ao
    • 19.2 Conceitos Importantes
    • 19.3 Roteiro para Tratamento e An´alise de Dados
    • 19.4 Exemplos
      • 19.4.1 Exerc´ıcio de Fixa¸c˜ao
    • 19.5 Exerc´ıcios de Fixa¸c˜ao
    • 19.6 Alguns Conceitos Importantes
      • 19.6.1 max() e min(). Usando save.
      • 19.6.2 Exerc´ıcios de Fixa¸c˜ao
      • 19.6.3 Comando find()
    • 19.7 Primeiro Estudo: Dados Clim´aticos
      • 19.7.1 Exerc´ıcios de Fixa¸c˜ao
    • 19.8 Segundo Estudo: Aplica¸c˜ao em F´ısica - MR
      • 19.8.1 Estudando os Dados da Corrida
      • 19.8.2 Exerc´ıcios de Fixa¸c˜ao
    • 19.9 Estudo 3: Bungee Jump
      • 19.9.1 Exerc´ıcios de Fixa¸c˜ao
      • 19.9.2 Tarefas Pr´aticas
      • SUM ARIO´
    • 19.10Tarefas para Aula Pr´atica
  • 20 Entrada e Sa´ıda em Arquivos

Apresenta¸c˜ao e Organiza¸c˜ao do Curso

O presente curso de programa¸c˜ao ´e voltado para alunos dos Curso T´ecnicos em Eletrˆonica, Automa¸c˜ao e Desenvolvimento de Sistemas. S˜ao apresentados conceitos b´asicos e in- termedi´arios da linguagem C, usando-se o sistema operacional Linux e ferramentas de programa¸c˜ao abertas (open source). Antes do estudos da Linguagem C, o curso aborda os conceitos b´asicos da programa¸c˜ao na linguagem do Matlab/Octave.

0.1 Introdu¸c˜ao

Esse curso de programa¸c˜ao para Octave ´e a primeira parte da disciplina laborat´orio de Programa¸c˜ao para os cursos t´ecnicos em Eletrˆonica e Automa¸c˜ao Industrial e da disciplina Introdu¸c˜ao a Inform´atica, do curso t´ecnico de Desenvolvimento de Sistemas. A segunda parte dessas disciplinas aborda a Linguagem C, que ´e o objetivo principal. A principal motiva¸c˜ao para se iniciar um curso de programa¸c˜ao com uma linguagem de programa¸c˜ao cient´ıfica e num´erica, baseada em scripts, ´e o fato dela ser mais amig´avel, com entrada e sa´ıda de dados de f´acil acesso e manipula¸c˜ao e a existˆencia de recursos gr´aficos de f´acil utiliza¸c˜ao. A quest˜ao de qual linguagem e ambiente de programa¸c˜ao ´e mais recomend´avel para se iniciar programa¸c˜ao ´e controversa. Muitos estudiosos afirmam que a utiliza¸c˜ao de ambientes de programa¸c˜ao mais amig´aveis ´e a melhor forma de se fazer o primeiro contato com a programa¸c˜ao de computadores [11], [8]. Existem vers˜oes online de cursos para Matlab (vers˜ao propriet´aria da Matworks da qual o Octave ´e um “clone”open source) ofertados por renonadas universidades norte americanas. Vide por exemplo [2] e [1]. O principal objetivo do curso ´e ensinar a programar, desde o n´ıvel b´asico at´e o

10

CAP´ITULO 0. APRESENTAC¸ AO E ORGANIZAC˜ ¸ AO DO CURSO˜ 12

ˆ Avalia¸c˜oes consistem em exerc´ıcios em sala, trabalhos pr´aticos e quest˜oes concei- tuais. As avalia¸c˜oes s˜ao efetuadas (na sua maioria) na plataforma Moodle.

ˆ Material extra (apostilas, links, atividades, question´arios, curisosidades, imagens, filmes) poder˜ao ser usados para as avalia¸c˜oes (quando for esse o caso, haver´a informa¸c˜ao no site).

ˆ Aluno deve consultar semanalmente a p´agina do Curso no Moodle.

ˆ Aluno deve estar atento com as datas de submiss˜ao de trabalhos.

ˆ Aulas te´oricas poder˜ao ser marcadas em hor´arios especiais (incluindo s´abados).

ˆ Alunos devem utilizar recursos do Moodle para informa¸c˜oes com o professor e monitores.

ˆ Aten¸c˜ao para os hor´arios da monitoria (a ser informado pelo professor).

0.2.1 Etapas do Curso

O curso ´e dividido em duas partes principais: A primeira parte aborda a programa¸c˜ao cient´ıfica e num´erica, a partir do programa Octave [3], que ´e um programa gratuito com uma curva de aprendizagem muito r´apida. A segunda parte aborda a programa¸c˜ao na Linguagem C, para Linux.

Primeira Parte

O objetivo da primeira parte ´e familiarizar o aluno com os conceitos da programa¸c˜ao de computadores, a partir de aplica¸c˜oes relacionadas com a Matem´atica e F´ısica: fun¸c˜oes, gr´aficos, equa¸c˜oes e respostas temporais de sistemas dinˆamicos. Ao iniciarmos o curso com um n´ıvel de programa¸c˜ao mais aplicada buscamos motivar o aluno apresentando os conceitos b´asicos da programa¸c˜ao de uma forma mais r´apida e contextualizada. Nessa primeira parte todos os conceitos fundamentais da programa¸c˜ao ser˜ao vistos, para depois serem aprofundados na segunda parte: vari´aveis, arrays, entrada e sa´ıda de dados e com arquivos, estruturas de decis˜ao e repeti¸c˜ao, fun¸c˜oes. Al´em da abordagem com esses conceitos da programa¸c˜ao, nessa primeira parte ser˜ao vistos e revistos conceitos b´asicos da Matem´atica: fun¸c˜oes e gr´aficos, solu¸c˜oes de equa¸c˜oes de grau n, sistemas de equa¸c˜oes, equa¸c˜oes lineares e n˜ao lineares. Polinˆomios. Aspectos intermedi´arios e avan¸cados da programa¸c˜ao aplicada a Matem´atica e F´ısica tamb´em fazem parte dessa primeira parte: Vetores, Matrizes e Gr´aficos 2D. Algebra Li-´ near. Sistemas F´ısicos e suas dinˆamicas. Princ´ıpios de Otimiza¸c˜ao. Transforma¸c˜oes geom´etricas no plano. Fractais. Itera¸c˜ao e Recurs˜ao. Anima¸c˜oes e gr´aficos 3D. Trata- mento de dados. Numera¸c˜ao. N´umeros complexos.

CAP´ITULO 0. APRESENTAC¸ AO E ORGANIZAC˜ ¸ AO DO CURSO˜ 13

Todos esses t´opicos podem ser trabalhados com os recursos e os pacotes do Octave, no n´ıvel de entendimento adequado ao Curso T´ecnico de N´ıvel M´edio, e objetivam, acima de tudo motivar o estudo de t´opicos relacionados com Matem´atica, F´ısica, Engenharia e Teoria de Sistemas.

Segunda Parte

A segunda parte aborda a programa¸c˜ao na Linguagem C, que ´e o foco principal do Curso. Considerando-se que o aluno aprendeu os fundamentos da programa¸c˜ao na primeira parte, o aprendizado da programa¸c˜ao em C se dar´a mais rapidamente. A curva de aprendizado da programa¸c˜ao em C ´e mais lenta, devido a pr´opria lingua- gem e a proximidade dela com as linguagens de “baixo n´ıvel”. Sendo assim, a primeira parte do curso dar´a a base para que o estudo da linguagem C seja menos ´arduo, pois no curso de programa¸c˜ao para Octave j´a estare,ps apresentando os conceitos fundamentais da programa¸c˜ao. O curso de C vai at´e o n´ıvel intermedi´ario ou pr´e-avan¸cado, terminando com os cap´ıtulos sobre estruturas de dados e aplica¸c˜oes para Eletrˆonica e Automa¸c˜ao.

0.2.2 Como Estudar

O curso ´e organizado no Moodle. Cada semana ´e apresentado um roteiro de aula, seja pr´atica ou te´orica. Al´em dos roteiros, s˜ao postados no Moodle exerc´ıcios, problemas pr´aticos. Para acompanhar o curso o estudante tem que seguir a sequˆencia apresentada no Moodle. O material do curso ´e formado por:

ˆ Essa apostila (dividida em duas partes: Octave e Linguagem C).

ˆ Material postado no Moodle: Roteiros de Aula, dicas e Exerc´ıcios

ˆ Lista de Exerc´ıcios espec´ıficas para cap´ıtulo da Apostila.

ˆ Textos extras, links, solu¸c˜oes.

ˆ F´orum de discuss˜ao no Moodle.

ˆ V´ıdeo-aulas.

A ideia do curso ´e que, com o material disponibilizado, o estudante interessado, se desejar pode seguir no seu pr´oprio ritmo. Esta apostila cont´em dezenas de exemplos e c´odigos de scripts. Uma forma de se estudar programa¸c˜ao ´e entendendo c´odigos de programas (no caso do Octave, scripts) prontos. Portanto, sempre que estudar um c´odigo, entenda bem o que ele faz e quais recursos utiliza.

1 Numera¸c˜ao, Bits e Bytes

1.1 Introdu¸c˜ao

Neste cap´ıtulo veremos algumas opera¸c˜oes b´asicas com n´umeros na base 10, 16 e 2. Focaremos nos n´umeros bin´arios. O objetivo ´e fundamentar as opera¸c˜oes de bits e bytes que ser˜ao realizadas nos programas em C. Vamos aprender sobre n´umeros bin´arios e as convers˜oes entre as bases 10, 16 e 2. Vamos ver as opera¸c˜oes de transforma¸c˜ao de base e as opera¸c˜oes l´ogicas AND, OR, NOT (AND, OU, N AO) entre bits.˜ Objetiva-se apresentar de forma pr´atica e resumida os conceitos principais relacio- nados com a mudan¸ca de base. Esse texto deve ser usado como material complementar para a mat´eria introdut´oria de programa¸c˜ao de computadores, disponibilizada no Moodle (curso de 2014).

1.2 N´umero Bin´ario

Como vimos, podemos formar n´umeros em diferentes bases a partir da combina¸c˜ao de seus d´ıgitos b´asicos. Na numera¸c˜ao decimal (base 10), temos 10 d´ıgitos (0... 9). Na numera¸c˜ao bin´aria temos 2 d´ıgitos. Na hexadecimal temos 16 d´ıgitos (de 0 a 15, sendo que de 10 a 15 usamos as letras A at´e F ). Lembrando que o n´umero bin´ario ´e definido com uma combina¸c˜ao de 0′s e 1′s, cada uma com seu valor relativo, de acordo com a posi¸c˜ao dentro de um n´umero. Assim como na base 10, em que cada algarismo (ou d´ıgito) tem seu valor relativo a posi¸c˜ao (unidade, dezena, centena, etc.), tamb´em no m´umero bin´ario (ou em qualquer n´umero de qualquer outra base), a posi¸c˜ao de uma algarismo est´a relacionada com seu

15

CAP´ITULO 1. NUMERAC¸ AO, BITS E BYTES˜ 16

valor. Para saber o valor do n´umero bin´ario na base 10, basta fazer a opera¸c˜ao de soma dos valores, multiplicados pela base elevada `a potˆencia correspondente. Veja na figura 1.1 como calcular o valor do n´umero 0111.

Figura 1.1: N´umero 7 em bin´ario e decimal

Portanto a convers˜ao de bin´ario para decimal ´e feita simplesmente calculando-se os valores dos algarismos, a partir da sua posi¸c˜ao relativa e calculando-se a soma.

1.2.1 Exerc´ıcios de Fixa¸c˜ao

Efetue a convers˜ao para a base 10 dos n´umeros bin´arios dados a seguir.

  1. 10
  2. 01

1.3 Convers˜ao de Decimal para Bin´ario

Para converter um n´umero na base 10 para a base 2, deve-se efetuar as divis˜oes suces- sivas, at´e o quociente seja 0 (na divis˜ao INTEIRA, de 1 por 2, tem-se o quociente 0). Veja a figura 1.2. Chegando-se ao quociente 0 o n´umero bin´ario ´e formado tomando-se os RESTOS das divis˜oes.

1.4 Convers˜ao decimal para Hexadecimal

Analogamente `a convers˜ao para de decimal para bin´ario, para mudar um n´umero da base 10 para base 16, s˜ao feitas divis˜oes sucessivas, s´o que, obviamente, a divis˜ao ´e feita por 16 (e n˜ao por 2). Veja figura 1.3.

CAP´ITULO 1. NUMERAC¸ AO, BITS E BYTES˜ 18

Figura 1.3: Mudan¸ca da base 10 para base 16

representados com 4 bits. Veja a tabela 1.1 com as correspondˆencias dos algarismos da base 16 com a representa¸c˜ao bin´aria.

Decimal Hexadecimal Bin´ario Decimal Hexadecimal Bin´ario 0 0 0 0 0 0 8 8 1 0 0 0 1 1 0 0 0 1 9 9 1 0 0 1 2 2 0 0 1 0 10 A 1 0 1 0 3 3 0 0 1 1 11 B 1 0 1 1 4 4 0 1 0 0 12 C 1 1 0 0 5 5 0 1 0 1 13 D 1 1 0 1 6 6 0 1 1 0 14 E 1 1 1 0 7 7 0 1 1 1 15 F 1 1 1 1

Tabela 1.1: N´umeros Decimais, Hexadecimais e Bin´arios

Assim, a representa¸c˜ao hexadecimal (ou simplesmente hexa) pode ser associada com a bin´aria a CADA 4 BITS, pois um ALGARISMO hexadecimal equivale a 4 algarismos bin´arios, ou 4 bits. A convers˜ao entre essas bases ´e, portanto, imediata. Veja a figura 1.4. Na figura 1.4 temos a convers˜ao do n´umero (A 7 0 F )H no bin´ario correspondente. Para fazer essa convers˜ao, basta fazermos a convers˜ao de cada um dos algarismos. Assim:

(A 7 0 F )H = 1010011100001111

pois, a cada algarismo hexa associamos um bin´ario de 4 bits. Ainda na figura 1.4, tem-se

CAP´ITULO 1. NUMERAC¸ AO, BITS E BYTES˜ 19

a convers˜ao do n´umero 1010101 para hexa. Para fazer essa convers˜ao basta agruparmos de 4 em 4 o n´umero bin´ario, iniciando da esquerda, e completandno com 0′s a direita. Veja que o n´umero 1010101 pode ser escrito como:

0101 0101

pois colocamos um zero ´a direita. Agora para fazer a convers˜ao, basta saber qual ´e o n´umero hexa de cada conjunto de 4 bits.

Figura 1.4: Mudan¸ca da base 16 para base 2. Repare que tanto para passarmos de hexa pra bin´ario quanto de bin´ario para hexa, agrupamos os n´umeros em 4 bits.

1.5.1 Exerc´ıcios de Fixa¸c˜ao

Fa¸ca as convers˜oes pedidas (aten¸c˜ao para a nota¸c˜ao).

  1. 0xABCD para base 2
  2. 0xABCD para base 10
  3. 1000 10 para base 2
  4. 1000H para base 2
  5. 0x1024 para base 2