ALGORITMOS NO CONTEXTO COMPUTACIONAL: PORTUGUÊS ESTRUTURADO Algoritmos são conjuntos de instruções que visam solucionar um problema com um objetivo bem definido. Para representar programas de computadores, cuja linguagem requer um rigor lógico e sequencial, costuma-se utilizar diagramas (os fluxogramas) ou algoritmos com linguagens adaptadas. No curso utilizaremos, além dos fluxogramas que serão vistos mais adiante, o Português Estruturado (também chamado de portugol ou pseudocódigo). Para melhor compreender as características de um programa de computador e de um algoritmo do tipo Português Estruturado, consideremos o seguinte exemplo: PROGRAMA soma; VARIÁVEL num1, num2, resultado: INTEIRO; INÍCIO num1 5; num2 3; resultado num1 + num2; FIM. As palavras em maiúsculo destacadas em vermelho representam as palavras-chaves do programa. Essas palavras são especiais porque tem funções específicas e servem como referência para nortear o processamento das informações. No programa acima, as palavras chaves e suas respectivas funções são: PROGRAMA: Identifica o começo do programa e atribui um nome a esse programa. VARIÁVEL e INTEIRO: (ver exemplo 2). INÍCIO: Indica o início do processamento das informações. Tudo o que é relacionado anteriormente (nome do programa, lista de variáveis, por exemplo) compõem o que chamamos de cabeçalho. O cabeçalho basicamente inicializa o programa (faz a alocação de memória, encontra banco de dados, identifica biblioteca de funções e procedimentos, etc), sem que nenhum processamento lógico ocorra efetivamente. A partir da palavra-chave INICIO, é que os procedimentos lógicos para a solução do problema são efetivamente executados. FIM: Indica que não há mais instruções. Fim do programa. Diferentemente de um programa de computador, o portugol não são rigorosos com relação a essas palavras-chaves podendo haver variações. Em geral, elas seguem alguma linguagem padrão como o Pascal, o C ou o Fortran. O padrão do portugol apresentado neste curso segue a linguagem C. Repare que no programa exemplo foram utilizados sinais de pontuação. Ele também tem significados: Ponto-e-vírgula: indica fim de instrução. Ponto final: sempre acompanha o FIM, indicando o fim do bloco de instruções. Outra característica comum em algoritmos de computador (tanto quanto na própria formulação dos programas) é o uso da indentação, ou seja, colocação de espaços antes das instruções para uma melhor visualização da estruturação lógica do programa. Assim, repare que as palavras PROGRAMA, INÍCIO e FIM estão posicionadas mais próximas à margem esquerda, enquanto que as instruções estão alinhadas mais à direita. Para melhor entender as variáveis, consideremos o seguinte exemplo: PROGRAMA mat_basica; VARIÁVEL n1, n2: INTEIRO; x, y, mult, divisao, resto: REAL; nome: CARACTER; INÍCIO n1 3; n2 10; x 2.5; y 3.2321; nome “Rafael”; mult n1*x; divisao x/y; resto n2 MOD n1; FIM. As variáveis são endereços na memória RAM do computador que são representados por um nome simbólico. Assim, as variáveis são usadas para guardar informações. Uma vez que se atribui um nome à uma variável, este nome não deve ser mudado (o valor dela pode “variar”, mas o nome não). Na nomeação, algumas regras devem ser respeitadas: O primeiro caractere deve ser uma letra. Pode conter somente letras, números e underscore. Não pode haver espaços entre os caracteres. Sem acentuação, cedilha ou outros caracteres especiais. A palavra-chave VARIÁVEL tem a função de identificar todas as variáveis que vão aparecer nas instruções do programa. Essa lista de variáveis deve ser sempre colocada antes da palavra-chave INÍCIO. É nesse ponto também que se declara qual o tipo de informação que determinada variável pode guardar. Elas podem ser do tipo: Lógico: Assume apenas dois valores: verdadeiro ou falso. Inteiro: Assume valores numéricos inteiros (sem casas decimais). Real: Assume valores numéricos reais (com casas decimais). Caractere: Assume valores alfanuméricos. Mas como guardamos informações nas variáveis? Uma das formas é o uso do sinal de atribuição que funciona basicamente como o sinal de igual. O sinal de atribuição é “”. Assim, na linha n1 3; Temos a atribuição do valor 3 à variável n1. Também podemos executar operações com as variáveis, como adição, multiplicação, exponenciação, etc. Os principais operadores aritméticos são: Operação Adição Subtração Multiplicação Divisão Exponenciação Raiz Quadrada Resto da divisão Quociente da divisão Símbolo + * / **, ^, ↑ SQR() MOD DIV Assim, na linha : mult n*x; Temos que a variável mult terá o valor da multiplicação do valor de n (igual a 3) multiplicado pelo valor de x (2.5). Ou seja, mult guardará na memória o valor de 7.5. Duas operações merecem atenção especial por não serem muito comuns na álgebra básica, mas que tem grande importância na programação: o MOD e o DIV. O MOD fornece o resto de uma divisão, assim a linha: resto n2 MOD n1; Tem que fornecer o resto da divisão de 10 por 3, ou seja, resto será igual a 1. Já o DIV faz o papel contrário, fornece a parte inteira da divisão. A operação 10 DIV 3 seria igual a 3. Outros exemplos: 15 MOD 4 = 3 20 MOD 5 = 0 17 MOD 6 = 5 11 DIV 2 = 5 22 DIV 5 = 4 13 DIV 4 = 3 Para finalizar, retomemos o último programa exemplo dando a devida ênfase a alguns detalhes que devem ser observados: PROGRAMA mat_basica; VARIÁVEL n1, n2: INTEIRO; x, y, mult, divisao, resto: REAL; As variáveis de mesmo tipo são separadas por vírgulas. Os dois pontos são colocados depois da lista de variáveis e indicam que a seguir será identificado o TIPO das variáveis nome: CARACTER; INÍCIO n1 3; n2 10; As listas de variáveis terminam com um ponto e vírgula. x 2.5; y 3.2321; nome: “Rafael”; mult n*x; O separador decimal é o ponto e não a vírgula Valores alfanuméricos (do tipo CARACTER) devem estar sempre entre aspas. divisao x/y; resto n2 MOD n1; FIM. Lembre-se de colocar ponto-e-vírgula no final de cada instrução. EXERCÍCIOS 1. Complete o seguinte algoritmo em português estruturado, com os respectivos tipos das variáveis declaradas. PROGRAMA Compras; VARIÁVEL nomeCliente: ________________; qtdAbacaxi, qtdLaranja: ____________________; pcoAbacaxi, pcoLaranja, total: ____________________; INÍCIO nomeCliente “Rafael”; qtdAbacaxi 2; qtdLaranja 6; pcoAbacaxi 3.00; pcoLaranja 0.80; total qtdAbacaxi*pcoAbacaxi + qtdLaranja*pcoLaranja; FIM. 2. Escreva os seguintes algoritmos (em TODOS os casos, não se esqueça de incluir PROGRAMA, VARIÁVEL, INÍCIO e FIM; não se esqueça do ponto-e-vírgula e da indentação). a) Dadas as variáveis np1, np2 com os valores 5,0 e 7,5 respectivamente, faça um algoritmo que calcule e atribua à variável chamada med a média dos dois valores. (obs: lembre-se de usar parêntesis, pois a divisão tem prioridade sobre a adição). b) Crie quatro variáveis do tipo inteiro, atribua a três deles os valores 100, 1522 e 357 e para a quarta variável, atribua a soma desses três valores. c) Crie uma variável do tipo caractere, uma do tipo inteiro e uma do tipo real. Atribua a eles, em conformidade com os seus tipos, as seguintes informações: sua altura, seu nome e sua idade. 3. Qual o resultado das seguintes expressões? a) 5^2 + SQR(9) c) 10 mod 3 b) 15 mod 4 d) 10 div 3 DESAFIO O primeiro que entregar a resposta até o final da aula ganhará meio ponto na nota da prova. Dado o seguinte programa: PROGRAMA troca; VARIÁVEL a, b: INTEIRO; INÍCIO a 10; b 5; _________________; _________________; _________________; FIM. Apenas manipulando as variáveis a e b (não pode criar mais variáveis) e usando operações matemáticas (soma, subtração, etc), preencha as três linhas tal que os valores de a e b sejam trocados. Ou seja, ao final do programa, a deve valer 5 e b deve valer 10 (obviamente que não é permitido fazer a 5 e b 10).