Programação Elementar de Computadores Jurandy Soares © Jurandy Soares, 2010 -- http://bit.ly/jurandy Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos físicos o que fazer © Jurandy Soares, 2010 -- http://bit.ly/jurandy Modelo Básico de um Computador • Processador (CPU) • Unidade Central de Processamento • Interpreta e executa as instruções • Memória • principal e auxiliar • mantém os dados e as instruções em uso • Dispositivos de entrada • mouse, teclado, microfone, webcam, etc • Dispositivos de saída • monitor de vídeo, impressora, autofalantes, etc © Jurandy Soares, 2010 -- http://bit.ly/jurandy Executando um Programa Programa: um conjunto de instruções que um computador deve seguir © Jurandy Soares, 2010 -- http://bit.ly/jurandy Linguagens de Programação Necessárias para escrever programas Linguagens de alto nível (ex, Python): • relativamente fáceis para as pessoas escreverem e compreenderem • não são entendidas diretamente pelos computadores Linguagens de baixo nível (linguagem de máquina): • diretamente entendidas pelo computador • dependente do computador © Jurandy Soares, 2010 -- http://bit.ly/jurandy O Compilador Um programa escrito em uma linguagem de alto nível (conhecido como o código fonte) não pode ser executado diretamente pelo computador Um compilador é um programa que traduz o código fonte em código de máquina que faz a mesma coisa (conhecido como código objeto) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Tradução e Execução de um Programa em Python © Jurandy Soares, 2010 -- http://bit.ly/jurandy Tradução e Execução de um Programa em Python O código em byte (bytecode) do Python é portátil (independente do dispositivo físico) A máquina virtual do Python executa o código-byte em uma máquina real O compilador Python é chamado pelo comando python -c O interpretador do Python pode ser chamado pelo comando python © Jurandy Soares, 2010 -- http://bit.ly/jurandy Raciocínio Algoritmico Algoritmo Um conjunto de instruções ou passos para resolver um problema. • deve ser preciso • deve ser finito • pode ser escrito em uma notação arbitrária (ex.: linguagem natural, linguagem de programação, diagrama, misto dos anteriores, etc) Raciocínio algoritmico é fundamental para ciência da computação e programação © Jurandy Soares, 2010 -- http://bit.ly/jurandy Exemplo de um Algoritmo Algoritmo que determina o custo total de uma lista de itens: 1. Escreva o número 0 no quadro. 2. Faça o seguinte para cada item da lista: a. Adicione o custo do item ao número no quadro. b. Substitua o número antigo no quadro pela soma. 3. Anuncie que a resposta é o número escrito no quadro. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Primeiro Programa em Python # Arquivo: primeiroprograma.py print('Olá para quem estiver aí!') print('Como estão as coisas?') print('Espero que esteja tendo um bom dia.') print('Tchau!') © Jurandy Soares, 2010 -- http://bit.ly/jurandy Sintaxe da Linguagem • A sintaxe de uma linguagem é um conjunto de regras (gramática) que descreve a maneira correta de escrever sentenças (programas) naquela linguagem. • As linguagens de programação tem uma sintaxe bem precisa: se você quebrar as regras, você obterá um ou mais erros. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Estrutura de um Programa em Python # importação das bibliotecas necessárias # comandos virão aqui para descrever # as ações a serem tomadas pelo programa © Jurandy Soares, 2010 -- http://bit.ly/jurandy Um comando em Python print('alguma mensagem aqui') Exibe a mensagem entre parênteses na tela (sem as aspas) © Jurandy Soares, 2010 -- http://bit.ly/jurandy O que primeiroPrograma faz? • Dê uma olhada no programa e veja se você consegue descobrir o que o programa faz. • Ele exibe o seguinte: © Jurandy Soares, 2010 -- http://bit.ly/jurandy Erros de Programação Erros de sintaxe (Syntax error) Violação das regras de sintaxe da linguagem. Por exemplo, digitar erroneamente uma palavra, esquecer de por vírgula (','), esquecer de fechar parênteses, etc. Capturado pelo compilador! Erros em tempo de execução (Runtime error) Erros em tempo de execução. Por exemplo, divisão por zero, entrada de uma cadeia de caracteres quando o sistema espera um inteiro. Erros de lógica O programa compila e executa sem nenhum erro, mas ele não faz o que se supõe que ele deva fazer. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Segundo Programa em Python # Arquivo: cestadeovos.py print('Entre o número de ovos que deverá ter em cada cesta: ') ovosPorCesta = int(input()) print('Entre com o número de cestas: ') numeroDeCestas = int(input()) totalOvos = numeroDeCestas * ovosPorCesta print(ovosPorCesta, 'ovos por cesta.') print(numeroDeCestas, 'cestas.') print('Número total de ovos é', totalOvos) © Jurandy Soares, 2010 -- http://bit.ly/jurandy O Que o Programa Cesta de Ovos faz? • Dê uma olhada no programa e veja se você consegue descobrir o que ele faz. © Jurandy Soares, 2010 -- http://bit.ly/jurandy O Que é uma Variável de um Programa ovosPorCesta = int(input()) numeroDeCestas = int(input()) totalOvos = numeroDeCestas * ovosPorCesta • Isto é a criação de três variáveis inteiras • Uma variável uma localização nomeada para armazenar dados, isto é, um container para dados • É desejável que cada variável mantenha somente dados de um determinado tipo; por exemplo, somente números inteiros (int), somente números em ponto flutuante (real) • Todas as variáveis do programa devem ter um valor atribuído antes de serem usadas © Jurandy Soares, 2010 -- http://bit.ly/jurandy • O último valor atribuído à variável indicará o tipo dela © Jurandy Soares, 2010 -- http://bit.ly/jurandy O Que é o Tipo de uma Variável? • O tipo de uma variável determina o tipo de valores que uma variável pode conter e que operações podem ser aplicadas a ela. • Alguns tipos primitivos de Python: • int (inteiro, valores completos, tais como, 0, 1, -31, 123) • float (valores reais, tais como, 0.0, 3.1415, -2.72) • str (valores com cadeias de caracteres, tais como, ‘asa’, ‘34’, ‘R$ 25,00’) • bool (valores lógicos, como somente um dos dois valores: True, False) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Como Podemos Associar/Alterar o Valor de uma Variável? ovosPorCesta = int(input()) totalOvos = numeroDeCestas * ovosPorCesta Comando de atribuição: variável = expressão Associa o valor da expressão do lado esquerdo do sinal de = à variável do lado esquerdo. Não significa o "igual" de comparação da matemática! © Jurandy Soares, 2010 -- http://bit.ly/jurandy O Que é uma Expressão? numeroDeCestas * ovosPorCesta • Expressões de programação são muito parecidas com as expressões aritméticas que estamos acostumados (operadores usuais, parênteses, regras de precedência, etc). • Expressões podem ser avaliadas para produzir um valor e elas tem um tipo (o tipo do valor da expressão). © Jurandy Soares, 2010 -- http://bit.ly/jurandy Operadores numéricos Alguns operadores comuns para inteiros: • + (óbvio) • - (óbvio) • * (óbvio) • // (divisão inteira, por exemplo, 6//2=3, 5//2=2, 19//5=?) • % (operador módulo ou o resto da divisão inteirar, por exemplo, 6%2=0, 5%2=1, 19%5=?) Alguns operadores comuns para reais: +, -, *, / (divisão real) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Algumas Expressões: Quais são Seus Valores? # Seja i = 12; j = 5; k = -3 # Seja x = 2.1; y = -1.5; z = 3.0 # Informe qual o valor das expressões abaixo (i + j + k) / 3 (i / j) * j + (i % j) x * x + y * y (x + y + z) / (x – y – z) 2.0 * z – (x + y) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comando de Saída print(saída1, print(saída1, print(saída1, print(saída1, saída2, saída2, saída2, saída2, ..., ..., ..., ..., saídaN) saídaN, end='') saídaN, sep='') saídaN, end='', sep='') • Concatena (junta) as várias saídas (cadeia de caracteres entre aspas, variáveis, constantes e números), exibe-as na tela separadas por um espaço e põe o cursor na próxima linha (print(..., end='') não adiciona uma nova linha). • O que faz o seguinte comando de saída? dia = 15 print(dia, 'de Novembro de', 1889, 'é a data da proclamação da República Federativa do Brasil') © Jurandy Soares, 2010 -- http://bit.ly/jurandy © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comando de Entrada Entrada de um valor inteiro: i = int(input()) Entrada de um valor real: x = float(input()) Entrada de uma linha inteira (uma cadeia de caracteres sem quebra de linha): s = input() A função de entrada input aceita opcionalmente uma mensagem como arqumento: i = int(input('Entre com um número inteiro: ')) x = float(input('Entre com um número real: ')) s = input('Entre com uma cadeia de caracteres: ') © Jurandy Soares, 2010 -- http://bit.ly/jurandy Juntando Tudo Até então, temos visto: • como entrar com valores a partir do teclado • como exibir mensagens ou valores na tela • como criar variáveis para armazenar valores • como armazenar valores em variáveis e calcular novos valores com expressões © Jurandy Soares, 2010 -- http://bit.ly/jurandy Agora é a Sua Vez! Agora vamos juntar tudo: escreva um programa em Python chamado calculaarea.py que pede ao usuário a largura e a altura de um retângulo e ao final calcula e exibe a área do retângulo. © Jurandy Soares, 2010 -- http://bit.ly/jurandy CalculaArea Completo © Jurandy Soares, 2010 -- http://bit.ly/jurandy Documentação e Estilo • Use nomes significativos para variáveis, programas, etc. • Use endentação e espaçamento de linhas conforme mostrado nos exemplos do texto • Sempre inclua um prólogo (uma breve explanação do programa no início do arquivo) • Use letras minúsculas na identificação de variáveis, com exceção no início de palavras internas (ovosPorCesta) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comentários Comentário: texto ignorado pelo compilador na hora da compilação Não altera o que o programa faz, somente explica o programa Escreva comentários compreensíveis e úteis Comente o que não for óbvio Assuma um leitor de conhecimento razoável # comentário de uma linha ''' Use dois pares de três aspas no início do arquivo para fazer uma breve descrição sobre o que faz seu programa © Jurandy Soares, 2010 -- http://bit.ly/jurandy ''' © Jurandy Soares, 2010 -- http://bit.ly/jurandy Fluxo de Controle • A ordem em que os comandos em um programa são executados é chamado de fluxo de controle • Até então temos visto somente execução sequencial: comandos executados um após o outro e na ordem em que eles aparecem no programa © Jurandy Soares, 2010 -- http://bit.ly/jurandy Fluxo de Controle (cont.) Considere as seguintes tarefas: • Você deseja calcular o quociente de duas variáveis mas somente se o divisor for diferente de zero • Você entra com alguns valores (ex.: uma data) e se ela estiver no formato correto (dd/mm/aaaa) você continua a computação, caso contrário você exibe uma mensagem de erro • Dada uma nota entre 0 e 100, você quer converter o valor numérico para uma nota em letra (A para notas acima de 90, B entre 80 e 90, etc) Questão: Como podemos verificar estas condições e executar o trecho apropriado de código dependendo do resultado da verificação? © Jurandy Soares, 2010 -- http://bit.ly/jurandy Comando de Seleção dividendo = int(input('Entre com o valor do dividendo: ')) divisor = int(input('Entre com o valor (diferente de zero) do divisor: ')) if divisor != 0: quociente = dividendo // divisor print(dividendo, '/', divisor, ' = ', quociente, sep='') else: print('Não posso dividir por zero') © Jurandy Soares, 2010 -- http://bit.ly/jurandy O Tipo Lógico • Uma variável do tipo de dados lógico ou booleano armazena um dos dois valores: True ou False • True ("Verdadeiro" em Inglês) e False ("Falso" em Inglês) são as únicas constantes booleanas aceitáveis • Valores ou expressões booleanas são utilizadas para tomar decisões em programas • Por exemplo: if x > 0: # expressão booleana print(x, 'é um número positivo') © Jurandy Soares, 2010 -- http://bit.ly/jurandy Expressões Booleanas Há várias tipos de expressões booleanas válidas: • Uma variável booleana ou constante, como: fuma = input('Fuma?(S/N) ') in ['s', 'S'] if fuma: comando • Uma expressão aritmética seguida de um operador relacional seguido de uma expressão aritmética, como: varInt = int(input()) if varInt > 0: comando © Jurandy Soares, 2010 -- http://bit.ly/jurandy Operadores Relacionais == (igual) x == y != (diferente) x != y > x>y < x<y >= x >= y <= x <= y © Jurandy Soares, 2010 -- http://bit.ly/jurandy Operadores Booleanos Podemos também construir expressões booleanas ao combinar duas expressões booleanas com um operador booleano: and (e) (x > 0) and (x < 10) or (ou) (x <= 0) or (x >= 10) not (não) not (x == 0) O operador de negação (não) tem prioridade sobre os outros operadores lógicos O operador de conjunção (e) tem prioridade sobre o operador de disjunção (ou) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Operadores Booleanos (cont.) • Se A e B são expressões booleanas, A and B é verdadeiro (True) se e somente se A e B forem verdadeiros. Em outras palavras, se A ou B ou ambos forem falsos, A and B será falso (False) • Se A e B são expressões booleanas, A or B é verdadeiro (True) se ou A ou B ou ambos forem verdadeiros. Em outras palavras, A or B será falso (False) somente se A e B forem falso © Jurandy Soares, 2010 -- http://bit.ly/jurandy Algumas Expressões Lógicas Pergunta: # x y a b c Qual é o valor de cada uma das expressões seguintes: Dados = 5 = 12 = True = False = True # Informe o valor das expressões booleanas abaixo (x > 0) and (x < 10) (x <= 0) or (x >= 10) not (a and b and c) not a and b and c © Jurandy Soares, 2010 -- http://bit.ly/jurandy (a or b or c) ((x – 1) == ((y / 5) + (y % 5))) ((x != y) or not (x == y)) © Jurandy Soares, 2010 -- http://bit.ly/jurandy Sua Vez Problema: Dadas três variáveis inteiras i, j e k, escreva um expressão booleana para cada um dos seguintes problemas: • i é igual a 3 ou a 5 • i está entre 1 e 7 (não incluindo o 1 e o 7) • i é par • i é ímpar • i é o menor dos três © Jurandy Soares, 2010 -- http://bit.ly/jurandy Agora é Sua Vez • Leia um mês no formato numérico e informe se ele é válido ou não (1..12) • Leia um mês e informe a que semestre ele pertence (1º ou 2º) • Leia um mês e informe a que trimestre ele pertence (1º, 2º, 3º ou 4º) • Dadas duas datas de aniversário (dia e mês), informe qual delas é comemorada primeiro no ano • Faça um programa que leia um ano e informe se este ano é bissexto ou não. Procure no Wikipedia para saber o algoritmo • Leia uma data (dia e mês) informe a que estação ela pertence. Para o ano de 2010, o outono começa em 20 de março, inverno começa em 21 de junho, primavera começa em 23 de setembo e verão começa em 21 de dezembro © Jurandy Soares, 2010 -- http://bit.ly/jurandy Se: Sintaxe e Gráfico de Fluxo # Se teste: if teste: # Bloco do SE © Jurandy Soares, 2010 -- http://bit.ly/jurandy Se-Senão: Sintaxe e Gráfico de Fluxo # Se teste: if teste: # Bloco do SE # Senão else: # Bloco do SENÃO © Jurandy Soares, 2010 -- http://bit.ly/jurandy Um Exemplo Problema: Dado um inteiro i, escreva um programa que exibe "par" ou "ímpar" dependendo se o valor de for par ou ímpar. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Outro Exemplo Dados dois inteiros i e j, escreva um programa que atribua a uma variável inteira max o maior valor dos dois. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Sua Vez Dados três inteiros i, j e k, escreva um programa que atribua a uma variável inteira max o maior valor dos três. © Jurandy Soares, 2010 -- http://bit.ly/jurandy Maior de Três © Jurandy Soares, 2010 -- http://bit.ly/jurandy Sua Vez, Novamente Dado um inteiro, nota, contendo uma nota entre 0 e 100, escreva um trecho de código que converte o valor numérico da nota para uma nota em formato de letra, de acordo com a tabela seguinte, e exiba a nota no formato de letra. nota >= 90 A 80 <= nota < 90 B 70 <= nota < 80 C 60 <= nota < 70 D nota < 60 E © Jurandy Soares, 2010 -- http://bit.ly/jurandy Conversão de Nota © Jurandy Soares, 2010 -- http://bit.ly/jurandy