134
GET002 – Informática básica Prof. Renato Pimentel 1 o Semestre – 2019 Sumário 1 Apresentação 3 1.1 Objetivos ............................... 3 1.2 Bibliografia sugerida ......................... 3 1.3 Conteúdo ............................... 4 1.4 Avaliação: aproveitamento e frequência ............... 5 1.5 Logística ................................ 5 2 Introdução 6 2.1 Informática .............................. 6 2.2 Computação .............................. 6 2.3 O computador ............................ 7 2.3.1 Componentes de um sistema computacional ........ 7 2.3.2 Hardware ........................... 8 2.4 Programação ............................. 13 2.5 Referências .............................. 14 3 O sistema operacional 14 3.1 MS Windows ............................. 16 3.2 Outros SOs .............................. 19 4 Internet 20 5 Conceitos básicos de algoritmos 22 5.1 Representação ............................. 23 6 Tipos de dados e variáveis 29 6.1 Representação em memória ..................... 32 7 Linguagens de programação 34 7.1 Níveis de linguagens de programação ................ 34 7.2 Compilação .............................. 36 7.3 Interpretação ............................. 37 1

GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

GET002 – Informática básica

Prof. Renato Pimentel

1o Semestre – 2019

Sumário1 Apresentação 3

1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Bibliografia sugerida . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Conteúdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Avaliação: aproveitamento e frequência . . . . . . . . . . . . . . . 51.5 Logística . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Introdução 62.1 Informática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Computação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 O computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3.1 Componentes de um sistema computacional . . . . . . . . 72.3.2 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4 Programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.5 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3 O sistema operacional 143.1 MS Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2 Outros SOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4 Internet 20

5 Conceitos básicos de algoritmos 225.1 Representação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6 Tipos de dados e variáveis 296.1 Representação em memória . . . . . . . . . . . . . . . . . . . . . 32

7 Linguagens de programação 347.1 Níveis de linguagens de programação . . . . . . . . . . . . . . . . 347.2 Compilação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.3 Interpretação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

1

Page 2: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

8 Programação estruturada 398.1 Exercícios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . . 438.2 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

9 Linguagem Python 439.1 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

10 Variáveis, comandos básicos e expressões 4510.1 Variáveis no Python . . . . . . . . . . . . . . . . . . . . . . . . . 4510.2 Comandos de entrada e saída de dados . . . . . . . . . . . . . . . 4910.3 Documentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5110.4 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5210.5 Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5710.6 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

11 Comandos condicionais 5811.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5811.2 O comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5911.3 O comando else . . . . . . . . . . . . . . . . . . . . . . . . . . . 6111.4 Aninhamento de if . . . . . . . . . . . . . . . . . . . . . . . . . . 6411.5 O comando elif . . . . . . . . . . . . . . . . . . . . . . . . . . . 6811.6 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

12 Comandos de repetição 7012.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7012.2 Comando while . . . . . . . . . . . . . . . . . . . . . . . . . . . 7112.3 Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7312.4 Comando break . . . . . . . . . . . . . . . . . . . . . . . . . . . 7612.5 Comando continue . . . . . . . . . . . . . . . . . . . . . . . . . 7712.6 Aninhamento de comandos de repetição . . . . . . . . . . . . . . 7912.7 Exercícios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . . 8012.8 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

13 Listas, tuplas e dicionários 8013.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8013.2 Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9213.3 Dicionários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9413.4 Exercícios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . . 9713.5 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

14 Strings – cadeias de caracteres 9814.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9814.2 Elementos – caracteres . . . . . . . . . . . . . . . . . . . . . . . . 9914.3 Operações com strings . . . . . . . . . . . . . . . . . . . . . . . . 10114.4 Métodos sobre strings . . . . . . . . . . . . . . . . . . . . . . . . 10814.5 Exercícios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . . 10914.6 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

2

Page 3: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

15 Funções 10915.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10915.2 Estrutura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11015.3 Uso das funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11415.4 Variáveis e passagem de parâmetros . . . . . . . . . . . . . . . . 11515.5 Passagem de parâmetros . . . . . . . . . . . . . . . . . . . . . . . 11715.6 Recursão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11915.7 Exercícios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . . 12415.8 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

16 Arquivos 12516.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12516.2 Trabalhando com arquivos em Python . . . . . . . . . . . . . . . 12616.3 Leitura e escrita em arquivos . . . . . . . . . . . . . . . . . . . . 13016.4 Exercícios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . . 13416.5 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

1 Apresentação

1.1 ObjetivosObjetivos

• Desenvolver habilidades para a utilização do computador como ferramentade trabalho em sua atividade profissional;

• Capacitar o aluno a desenvolver programas em uma linguagem procedimen-tal, empregando adequadamente os recursos oferecidos por esta linguagem.

1.2 Bibliografia sugerida• LUTZ, M.; ASCHER, D. Aprendendo Python. Porto Alegre: Bookman,2007.

• MENEZES, N.N.C. Introdução à Programação com Python: algoritmos elógica de programação para iniciantes. São Paulo: Novatec, 2010.

• ASCENCIO, A. F.; CAMPOS, E. A. V. de. Fundamentos da programaçãode computadores: algoritmos, Pascal, C/C++ e Java. São Paulo: PrenticeHall, 2007. 434p.

• FORBELLONE, A. L. V.; EBERSPÄCHER, H. F. Lógica de programa-ção: a construção de algoritmos estruturas de dados. São Paulo: PearsonPrentice Hall. 2000. 196p.

• CAPRON, H. L.; JOHNSON, J. A. Introdução à informática. São Paulo:Pearson Prentice Hall, 2004. 350p.

3

Page 4: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1.3 ConteúdoEmenta do curso

• Noções sobre os componentes de computadores;

• Uso de softwares (sistemas operacionais, internet e outros);

• Noções de algoritmos e lógica para resolução de problemas;

• Tipos de dados, Variáveis e constantes;

• Linguagem de programação:

– Expressões e operadores;

– Estruturas de controle: Estruturas básicas, Estruturas condicionaise estruturas de repetição;

– Estruturas básicas de dados: vetores, matrizes e registros;

– Funções;

– Arquivos.

Conteúdo previsto

• Introdução à computação

• Softwares e Internet

• Algoritmos e programas

• Compilação, programa fonte e programa objeto

• Variáveis, constantes, operadores

• Expressões aritméticas e lógicas

• Comandos de atribuição

• Comandos de entrada e de saída

• Estruturas de seleção (condicionais)

• Estruturas de repetição

• Variáveis compostas (listas, strings, etc.)

• Funções

• Manipulação de arquivos

4

Page 5: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1.4 Avaliação: aproveitamento e frequência• Através de provas teóricas (escritas) e práticas de laboratório.

• 3 provas teóricas: 30, 30 e 40 pontos.

– 18/04 (P1)

– 23/05 (P2)

– 11/07 (P3)

• Fixação do aprendizado: Práticas em laboratório ao longo do semestre.

• Nota final (aproveitamento):

NF = P1 + P2 + P3

Frequência

• O aluno que tiver frequência inferior a 75% é reprovado por faltas.

• A chamada será feita em sala, pelo professor, sempre que decorridos emtorno de 15 minutos do início da mesma. O aluno que chegar após achamada, ou não respondê-la, ficará com falta.

• Falta em dia de prova: o aluno somente terá direito a fazer prova em novadata caso apresente justificativa no setor de graduação e/ou coordenaçãodo curso, que encaminhará comunicação por escrito ao professor quandojulgá-la plausível.

• É responsabilidade do aluno controlar sua frequência, de modo a evitarreprovação por falta.

1.5 LogísticaAulas

• Quintas-feiras: teóricas (08:50 a 10:40) – Sala 3Q-110

• Segundas-feiras: práticas (08:50 a 10:40) – Lab. 3Q-104

Atendimento e outras informações

• Professor: Renato Pimentel

– Página: http://www.facom.ufu.br/∼rpimentel

– E-mail: rpimentel @ ufu . br

• Atendimento (agendar previamente através de e-mail):

– Terças-feiras, 09:50 até 10:40, sala 1B139

5

Page 6: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– Quartas-feiras, 14:00 até 15:40, sala 1B139– Quintas-feiras, 18:00 até 18:50, sala 1B139

• Material da disciplina:

– http://www.facom.ufu.br/∼rpimentel> Ensino> 2019/1>GET002– Informática Básica

– Moodle: https://www.moodle.ufu.br/course/view.php?id=5380 (ca-dastre-se e inscreva-se na disciplina! Chave de inscrição: get002-2019-1)

2 Introdução

2.1 Informática

• Informática: ciência que estuda métodos para o tratamento automático eracional da informação por meios computacionais.

• Principal instrumento de trabalho: o computador. Tradução do neolo-gismo informatique, criado em 1966, na França, fruto da junção entre aspalavras informação e automática.

Informática

Tratamento da informação por meios automáticos

Informação Automática+

Figura 1: O termo Informática

2.2 Computação• Dados ⇒ Informações vindas do usuário ou mesmo de outras origens;

• Processamento ⇒ transformação dos dados, de acordo com os desejos dousuário ou de outra máquina;

• Resultados ⇒ aquilo que vem do processamento, e que servirá aos propó-sitos do usuário.

DadosDados ProcessamentoProcessamento ResultadosResultados

6

Page 7: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

2.3 O computador

Equipamento eletrônico capaz de processar (manipular) dados (entrada), deacordo com um conjunto de instruções, e transformá-los em informação (saída)útil, podendo armazená-los para uso posterior.

• Três componentes principais:

– Hardware: a parte física, o equipamento que compõe o computador;

– Software: a parte lógica, os programas: conjuntos de instruções queorientam o computador na tarefa de processamento;

– Pessoas ou Peopleware: correspondem ao usuário, que usa o poderdo computador para algum propósito.

2.3.1 Componentes de um sistema computacional

Hardware

• Componente físico de um sistema de computação: equipamentos utilizadospelo usuário nas ações de entrada, processamento, armazenamento e saídade dados;

• Formado por circuitos integrados, agrupados em pastilhas denominadaschips;

• Evolução: no início, chegavam a ocupar uma sala inteira, ao passo queatualmente, podem ocupar milímetros de largura, com peso quase insig-nificante;

Software

• Componente lógico de um sistema de computação: Séries de instruçõesque fazem o computador funcionar (programas de computador);

• Funcionam como um passo a passo, ordenando o que o hardware devefazer;

• Representam a ponte entre os usuários e uma máquina;

• Duas categorias:

– Software básico ou de sistema (sistema operacional).

– Software aplicativo (as aplicações).

7

Page 8: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Sistema operacional

• Conjunto de programas que se situa entre os softwares aplicativos (ex.:processadores de texto ou de planilhas eletrônicas) e o hardware.

– Gerencia os recursos do computador, em termos de hardware (CPU,dispositivos periféricos) e software.

– Estabelece uma interface com o usuário.

– Provê e executa serviços para softwares aplicativos.

Peopleware

• Componente humano de um sistema de computação;

• Indivíduos que utilizam o computador como ferramenta;

• Devido à finalidade de utilização, podem ser:

– Programadores, ou analistas de sistema: constroem softwares queserão utilizados para determinado fim;

– Usuários: aproveitam-se de todos os serviços oferecidos pelos softwa-res.

2.3.2 Hardware

Manipulação de dados pelo computador

• O funcionamento do computador é baseado em quatro tipos de manipu-lação de dados: entrada (input), processamento, saída (output) e armaze-namento. O hardware associado a cada item é o seguinte:

– Dispositivos de entrada: aceitam dados ou comandos que o compu-tador pode usar, os enviando à unidade de processamento.

– Processador ou unidade central de processamento (CPU, do inglêscentral processing unit): manipula por meio de circuitos eletrônicosos dados de entrada, transformando-os em informação. É quem exe-cuta as instruções. Tanto os dados que estão sendo manipuladosquanto as instruções estão temporariamente armazenados na memó-ria (armazenamento primário)

– Dispositivos de saída: exibem ao usuário os dados processados ouinformações.

– Armazenamento: armazenamento secundário, dispositivos como dis-cos rígidos, que permitem uso posterior e transporte dos dados

8

Page 9: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Dispositivos de entrada (input)

Dispositivos de entrada (input)

Unidade central de processamento

(CPU)

Memória primária

Dispositivos de saída (output)

Dispositivos de saída (output)

Dispositivos de armazenamento secundárioDispositivos de armazenamento secundário

Figura 2: Organização esquemática de um computador.

Arquitetura de von Newmann

• Dados e programas são carregados para memória principal ou memóriaprimária para sua execução;

• A unidade central de processamento (CPU), responsável pela execuçãodas instruções, é separada da memória;

• As instruções dos programas e os dados são transmitidos da memóriaprincipal para a CPU, onde o processamento é realizado;

• Os resultados das operações na CPU devem ser novamente transferidospara a memória.

Processador (CPU)

• Responsável pela execução das instruções, ou seja, a parte de processa-mento (trato da informação, seja via cálculo, manipulação) e de controle,de acordo com as instruções contidas em um programa.

• Formado por 2 componentes:

– Unidade de controle (define quais instruções serão realizadas durantea execução)

– ALU (unidade aritmética e lógica), do inglês arithmetic logic unit.(executa o processamento)

9

Page 10: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Figura 3: Arquitetura de von Neumann.

• Operação: frequência em GHz (gigahertz), relacionada ao número de ciclosdo processador. Atualmente: de 3 a 4 GHz.

• Um ou mais núcleos de processamento: otimiza a execução de tarefasem paralelo, ou seja, simultaneamente. Comum atualmente: dual core (2núcleos), quad core (4 núcleos).

Memória principal ou primária

• Terminologia mais usada: memória RAM (memória de acesso aleatório,do inglês random access memory).

• Responsável pelo armazenamento das instruções a serem executadas erespectivos dados a serem processados pela CPU.

• Quando a execução de um programa é solicitada, o mesmo e dados sãocarregados de um dispositivo de armazenamento secundário, como umdisco rígido (HD), para a memória RAM, onde por sua vez as instruçõessão buscadas e executadas pela CPU.

10

Page 11: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Acesso rápido.

• Memória volátil: dados são perdidos quando a energia elétrica é desligada

• Acesso aleatório: Os dados podem ser lidos ou gravados em qualquer po-sição da memória e a qualquer momento

• Atualmente: 512 MB (megabytes), 1 GB, 2 GB, etc.

A placa mãe

• Termo inglês: motherboard.

• Placa de circuitos plana, considerada o principal componente do sistema:conjunto de chips e conexões que organizam as atividades do computador.

• Responsável pela interligação da CPU com os demais componentes docomputador, como a memória RAM, dispositivos de armazenamento, etc.

Dispositivos de entrada

1. Teclado

2. Mouse

3. Scanner

4. Webcam

5. Microfone

6. Joystick

7. Leitor de código de barras

Dispositivos de saída

1. Monitor

2. Plotter, copiadora

3. Impressora

4. Alto-falantes

5. Fones de ouvido

11

Page 12: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Dispositivos de armazenamento

• Armazenamento secundário, pois não está diretamente relacionado ao pro-cessamento

• Manutenção dos dados, mesmo após o desligamento

Benefícios

• Espaço (alto poder de armazenamento).

• Confiabilidade: armazenamento confiável do ponto de vista físico: segu-rança dos dados

• Conveniência: localização e acesso aos dados pelo usuário

• Economia

• Discos rígidos (HD, de hard disk): armazenamento magnético, alta capa-cidade de armazenagem (250GB, 500GB, 1TB, etc)

– Tipicamente internos, presentes em praticamente todo computador– Externos, para transporte de dados e cópias de segurança (backup)

• Discos ópticos (CD – compact disc, DVD – digital versatile disc): capa-cidade típica de 650 ou 700 MB (CD) e 4,7 GB (DVD, existindo discosde dupla-camada ou dual-layer com capacidade de 8,5 GB). Podem ser R,de read apenas para leitura dos dados, ou RW (read-write), que suportanovas gravações de dados

• Blu-ray e HD-DVD: Discos ópticos com novas tecnologias que oferecemalta capacidade de armazenagem, mantendo o mesmo tamanho físico doCD e do DVD

– Maior custo.– Video de alta definição ou grandes quantidades de dados– Armazenagem:

∗ HD-DVD single layer: 15 GB∗ HD-DVD dual layer: 30 GB∗ Blu-Ray single layer: 25 GB∗ Blu-ray double layer: 50 GB

• Memória flash: evolução no armazenamento. Acesso rápido aos dados,como na memória RAM, mas é não-volátil. Pode ser apagada e reprogra-mada eletronicamente, de acordo com a demanda do usuário.

– Cartões de memória, pen-drives, memórias internas de celulares, MP3players, câmeras.

– Unidades de estado sólido (SSD, solid-state drive): tecnologia atu-almente em expansão, com possibilidades de substituir os HDs nospróximos anos.

12

Page 13: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

2.4 Programação• Objetivo básico ⇒ auxiliar os seres humanos em trabalhos repetitivos ebraçais, diminuindo esforços e economizando tempo;

• O computador é capaz de auxiliar em qualquer coisa que lhe seja solicitada;

• Entretanto:

– Não tem iniciativa;

– Nenhuma independência;

– Não é criativo nem inteligente.

• Por isso, é necessário que ele receba suas instruções nos mínimos detalhes,para que tenha condições de realizar suas tarefas ⇒ Programação.

Programação

• Quando queremos criar ou desenvolver um software para realizar determi-nado tipo de processamento de dados:

– Escrever um programa (ou vários programas interligados);

– Devemos escrever o programa usando uma linguagem que tanto ocomputador quanto o criador de software entendam – linguagem deprogramação.

Etapas envolvidas no processo de programação

• Análise: enunciado do problema:

– Dados de entrada;

– Processamento (resolução);

– Dados de saída.

• Algoritmo: descrever o problema, com suas soluções;

• Codificação: algoritmo é transformado em códigos da linguagem de pro-gramação escolhida para se trabalhar.

Programa

• Nada mais é do que a codificação de um algoritmo em uma linguagem deprogramação.

• Uma definição mais formal:

Conjunto de instruções passo a passo que orientam o computador a fazeras tarefas necessárias e produzir o(s) resultado(s) desejado(s)

13

Page 14: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

2.5 Referências• CAPRON, H. L. & JOHNSON, J. A. Introdução à Informática. São Paulo:Prentice Hall, 2004.

• MYAZAWA, F. K. Notas de aula de Algoritmos e Programação.

• PIMENTEL, R. Notas de aula de Introdução à Computação

• PAIVA, J. G. S. Notas de aula de algoritmos e programação de computa-dores.

3 O sistema operacionalSoftware

• Componente lógico de um sistema de computação: Séries de instruçõesque fazem o computador funcionar (programas de computador);

• Funcionam como um passo a passo, ordenando o que o hardware devefazer;

• Representam a ponte entre os usuários e uma máquina;

• Duas categorias:

– Software básico ou de sistema (sistema operacional).

– Software aplicativo (as aplicações).

Sistema operacional

• Conjunto de programas que se situa entre os softwares aplicativos (ex.:processadores de texto ou de planilhas eletrônicas) e o hardware.

– Gerencia os recursos do computador, em termos de hardware (CPU,dispositivos periféricos) e software.

– Estabelece uma interface com o usuário.

– Provê e executa serviços para softwares aplicativos.

Sistema operacional: interface com o usuário

• Duas formas básicas:

1. Interface de linha de comando;

2. Interface gráfica (GUI – graphical user interface)

14

Page 15: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Plataforma

• Combinação de hardware de computador e software de sistema operacio-nal.

• Wintel (Microsoft Windows que roda em um PC baseado em Intel) é amais comum.

• Sistemas mais comuns:

– MS-DOS

– Windows

– MAC OS

– Unix

– Linux

– Android

DOS: disk opperating system

• Baseado em linha de comando.

• A tela apresenta prompts ao usuário.

• O usuário digita comandos.

• Não é amigável (user-friendly).

• Várias versões:

– MS-DOS, PC-DOS, DR-DOS, FreeDOS

15

Page 16: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Janelas, ícones, etc.

• Xerox Star (1981)

– Primeiro SO comercial baseado em janelas.– Estilo de interação WIMP (Janelas, Ícones, Menus e Apontadores)

Apple Lisa

• 1983 – Apple Lisa

– Primeiro PC a ter um mouse e uma interface gráfica.– A interface foi inspirada nas estações de trabalho Xerox.

3.1 MS WindowsMicrosoft Windows

• Iniciou-se como um ambiente operacional para o MS-DOS.

– Não era um sistema operacional completo; necessitava do MS-DOS.

• Usa uma interface gráfica.

– Gerenciador baseado em ícones.– Os usuários podem usar os comandos e a interface do DOS.

16

Page 17: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Atualmente uma família completa de sistemas operacionais.

• Multitarefa.

• Gerenciador de arquivos estilo árvore.

• Surgimento das suítes de aplicativos (Office).

• Windows 1.01 (1985)

– O sistema rodava no padrão 16-bit e usava menos de 1MB.

– Rudimentar interface gráfica, rodando em cima do MS-DOS 5.0.

• Windows 3.11 (1992)

– Softwares para multimídia.

– Fontes TrueType.

– Mais estável.

• Windows 95

– Completamente novo – sistema operacional independente do DOS.

– Menu Iniciar.

– Barra de Tarefas.

• Windows 98

– Assistentes (Wizards): ferramentas passo a passo para tarefas.

– Suporte a vários monitores e interface USB.

– Restauração do sistema via DOS.

– Integração com Internet (Internet Explorer, interface do sistema)

• Windows Me (Millenium Edition, 2000)

– Suporte para multimídia.

– Media Player, edição de vídeo.

– Maiores recursos de confiabilidade.

– Suporte para redes domésticas

• Windows 2000

– Corporativo.

– Você obtém “sua” área de trabalho e arquivos, independentemente dequal PC usa para acessar a rede.

– Bastante estável.

– 32 bits.

17

Page 18: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Windows XP – 2001

– Melhor interface com o usuário:

∗ Área de trabalho muito mais clara e desobstruída.∗ Mais ícones no menu Iniciar redesenhado.

– Melhor suporte a hardware, multimídia e segurança para a Internet.

– Suporte a múltiplos usuários e personalização.

• Windows Vista (2006)

– Recursos de transparência.

– Sistema de alternância 3D de janelas.

– Ferramentas integradas para segurança.

– Fiasco: sistema lento, pesado e cheio de falhas.

• Windows 7 (2009)

– Correções do Vista.

– Mais eficiente, limpo e prático de usar.

• Windows 8 (2012)

– Interface totalmente nova.

– Sistema adaptado a diversos dispositivos. (Interação com telas sen-síveis ao toque).

– Rápida inicialização do sistema.

– Windows To Go: é possível executar o Windows 8 a partir de umpen drive ou HD externo.

• Windows 10 (2015)

– Volta do Menu Iniciar;

– Novo navegador (MS Edge);

– Múltiplas plataformas

Evolução do Windows

18

Page 19: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

3.2 Outros SOsMac OS

• Projetado pela Apple para seu computador Macintosh.

• Primeira GUI bem-sucedida comercialmente.

• Serviu como modelo para o Windows e outros produtos.

UNIX

• Desenvolvido em 1971 para ser usado no minicomputador DEC.

• Sistema baseado em caracteres com interface de linha de comando.

• Não é ligado a nenhuma família de processadores.

19

Page 20: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– Roda praticamente em qualquer tipo de sistema (PC, mainframe,estação de trabalho) de qualquer fabricante.

• Principal sistema operacional em uso em servidores de Internet.

– Manipula facilmente muitos usuários ao mesmo tempo.

Linux

• Usa interface de linha de comando.

– Muitas companhias criaram uma GUI para funcionar com o Linux.

• Conceito de fonte aberta:

– O código-fonte é livre.

– Usuários podem fazer o download, modificar e distribuir o software.

• Mais estável do que o Windows.

4 Internet

• Grande conjunto de redes de computadores interligados pelo mundo.

• Início:

– rede interligando universidades nos EUA;

– Uso militar (defesa / inteligência).

• Início década 1990: Internet começa a ser explorada comercialmente.

• Não há gerenciamento centralizado, cada usuário ou empresa administrasua rede e esta se conecta à Internet.

• Comunicação entre as várias redes segue um protocolo padrão.

Como a Internet funciona

• Cada servidor (host) possui um endereço único na Internet. Este endereçoé conhecido como IP (Internet protocol). Ex.: 200.19.146.234

• Cada endereço acima pode ser escrito com letras da seguinte forma: www.ufu.br; www.uol.com.br; www.google.com

• Servidores de Internet podem oferecer vários tipos de serviços (Mais utili-zados: Web; Endereço eletrônico (e-mail); FTP).

20

Page 21: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Web (www – world wide web)

• Recursos multimídia (Texto, Imagem, Som e Vídeo).

• Informações estão contidas em sites.

– Em um site é possível saltar de um ponto para outro utilizando “hi-perlinks”.

• Cada site possui seu URL (Uniform Resource Locator, localizador uni-forme de recursos) Ex.: http://www.ufu.br; http://www.iciag.ufu.br; http://ww.uol.com.br

• Endereços (domínios) são criados de acordo com o tipo de utilização: .com(comércio); .gov (governo); .edu (universidades – normalmente as brasilei-ras não utilizam); .mil (militar); .org (organizações sem fins lucrativos),etc.

• Endereços terminam com nacionalidade: Brasil (.br); Japão (.jp); Portu-gal (.pt); EUA (em branco).

Endereço eletrônico: e-mail

• Permite o envio/recebimento de mensagens, que podem conter qualquertipo de arquivo (texto, vídeo, foto, etc.)

• Ao ser recebida a mensagem fica armazenada em uma caixa postal.

• Depois de lida a mensagem pode ser respondida ou encaminhada paraoutras pessoas.

• Pode-se utilizar um programa de e-mail (ex.: MS Outlook, Mozilla Thun-derbird). Provedores fornecem webmail (acesso pelo navegador) – ex.:webmail UFU.

• Cada pessoa deve possuir seu e-mail único. Ex.: [email protected],[email protected], etc.

Transferência de arquivos (FTP)

• FTP (File Transfer Protocol): serviço especializado na troca de arquivos.

• O navegador permite acessar este serviço diretamente.

• Páginas de FTP normalmente possuem apenas uma lista com arquivos.Exemplo: ftp://mecanica.ufu.br

• Cliente de FTP: Programa específico para troca de arquivos, agilizando oprocesso. Ex.: Filezilla, SSH Secure File Transfer Client, etc.

21

Page 22: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

5 Conceitos básicos de algoritmosDefinição de algoritmo

• Vimos anteriormente que uma das etapas envolvidas no processo de pro-gramação é descrever detalhadamente um problema, bem como suas pos-síveis soluções. Para isto, desenvolvemos um algoritmo:

Algoritmo

Sequência finita e não ambígua de instruções ou operações (passos), cujaexecução, em um tempo finito, resolva um problema

• não ambiguidade: cada instrução deve ser precisamente definida, sem per-mitir mais de uma interpretação.

Observações

• Importante: para a grande maioria dos problemas, é possível haver maisde um algoritmo de resolução:

• Algoritmos não são operações exclusivas de um computador:

– A grande maioria das coisas que fazemos no dia a dia, fazemos porvia de algoritmos.

Exemplo de algoritmo: somar 3 valores

Passo 1 – receber três números;

Passo 2 – somar os três números;

Passo 3 – mostrar o resultado obtido.

Exemplo de algoritmo: sacar dinheiro

Passo 1 – ir até um caixa eletrônico;

Passo 2 – colocar o cartão;

Passo 3 – digitar a senha;

Passo 4 – solicitar a quantia desejada;

Passo 5 – se saldo for maior ou igual à quantia desejada, realizar o saque; casocontrário, não sacar, ou sacar quantia menor;

Passo 6 – retirar o cartão;

Passo 7 – sair do caixa eletrônico.

22

Page 23: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Dicas para elaboração de algoritmos

1. Compreender completamente o problema a ser resolvido, destacando pon-tos mais importantes e objetos que o compõem;

2. Definir os dados de entrada, isto é, quais dados serão fornecidos e quaisobjetos fazem parte do problema;

3. Definir o processamento, isto é, quais cálculos serão efetuados; quais asrestrições para estes cálculos;

(a) Processamento: responsável pela transformação de dados de entradaem dados de saída.

(b) Deve-se também verificar quais objetos são responsáveis por cadaatividade de processamento.

4. Definir os dados de saída, isto é, quais dados são gerados após o proces-samento;

5. Construir o algoritmo;

6. Testar o algoritmo, através de simulações.

Não ambiguidade

• Precisa-se descrever a sequência de instruções, de maneira simples e obje-tiva:

– Somente um verbo por frase;

– Frases curtas e simples;

– Ser objetivo;

– Evitar frases com sentido dúbio.

5.1 RepresentaçãoRepresentando algoritmos

• Descrição narrativa (mais próximo de como escrevemos);

• Fluxograma (representação gráfica);

• Pseudocódigo (mais interessante do ponto de vista da programação)!

23

Page 24: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1. Descrição narrativa

• Escrever, utilizando uma linguagem natural (exemplo: língua portuguesa),os passos a serem seguidos para resolução do problema.

• Vantagem:nenhum conceito novo necessário

• Desvantagem:pode abrir espaço para interpretações

– Dificultará transcrição deste algoritmo para um programa

• Exemplo: fazer um sanduíche

Passo 1 – pegar o pão

Passo 2 – cortar o pão ao meio

Passo 3 – pegar a maionese

Passo 4 – passar a maionese no pão

Passo 5 – pegar e cortar alface e tomate

Passo 6 – colocar alface e tomate no pão

Passo 7 – Pegar o hambúrguer

Passo 8 – fritar o hambúrguer

Passo 9 – colocar o hambúrguer no pão

2. Fluxograma

• Escrever, usando símbolos gráficos predefinidos, os passos a serem seguidospara a resolução do problema.

• Diagrama: representação visual dos algoritmos.

• Vantagem:entendimento mais simples. Útil nas fases iniciais de aprendi-zado de programação;

• Desvantagem:algoritmo resultante com poucos detalhes; aprendizado dasimbologia necessário.

• Exemplo:

• Representação alternativa:

24

Page 25: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Início

Leia A e B

A > B?

Escreva BEscreva A

Fim

NãoSim

Figura 4: Fluxograma do algoritmo que escreve qual o maior de 2 valores dados

Início

Leia A e B

A > B?

A ← B

Escreva A

Não

Sim

Figura 5: Fluxograma do algoritmo que escreve qual o maior de 2 valores dados

Simbologia de fluxogramas

• Início e fim:

– Podem ser círculos ou formas ovais

– Normalmente contêm a palavras “Início”, “Fim”, ou alguma expressãosinalizando o início ou fim do processo.

Início Fim Escreva A

• Processo e operações:

25

Page 26: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– Representação por retângulos.

– Indica uma tarefa a ser executada pelo algoritmo.

– Usado para cálculos e atribuições de valores.

Leia A e B M = N + P Escreva B

• Condição ou decisão:

– Representação por losangos.

– Normalmente contém uma pergunta do tipo Sim/Não ou um testede Verdadeiro/Falso.

– Mudanças no fluxo – possibilidade de desvios.

A > B?

• Fluxo de dados ou de instruções:

– Representação por setas ou flechas.

– Conectam dois símbolos quaisquer do fluxograma.

A > B?

A ← B

Escreva A

Não

Sim

3. Pseudocódigo

• Linguagem intermediária entre linguagem natural e linguagem de progra-mação;

• Escrever, por meio de regras predefinidas, os passos a serem seguidos pararesolução do problema.

• Vantagem:codificação em linguagem de programação é quase imediata

• Desvantagem:é necessário aprender as regras de escrita do pseudocódigo

26

Page 27: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Exemplo: como seria o pseudocódigo para o algoritmo que escreve qual omaior de 2 valores dados?

1 Declare A, B numerico2 Inicio3 Escreva "Digite dois valores"4 Leia A, B5 Se A < B Entao6 A <- B7 Fim Se8 Escreva A9 Fim

Outro exemplo de algoritmo

• Elabore e escreva um algoritmo para calcular a média aritmética entreduas notas de um aluno e mostrar sua situação, que pode ser “aprovado”ou “reprovado”, usando:

1. Descrição narrativa

2. Pseudocódigo

3. Fluxograma

• 1. Descrição narrativa

Passo 1 – receber duas notas

Passo 2 – calcular a média aritmética

Passo 3 – escrever média aritmética

Passo 4 – se média for maior ou igual a 7, então situação do aluno éaprovado; caso contrário, a situação é reprovado.

Passo 5 – escrever situação do aluno

• 2. Pseudocódigo

1 Declare N1, N2 , M numerico2 Inicio3 Escreva "digite as duas notas"4 Leia N1, N25 M <- (N1+N2)/26 Escreva "Media =", M7 Se M >= 7 Entao8 Escreva "aprovado"9 Senao

27

Page 28: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

10 Escreva "reprovado"11 Fim Se12 Fim

• 3. Fluxograma

Início

Leia N1, N2

M = (N1 + N2)/2

Escreva M

M >= 7?

Fim

Escreva “reprovado”Escreva “aprovado”

NãoSim

Figura 6: Fluxograma do algoritmo que calcula a média aritmética e situaçãode um aluno, dadas duas notas.

Testando o algoritmo: teste de mesa

• Consiste do acompanhamento manual passo-a-passo da execução do algo-ritmo, visando:

– Avaliar se os resultados obtidos correspondem àqueles esperados/de-sejados.

– Detectar, se existentes, os erros de comandos e/ou fluxo de execução.

• Durante os testes, deve-se definir os valores de entrada, visando avaliar asseguintes situações:

– Casos extremos (valores limítrofes da validade);

– Exceções do problema (valores inválidos).

• Exemplo:

1 declare P1 , P2, P3, P4 inteiro2 media real3 inicio4 leia P1, P2, P3, P45 media <- (P1+P2+P3+P4)/46 escreva media7 se media < 6 entao

28

Page 29: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

8 escreva "REPROVADO"9 senao

10 escreva "APROVADO"11 fim se12 fim

6 Tipos de dados e variáveisRepresentação

• Todo algoritmo – e, consequentemente, todo programa – recebem dados.

• Armazenamento durante a execução do programa: memória primária (RAM).Representação de dados na memória: bits e bytes.

• Porções de memória (sequências de bits / bytes que armazenam os dadossão identificadas e acessadas através de endereços. É desta forma que aunidade de controle localiza os dados na memória.

29

Page 30: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Bits e bytes

• Computador: componente eletrônico digital capaz de reconhecer somenteduas coisas:

– Ligado– Desligado

• Sistema de 2 estados: sistema binário.

• A partir de tal sistema, computador pode criar formas sofisticadas derepresentação de dados

• bit (binary digit): unidade básica de armazenamento de dados!

– Cada bit está sempre ligado (1) ou desligado (0). Um bit na memóriajamais está vazio.

• 1 bit não pode representar, individualmente, um dado número, letra ousímbolo: para tal, bits são reunidos em bytes.

• 1 byte é um conjunto formado por 8 bits.

• Cada byte pode assumir, portanto, 28 = 256 valores distintos, desta forma,podendo representar números, letras ou símbolos.

• Expressamos quantidades de memória (capacidade, tamanhos de arquivos)em múltiplos de bytes:

Termo Símbolo Quantidade real (bytes)1

Quilobyte KB 210 (1.024)Megabyte MB 220 (1.048.576)Gigabyte GB 230 (1.073.741.824)Terabyte TB 240 (1.099.511.627.776)Petabyte PB 250 (1.125.899.906.842.624)

• Obs.: b: bit, B: byte.

Tipos de dados

• Toda variável possui um determinado tipo.

– Tipo de uma variável: determina o conjunto de valores (e operações)que a variável pode aceitar.

• Tipos de dados primitivos (básicos):

– Numéricos;∗ Inteiros;∗ Reais.

– Lógicos;– Literais ou de texto.

30

Page 31: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Dados numéricos

• Positivos ou negativos;

• Dois grupos:

– Inteiros;

– Reais.

• Inteiros:

– Sem parte fracionária;

– Exemplos: -23, 98, 0, -357, 237, -2

• Reais:

– Possuem parte fracionária;

– Exemplos: 23.45, -34.88, -247.0, -346.89

• Observação: notação de dados reais no computador: língua inglesa (ponto,e não vírgula, separa parte inteira da parte fracionária

Dados lógicos

• Podem assumir somente dois valores:

– Verdadeiro

– Falso

• Também chamados de boolianos (álgebra de Boole).

Dados literais ou caracteres

• Formados por um único caractere ou uma cadeia de caracteres.

• Caractere:

– Letras maiúsculas;

– Letras minúsculas;

– Algarismos (não podem ser utilizados para cálculos);

– Especiais (ex.: &, #, @, ?, +, etc.)

• Exemplos: “aluno”, “1234”, “0.34”, “1+2”, “1ab”, “0”, “x”, etc.

31

Page 32: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Identificando variáveis

• Toda variável, além de um tipo, deve possuir um nome (identificador).

• Algumas regras para identificar uma variável:

– Podem ser utilizados algarismos, letras maiúsculas, letras minúsculas;

– No início: somente uma letra ou símbolo _;

– Não permitidos: espaço em branco, caracteres especiais (@, $, +,-, %, etc.); Não permitidos: palavras reservadas da linguagem deprogramação em uso.

Exemplos: x, y, salario, _horas, N1, n2

6.1 Representação em memória

Como representar diferentes tipos de dados na memória, apenas usando 0se 1s dos bits?

Código ASCII

• Como representar caracteres (sinais gráficos como letras, símbolos, alga-rismos) em memória, usando bytes?

• Código ASCII: Esquema de codificação que atribui a cada combinação de1 byte um elemento específico;

• ASCII: American Standard Code for Information Interchange (Código Pa-drão Americano para Troca de Informação);

• Usado em praticamente todos os computadores pessoais;

• 128 caracteres: 95 sinais gráficos (como letras do alfabeto latino, algaris-mos e sinais matemáticos) e 33 sinais de controle (tabulação, backspaceetc). 7 bits usados, 1 fica livre (bit de paridade ou erro).

• Tabela completa: https://pt.wikipedia.org/wiki/ASCII

32

Page 33: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Caractere Código ASCII Forma! 33 0010 0001# 35 0010 0011$ 36 0010 0100+ 43 0010 1011...

......

0 48 0011 00001 49 0011 00012 50 0011 0010...

......

A 65 0100 0001B 66 0100 0010C 67 0100 0011...

......

a 97 0110 0001b 98 0110 0010...

......

Sistemas numéricos

• Computador: sistema binário (manipula e armazena informação na formade números binários).

• Sistema decimal: é o sistema mais importante do ponto de vista prático,sendo usado por nós, seres humanos, em nosso dia a dia.

• Sistema decimal: Base (quantidade de algarismos) = 10

– Algarismos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

– Exemplo:

6903 = 6× 103 + 9× 102 + 0× 101 + 3× 100

= 6000 + 900 + 0 + 3

• Sistema binário: Base 2

– Algarismos: 0, 1

– Exemplo:

1012 = 1× 22 + 0× 21 + 1× 20

= 4 + 0 + 1 = 510

(esta é a conversão de binário para decimal!)

• Conversão de decimal para binário:

– Divide-se o número pela base binária, 2, obtendo-se um resultado eum resto.

– Divide-se o resultado por 2, e assim sucessivamente, até que o resul-tado seja 0.

33

Page 34: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– A representação correspondente é dada pelos restos das divisões, detrás para frente.

• Conversão de decimal para binário:

– Exemplo: 1910

÷2 = Resto

↑19 9 19 4 14 2 02 1 01 0 1

Logo, 1910 = 100112

7 Linguagens de programaçãoLinguagem de programação

Uma linguagem de programação é uma linguagem artificial projetada para co-municar instruções a uma máquina, em especial computadores. Linguagens deprogramação podem ser usadas para criar programas que controlam o compor-tamento da máquina e expressar algoritmos de forma precisa (não ambígua).

A comunicação com o computador

• Ocorre em diferentes níveis:

– Linguagem de máquina;

– Linguagem de baixo nível;

– Linguagem de alto nível.

7.1 Níveis de linguagens de programaçãoLinguagem de máquina

• Conjunto básico de instruções, em código binário, características de cadacomputador, correspondentes às suas operações básicas:

– Instruções lógicas e aritméticas;

– Instruções para transferência de Informação;

– Instruções para testes;

– Instruções de entrada/saída;

• Programação inviável para seres humanos.

34

Page 35: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Linguagens de baixo nível

• Linguagem simbólica: bem próxima da linguagem de máquina;

• Programação baseada na manipulação de registradores e utilização de in-terrupções para prover entrada/saída;

• Como há uma correspondência biunívoca entre instruções simbólicas einstruções da máquina, as linguagens simbólicas:

– Dependem do processador utilizado;– Permitem escrever programas muito eficientes;– Porém: são de utilização muito difícil e sujeitas a erros;

Exemplo: Assembly

Exemplo de programa em Assembly: escrever a mensagem “Olá, mundo” natela (fonte: https://pt.wikipedia.org/wiki/Programa_Ol%C3%A1_Mundo#Assembly):

1 variable:2 .message db "Ola , Mundo!$"3 code:4 mov ah, 95 mov dx, offset .message6 int 0x217 ret

A tradução/conversão da linguagem Assembly para a linguagem de máquinase chama montagem:

Linguagem de alto nível

• Programas são escritos usando uma linguagem parecida com a nossa lin-guagem;

• Independe da arquitetura do computador;

• Programação mais rápida e eficiente: mais fácil; programas menos sujeitosa erros;

• Uso de compiladores.

35

Page 36: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– Conversão de todo o código em linguagem de máquina, gerando umarquivo executável ⇒ Execução eficiente.

• Ou uso de interpretadores:

– Durante a execução, cada instrução do código é lida e interpretada⇒ execução mais lenta.

Linguagem de alto nível: linguagem Python

1 print("Olá, Mundo!")

TraduçãoOs programas escritos em linguagens de alto nível são denominados código

fonte.

• Os códigos fonte devem ser convertidos para a linguagem de máquina(tradução)

TraduçãoVimos que a conversão de código fonte (linguagem de alto nível) para código

executável (linguagem de máquina) – tradução – é feita de 2 formas:

1. compilação

2. interpretação

Vejamos como funciona cada uma destas 2 formas.

7.2 Compilação• Análise sintática e semântica: Programa fonte escrito em uma linguagemqualquer (linguagem fonte) ⇒ programa objeto equivalente escrito em ou-tra linguagem (linguagem objeto);

• Compilador: software tradutor em que a linguagem fonte é uma linguagemde alto nível e a linguagem objeto é uma linguagem de baixo nível (comoassembly) ou de máquina.

36

Page 37: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Arquivo .c (Código escrito em linguagem C)

Arquivo executável (.exe) gerado pelo compilador

Figura 7: O compilador

Programa fonte

Programa fonte CompiladorCompilador Programa

executávelPrograma executável

Sistema operacional / CPUSistema operacional / CPU

Figura 8: Geração do programa executável

O código executável produzido não é portável

• Diferentes compiladores são construídos para as diferentes arquiteturas deprocessadores

Exemplos de linguagens compiladas:

• C

• Pascal

• FORTRAN

• C++

7.3 Interpretação• Interpretador: É um software que interpreta (análise sintática e semântica)as instruções do programa fonte uma a uma, gerando o resultado;

37

Page 38: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Toda vez que o programa – aqui também chamado de script – é executado,o tradutor transforma cada instrução do código-fonte em uma instruçãode código-objeto, que é imediatamente executada:

– Não é criado todo um programa-objeto, mas apenas a conversão ins-trução a instrução.

Um interpretador é um programa que executa repetidamente a seguintesequência:

1. Obter o próximo comando do script

2. Determinar que ações devem ser executadas

3. Executar estas ações

Caso haja alguma linha de código mal codificada (não respeitando o que foidefinido na linguagem), o programa termina sua execução abruptamente emerro.

InterpretadorInterpretador

Sistema operacional / CPUSistema operacional / CPU

Programa fonte

Programa fonte

Figura 9: Execução de um programa interpretado

Exemplos de linguagens interpretadas:

• HTML

• Haskell

38

Page 39: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Lisp

• Python

Compilação × interpretação

• Compilação:

– O programa fonte não é executado diretamente; O programa fonteé convertido em programa objeto e depois é executado; Vantagem:Execução muito mais rápida.

• Interpretação:

– Executa-se diretamente o programa fonte / script ;

– Não existe a geração de um módulo ou programa objeto;

– Vantagem: Programas menores e mais flexíveis.

8 Programação estruturadaParadigmas de programação

• Questão: como resolver um determinado problema?

• Paradigma de programação

– Relacionado à forma de pensar do programador;

– Como ele busca a solução para o problema;

– Mostra como o programador analisou e abstraiu o problema a serresolvido.

• Paradigmas

– Estruturado;

– Orientado a objetos;

– Lógico;

– Funcional;

– etc.

39

Page 40: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Paradigma estruturado

• Também chamado imperativo;

• Utilização de 3 estruturas:

– Sequencial;

– Condicional;

– Repetição ou iterativa.

• Busca quebrar um problema complexo em partes menores;

• Programador:

– Analisa o problema;

– Tenta relacionar ações que deverão ser executadas.

• A estrutura sequencial de um algoritmo é o item básico da programaçãoestruturada:

1 Declaracao de variaveis2 Inicio Algoritmo3 Comandos (atribuicao , entrada / saida ,

processamento)4 Fim Algoritmo

Endereçamento na memória

• Porções de memória (sequências de bits / bytes) que armazenam os dadossão identificadas e acessadas através de endereços.

• Exemplo: programa de folha de pagamento

– Índice de pagamento: localização 3

– Horas trabalhadas: localização 6

– Resultado (Salário): localização 8

40

Page 41: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Escolha “arbitrária”: qualquer localização livre pode ser usada;

• Programador não precisa se preocupar com endereço (responsabilidade doS.O.): cada endereço pode receber um nome, chamado endereço simbólico.Ex.: indice, horas, salario

Variável

• Endereço simbólico: variável

– Possui um nome (identificador) e um tipo;– Representa uma posição de memória, onde é guardado um dado ou

valor;– Seu conteúdo pode ser alterado durante a execução do programa, mas

não sua posição;– Pode assumir valores distintos, mas somente um único valor a cada

instante da execução do programa/algoritmo.

Declaração de variáveis

• Na declaração de variáveis, criamos as mesmas, definindo um identificador(nome) válido, e seu tipo

• Quando a variável é criada durante a execução do programa, uma posiçãode memória é atribuída à mesma

• Exemplo (pseudocódigo):

1 Declare x numerico2 Declare y,z literal3 Declare teste logico

Na linha 1, poderíamos explicitar se inteiro ou real.

41

Page 42: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Atribuição

• Comandos de atribuição são usados para conceder (atribuir) valores ouoperações às variáveis.

• Exemplo (pseudocódigo):

1 x <- 42 y <- x + 23 M <- (N1 + N2)/24 teste <- Falso

Comandos de entrada

• Comandos de entrada são utilizados para receber dados de entrada dousuário (via teclado ou outro dispositivo de entrada), e armazená-los emvariáveis.

• São representados pela palavra Leia. Exemplos:

1 Leia x2 Leia y

– Se x é numérico: um valor digitado pelo usuário será armazenado navariável x;

– Se y é literal: um ou mais caracteres digitados pelo usuário serãoarmazenados na variável y.

Comandos de saída

• Comandos de saída são utilizados para mostrar ao usuário dados na tela(ou outro dispositivo de saída):

• Dados podem ser simplesmente o conteúdo de variáveis ou mensagens.

• Exemplos:

1 Escreva X2 Escreva "conteudo de Y = ", Y

42

Page 43: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

8.1 Exercícios sugeridos1. Escreva um algoritmo que execute a soma de dois números inteiros forne-

cidos pelo usuário, usando:

• Declaração de variáveis

• Comandos de entrada (leitura) e saída de dados

2. Escreva um algoritmo que lê o nome de um vendedor, o seu salário fixo, ototal de vendas por ele efetuadas e o percentual que ganha sobre o totalde vendas. Calcular o salário total do vendedor. Escrever o nome dovendedor e seu salário total.

3. Faça um algoritmo que receba o salário de um funcionário, calcule e mostreo novo salário, sabendo-se que este sofreu um aumento de 25%.

8.2 Referências• ASCENCIO, A. F. G., CAMPOS, E. A. V. Fundamentos da Programaçãode Computadores. São Paulo: Prentice Hall, 2007.

• PIMENTEL, R. Notas de aula de Introdução à Computação.

• PAIVA, J. G. S. Notas de aula de algoritmos e programação de computa-dores.

• MARTINS, L. G. A. e SILVA, A. J. Notas de aula de Introdução a algo-ritmos.

9 Linguagem Python

• Surgimento: 1991 (Guido van Rossum)

• Multi-paradigma: imperativo, funcional, O.O.

• Software-livre: pode ser utilizada gratuitamente

– Python Foundation (http://www.python.org)

• Alto nível: simplicidade e clareza – fácil de aprender

– Muitas bibliotecas – código pronto – disponíveis

• Multi-plataforma: Windows, Linux, Mac OS, etc.

43

Page 44: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Wikipedia, Google, Yahoo!, CERN, NASA, Facebook, Amazon, Insta-gram, Spotify, etc.

• I.A. (inteligência artificial), bancos de dados, biotecnologia, aplicativosmóveis, games, aplicações web.

O interpretador

• Python trabalha com um interpretador híbrido:

– O programa Python é traduzido para um código intermediário cha-mado byte-code

– O byte-code é executado por um interpretador especial

• Vantagens:

– fácil de usar interativamente

– fácil testar e modificar componentes

– mais eficiente do que um interpretador clássico

• Desvantagem

– não é tão eficiente como uma linguagem compilada tradicional (C,C++, Fortran, etc)

Utilização interativa

• Os comandos são executados no terminal do Python

– IDLE2 é um ambiente de desenvolvimento integrado para Python

– Podemos escrever comandos Python e ver os resultados imediata-mente (similar aos sistemas operacionais DOS).

2integrated development environment

44

Page 45: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Arquivos de script

• Podemos criar um arquivo de texto onde iremos escrever um programacompleto (script) e executar de uma só vez pressionando F5

• Arquivos de programas Python têm a extensão .py

9.1 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

10 Variáveis, comandos básicos e expressões

10.1 Variáveis no PythonEndereçamento na memória

• Porções de memória (sequências de bits / bytes) que armazenam os dadossão identificadas e acessadas através de endereços.

• Exemplo: programa de folha de pagamento

– Índice de pagamento: localização 3– Horas trabalhadas: localização 6– Resultado (Salário): localização 8

45

Page 46: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

False await else import passNone break except in raiseTrue class finally is returnand continue for lambda tryas def from nonlocal while

assert del global not withasync elif if or yield

Tabela 1: Palavras reservadas da linguagem Python3

• Escolha “arbitrária”: qualquer localização livre pode ser usada;

• Programador não precisa se preocupar com endereço (responsabilidade doS.O.): cada endereço pode receber um nome, chamado endereço simbólico.Ex.: indice, horas, salario

Variável

• Endereço simbólico: variável

– Possui um nome (identificador) e um tipo;

– Pode também possuir um determinado escopo (“alcance”)

– Representa uma posição de memória, onde é guardado um dado ouvalor;

– Seu conteúdo pode ser alterado durante a execução do programa, masnão sua posição;

– Pode assumir valores distintos, mas somente um único valor a cadainstante da execução do programa/algoritmo.

Nomes de variáveis no Python

• Deve iniciar com letras ou underscore (_). Ex.: x, \_prova1

• Podem conter letras, números ou underscores (_). A partir da versão 3.0as letras podem ser acentuadas;

• Letras maiúsculas e minúsculas são consideradas diferentes (case sensi-tive);

• Palavras reservadas não podem ser usadas como nomes

Palavras reservadasPalavras reservadas ou palavras-chave são as palavras que formam a lingua-

gem de programação. Python possui 35:

46

Page 47: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

ExercícioQuais nomes de variáveis estão corretos?

• Contador

• contador1

• comp!

• .var

• Teste_123

• _teste

• in

• int1

• 1contador

• -x

• Teste-123 x&

• Corretos: Contador, contador1, _teste, Teste_123, int1

• Errados: comp!, .var, in, 1contador, -x, Teste-123 x&

Tipos de variáveis

• Os valores e variáveis em Python são classificados em diferentes tipos.

• O tipo define os valores que a variável pode assumir e as operações quepodem ser realizadas.

• Diferente de outras linguagens, não precisamos definir o tipo de uma va-riável

– O tipo da variável se altera conforme o dado armazenado.

– Comando type(x) – permite saber o tipo do valor ou variável em x

Alguns tipos

• Tipo int

– Números inteiros

• Tipo float

– Números fracionários (ponto flutuante)

47

Page 48: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– Na parte decimal usa-se ponto, e não vírgula.

• Tipo str

– String, isto é, cadeia de caracteres

– Escrevemos o texto entre aspas ’simples’ ou “duplas”

1 >>> x=12 >>> type(x)3 <class 'int'>4 >>> y = 1.55 >>> type(y)6 <class 'float'>7 >>> nome = "UFU"8 >>> type(nome)9 <class 'str'>

10 >>> type("Uberlandia")11 <class 'str'>

Tipo lógico

• Também chamado booleano (no Python: bool);

• Apenas armazena 2 valores: True (verdadeiro) ou False (falso)

• Exemplos:

1 >>> resultado = True2 >>> type(resultado)3 <class 'bool'>4 >>> 2>55 False6 >>> teste = 2>57 >>> teste8 False

Escopo de variáveis

• O escopo define onde e quando a variável pode ser usada.

• Escopo global:

– A variável é definida fora de qualquer definição de função.

48

Page 49: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

– Tempo de vida é o tempo de execução do programa.

• Escopo local:

– A variável é definida dentro de uma função ou na sua lista de parâ-metros.

• x e y são variáveis locais.

– Foram definidas em um bloco indentado (recuado).

• x e z são variáveis globais.

– Foram definidas em um bloco não-indentado.

• x existe nos dois escopos:

– A variável definida no escopo local ofusca completamente o escopoglobal.

1 def func():2 x = 10;3 y = 10;4 print("Função = ", x,y,z)56 x = 15;7 z = 15;8 print("Antes = ",x,z)9 func()

10 print("Depois = ",x,z)

Saída:Antes = 15 15Função = 10 10 15Depois = 15 15

10.2 Comandos de entrada e saída de dadosSaída de dados: print()

• print(): Função que realiza a impressão dos dados do programa no ter-minal

– Forma geralprint(expressão1, expressão2, ..., expressãoN)

1 >>> x=12 >>> print(x)3 14 >>> print("Teste")5 Teste

49

Page 50: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

6 >>> y=2.57 >>> print("y = ", y)8 y = 2.5

Entrada de dados: input()

• input(): Função que realiza a leitura de uma cadeia de caracteres doteclado no terminal

• Forma geral

variável = input(texto)

– A função input() escreve o texto passado por argumento no termi-nal (uso opcional).

1 >>> txt = input("Digite algum texto: ")2 Digite algum texto: UFU3 >>> print(txt)4 UFU5 >>> txt = input ()6 Uberlândia7 >>> print("txt: ", txt)8 txt: Uberlândia

• A função input() sempre retorna uma cadeia de caracteres, mesmo queo que foi digitado contenha apenas números.

• O que fazer se for preciso ler um valor numérico?

SoluçãoConversão de tipos

Conversão de tipos

• int(x): converte x para inteiro via truncagem (apenas a parte inteira éconsiderada).

• round(x): converte x para inteiro via arredondamento.

• float(x): converte x para ponto-flutuante (número real).

• str(x): converte um valor x para texto.

50

Page 51: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1 >>> str (5.25)2 '5.25'3 >>> int (2.5)4 25 >>> round (2.5)6 27 >>> int('3')8 39 >>> float("3.5")

10 3.511 >>>

Desta forma, é possível combinar o retorno da função input() com a con-versão de tipos para fazer a leitura de valores numéricos:

1 N = int(input("Digite um valor inteiro: "))2 N = N*23 print("O dobro do valor digitado é ",N)

Saída:

Digite um valor inteiro: 12O dobro do valor digitado é 24>>>

10.3 DocumentaçãoComentários e docstrings

• Comentários:

– Permitem adicionar uma descrição sobre o programa. Ajudam a re-lembrar como funciona o programa

– São ignorados pelo interpretador– Começam com o símbolo # (cerquílha) e se estendem até ao final da

linha

1 tudo que estiver a frente da cerquilha será ignorado2 print("Bem -vindo ao curso!") #a instrução atrás da cerquilha será

interpretada

Saída:

Bem -vindo ao curso!>>>

51

Page 52: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Docstrings

– Textos definidos entre três aspas duplas ou três aspas simples. Simi-lares a comentários.

– São ignorados pelo interpretador, mas podem ser acessados atravésdo help.

– Normalmente utilizados no início de uma classe, de uma função ouno início do programa.

1 def fatorial(N):2 """3 Função que calcula o fatorial de um número inteiro N4 Exemplo: x = fatorial (5)5 """6 if (N <= 1):7 return 18 return N*fatorial(N-1)

10.4 OperadoresAtribuição: =

• Associa o valor de uma expressão a uma variável

• A variável é criada neste processo; ou

• Caso a mesma já exista, seu valor é alterado.

• Forma geral:

nome_da_variável = valor ou expressão

• Atenção: O operador de atribuição = armazena o valor ou resultado deuma expressão contida à sua direita na variável especificada à sua es-querda.

• É importante notar que a atribuição é um comando, e não uma equação.

1 >>> x=32 >>> y = 2*x3 >>> y4 65 >>> x = 56 >>> x7 58 >>> y

52

Page 53: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

9 610 >>>

• Suporte a múltiplas atribuições – mais de uma variável recebendo mesmovalor/expressão.

• Alterar o valor de uma variável não altera o valor das variáveis já calcula-das usando o antigo valor.

Operadores aritméticos

• Permitem criar expressões aritméticas utilizando números inteiros e fraci-onários;

• Seguem a precedência da matemática: exponenciações são realizadas antesde multiplicações e divisões, que são realizadas antes de somas e subtra-ções.

• A linguagem Python possui 5 operadores aritméticos:

Operador Exemplo Descrição+ 2+3 Soma- 3-1 Subtração* 2*4 Multiplicação/ 4.5/2 Quociente da divisão** 2**3 Exponenciação

• Podemos alterar a precedência utilizando parênteses ()

1 >>> 2 + 3 * 22 83 >>> (2 + 3) * 24 10

• O operador de subtração - também pode ser utilizado para inverter o sinalde um valor

1 >>> x = 102 >>> y = -x3 >>> x4 105 >>> y6 -10

53

Page 54: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Operadores especiais para valores inteiros:

Operador Exemplo Descrição// 5//2 Quociente da divisão inteira% 5%2 Resto da divisão inteira

• Exemplo:

1 >>> 10//32 33 >>> 10%34 1

• Os operadores aritméticos funcionam com ambos os tipos: int e float

• Devemos apenas estar atentos ao tipo resultante da operação quando combiná-los:

– int com int resulta em int

– float com float resulta em float

– int com float (e vice-versa) resulta em float

• Erros de arredondamento:

– Valores inteiros: são representados de forma exata no computador.

– Valores em ponto-flutuante: são aproximações finitas dos númerosreais.

– Erros de arredondamento podem se acumular após sucessivas opera-ções sobre os valores.

– Exemplo:

1 >>> 8/42 2.03 >>> 8/34 2.6666666666666665

• Exemplo:

(100/3− 33)× 3 =

100− 33× 3 = 1

54

Page 55: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• No Python:

1 >>> (100/3 -33)*32 1.0000000000000073 >>> 100 -33*34 15 >>> 100 -33*3 - (100/3 -33) *36 -7.105427357601002e-15

Operadores relacionais

• Permitem a comparação de valores numéricos de diferentes variáveis.

• A linguagem Python possui 6 operadores relacionais:

Operador Exemplo Descrição== x==5 Igual!= x!=5 Diferente> x>y Maior que>= x>=10 Maior ou igual a< y<100 Menor que<= y<=z Menor ou igual a

• Esse tipo de operador retorna True (verdadeiro) ou False (falso).

• Podemos utilizar operadores aritméticos durante a comparação.

1 >>> x = 102 >>> y=203 >>> x == 114 False5 >>> x != y6 True7 >>> 2*x > y8 False9 >>> 2*x >= y

10 True

Operadores lógicos

• São operadores que trabalham com valores lógicos e retornam um valorlógico True (verdadeiro) ou False (falso).

55

Page 56: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Operador Exemplo Descriçãoand x==5 and x<y Operador “e”or x!=5 or x<0 Operador “ou”not not(x>y) Operador de negação

• Exemplo:

1 >>> x=102 >>> y = 203 >>> x>y or x>04 True5 >>> x>y and x>06 False7 >>> not(x > y)8 True9 >>> not(x>y and x>0)

10 True

• Tabela-verdade dos operadores lógicos

A B not A not B A and B A or BFalse False True True False FalseFalse True True False False TrueTrue False False True False TrueTrue True False False True True

Operadores de atribuição simplificada

• A linguagem Python permite simplificar algumas expressões matemáticas.

Operador Exemplo Descrição+= c += a (equivale a c = c+a) Soma-= c -= a (equivale a c = c-a) Subtração*= c *= a (equivale a c = c*a) Multiplicação/= c /= a (equivale a c = c/a) Quociente da divi-

são**= c **= a (equivale a c = c**a) Exponenciação//= c //= a (equivale a c = c//a) Quociente da divi-

são inteira%= c %= a (equivale a c = c%a) Resto da divisão in-

teira

56

Page 57: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

10.5 Módulos

MóduloUm módulo Python nada mais é do que um arquivo de extensão .py contendocódigo-fonte Python.

• Este arquivo pode conter variáveis, funções e classes;

• À medida que um programa cresce em tamanho e complexidade, um oumais módulos Python podem ser utilizados de forma combinada.

Comando import

• É a instrução mais básica para trabalhar com módulos;

– O módulo deve estar no caminho de procura de módulos do interpre-tador

• Alguns dos módulos mais comuns são: math, sys, os, time, random, re,shelve

• Forma geral:

import nome-módulo

• Exemplo:

import math

• Sintaxe para uso das funções de um módulo:

nome-módulo.nome-função

Exemplo: módulo math

• Muitas funções e constantes matemáticas estão disponíveis no módulomath.

• Exemplo:

1 >>> import math2 >>> math.e3 2.7182818284590454 >>> math.pi5 3.1415926535897936 >>> math.sqrt (4)7 2.0

57

Page 58: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Função dir()

• dir(): retorna uma lista de nomes de todos os símbolos da tabela domódulo atual.

• dir(nome-módulo): retorna uma lista dos nomes dos atributos contidosem um módulo, permitindo descobrir quais símbolos e funções o compõem.

• Exemplos:

1 >>> dir()2 ['__builtins__ ', '__doc__ ', '__loader__ ', '__name__ ', '

__package__ ', '__spec__ ', 'math', 'x']3 >>> dir(math)4 ['__doc__ ', '__loader__ ', '__name__ ', '__package__ ', '

__spec__ ', 'acos', 'acosh', 'asin', 'asinh', 'atan','atan2', 'atanh', 'ceil', 'copysign ', 'cos', 'cosh'

, 'degrees ', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial ', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose ', 'isfinite ', 'isinf', 'isnan', 'ldexp', 'lgamma ', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians ', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

10.6 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• MENEZES, N.N.C. Introdução à Programação com Python: algoritmos elógica de programação para iniciantes. São Paulo: Novatec, 2010.

11 Comandos condicionais

11.1 IntroduçãoEstruturas condicionais

• Também chamadas de estruturas de condição ou estruturas de seleção.

• Possibilitam a escolha de uma ação ou um grupo de ações a serem execu-tadas quando determinadas condições são ou não satisfeitas.

58

Page 59: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Condição

• Geralmente dada em termos de uma ou combinações de:

– operações relacionais;

– operações lógicas.

• Resultado da condição: valor lógico (verdadeiro ou falso)

11.2 O comando if

• Na linguagem Python, o comando if é utilizado quando for necessárioescolher entre dois caminhos dentro do programa ou quando se desejaexecutar um comando sujeito ao resultado de um teste.

• Forma geral:

1 if condição:2 instrução 13 instrução 24 ...5 instrução n6

7 continuação do programa

59

Page 60: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• A expressão, na condição, será avaliada:

– Se a condição for verdadeira (True), a sequência de instruções seráexecutada;

– Se ela for falsa (False), a sequência de instruções não será executada.

Exemplo

1 x = int(input("Digite um valor inteiro: "))2 if x % 2 == 0:3 print("O valor ",x," é par")4 print("Fim do programa")

Saída:

>>>Digite um valor inteiro: 3Fim do programa>>> ======================================>>>Digite um valor inteiro: 4O valor 4 é parFim do programa>>>

ExercícioDado o valor da nota de um aluno, monte o comando if que verifica se ele

precisará fazer a sub. O aluno deverá fazer sub se sua nota for maior ou iguala 30 e menor do que 60.

1 x = int(input("Digite a nota de um aluno: "))2 if x < 60 and x >= 30:3 print("O aluno terá de fazer a sub")4 print("Fim do programa")

60

Page 61: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Saída:

Digite a nota de um aluno: 45O aluno terá de fazer a subFim do programa>>>===============================Digite a nota de um aluno: 60Fim do programa>>>===============================Digite a nota de um aluno: 25Fim do programa>>>

11.3 O comando else

• O comando else pode ser entendido como um complemento do comandoif:

– Se no if tratamos a situação em que a condição é verdadeira, noelse podemos definir o que ocorrerá quando a condição for falsa.

• Forma geral:

1 if condição:2 instrução 13 ...

61

Page 62: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

4 instrução n5 else:6 instrução 17 ...8 instrução n9

10 continuação do programa

• A expressão da condição será avaliada:

– Se a condição for verdadeira (True), a sequência de instruções do ifserá executada;

– Se ela for falsa (False), a sequência de instruções do else será exe-cutada.

• Note que quando usamos a estrutura if-else, somente uma das duasdeclarações será executada.

– O comando else não tem condição, pois esta é definida no if.

Exemplo

1 x = int(input("Digite um valor inteiro: "))2 if x % 2 == 0:3 print("O valor ",x," é par")4 else:5 print("O valor ",x," é ímpar")6

7 print("Fim do programa")

Saída:>>>Digite um valor inteiro: 5O valor 5 é ímparFim do programa>>> ======================================>>>Digite um valor inteiro: 6O valor 6 é parFim do programa>>>

62

Page 63: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

63

Page 64: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

E se o problema envolvendo mais de 2 caminhos possíveis? (ex.: saber se umnúmero é maior, menor ou igual a zero)

11.4 Aninhamento de if

• Um if aninhado é simplesmente um if dentro da declaração de um outroif (ou else) mais externo.

– Essa estrutura é apenas uma extensão da estrutura if-else.

• O único cuidado que devemos ter é o de saber exatamente a qual if umdeterminado else está ligado.

Formas gerais:

if condição 1:instrução 1...instrução n

else:if condição 2:

instrução 1...instrução n

else:instrução 1...instrução n

continuação do programa

if condição 1:if condição 2:

instrução 1...instrução n

else:instrução 1...instrução n

else:instrução 1...instrução n

continuação do programa

64

Page 65: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• O programa começa a testar as condições começando pela primeira e con-tinua a testar até achar uma expressão cujo resultado seja verdadeiro.Neste caso:

– Executa a sequência de comandos correspondente;

– Só uma sequência de comandos será executada;

– A última sequência de comandos (default) é a que será executada nocaso de todas as condições forem falsas e é opcional.

if condição 1:instrução 1...instrução n

else:if condição 2:

instrução 1...instrução n

else:instrução 1...instrução n

continuação do programa

Exemplo

1 x = int(input("Digite um valor inteiro: "))2 if x == 0:3 print("O valor ",x," é igual a zero")4 else:5 if x > 0:6 print("O valor ", x," é positivo")7 else:8 print("O valor ", x," é negativo")9

10 print("Fim do programa")

Digite um valor inteiro: 0O valor 0 é igual a zeroFim do programa>>> ======================================>>>Digite um valor inteiro: -1O valor -1 é negativo

65

Page 66: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Fim do programa>>> ======================================>>>Digite um valor inteiro: 2O valor 2 é positivoFim do programa

Exemplo (versão 2)

1 x = int(input("Digite um valor inteiro: "))2 if x != 0:3 if x > 0:4 print("O valor ", x," é positivo")5 else:6 print("O valor ", x," é negativo")7 else:8 print("O valor ",x," é igual a zero")9

10 print("Fim do programa")

Digite um valor inteiro: 0O valor 0 é igual a zeroFim do programa>>> ======================================>>>Digite um valor inteiro: -1O valor -1 é negativoFim do programa>>> ======================================>>>Digite um valor inteiro: 2O valor 2 é positivoFim do programa

66

Page 67: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

AtençãoNão existe aninhamento de else:

Para cada else deve existir um if anterior associado (embora if possa serdefinido sem else)

Errado:

if condição 1:instrução 1...instrução n

else:instrução 1...instrução n

else: # errado!instrução 1...instrução n

ExercícioDado o valor da nota de um aluno, monte um conjunto de if e else que

verifica se ele foi aprovado (nota maior ou igual a 60), reprovado (nota menorque 30) ou deverá fazer a sub. O aluno deverá fazer sub se sua nota for maiorou igual a 30 e menor do que 60.

1 x = int(input("Digite a nota de um aluno: "))2 if x >= 60:3 print("O aluno está aprovado")

67

Page 68: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

4 else:5 if x < 30:6 print("O aluno está reprovado")7 else:8 print("O aluno terá de fazer a sub")9

10 print("Fim do programa")

Saída:Digite a nota de um aluno: 78O aluno está aprovadoFim do programa>>>===============================Digite a nota de um aluno: 43O aluno terá de fazer a subFim do programa>>>===============================Digite a nota de um aluno: 22O aluno está reprovadoFim do programa>>>

11.5 O comando elif

O comando elif é uma simplificação do aninhamento de um if dentro deum else.

• Sem elif:if condição 1:

instrução 1...instrução n

else:if condição 2:

instrução 1...instrução n

else:instrução 1...instrução n

continuação do programa

68

Page 69: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Com elif:if condição 1:

instrução 1...instrução n

elif condição 2:instrução 1...instrução n

else:instrução 1...instrução n

continuação do programa

ExemploReescrevendo o exemplo anterior com elif:

1 x = int(input("Digite um valor inteiro: "))2 if x == 0:3 print("O valor ",x," é igual a zero")4 elif x > 0:5 print("O valor ", x," é positivo")6 else:7 print("O valor ", x," é negativo")8

9 print("Fim do programa")

69

Page 70: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

11.6 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• MENEZES, N.N.C. Introdução à Programação com Python: algoritmos elógica de programação para iniciantes. São Paulo: Novatec, 2010.

12 Comandos de repetição

12.1 IntroduçãoO real poder dos computadores está na sua habilidade em repetir uma operação,ou uma série de operações, muitas vezes.

As repetições – ou loops (laços) – são um dos conceitos básicos da progra-mação estruturada.

Estrutura de repetiçãoUtilização: trecho de um algoritmo precisa ser executado mais de uma vez:

• O número de repetições está atrelado a uma condição:

– A condição de teste é verificada ao início de cada iteração;

– Sempre que a condição de teste for verdadeira (True), os comandossão executados.

– Ao final, o fluxo é desviado para o início da estrutura, para um novoteste da condição inicial.

70

Page 71: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Condição

• Qualquer expressão que resulte em um valor do tipo lógico e pode envolveroperadores aritméticos, lógicos, relacionais e resultados de funções.

• Exs.:

– x>5

– (N < 60)and (N > 35)

12.2 Comando while

• Repete, no Python, uma sequência de comandos enquanto uma determi-nada condição for verdadeira.

• Forma geral:

1 while condição:2 instrução 13 instrução 24 ...5 instrução n6

7 continuação do programa

Exemplo

1 a = int(input("Digite o valor de a:"))2 b = int(input("Digite o valor de b:"))3 while a <= b:4 print(a)5 a = a+16

7 print("Fim do programa")

Exemplo de saída:

Digite o valor de a:2Digite o valor de b:52345Fim do programa

71

Page 72: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

>>>

Loop infinito

• Um loop ou laço infinito ocorre quando cometemos algum erro:

– Ao especificar a condição lógica que controla a repetição;

– Ou por esquecer de algum comando dentro da repetição.

ExemploQual o problema no uso do while abaixo?

1 x = 102 while x < 20:3 print("valor = ", x)4 x = x-15

6 print("Fim do programa")

ExercícioEscreva, usando while, um programa para calcular a média de N valores.

1 N = int(input("Digite o valor de N:"))2 media = 03 total = 0

72

Page 73: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

4 while total < N:5 x = int(input("Digite o valor de x:"))6 media = media + x7 total = total + 18 media = media/N9 print("media = ", media)

Saída:Digite o valor de N:4Digite o valor de x:2Digite o valor de x:1Digite o valor de x:4Digite o valor de x:3media = 2.5>>>

12.3 Comando for

• O loop ou laço for é usado para repetir um conjunto de instruções parauma lista de valores.

– O número de iterações da repetição está limitado pelo tamanho dalista de valores

• Forma geral:

1 for variável in lista -de-valores:2 instrução 13 instrução 24 ...5 instrução n6

7 continuação do programa

Exemplo

1 import math2 for x in [1,2,3,4,5]:3 print("A raíz de ", x, " é ", math.sqrt(x))

73

Page 74: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Saída:

A raíz de 1 é 1.0A raíz de 2 é 1.4142135623730951A raíz de 3 é 1.7320508075688772A raíz de 4 é 2.0A raíz de 5 é 2.23606797749979>>>

Exemplo 2

1 compras = ["Cimento","Areia","Tijolo","Argamassa"]2 print("Lista de compras - obra")3 for item in compras:4 print("Produto: ", item)

Saída:

Lista de compras - obraProduto: CimentoProduto: AreiaProduto: TijoloProduto: Argamassa>>>

A função range()

• A função range() permite gerar sequências de valores em progressão arit-mética.

– Muito útil para gerar as listas de valores para o comando for

• Formas de uso:

– range(N): gera valores inteiros de 0 até N − 1

– range(I,N): gera valores inteiros de I até N − 1

– range(I,N,D): gera os valores inteiros I, I+D, I+2D, . . . , inferioresa N .

Note que o último valor das sequências é sempre desconsiderado.

74

Page 75: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Exemplos

1 #Gerar valores: 0, 1, 2, 3, 42 for x in range (5):3 print("Valor = ", x)4

5 #Gerar valores: 1, 2, 3, 4, 5, 6, 7, 8, 96 for x in range (1,10):7 print("Valor = ", x)8

9 #Tabuada do 510 for x in range (5,51,5):11 print("Valor = ", x) # 5, 10, ..., 45, 5012

13 #Contagem regressiva14 for x in range(10,-1,-1):15 print("Valor = ", x)

Reescrevendo o exemplo visto do comando while(todos os números entre dois valores a e b – inclusive – digitados pelo usuá-

rio):

1 a = int(input("Digite o valor de a:"))2 b = int(input("Digite o valor de b:"))3 for x in range(a,b+1):4 print(x)5

6 print("Fim do programa")

Diferença entre while e for

• Comando while:

Repete uma sequência de comandos enquanto uma condição for verdadeira

• Comando for:

Repete uma sequência de comandos “N vezes” ou “para N valores”

Atenção

• Podemos sempre reescrever um comando for com while;

• Nem sempre podemos reescrever um comando while como um for.

75

Page 76: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

ExercícioEscreva um programa para calcular o fatorial de um inteiro N .Tente fazer usando for e while

Fatorial de N

• Se N > 0: N × (N − 1)× (N − 2)× · · · × 1

• Se N = 0: 1

• Comando while:

1 N = int(input("Digite o valor de N: "))2 fat = 13 i = 14 while i <= N:5 fat = fat*i6 i = i+17 print("O fatorial de ", N, " é ", fat)

• Comando for:

1 N = int(input("Digite o valor de N: "))2 fat = 13 for i in range(1,N+1):4 fat = fat*i5 print("O fatorial de ", N, " é ", fat)

12.4 Comando break

• O comando break serve para interromper a execução de um comando derepetição (for ou while)

• O break faz com que a execução do programa continue na primeira linhaseguinte ao loop ou bloco de comandos que está sendo interrompido.

O comando break sempre deve estar dentro do bloco de um comando derepetição.

76

Page 77: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Exemplo

1 a = int(input("Digite o valor de A:"))2 b = int(input("Digite o valor de B:"))3 while a < b:4 a = a+15 if a == 5:6 break7 print("Valor = ", a)8

9 print("Fim do programa")

Exemplo de saída:

Digite o valor de A:1Digite o valor de B:10Valor = 2Valor = 3Valor = 4Fim do programa>>>

12.5 Comando continue

• O comando continue serve apenas para interromper a iteração atual deum comando de repetição (for ou while)

77

Page 78: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Os comandos que sucedem o comando continue dentro do laço são igno-rados, para esta iteração.

• O programa salta para o início do bloco de repetição.

Assim como no comando break, o comando continue sempre deve estardentro do bloco de um comando de repetição.

Exemplo

1 a = int(input("Digite o valor de A:"))2 b = int(input("Digite o valor de B:"))3 while a < b:4 a = a+15 if a == 5:6 continue7 print("Valor = ", a)8

9 print("Fim do programa")

Exemplo de saída:

Digite o valor de A:1Digite o valor de B:10Valor = 2Valor = 3Valor = 4Valor = 6Valor = 7Valor = 8Valor = 9Valor = 10Fim do programa>>>

78

Page 79: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

12.6 Aninhamento de comandos de repetição

É possível aninhar comandos de repetição, um dentro de outro.

Exemplo: matriz identidade de tamanho 4.

1 for i in range (1,5):2 for j in range (1,5):3 if i==j:4 print("1", end=" ")5 else:6 print("0", end=" ")7 print()

Mesmo exemplo, usando comando while:

1 i = 12 while i<5:3 j = 14 while j<5:5 if i==j:6 print("1", end=" ")7 else:8 print("0", end=" ")9 j = j+1

10 print()11 i = i+1

79

Page 80: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

ObservaçãoÉ possível o emprego de diferentes combinações comandos de repetição em ani-nhamentos.

12.7 Exercícios sugeridos1. Usando estruturas de repetição, escreva um programa que receba, para 3

alunos, 2 notas. Deve-se calcular a média aritmética destas duas notas,para cada aluno, além de mostrar a mensagem:

• “Reprovado”, se média for menor que 3;• “Exame”, se média estiver entre 3 e 7;• “Aprovado”, se média for maior ou igual a 7.

2. Escreva um programa que receba um número inteiro maior que 1, verifiquee escreva se o número é primo ou não. Dica: utilize o resto da divisão deinteiros (operador %).

3. Escreva um programa que calcule a área de um triângulo, dada sua basee altura. Use while para repetir as leituras das medidas, de maneira quea área somente seja calculada quando ambas forem válidas (valores reaismaiores que 0).

4. Escreva um programa que mostre os N primeiros números da sequência deFibonacci, sendo os dois primeiros valores, f(1) = 0, e f(2) = 1, e termogeral F (i) = F (i− 1)+F (i− 2), i = 2, . . . , N . O usuário deve entrar como valor N .

5. Faça um programa que mostre as tabuadas dos números 1 a 10, usandoestruturas de repetição aninhadas.

12.8 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• SILVA, R.A.P. Notas de aula de Algoritmos e Programação de Computa-dores.

13 Listas, tuplas e dicionários

13.1 ListasPor que usar listas?

As variáveis declaradas até agora são capazes de armazenar um único valorpor vez.

• Sempre que tentamos armazenar um novo valor dentro de uma variável, ovalor antigo é sobrescrito e, portanto, perdido.

80

Page 81: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1 >>> x=102 >>> x3 104 >>> x=205 >>> x6 207 >>>

Lista

• A lista é a forma mais comum de dados estruturados.

• Basicamente, uma lista é uma sequência de elementos, onde cada elementoé identificado por um índice.

No PythonDiferente dos arrays, usados em outras linguagens de programação, em Pythonos elementos de uma lista podem possuir qualquer tipo.

ProblemaImagine o seguinte problema:

• leia as notas de uma turma de 5 estudantes, e depois imprima as notasque são maiores do que a média da turma.

Um algoritmo para esse problema poderia ser o que segue:

1 n1 = float(input("Digite a nota do aluno 1: "))2 n2 = float(input("Digite a nota do aluno 2: "))3 n3 = float(input("Digite a nota do aluno 3: "))4 n4 = float(input("Digite a nota do aluno 4: "))5 n5 = float(input("Digite a nota do aluno 5: "))6

7 media = (n1+n2+n3+n4+n5)/58

9 if n1 > media:10 print("Aprovado: ", n1)11 if n2 > media:12 print("Aprovado: ", n2)13 if n3 > media:14 print("Aprovado: ", n3)15 if n4 > media:16 print("Aprovado: ", n4)17 if n5 > media:18 print("Aprovado: ", n5)

81

Page 82: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• O algoritmo anterior apresenta uma solução possível para o problema apre-sentado.

• Porém, essa solução é inviável para grandes quantidades de alunos:

– Imagine se tivéssemos de processar os dados de 100 alunos.

Para 100 alunos, precisamos de:

• Uma variável para armazenar a nota de cada aluno: 100 variáveis;

• Um comando de leitura para cada nota: 100 input();

• Um somatório de 100 notas;

• Um comando de teste para cada aluno: 100 comandos if;

• Um comando de impressão na tela para cada aluno: 100 print().

Lista

• As variáveis têm relação entre si:

– todas armazenam notas de alunos.

• Podemos declará-las usando um único nome para todos os 100 alunos:

– notas = conjunto de 100 números acessados por um índice.

Isto é uma lista

0 1 . . . 99

notas

Listas – declaração

Existem várias maneiras de criar uma lista:

• Uma das mais simples é definir os elementos da lista entre colchetes

– Os elementos da lista devem ser separados por vírgulas– Se nenhum elemento for definido, temos uma lista vazia

• Também podemos usar a função range() para gerar uma lista de valores.

1 >>> compras = ["Cimento","Areia","Tijolo","Argamassa"]2 >>> compras3 ['Cimento ', 'Areia ', 'Tijolo ', 'Argamassa ']4 >>> compras = []5 >>> compras6 []7 >>> list(range (5))8 [0, 1, 2, 3, 4]9 >>>

82

Page 83: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Índices

Em uma lista, os elementos são acessados especificando o índice desejadoentre colchetes. A numeração começa sempre do zero.

• Isto significa, por exemplo que uma lista de 4 elementos terá índices de 0a 3:

compras[0], compras[1], compras[2] e compras[3].

• A função len() retorna o número de elementos da lista.

1 >>> compras = ["Cimento","Areia","Tijolo","Argamassa"]2 >>> compras [0]3 'Cimento '4 >>> compras [1]5 'Areia '6 >>> len(compras)7 4

Elementos da lista

• Cada elemento da lista tem todas as características de uma variável e podeaparecer em expressões e atribuições (respeitando os seus tipos):

– notas[2] = x + notas[3]

– if notas[3] > 60:

• Exemplo: somar todos os elementos de uma lista de valores:

1 lista= [3,5,10,2,4]2 soma = 03 for x in lista:4 soma = soma+x5

6 print("Soma = ", soma)

Percorrendo a lista

Podemos usar um comando de repetição (preferencialmente for) para per-correr a lista de 2 formas:

• Forma 1 – percorrendo os índices e elementos:

83

Page 84: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1 compras = ["Cimento","Areia","Tijolo","Argamassa"]2 for i in range(len(compras)):3 print(i, compras[i])

Saída:0 Cimento1 Areia2 Tijolo3 Argamassa>>>

• Forma 2 – percorrendo apenas os elementos – o que evita manipular osíndices explicitamente:

1 compras = ["Cimento","Areia","Tijolo","Argamassa"]2 for x in compras:3 print(x)

Saída:CimentoAreiaTijoloArgamassa>>>

Lista – ProblemaDe volta ao problema anterior:

• leia as notas de uma turma de 5 estudantes, e depois imprima as notasque são maiores do que a média da turma.

Um algoritmo para tal problema usando listas:

1 n = 52 notas = []3 for i in range(1,n+1):4 x = float(input("Digite a nota do aluno: "))5 notas.append(x)6

7 media = 0.08 for n1 in notas:9 media = media + n1

10 media = media/n11

12 for n1 in notas:13 if n1 > media:14 print("Aprovado: ", n1)

84

Page 85: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• E se for 100 alunos ao invés de 5?

• Basta iniciar o código anterior com a linha

n = 100

ExercícioPara uma lista contendo 5 números inteiros, formular um algoritmo que

determine o maior elemento desta lista

1 lista = [3, 5, 10, 2, 4]2 ma = lista [0]3 for x in lista:4 if ma < x:5 ma = x6

7 print("Maior = ", ma)

SublistasAs listas suportam acesso as sublistas, isto é, a certos conjuntos de índices:

• lista[i:j] – seleciona a sublista dos índices i até j − 1

• lista[i:] – seleciona a sublista dos índices i até o final (seu último ele-mento)

• lista[:j] – seleciona a sublista do primeiro elemento até o de índice j−1

• lista[i:j:k] – seleciona a sublista dos índices i até j − 1, de k em kelementos: i, i+ k, i+ 2k, . . . , j − 1.

>>> nros = [10 ,20 ,30 ,40 ,50]>>> nros [2:4][30, 40]>>> nros [2:][30, 40, 50]>>> nros [:3][10, 20, 30]>>> nros [:][10, 20, 30, 40, 50]>>> nros [0:5:2][10, 30, 50]>>> nros [4:0: -1][50, 40, 30, 20]>>>

85

Page 86: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Alteração dos elementos na lista

• É possível acessar qualquer elemento, ou sequência de elementos, e modificá-los.

• Os elementos de uma lista podem possuir tipos diferentes.

>>> lista = [1,2,3]>>> lista [0] = "texto">>> lista['texto', 2, 3]>>> lista [2:4] = [10, 20, 30]>>> lista['texto', 2, 10, 20, 30]>>>

Unpacking

Podemos também associar o valor de cada posição da lista a uma variávelsem precisar especificar os índices usando o recurso de unpacking.

• Basta definir uma lista de variáveis, entre colchetes, que receberá o con-teúdo da lista.

>>> pontos = [1, 2, 3]>>> pontos[1, 2, 3]>>> [x, y, z] = pontos>>> x1>>> y2>>> z3>>>

Concatenação e repetição

• Podemos unir/concatenar duas listas para formar uma nova usando o ope-rador +;

• Podemos criar uma lista a partir da repetição de outra usando o operadorde *.

86

Page 87: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

>>> lista1 = [1, 2, 3]>>> lista2 = [4, 5, 6]>>> lista3 = lista1 + lista2>>> lista3[1, 2, 3, 4, 5, 6]>>> lista = 3 * lista1>>> lista[1, 2, 3, 1, 2, 3, 1, 2, 3]>>>

Remoção de elementosPodemos remover um ou mais elementos de uma lista de duas maneiras:

• Usando o operador del;

• Atribuindo uma lista vazia àquela posição.

>>> lista = [1, 2, 3, 4, 5]>>> lista[1, 2, 3, 4, 5]>>> del lista [1]>>> lista[1, 3, 4, 5]>>>

>>> lista = [1, 2, 3, 4, 5]>>> lista [1:2] = []>>> lista[1, 3, 4, 5]>>> lista = []>>> lista[]>>>

Copiando uma lista

A operação de atribuição não cria uma cópia da lista!

• Diferente do que ocorre com tipos básicos (variáveis int, float, etc.)

• Em Python, listas são objetos. Se atribuirmos uma lista a outra, ambasirão se referir ao mesmo objeto.

87

Page 88: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

>>> lista = [11, 4, 8]>>> lista[11, 4, 8]>>> lista1 = lista>>> lista1[11, 4, 8]>>> id(lista)21135803>>> id(lista1)21135803

lista lista1↘ ↙

11 4 821135803

Para copiar uma lista, o correto é utilizar [:] na operação de atribuição:>>> lista = [11, 4, 8]>>> lista1 = lista [:]>>> id(lista)21135856>>> id(lista1)21135996>>>

lista11 4 821135856

lista111 4 821135996

Obs.: a função id() fornece o endereço de memória de seu parâmetro.

Busca de elementos na listaO comando in permite verificar se um determinado elemento está presente

ou não em uma lista:1 lista = [1,2,3,4,5,6]2 if 2 in lista:3 print("Valor existe na lista!")4 else:5 print("Valor não existe na lista!")

88

Page 89: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Métodos sobre listas

• Uma lista é uma classe e, portanto, possui diversos métodos já definidos:

– Um dos jeitos mais simples de manipular listas é utilizar os métodosque já fazem parte dela

• Esses métodos permitem executar diversas tarefas:

– Ordenação, inserção, remoção, etc

Forma geral de uso dos métodos:lista.nome-método()

Alguns métodos:

• sort(): ordena os elementos da lista.

• append(x): insere um elemento x no final da lista.

• insert(pos,x): insere um elemento x na posição pos.

• remove(x): remove o elemento x da lista

• pop(pos): remove e retorna o elemento da posição pos.

>>> lista = list(range (5))>>> lista[0, 1, 2, 3, 4]>>> lista.append (5)>>> lista[0, 1, 2, 3, 4, 5]>>> lista.insert (0,-1)>>> lista[-1, 0, 1, 2, 3, 4, 5]>>> lista.insert(2,"meio")>>> lista[-1, 0, 'meio', 1, 2, 3, 4, 5]

>>> lista.remove (1)>>> lista[-1, 0, 'meio', 2, 3, 4, 5]>>> lista = [33, 4, 6, -2, 1]>>> lista[33, 4, 6, -2, 1]>>> lista.sort()>>> lista[-2, 1, 4, 6, 33]>>> x = lista.pop(2)>>> x4>>> lista[-2, 1, 6, 33]

89

Page 90: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Aninhamento de listasVimos que uma lista pode conter qualquer tipo de dados – inclusive dados

de tipos diferentes entre si.

• Em particular, as listas podem inclusive conter outras listas.

• Podemos assim representar tabelas ou matrizes

0 1 2 . . . 490 21121. . .

99

Para criar uma lista aninhada, basta definir cada elemento da mesma comouma nova lista:

• Os elementos são acessados especificando-se um par de colchetes e índicepara cada dimensão da lista.

• A numeração começa sempre do zero.

>>> matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> matriz[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> matriz [0][1]2>>> matriz [0][1, 2, 3]>>> matriz [0][1] = "oi">>> matriz[[1, 'oi', 3], [4, 5, 6], [7, 8, 9]]

0 1 20 1 ’oi’ 31 4 5 62 7 8 9

Podemos também incluir novas linhas e colunas em cada lista.

• Recomenda-se, neste caso, usar os métodos ao invés do operador de con-catenação.

• Nas listas aninhadas, não é necessário que as linhas tenham sempre omesmo número de colunas.

90

Page 91: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

1 >>> matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]2 >>> matriz.append ([10 ,11 ,12])3 >>> matriz4 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]5 >>>

Podemos remover um ou mais elementos de uma lista aninhada de maneirasimilar às listas tradicionais:

• 1 índice: a linha inteira é removida;

• 2 índices: o elemento da linha e coluna é removido.

1 >>> matriz2 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]3 >>> del matriz [0][0]4 >>> matriz5 [[2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]6 >>> del matriz [1]7 >>> matriz8 [[2, 3], [7, 8, 9], [10, 11, 12]]9 >>>

Todas as operações em listas aninhadas devem considerar o fato de que setem uma lista dentro de outra:

1 # impressão2 matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]3 for linha in matriz:4 for elem in linha:5 print(elem)6

7 # soma8 soma = 09 for linha in matriz:

10 for elem in linha:11 soma += elem # equivale a soma = soma + elem12

13 print("Soma = ", soma)

List comprehensionTrata-se de uma construção sintática para criação de listas:

• Segue a forma da notação de definição de conjunto matemática.

• É uma maneira de fazer caber uma repetição (for), uma condição (if) euma tarefa, em uma única linha;

• Permite mapear e filtrar uma lista em uma única expressão.

91

Page 92: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Por exemplo, para criarmos uma lista com os quadrados de alguns números,da forma tradicional o código ficaria como segue:

1 quadrados = []2 for x in range (10):3 quadrados.append(x**2)

Usando o list comprehension:1 >>> quadrados = [x**2 for x in range (10)]2 >>> quadrados3 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]4 >>>

Outro exemplo de uso: imagine agora que queremos filtrar os elementos deuma lista já existente:

• Sem list comprehension:1 numeros = [1, 2, 3, 4, 5]2 menores = []3 for n in numeros:4 if n < 4:5 menores.append(n)

• Com list comprehension:1 >>> numeros = [1, 2, 3, 4, 5]2 >>> menores = [n for n in numeros if n < 4]3 >>> menores4 [1, 2, 3]5 >>>

Combinando as tarefas de criação e filtragem:1 >>> numeros = [1, 2, 3, 4, 5]2 >>> quadrados = [n**2 for n in numeros if n < 4]3 >>> print(quadrados)4 [1, 4, 9]5 >>>

13.2 Tuplas

As tuplas se comportam como as listas:

• São uma sequência arbitrária de elementos;

92

Page 93: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Cada elemento pode ser acessado por um índice inteiro;

• Diferem das listas por serem definidas utilizando parênteses e não colche-tes.

1 >>> aluno = ("Ricardo", 1.74, 33)2 >>> aluno [0]3 'Ricardo '4 >>> aluno [1]5 1.746 >>> aluno [2]7 338 >>>

A principal diferença, entretanto, é que os elementos da tupla são imutáveis,isto é, não podem ser alterados.

1 >>> aluno = ("Ricardo", 1.74, 33)2 >>> aluno3 ('Ricardo ', 1.74, 33)4 >>> aluno [0] = "Alexandre"5 Traceback (most recent call last):6 File "<pyshell #19>", line 1, in <module >7 aluno [0] = "Alexandre"8 TypeError: 'tuple ' object does not support item assignment

Inicializando uma tuplaUm problema com a construção de uma tupla é quando ela tem zero ou um

elemento:

• Tuplas vazias são definidas por um par de parênteses vazio;

• Tuplas com 1 elemento devem possuir uma vírgula depois do elementopara serem consideradas tuplas.

1 >>> tupla = ()2 >>> type(tupla)3 <class 'tuple'>4 >>> tupla = (1)5 >>> type(tupla)6 <class 'int'>7 >>> tupla = (1,)8 >>> type(tupla)9 <class 'tuple'>

10 >>>

93

Page 94: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Acessando os elementos da tupla

Como nas listas, nas tuplas também podemos associar o valor de cada posiçãoa uma variável sem precisar especificar os índices usando o recurso de unpacking :

• Basta definir uma lista de variáveis, entre parênteses, que receberá o con-teúdo da tupla

1 >>> aluno = ("Ricardo", 1.74, 33)2 >>> (nome , altura , idade) = aluno3 >>> nome4 'Ricardo '5 >>> altura6 1.747 >>> idade8 339 >>>

TuplasPor que usar tuplas?

• Apesar de listas e tuplas serem semelhantes, elas são normalmente utili-zadas com propósitos diferentes.

• Tuplas são imutáveis e normalmente contém elementos de tipos diferentesque são acessados via unpacking ou indexação.

• Listas são mutáveis e normalmente contém elementos do mesmo tipo quesão acessados via iteração.

13.3 Dicionários

Dicionários são estruturas de dados que implementam associações entre pa-res de valores.

• O primeiro elemento do par é chamado de chave e o outro de conteúdo;

• Cada chave é associada a um (e somente um) conteúdo.

Exemplo: inventário (associa produtos a quantidades disponíveis)

• Macarrão: 10

• Ovo: 12

• Leite: 2

94

Page 95: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Pão: 5

Esse problema poderia ser representado por uma lista de tuplas. Porém,dicionários permitem busca indexada pela chave.

Não é necessário percorrer a lista procurando um item.

Forma geral:dicionario = { chave1:conteúdo1, ..., chaveN:conteúdoN }Exemplos:

• Dicionário inglês-português (note que as chaves do dicionário não são ar-mazenadas em qualquer ordem específica).

1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic3 {'um': 'one', 'dois': 'two', 'três': 'three'}4 >>>

• Dicionário vazio:

1 >>> dic = {}2 >>> dic3 {}4 >>>

Acesso a elementos

Cada elemento no dicionário é acessado por indexação usando a chave, entrecolchetes.

• Podemos, por exemplo, alterar o conteúdo associado a uma chave.

1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic3 {'um': 'one', 'dois': 'two', 'três': 'three '}4 >>> dic["dois"]5 'two'6 >>> dic["dois"]=27 >>> dic8 {'um': 'one', 'dois': 2, 'três': 'three '}9 >>> dic["quatro"] = "four"

10 >>> dic11 {'um': 'one', 'dois': 2, 'três': 'three ', 'quatro ': 'four'}12 >>>

95

Page 96: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Métodos sobre dicionários

• Um dicionário é uma classe e, portanto, possui diversos métodos (funçõespróprias) já pré-definidos.

• Um dos jeitos mais simples de manipular dicionários é através do uso detais métodos.

• Forma geral de uso dos métodos:

dicionário.nome-método()

Alguns métodos:

• clear(): remove todos os elementos do dicionário.1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic.clear()3 >>> dic4 {}

• copy(): cria uma cópia do dicionário (atribuição não cria cópia, comovisto para listas)

1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic1 = dic3 >>> dic2 = dic.copy()4 >>> id(dic)5 21121381910646 >>> id(dic1)7 21121381910648 >>> id(dic2)9 2112138533120

• get(chave,valor): obtém o conteúdo de uma chave. Caso a chave nãoexista, retorna o que está sendo definido em valor.

1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic.get('um' ,0)3 'one'4 >>> dic.get('quatro ' ,0)5 06 >>>

• items(): retorna uma lista com todos os pares chave/conteúdo do dicio-nário.

• keys(): retorna uma lista com todas as chaves do dicionário.

96

Page 97: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• values(): retorna uma lista com todos os valores do dicionário.1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic.items()3 dict_items ([('um', 'one'), ('dois', 'two'), ('três', 'three ')

])4 >>> dic.keys()5 dict_keys (['um', 'dois', 'três'])6 >>> dic.values ()7 dict_values (['one', 'two', 'three '])8 >>> lista = list(dic.keys())9 >>> lista

10 ['um', 'dois', 'três']

• pop(chave): obtém o valor correspondente à chave, e remove o par cha-ve/valor do dicionário.

• popitem(): retorna e remove um par chave/valor aleatório do dicionário.Pode ser usado para iterar sobre todos os elementos do dicionário, porexemplo.

1 >>> dic = {"um":"one", "dois":"two", "três":"three"}2 >>> dic.pop("um")3 'one'4 >>> dic.popitem ()5 ('três', 'three ')6 >>> dic7 {'dois': 'two'}8 >>>

13.4 Exercícios sugeridos1. Faça um programa que leia duas listas e que gere uma terceira com os

elementos das duas primeiras.

2. Faça um programa que percorra duas listas e gere uma terceira sem ele-mentos repetidos.

13.5 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• MENEZES, N.N.C. Introdução à Programação com Python: algoritmos elógica de programação para iniciantes. São Paulo: Novatec, 2010.

97

Page 98: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

14 Strings – cadeias de caracteres

14.1 IntroduçãoDefinição

• Sequência de caracteres4 adjacentes na memória;

• Permite representar palavras ou frases dentro do computador

• Em outras palavras, strings são listas. A diferença é que cada posição dalista contém um único caractere. Outra diferença: strings são imutáveis.

• O tipo de uma string é a classe str.

• Na inicialização de uma string podemos usar aspas duplas – “ ” – ou aspassimples – ’ ’.

>>> txt = "Python">>> type(txt)<class 'str'>>>> txt = 'Python '>>> print(txt)Python>>> type(txt)<class 'str'>>>> len(txt)6

Mais de uma linha

• Podemos utilizar 3 aspas simples na inicialização de uma string. Nestecaso, será possível criar uma string contendo mais de uma linha;

• As quebras de linha também serão armazenadas dentro da string.

>>> txt = '''UniversidadeFederal deUberlândia '''>>> print(txt)UniversidadeFederal deUberlândia

4Símbolos como letras, números, sinais de pontuação etc.

98

Page 99: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

14.2 Elementos – caracteresAcesso aos elementos da string

• Podemos tratar uma string como uma entidade única;

• Mas também podemos acessar seus caracteres individualmente usando col-chetes e o índice da posição.

>>> texto = 'Python '>>> texto [0]'P'>>> texto [1]'y'>>> texto [5]'n'

0 1 2 3 4 5P y t h o n

texto

Tamanho da string

• A função len() retorna o tamanho de uma string.

• Os índices da string vão de zero até o tamanho−1.

>>> texto = 'Python '>>> len(texto)6>>> texto [6]Traceback (most recent call last):

File "<pyshell \#14>", line 1, in <module >texto [6]

0 1 2 3 4 5P y t h o n

texto

99

Page 100: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Índices negativos

• Também se pode utilizar índices negativos para acessar os caracteres deuma string ;

• Neste caso, a contagem começa do último caractere.

>>> texto = 'Python '>>> texto [5]'n'>>> texto[-1]'n'>>> texto[-2]'o'>>> texto[-6]'P'

0 1 2 3 4 5P y t h o n-6 -5 -4 -3 -2 -1

Substrings ou subcadeias de caracteresComo visto para listas, strings suportam acesso às substrings – subcadeias

de caracteres.

• txt[i:j] – seleciona a subcadeia dos índices i até j − 1

• txt[i:] – seleciona a subcadeia dos índices i até o final (seu último ele-mento)

• txt[:j] – seleciona a subcadeia do primeiro elemento até o de índice j−1

• txt[i:j:k] – seleciona a subcadeia dos índices i até j − 1, de k em kelementos: i, i+ k, i+ 2k, . . . , j − 1.

Exemplo: selecionando sub-strings ou sub-cadeias de caracteres.

>>> ufu = "Universidade Federal de Uberlândia">>> ufu [13:20]'Federal '>>> ufu [13:]'Federal de Uberlândia'>>> ufu [:20]'Universidade Federal '>>> ufu [0:20:2]'Uiesdd eea'>>>

100

Page 101: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Percorrendo uma string

Podemos percorrer a string de 2 formas:

• Forma 1 – usando um laço sobre os índices:

1 texto = "Python"2

3 for i in range(len(texto)):4 print(texto[i])

Saída:Python>>>

• Forma 2 – usando um laço sobre a sequência – o que evita manipular osíndices explicitamente:

1 texto = "Python"2

3 for letra in texto:4 print(letra)

Saída:Python>>>

14.3 Operações com strings

Alterando o conteúdo das strings

• Strings são imutáveis: podemos acessar os caracteres individualmente deuma string, mas não podemos modificá-los.

101

Page 102: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

>>> texto = "UFU">>> texto'UFU'>>> texto [2] = "O"Traceback (most recent call last):

File "<pyshell#2>", line 1, in <module >texto [2] = "O"

TypeError: 'str' object does not support itemassignment

>>>

Concatenação de strings

• Não podemos modificar os caracteres diretamente, todavia podemos cons-truir uma outra string via concatenação.

>>> texto = "Teste">>> texto [0] = "L"Traceback (most recent call last):

File "<pyshell#4>", line 1, in <module >texto [0] = "L"

TypeError: 'str' object does not support item assignment>>>>>> texto = "L" + texto [1:]>>> texto'Leste '>>>

Podemos unir/concatenar duas strings para formar uma nova de duas ma-neiras:

• Usando o operador de soma +

• Separando as strings por vírgula no momento da impressão (um espaçoserá automaticamente inserido entre elas)

>>> texto = "Python">>> texto = "Linguagem " + texto>>> texto'Linguagem Python '>>>

>>> texto = "Python">>> print("Linguagem", texto)Linguagem Python>>>

102

Page 103: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Há ainda a concatenação por repetição:

• Usando o operador de multiplicação *

>>> texto = 4*"ABC">>> texto'ABCABCABCABC '>>> print("UFU" + 10*"-" + "Uberlândia")UFU ----------Uberlândia>>>

Sequências de escapeTambém chamados de códigos de barra invertida, permitem o envio de ca-

racteres de controle não gráficos para dispositivos de saída (como a tela)

Código Comando\n nova linha\t tabulação\' aspas simples\" aspas duplas\\ barra invertida

>>> print("Linguagem\nPython")LinguagemPython>>> print("Linguagem\tPython")Linguagem Python>>> print("Linguagem \\ Python")Linguagem\Python>>>

As sequências de escape são executadas sempre que uma barra invertida éencontrada

• Para evitar que as sequências de escape funcionem, basta definir a stringcomo uma raw string

• Para isto basta preceder a string com r ou R.

>>> print("Linguagem \\ Python")Linguagem \ Python>>> print(r"Linguagem \\ Python")Linguagem \\ Python>>>

103

Page 104: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Formatação de strings

• Também é possível realizar a formatação de string utilizando o operador%

• Forma geral:

string-a-ser-formatada % (lista-de-valores)

• Todo conteúdo da string antes de % é substituído por um valor depois domesmo (entre parênteses)

str = "O reajuste foi de %d %% e a inflação foi de %.2f %%" % (10, 6.5)

>>> str'O reajuste foi de 10 % e a inflação foi de 6.50 %'

Na string da esquerda, o conjunto de caracteres depois do % define o tipo deformatação a ser executada.

Código Formatação%c caractere%s string%d inteiro%u inteiro sem sinal%f reais (ponto flutuante)%.Nf reais com N casas decimais%% simbolo %

str = "O reajuste foi de %d %% e a inflação foi de %.2f %%" % (10, 6.5)

>>> str'O reajuste foi de 10 % e a inflação foi de 6.50 %'

Busca em strings: in

• Podemos procurar uma string menor dentro de uma string maior.

– Ex.: palavra dentro de uma frase.

• Para isso, basta utilizar o operador in.

• Forma geral:

string1 in string2

104

Page 105: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• O resultado será True se a string1 existir dentro da string2, e False,caso contrário.

• As escritas devem ser exatamente iguais, como exemplificado a seguir:

Exemplo:

1 texto = "Universidade Federal de Uberlândia"2

3 if "Federal" in texto:4 print("Sequência encontrada")5 else:6 print("Sequência não encontrada")7

8 if "federal" in texto:9 print("Sequência encontrada")

10 else:11 print("Sequência não encontrada")

Saída:Sequência encontradaSequência não encontrada

Busca em strings: find()

• Semelhante ao in, procura uma string menor dentro de uma string maior.Porém, fornece a posição (índice) da primeira ocorrência.

• Forma geral:

string2.find(string1)

O resultado será:

– o índice (posição) da primeira ocorrência de string1 em string2;ou

– -1 caso string1 não seja encontrada.

• string2.find(string1,indice-inicio)

Similar ao caso anterior, porém a busca se inicia a partir da posição indice-inicio da string, e não do início.

105

Page 106: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Exemplo:

1 >>> s = "um tigre , dois tigres , três tigres"2 >>> s.find("tigre")3 34 >>> s.find("Tigre")5 -16 >>> s.find("tigres")7 158 >>> s.find("tigres" ,7)9 15

10 >>> s.find("tigres" ,21)11 2812 >>> s.find("tigres" ,0,10) #início=0, fim=1013 -114 >>>

Note pela última instrução acima que é possível também definir uma posiçãofinal para a busca.

Exemplo 2 (pesquisa de todas as ocorrências):

1 s = "um tigre , dois tigres , três tigres"2 p=03 while (p>-1):4 p = s.find("tigre",p)5 if p>=0:6 print("Posição: %d" % p)7 p += 1 # equivale a p=p+1

Saída:Posição: 3Posição: 15Posição: 28>>>

Contagem em strings: count()

• Forma geral:

string2.count(string1)

Resultado: 0, se string1 não está em string2, ou

valor positivo, indicando a quantidade de vezes que string1 ocorre emstring2.

106

Page 107: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Exemplo:1 >>> s = "um tigre , dois tigres , três tigres"2 >>> s.count("tigre")3 34 >>> s.count("tigres")5 26 >>> s.count("Tigre")7 0

Comparando stringsTambém podemos utilizar os operadores relacionais (==, !=, <, <=, >, >=)

para comparar duas strings.

• A comparação é feita usando a ordem lexicográfica (i.e. ordem do dicio-nário)

1 nome1 = "Araraquara"2 nome2 = "Uberlândia"3

4 if nome1 < nome2:5 print(nome1 , "vem antes de", nome2)6 else:7 print(nome2 , "vem antes de", nome1)

Saída:Araraquara vem antes de Uberlândia>>>

Nas comparações, letras maiúsculas e minúsculas são consideradas diferentes:1 nome1 = "Uberlândia"2

3 if nome1 == "Uberlândia":4 print("nomes iguais")5 else:6 print("nomes diferentes")7

8 if nome1 == "UBERLÂNDIA":9 print("nomes iguais")

10 else:11 print("nomes diferentes")

Saída:nomes iguaisnomes diferentes>>>

107

Page 108: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

14.4 Métodos sobre strings

Um dos jeitos mais simples de manipular strings é utilizar os métodos quejá fazem parte da classe string, semelhante ao visto para listas.

• Tais métodos permitem executar diversas tarefas, ex.: conversão maiús-culo/minúsculo, localizar e substituir substrings, etc.

• Esses métodos nunca modificam o conteúdo original.

>>> texto = "Universidade Federal de Uberlândia">>> texto.upper()'UNIVERSIDADE FEDERAL DE UBERLÂNDIA'>>> texto'Universidade Federal de Uberlândia'>>>

• Forma geral de uso dos métodos:

string.nome-do-método()

• Alguns métodos:

– lower(): converte para minúsculas;

– upper(): converte para maiúsculas;

– replace(c1,c2): troca os caracteres c1 por c2;

– strip(): remove espaços do início e final da string, se houver;

– split(): separa uma string por espaços e devolve uma lista destrings (separa em palavras).

– split(ch): separa uma string usando o caractere ch como separador,e devolve uma lista de strings.

Alguns exemplos:

>>> texto = "Universidade Federal de Uberlândia">>> texto.lower()'universidade federal de uberlândia'>>> texto.upper()'UNIVERSIDADE FEDERAL DE UBERLÂNDIA'>>> texto.split()['Universidade ', 'Federal ', 'de', 'Uberlândia']>>> texto.split('e')['Univ', 'rsidad ', ' F', 'd', 'ral d', ' Ub', 'rlândia

']

108

Page 109: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

>>> texto.replace(' ','-')'Universidade -Federal -de-Uberlândia'>>>

14.5 Exercícios sugeridosfragile]

1. Crie um programa que leia uma string do usuário, e em seguida mostreesta string escrita na ordem inversa.

2. Faça um programa que leia uma palavra e diga se tal palavra é um palín-dromo – ou seja, uma palavra que quando escrita de trás para frente nãose altera. Ex.: arara, osso, ufu.

3. Crie um programa que leia uma string do usuário e diga, caso existam,quais letras estão repetidas (ocorrem mais de uma vez) nesta string.

4. Escreva um programa que leia duas strings e gere uma terceira contendoos caracteres que aparecem nas duas.

14.6 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• MENEZES, N. N. C. Introdução à Programação com Python: algoritmose lógica de programação para iniciantes. São Paulo: Novatec, 2010.

• SILVA, R. A. P. Notas de aula de Algoritmos e Programação de Compu-tadores.

15 Funções

15.1 IntroduçãoDefinição

FunçãoBlocos de código que podem ser nomeados e chamados de dentro de um programa

• Exemplos:

– print(): função que escreve alguma informação na tela de saída doprograma;

– input(): função que lê alguma informação via teclado.

109

Page 110: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Facilitam a estruturação e reutilização do código:

– Estruturação: programas grandes e complexos podem ser construídosbloco a bloco.

– Reutilização: o uso de funções evita a cópia desnecessária de trechosde código que realizam a mesma tarefa, diminuindo assim o tamanhodo programa e a ocorrência de erros.

Ordem de execuçãoAo chamar uma função, o programa que a chamou é pausado até que a

função termine a sua execução:

1 def imprimeCompras ():2 compras = ["Cimento","Areia","Tijolo","Argamassa"]3 print("Lista de compras")4 for item in compras:5 print("Produto:", item)6 # fim da função7

8 print("Antes da função")9 imprimeCompras ()

10 print("Depois da função")

Saída:

Antes da funçãoLista de comprasProduto: CimentoProduto: AreiaProduto: TijoloProduto: ArgamassaDepois da função

15.2 EstruturaForma geral

Forma geral de uma função:

def nomefunção(lista -de -parâmetros):instrução 1instrução 2...instrução n

110

Page 111: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Toda função começa com a palavra reservada def, seguida de um nome associadoàquela função, nomefunção.

Corpo da função

• É formado pelos comandos que a função deve executar;

• Processa os parâmetros (se houver), realiza outras tarefas e gera saídas(se necessário).

• De modo geral, evita-se fazer operações de leitura e escrita dentro de umafunção:

– Uma função é construída com o intuito de realizar uma tarefa espe-cífica e bem-definida;

– As operações de entrada e saída de dados – input() e print() –devem ser feitas fora das funções, na parte principal do programa;

– Isso assegura que a função construída possa ser utilizada nas maisdiversas aplicações, garantindo a sua generalidade.

Parâmetros da funçãoA lista de parâmetros é uma lista de variáveis

nome1, nome2, ..., nomeN

a serem usadas dentro do corpo da função, durante sua execução.

• É possível definir quantos parâmetros achar necessários;

• Deixa-se os parênteses vazios se a função não recebe nenhum parâmetrode entrada.

Exemplos:

def soma(x,y):

def imprime ():

É por meio dos parâmetros que uma função recebe informação do programaprincipal (isto é, de quem a chamou).

111

Page 112: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Não é preciso – nem recomendável – fazer a leitura das variáveis dos pa-râmetros dentro da função;

• Na chamada abaixo, o parâmetro x recebeu o valor 5 enquanto o parâmetroy recebeu o valor de z.

1 def soma(x, y):2 x = int(input("Digite o valor de x:")) % incorreto3 y = int(input("Digite o valor de y:")) % incorreto4 # fim da função5

6 z = int(input("Digite o valor de z: "))7 soma(5,z)

Podemos definir valores padrão para parâmetros da função (têm de vir sem-pre ao final)

• Isso faz com que aquele parâmetro se torne opcional, ou seja, se tal parâ-metro não for definido na chamada, o valor padrão será usado.

• Exemplo:

1 def reajuste(salario , juros =0.25):2 return salario + salario*juros3

4 print("Reajuste 1: ",reajuste (100))5 print("Reajuste 2: ",reajuste (100, 0.10))

• Saída:

Reajuste 1: 125.0Reajuste 2: 110.0

Retorno da funçãoUma função pode ou não retornar um valor.

• Se ela retornar um valor, alguém deverá receber este valor. O valor retor-nado pela função é dado pelo comando return.

112

Page 113: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Exemplos:

1 import math2 def volumeEsfera(r):3 V = 4/3* math.pi*r**34 return V5

6 x = volumeEsfera (1.0)7 print(x)

1 def imprimeCompras ():2 compras = ["Cimento","Areia","Tijolo","Argamassa"]3 print("Lista de compras")4 for item in compras:5 print("Produto:", item)6 # fim da função7

8 print("Antes da função")9 imprimeCompras ()

10 print("Depois da função")

Uma função pode ter mais de uma declaração return.

• Quando o comando return é executado, a função termina imediatamente;

• Todos os comandos restantes são ignorados.

• Exemplo:

1 def maior(x,y):2 if x > y:3 return x4 else:5 return y6 print("Esta mensagem não será impressa")7

8 x = int(input("Digite o valor de x:"))9 y = int(input("Digite o valor de y:"))

10 z = maior(x,y)11 print("O maior valor é %d" % z)

Exemplo de saída:Digite o valor de x:4Digite o valor de y:8O maior valor é 8>>>

113

Page 114: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

15.3 Uso das funçõesDeclaração de funções

Funções devem ser declaradas antes de serem utilizadas.Exemplo (com erro):

1 x = int(input("Digite o valor de x:"))2 y = int(input("Digite o valor de y:"))3 z = maior(x,y)4 print("O maior valor é %d" % z)5

6 def maior(x,y):7 if x > y:8 return x9 else:

10 return y

Exemplo de saída:Digite o valor de x:2Digite o valor de y:4Traceback (most recent call last):

File "C:\ GET002\src\funcoes -retorno2.py", line 3, in <module >z = maior(x,y)

NameError: name 'maior ' is not defined

Uma função criada pelo programador pode utilizar qualquer outra função,inclusive as que foram criadas:

1 def soma(valores):2 s = 03 for x in valores:4 s = s+x5 return s6

7 def media(valores):8 return soma(valores)/len(valores)9

10 print("Soma = ", soma(range (1,5)))11 print("Média = ", media ([12 ,13 ,15]))

Exemplo de saída:Soma = 10Média = 13.333333333333334>>>

114

Page 115: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

15.4 Variáveis e passagem de parâmetrosVariáveis fora da função

Funções estão sujeitas ao escopo das variáveis:

• Uma variável definida no programa e sem indentação – não está no corpode nenhuma função – é global. Ou seja, ela pode ser acessada em qualquerlugar do programa ou função:

1 def func():2 print("Função = ",x)3

4 x = 105 print("Antes = ",x)6 func()7 print("Depois = ",x)

Exemplo de saída:

Antes = 10Função = 10Depois = 10>>>

• Uma variável global pode ser acessada em qualquer lugar do programa oufunção, mas não pode ser alterada pela função.

• Na verdade, ao tentar alterar uma variável global o que ocorre é a criaçãode uma variável local que ofusca completamente a variável global;

• Quando a função termina, apenas a variável global continua definida.

1 def func():2 x = 203 print("Função = ",x)4

5 x = 106 print("Antes = ",x)7 func()8 print("Depois = ",x)

115

Page 116: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Exemplo de saída:

Antes = 10Função = 20Depois = 10>>>

• Para atribuir um novo valor a uma variável global precisamos utilizar ocomando global.

• Isso faz com que a variável manipulada dentro da função seja a do escopoglobal

1 def func():2 global x3 x = 204 print("Função = ",x)5

6 x = 107 print("Antes = ",x)8 func()9 print("Depois = ",x)

Exemplo de saída:

Antes = 10Função = 20Depois = 20>>>

Funções estão sujeitas ao escopo das variáveis:

• Variáveis definidas dentro da função – como parâmetros ou no corpo damesma – somente podem ser acessadas dentro da função, nunca fora dela⇒ escopo local à função.

1 import math2 def volumeEsfera(r):3 V = 4/3 * math.pi * r**34 return V5

6 x = volumeEsfera (1.0)7 print(x)8 print(V)

116

Page 117: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Exemplo de saída:4.1887902047863905Traceback (most recent call last):

File "C:\src\funcoes -escopo -erro.py", line 8, in <module >print(V)

NameError: name 'V' is not defined>>>

15.5 Passagem de parâmetros

• Em várias linguagens de programação, o tipo de passagem de parâmetrosusado define se as modificações realizadas nos mesmos dentro da funçãose irão se refletir fora da função.

• Em Python, os parâmetros de uma função podem ou não ser modificados,sendo definidos como mutáveis e imutáveis.

Na verdade, sempre que passamos um parâmetro para a função, estamospassando a referência a um objeto via atribuição:

1 def func (N1, lista1):2 """ comandos3 da função """4 print("Teste função")5

6 N = 107 lista = [1,2,3,4]8

9 func(N, lista) # N1 = N, lista1 = lista

Porém, atribuições dentro da função geram novos objetos, fazendo com queo conteúdo do parâmetro passado originalmente se torne imutável.

1 N = 102 lista = [1,2,3,4]3

4 print("id N: ", id(N))5 print("id lista: ", id(lista))6 print (15*"-")7

8 N = N+19 lista = [lista ,5]

10 print("id N: ", id(N))11 print("id lista: ", id(lista))12 print (15*"-")13

14 lista.append (6)

117

Page 118: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

15 print("id N: ", id(N))16 print("id lista: ", id(lista))17 print (15*"-")

Saída:

id N: 140733847168112id lista: 1903804832520---------------id N: 140733847168144id lista: 1903804832392---------------id N: 140733847168144id lista: 1903804832392---------------

Parâmetros imutáveis

• O conteúdo/valor do parâmetro é modificado dentro da função via atri-buição, o que gera uma nova variável.

• Mesmo que esse valor seja alterado dentro da função, nada acontece como valor de fora da função.

1 def soma_mais_um(N):2 print("Valor: ",N)3 N = N+14 print("Valor: ",N)5 # Fim da função6

7 y = 18 soma_mais_um(y)9 print("Valor: ", y)

Saída:

Valor: 1Valor: 2Valor: 1>>>

Parâmetros mutáveis

• O conteúdo/valor do parâmetro é modificado dentro da função sem usara operação de atribuição.

118

Page 119: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• Isso gera não um novo objeto: neste caso, alterar o parâmetro influenciano “valor” da variável fora da função.

1 def soma(valores):2 s = 03 for x in valores:4 s += x5 valores.append (-1)6 return s7 # Fim da função8

9 lista = [1,2,3,4]10 print("Soma = ", soma(lista))11 print("Último elemento = ", lista[len(lista) -1])

Saída:

Soma = 10Último elemento = -1>>>

15.6 Recursão

• Em Python, uma função pode chamar outra função.

– Por exemplo, dentro de qualquer função que nós criarmos é possí-vel chamar a função. print() ou input(), ou qualquer função doPython ou previamente definida pelo programador.

• Uma função também pode chamar a si própria.

– A qual chamamos de função recursiva.

• A recursão também é chamada de definição circular. Ela ocorre quandoalgo é definido em termos de si mesmo.

• Um exemplo clássico de função que usa recursão é o cálculo do fatorial deum número:

– 3! = 3× 2!

– 4! = 4× 3!

– n! = n× (n− 1)!

119

Page 120: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Recursão: fatorial de um número

0! = 1

1! = 1× 0!

2! = 2× 1!

3! = 3× 2!

4! = 4× 3!

n! = n× (n− 1)! fórmula geral0! = 1 caso-base

Sem recursão:

1 def fatorial(N):2 fat = 13 for i in range(1,N+1):4 fat = fat * i5 return fat6

7 x = int(input("Digite o valor de N: "))8 y = fatorial(x)9 print("O fatorial de ", x, " é ", y)

Com recursão:

1 def fatorial(N):2 if N == 0:3 return 14 else:5 return N * fatorial(N-1)6

120

Page 121: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

7 x = int(input("Digite o valor de N: "))8 y = fatorial(x)9 print("O fatorial de ", x, " é ", y)

• Em geral, formulações recursivas de algoritmos são frequentemente consi-deradas “mais enxutas” ou “mais elegantes” do que formulações iterativas;

• Porém, algoritmos recursivos tendem a necessitar de mais espaço em me-mória do que algoritmos iterativos.

Critério de parada e alteração de parâmetro na chamada

• Todo cuidado é pouco ao se fazer funções recursivas:

– Critério de parada: determina quando a função deverá parar de cha-mar a si mesma.

– O parâmetro da chamada recursiva deve ser sempre modificado, deforma que a recursão chegue a um término.

Exemplo: fatorial

1 def fatorial(N):2 if N == 0: # critério de parada3 return 14 else:5 return N * fatorial(N-1) # parâmetro sempre

muda6

7 x = int(input("Digite o valor de N: "))8 y = fatorial(x)9 print("O fatorial de ", x, " é ", y)

Consumo de memóriaO que acontece na chamada da função fatorial com um valor como N = 4?Imagine x = 4 no código anterior: teríamos a chamaday = fatorial(4).

121

Page 122: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Consumo de memóriaO que acontece na chamada da função fatorial com um valor como N = 4?Imagine x = 4 no código anterior: teríamos a chamaday = fatorial(4).

Uma vez que chegamos ao caso-base, é hora de fazer o caminho de volta darecursão.

Sequência de FibonacciEssa sequência é um exemplo clássico de recursão:

F (0) = 0

F (1) = 1

F (n) = F (n− 1) + F (n− 2), n ≥ 2 .

Primeiros valores: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, . . .Sua implementação usando recursão possui um código bem mais simples:

Sem recursão:

1 def FibonacciN(N):2 if N == 0 or N == 1:3 return N4 else:5 f_n1 = 16 f_n2 = 07 i = 2

122

Page 123: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

8 while i <= N:9 f = f_n1 + f_n2

10 i = i + 111 f_n2 = f_n112 f_n1 = f13 return f

Com recursão:

1 def FibonacciR(N):2 if N == 0 or N == 1:3 return N4 else:5 return FibonacciR(N-1) + FibonacciR(N-2)

Como se pode notar, a simplicidade da implementação tem seu preço.

• Cálculo para N = 4:

• Cálculo para N = 5:

123

Page 124: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Comparação do tempo de execução:

1 x = int(input("Digite o valor de N: "))2 t0 = time.process_time ()3 FibonacciN(x)4 t1 = time.process_time ()5 print("tempo Fibonacci - função sem recursão: ", (t1 -t0))6 FibonacciR(x)7 t2 = time.process_time ()8 print("tempo Fibonacci - função recursiva: ", (t2-t1))

Exemplo de teste (tempo em s):

Digite o valor de N: 30tempo Fibonacci - função sem recursão: 0.0tempo Fibonacci - função recursiva: 0.453125>>>

Aumentando N :

Digite o valor de N: 40tempo Fibonacci - função sem recursão: 0.0tempo Fibonacci - função recursiva: 53.984375>>>

15.7 Exercícios sugeridos1. Escreva uma função que receba dois valores e retorne qual o maior deles.

2. Escreva uma função que receba uma temperatura dada em graus Fah-renheit e retorne o valor da mesma em graus Celsius, sendo que C =5 (F − 32)/9.

3. Escreva uma função que receba e troque os valores de duas variáveis nu-méricas do mesmo tipo.

4. Crie uma função que receba uma matriz quadrada 2 × 2 e retorne seudeterminante. A seguir, crie um programa que leia as entradas da matrizdo usuário e que calcule o mesmo através da função e o mostre na tela.

5. Crie uma função recursiva que receba um valor inteiro N e calcule o so-matório dos números de 1 a N .

124

Page 125: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

15.8 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• MENEZES, N. N. C. Introdução à Programação com Python: algoritmose lógica de programação para iniciantes. São Paulo: Novatec, 2010.

• SILVA, R. A. P. Notas de aula de Algoritmos e Programação de Compu-tadores.

16 Arquivos

16.1 IntroduçãoPor que usar arquivos?

• Permitem armazenar grande quantidade de informação;

• Persistência dos dados (disco, armazenamento secundário);

• Acesso aos dados poder ser não sequencial;

• Acesso concorrente aos dados (é permitido que mais de um programa podeusar os dados ao mesmo tempo).

Tipos de arquivosBasicamente, a linguagem Python – assim como diversas linguagens de pro-

gramação – trabalha com dois tipos de arquivos:

• arquivo texto;

• arquivo binário.

Arquivo texto

• Armazena caracteres que podem ser mostrados diretamente na tela, oumodificados por um editor de textos simples como o Bloco de Notas (No-tepad) do Windows.

• Os dados são gravados como caracteres no texto

Arquivo binário

• Armazena uma sequência de bits que está sujeita as convenções dos pro-gramas que o gerou.

• Ex.: arquivos executáveis, arquivos compactados, arquivos de registros,etc.

• os dados são gravados na forma binária (do mesmo modo que estão namemória principal).

125

Page 126: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

16.2 Trabalhando com arquivos em Python• A linguagem Python possui uma série de funções para manipulação dearquivos.

– Suas funções se limitam a abrir/fechar e ler caracteres/bytes/linhasdo arquivo

– É tarefa do programador criar a função que lerá um arquivo de umamaneira específica

• Para manipularmos um arquivo, vamos precisar apenas de um objeto dotipo file

1 >>> f = open("teste.txt","w")2 >>> print(f)3 <_io.TextIOWrapper name=’teste.txt’ mode=’w’ encoding=’cp1252’>

Abrindo um arquivo: open()Para a abertura de um arquivo, usa-se a função open()objeto-file = open(nome-arquivo,modo-abertura)

O parâmetro nome-arquivo determina qual arquivo deverá ser aberto, sendoque o mesmo deve ser válido no sistema operacional que estiver sendo utilizado.

No parâmetro nome-arquivo pode-se trabalhar com caminhos absolutos oucaminhos relativos:

• Caminho absoluto: descrição de um caminho desde o diretório raiz

C:\\Projetos\\dados.txt

• Caminho relativo: descrição de um caminho desde o diretório corrente

arq.txt

..\\dados.txt

Modos de abertura

• O modo de abertura determina que tipo de uso será feito do arquivo.

126

Page 127: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• A tabela a seguir mostra os modos válidos de abertura de um arquivo.

Modo Tipo Função"r" Texto Leitura. Arquivo deve existir."w" Texto Escrita. Cria arquivo, se não houver; apaga anterior, se existir."a" Texto Escrita. Dados são adicionados ao final (append)."rb" Binário Leitura. Arquivo deve existir."wb" Binário Escrita. Cria arquivo, se não houver; apaga anterior, se existir."ab" Binário Escrita. Dados são adicionados ao final (append)."r+" Texto Leitura/escrita. Arquivo deve existir e pode ser alterado."w+" Texto Leitura/escrita. Cria arquivo, se não houver; sobrescreve, se existir."a+" Texto Leitura/Escrita. Dados são adicionados ao final (append)."r+b" Binário Leitura/escrita. Arquivo deve existir e pode ser alterado."w+b" Binário Leitura/escrita. Cria arquivo, se não houver; sobrescreve, se existir."a+b" Binário Leitura/Escrita. Dados são adicionados ao final (append).

Abrindo um arquivo

• Um arquivo texto pode ser aberto para escrita utilizando o seguinte con-junto de comandos:

f = open("teste.txt", "w")

• Neste caso, o arquivo teste.txt será aberto. Agora já podemos escreverdados no arquivo, ou fechá-lo:

f.write("Teste de escrita")f.close()

Fechando um arquivo

• Como visto no slide anterior, sempre que terminamos de usar um arquivoque foi aberto, devemos fechá-lo. Para isso usa-se a função close():

objeto -file.close ()

• Mas por que precisamos fechar o arquivo?

Porque precisamos fechar o arquivo:

• Ao fechar um arquivo, todo dado que tenha permanecido no buffer é gra-vado.

• O buffer é uma região de memória que armazena temporariamente oscaracteres a serem gravados em disco imediatamente;

• Apenas quando o buffer está cheio é que seu conteúdo é escrito no disco.

127

Page 128: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Buffer de arquivo: eficiência

• Para ler e escrever arquivos no disco temos que posicionar a cabeça degravação em um ponto específico do disco;

• Se tivéssemos que fazer isso para cada caractere lido/escrito, a leitura/es-crita de um arquivo seria uma operação demasiadamente lenta.

• Assim, a gravação só é realizada quando há um volume razoável de infor-mações a serem gravadas ou quando o arquivo for fechado.

1 f = open("compras.txt","w")2 compras = ["Cimento","Areia","Tijolo","Argamassa"]3 f.write("Lista de compras\n")4 for item in compras:5 f.write("Produto: " + item + "\n")6

7 f.close()

1 f = open("compras.txt","w")2 compras = ["Cimento","Areia","Tijolo","Argamassa"]3 f.write("Lista de compras\n")4 for item in compras:5 f.write("Produto: " + item + "\n")

128

Page 129: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Escrita/leitura em arquivos

• Uma vez aberto um arquivo, podemos ler ou escrever nele

• Para tanto, a linguagem Python conta com uma série de funções de escri-ta/leitura que variam de funcionalidade para atender as diversas aplica-ções:

– Todas as funções que serão vistas trabalham com a escrita/leitura destrings.

– Cabe ao programador tratar os dados que escritos/lidos do arquivo.

Posição no arquivo

• Ao se trabalhar com arquivos, existe uma espécie de posição onde estamosdentro do arquivo. É nessa posição onde será lido ou escrito o próximocaractere ou cadeia de caracteres.

• Quando utilizando o acesso sequencial, raramente é necessário modificaressa posição:

– Após cada leitura, a posição no arquivo é automaticamente atuali-zada para a próxima posição a ser lida.

– Após cada escrita, a posição no arquivo é automaticamente atuali-zada para a próxima posição a ser escrita.

129

Page 130: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

16.3 Leitura e escrita em arquivosEscrita em arquivos: write()

Para escrever em um arquivo usa-se a função write().Forma geral:objeto-file.write(string)

Esta função recebe como parâmetro uma cadeia de caracteres (string), queserá escrita no arquivo aberto especificado por objeto-file.

A função write() permite gravar strings contendo qualquer tipo de dado,inclusive dados formatados e sequências de escape.

• Cabe então ao programador colocar os dados a serem gravados dentro dastring.

Exemplo:

1 f = open("compras.txt","w")2 compras = ["Cimento","Areia","Tijolo","Argamassa"]3 f.write("Lista de compras\n")4 for item in compras:5 f.write("Produto: " + item + "\n")6

7 f.close()

Saída:

Leitura em arquivos: read(), etc.Enquanto que para escrita em um arquivo utilizamos a função write(), para

ler temos várias opções:

• objeto-file.read()

130

Page 131: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

• objeto-file.read(n)

• objeto-file.readline()

• objeto-file.readlines()

read()A função read() lê todo o conteúdo de um arquivo aberto e armazena em

uma string.

• Os dados serão lidos exatamente como estão salvos no arquivo, inclusivecom as quebras de linhas.

Exemplo:

1 f = open("compras.txt","r")2 s = f.read()3 print(s)4 f.close()

Saída:Lista de comprasProduto: CimentoProduto: AreiaProduto: TijoloProduto: Argamassa

>>>

read(N)A função read(N) lê apenas os N próximos caracteres de um arquivo aberto

e armazena em uma string.

• Como na função read(), os dados serão lidos exatamente como estãosalvos no arquivo, inclusive com as quebras de linhas.

Exemplo:

1 f = open("compras.txt","r")2 s = f.read (8)3 print(s)4 f.close()5 print(len(s))

131

Page 132: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Saída:Lista de8>>>

readline()A função readline() lê uma linha de texto de um arquivo aberto e armazena

em uma string.

• Essa função lê da posição atual no arquivo até encontrar uma quebra delinha:

• O caractere de quebra de linha (\n) será armazenado dentro da string.

Exemplo:

1 f = open("compras.txt","r")2 s = f.readline ()3 print(s)4 f.close()

Saída:Lista de compras

>>>

readlines()A função readlines() lê todo o conteúdo de um arquivo aberto e arma-

zena em uma lista de strings, sendo cada string correspondente a uma linha doarquivo.

• O caractere de quebra de linha (\n) separa uma string da outra e seráarmazenado dentro de cada string.

Exemplo:

1 f = open("compras.txt","r")2 s = f.readlines ()3 print(s)4 f.close()

132

Page 133: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

Saída:['Lista de compras\n', 'Produto: Cimento\n', 'Produto: Areia\n', '

Produto: Tijolo\n', 'Produto: Argamassa\n']>>>

Lendo um arquivo até o final

• Diferente de outras linguagens, Python não possui um teste de fim dearquivo (EOF, end-of-file):

– Em Python, a indicação de final de arquivo se dá pela ausência debytes retornada por uma função de leitura.

• Assim, a melhor maneira de se verificar se chegamos ao final do arquivo étestar se algo foi retornado pela função de leitura.

O teste de final de arquivo pode ser facilmente implementado com umaconstrução do tipo

while True / break

• Basicamente, criamos um laço infinito (while True) e sempre que a lei-tura retorna nada interrompemos o laço (break).

Exemplo:

1 f = open("compras.txt","r")2 while True:3 linha = f.readline ()4 if linha == "":5 break6 print(linha)7

8 f.close()

Saída:Lista de compras

Produto: Cimento

Produto: Areia

Produto: Tijolo

Produto: Argamassa

>>>

133

Page 134: GET002–Informáticabásica - FACOMrpimentel/files/get002-2019-1/get002.article.pdf · 2.3 Ocomputador Equipamento eletrônico capaz de processar (manipular) dados (entrada), de

16.4 Exercícios sugeridos1. Escreva um programa que leia do usuário os nomes de 2 arquivos texto.

Em seguida, crie um terceiro arquivo texto com o conteúdo dos dois pri-meiros juntos (o conteúdo do primeiro seguido do conteúdo do segundo).

2. Faça um programa que escreva em um arquivo os dados de um aluno. Oaluno deve ter seus dados armazenados contendo número de matricula,nome, e a nota de 3 provas do mesmo.

3. Faça a leitura dos dados do arquivo anterior, escrevendo os dados do alunona tela.

16.5 Referências• BACKES, A. R. Notas de aula de Informática para Biotecnologia.

• MENEZES, N. N. C. Introdução à Programação com Python: algoritmose lógica de programação para iniciantes. São Paulo: Novatec, 2010.

• SILVA, R. A. P. Notas de aula de Algoritmos e Programação de Compu-tadores.

134