Algoritmo e Programação Matemática Fundamentos de Algoritmos Parte 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Dados A funcionalidade principal de um computador é a manipulação de dados. Apesar de internamente os computadores manipularem apenas números, as linguagens de programação permitem a manipulação de diversos tipos de dados. Um tipo de dados é um conjunto de objetos que apresentam o mesmo comportamento: Pessoas = {Renato, André, Carla}. Nem todo conjunto de dados é um tipo: Exemplo: {1, a, José, Fusca}. 2/26 Tipos Tipos numéricos: Formados apenas por números. Suportam operações aritméticas (basicamente +, -, *, /). Inteiro (Z): Exemplos: -10, 0, 3, 500. Real (R): Exemplos: -6.8, 1.0, 400.13. 3/26
Tipos Tipo caractere: Formado por um ou mais caracteres (uma cadeia de caracteres é chamada de string). Suporta operações tais como ler, escrever, concatenar, dentre outras. Exemplos: a, XYZ, 1, QUADRADO. Tipo booleano ou lógico: Permite apenas os valores 1 (verdadeiro) ou 0 (falso). Suportam apenas operações lógicas (basicamente e, ou e não). 4/26 Operadores Aritméticos Operador Descrição Exemplo + Adição 2 + 4 = 6 - Subtração 5 2 = 3 * Multiplicação 8 * 9 = 72 / Divisão 20 / 5 = 4 ^ Potenciação 10^2 = 100 raizq Raiz Quadrada raizq(100) = 10 \ Divisão Inteira 10 \ 4 = 2 mod ou % Resto da Divisão Inteira 10 mod 3 = 1 5/26 Operadores Aritméticos Prioridades Maior Prioridade Parênteses ^, raizq *, /, \, mod +, - Menor Prioridade 5 * 2 + 10 mod 2 8/4 + (7 2)^3 = 5 * 2 + 10 mod 2 8/4 + 5^3 = 5 * 2 + 10 mod 2 8/4 + 125 = 10 + 0 2 + 125 = 133 6/26
Operadores Lógicos e V F V V F F F F ou V F V V V F V F não V F F V 7/26 Operadores Lógicos Prioridades Maior Prioridade Parênteses não e, ou +, - Menor Prioridade (4 = 3 ou 8 > 5) e não (2 > 9) (F ou V) e não (F) V e V V 8/26 Constantes e Variáveis São dados armazenados na memória do computador. É necessário que sejam associadas a um identificador, que corresponde ao endereço de memória aonde o dado está armazenado. Uma constante é definida no começo do programa e não pode ser alterada (o VisuAlg 2.0 não implementa constantes). Uma variável pode ser alterada durante a execução do programa e precisa ter seu tipo declarado. 9/26
Constantes e Variáveis Declaração de variáveis: VAR <identificador 1>, <identificador 2>,, <identificador n>: <tipo das variáveis> Identificadores são nomes que podem ser compostos por letras, números e o caractere _, sendo que não podem ser iniciados com um número. No VisuAlg, o número máximo de caracteres de um identificador é 127, e não há distinção entre letras maiúsculas e minúsculas (isso vale também para as palavras reservadas). 10/26 Variáveis Atribuição Para armazenar dados em variáveis, utiliza-se o operador de atribuição, representado pelo símbolo (<- ou := no VisuAlg). A atribuição deve ser feita respeitando o tipo da variável. Formas de atribuição: <identificado da variável> <valor do mesmo tipo> <identificador da variável> <operação cujo resultado é do mesmo tipo> 11/26 Comentários Comentários são textos explicativos que não são considerados no processo de compilação (ou interpretação) e execução. São importantes para fins de documentação. No VisuAlg, cada linha de comentário deve ser iniciada com //. var Idade : inteiro // Variável para armazenara a idade 12/26
Blocos de Instruções As instruções de um programa são sempre (no contexto em que estamos) executadas em sequência. Os algoritmos podem ser considerados como um encadeamento de blocos de instruções individuais. Blocos de instruções representam o início e o término de um conjunto de instruções que serão executadas em sequência. Todo algoritmo possui pelo menos um bloco de instruções que indica o início e o término do próprio algoritmo. 13/26 Forma Geral de um Algoritmo No VisuAlg, um algoritmo possui a seguinte forma geral: Algoritmo Nome_do_Algoritmo Var Inicio FimAlgoritmo Lembrando: o VisuAlg não é case sensitive, ou seja, não faz distinção entre minúsculas e maiúsculas... 14/26 Forma Geral de um Algoritmo Calcular as raízes da equação 2x 2 + 4x 3 (Raizes.alg): Algoritmo Raízes Var Delta, x_1, x_2, a, b, c: real Inicio a <- 2 b <- 4 c <- -3 Delta <- b^2-4*a*c x_1 <- (-b + raizq(delta))/(2*a) x_2 <- (-b - raizq(delta))/(2*a) FimAlgoritmo Vocês acham que seria interessante apresentar os resultados na tela? 15/26
Entrada e Saída Aula passada: Entrada Programa Saída As linguagens de programação permitem receber entradas e apresentar saídas. Os comandos de entrada e saída permitem que o usuário forneça os dados para o programa (entrada) e a apresentação de resultados e outras informações (saída). Os dispositivos de entrada mais comuns são o teclado e o mouse, e os dispositivos de saída mais comuns são o monitor de vídeo e a impressora 16/26 Entrada E entrada (leitura) de dados exige a utilização de uma variável, e é utilizado o seu identificador: leia (<identificador>) Exemplo: Var Variavel: real leia (Variavel) 17/26 Saída A saída é de dados é realizada com a utilização do comando escreva: escreva (<valor>) (o VisuAlg possui também escreval) <valor> pode ser um texto (utiliza-se ) ou uma variável/constante Exemplo: Var Variavel: real escreva ( O resultado é:, Variavel) 18/26
Exercícios Alterar o programa Raizes.alg para apresentar as raízes na tela. Arquivo Raizes_Saida.alg Escrever um algoritmo que receba os números de faces e arestas de um objeto geométrico e calcule o seu número de vértices, sabendo-se que vértices + faces = arestas + 2. Arquivo Vertices.alg Há restrições para os números de faces e arestas? Se sim, como tratá-las? 19/26 Teste de Mesa Um algoritmo somente pode ser considerado correto se produzir o resultado esperado para qualquer conjunto de entradas possível. O teste de mesa é uma metodologia para acompanhar a execução de um algoritmo a cada passo, ou a cada instrução. Utilizando-se o teste de mesa é possível encontrar erros e verificar se a lógica do algoritmo está correta. 20/26 Teste de Mesa O teste de mesa por ser realizado utilizando-se uma tabela na qual em cada linha são mostrados os conteúdos das variáveis do algoritmo e o número da linha executada. Para indicar a leitura de uma variável, utilizam-se colchetes e, para indicar a escrita em uma variável, utilizam-se chaves. Pode ser acrescentada uma coluna para apresentar comentários sobre as operações. 21/26
Teste de Mesa Teste de mesa para o algoritmo VERTICES : ALGORITMO "VÉRTICES" VAR VERTICES, FACES, ARESTAS: INTEIRO INICIO 1. ESCREVA ("ENTRE COM O NÚMERO DE FACES: ") 2. LEIA(FACES) 3. ESCREVA("ENTRE COM O NÚMERO DE ARESTAS: ") 4. LEIA(ARESTAS) 5. VERTICES <- ARESTAS + 2 - FACES 6. ESCREVA("O NÚMERO DE VÉRTICES É:", VERTICES) FIMALGORITMO 22/26 Teste de Mesa Teste de mesa para o algoritmo VÉRTICES para um cubo: Linha VERTICES FACES ARESTAS Comentário 1??? Variáveis com valores indefinidos 2? [6]? 3? 6? 4? 6 [12] 5 8 6 12 6 {8} 6 12 Leitura do número de faces Leitura do número de arestas Cálculo do número de vértices Apresentação do número de vértices 23/26 Teste de Mesa Teste de mesa para o algoritmo VÉRTICES para um tetraedro: Linha VERTICES FACES ARESTAS 1??? 2? [4]? 3? 4? 4? 4 [6] 5 4 4 6 6 {4} 4 6 24/26
Teste de Mesa O VisuAlg permite a execução de um algoritmo passo a passo. Vamos utilizar essa funcionalidade, que permite que seja realizado um teste de mesa... 25/26 Exercício Elabore um algoritmo que receba um número inteiro de quatro dígitos e o escreva invertido (1346 será escrito como 6431). Dica: um número pode ser decomposto utilizando-se divisões inteiras sucessivas e operações de resto; um número pode ser composto utilizando-se e multiplicações e adições. Pergunta: e se o número de dígitos não for conhecido? 26/26