Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE COMUNITÁRIA DA REGIÃO DE CHAPECÓ ACEA CURSO DE CIÊNCIA DA COMPUTAÇÃO Algoritmos e Estrutura de Dados I Apostila da Disciplina – Parte 1 Prof. José Carlos Toniazzo Chapecó, 2011 Português Estruturado O português estruturado é uma notação (padrão de escrita) que utilizaremos para construirnossos primeiros algoritmos. 1 - Operadores 1.1 - Aritméticos São símbolos conectivos usados para efetuar algum cálculo numérico. Comparando-se com a matemática, utilizaremos um conjunto mais limitado de operadores, mas que será suficiente para a construção de diversos algoritmos. + Soma de dois números - Subtração de dois números * Multiplicação de dois números / Divisão real entre dois números Exemplos: 2 + 3 é igual a 5 7 * 4 é igual a 28 3.2 * 9 é igual a 28.8 5 / 2 é igual a 2.5 2 – 9 é igual a -7 8 / 0 não é possível, pois não existe divisão por 0 8 * está sintaticamente errado, pois falta um elemento à direita do operador A diferença entre estes símbolos e aqueles usados na matemática é proposital, justamente porque em computação é mais comum trabalharmos com estes operadores (o asterisco, por exemplo, tem sido usado há anos como símbolo de multiplicação). 1.2 – Operadores Relacionais Como o próprio nome indica, um operador relacional existe para estabelecer uma relação entre dois elementos, cujo resultado da comparação será sempre falso ou verdadeiro. = Igual a > Maior que < Menor que >= Maior ou igual a <= Menor ou igual a <> Diferente de Há diferenças entre estes símbolos e os usados na matemática. Todos os símbolos acima são encontrados nos teclados dos computadores, o que facilita seu uso nas linguagens de programação. Da mesma forma que os operadores aritméticos, os operadores relacionais também fazem “contas” com elementos em um par, mas o resultado não é um número, e sim o estado lógico Verdadeiro ou Falso. Exemplos: 3 > 4 é igual a falso 10 >= 9 é igual a verdadeiro -1 > -2 é igual a verdadeiro 7.3 <> 8.9 é igual a verdadeiro < 15 está sintaticamente errado, pois falta um elemento à esquerda do operador 1.3 – Operadores Lógicos Estes operadores permitem estender o uso dos operadores relacionais, estabelecendo composições lógicas mais sofisticadas. e Conjunção de operação ou Disjunção de operação não Negação de operação (operador unário) Para entender como funciona cada um destes operadores, vamos apresentar a tabela verdade de cada um. Uma tabela-verdade é uma combinação de possibilidades a serem feias pelo operador, indicando cada tipo de resultado gerado. Se considerarmos X como o elemento à esquerda do operador e Y o da direita, as tabelas para cada operador fica com a seguinte forma: Tabela verdade do operador E X | Y | X e Y falso | falso | falso falso | verdadeiro | falso verdadeiro | falso | falso verdadeiro | verdadeiro | verdadeiro Tabela verdade do operador OU X | Y | X e Y falso | falso | falso falso | verdadeiro | verdadeiro verdadeiro | falso | verdadeiro verdadeiro | verdadeiro | verdadeiro Tabela verdade do operador Não X | Não X falso | verdadeiro verdadeiro | falso Estas tabelas são fixas. Com base nestas combinações, podemos formar expressões mais sofisticadas utilizando os outros operadores já vistos. Exemplos: 8 > 3 e 10 > 4 é igual a verdadeiro, pois ambas as relações são verdadeiras, e pela combinação da tabela-verdade do conectivo E, a resposta é verdadeira 8 > 3 e 10 < 4 é igual a falso, pois a primeira comparação é verdadeira e a segunda é falsa, e pela combinação da tabela-verdade do conectivo E, a resposta é falsa. não 4=4 é igual a falso, pois a negação da comparação 4=4 (que é verdade) dá falso 2 – Expressões Assim como na matemática, pode ser necessário fazer combinações entre os operadores. Além dos operadores, uma expressão pode conter também os símbolos de parênteses, para mudar a prioridade do cálculo. A tabela a seguir apresenta a prioridade assumida para o cálculo das expressões: 1º lugar Parênteses mais internos 2º lugar Funções 3º lugar Operadores aritméticos 1º lugar * / 2º lugar + - 3º lugar Operadores relacionais 4º lugar Operadores lógicos 1º lugar não 2º lugar e 3º lugar ou Havendo algum empate em uma expressão, deve-se fazer primeiro o cálculo da esquerda. Caso não exista um operador na expressão a ser avaliada, basta passar para o próximo, seguindo a prioridade. Exemplo 1: 3 + 4 * 9 4 * 9 = 36 3 + 36 = 39 Exemplo 2: (3 + 4) * 9 3 + 4 = 7 7 * 9 = 63 Exemplo 3: 10 > 9 e 5 + 4 > 14 1º 5 + 4 = 9 2º 10 > 9 = verdadeiro 3º 9 > 14 = falso 4º verdadeiro e falso = falso 3 – Conversão de Notação Com base nos operadores apresentados, passamos a usar uma notação algorítmica diferente daquela feita com as fórmulas matemáticas. Estas conversões permitem que as expressões sejam encaixadas corretamente em comandos nos algoritmos. Todas as chaves e colchetes matemáticos são convertidos em parênteses. a + b / c * d Ela inclui uma conta de adição, uma de divisão e outra de multiplicação. Assumindo que os valores são reais, a expressão algorítmica equivalente será: (a + b) / c * d 4 – Algoritmos � Utiliza um conjunto de comandos mais limitado do que a língua natural. No entanto estes comandos podem ser combinados entre si para resolver problemas complexos; � Promove maior rigor na construção para evitar a ambigüidade; o Ambigüidade = qualidade daquilo que pode tomar mais de um sentido � Torna o algoritmo uma lista ordenada de comandos combinados, cuja seqüência de execução é a solução do problema. 4.1 – Sintaxe e Semântica � Sintaxe: é o nome dado ao conjunto de regras a serem seguidas para a escrita dos algoritmos. � Semântica: refere-se ao que é efetuado pelo computador quando ele encontra um comando. Portanto: se a sintaxe está relacionada à forma de um comando, a semântica está relacionada ao seu conteúdo. 4.2 - Estrutura de um algoritmo Exemplo de algoritmo: // Algoritmo para calcular a idade de uma pessoa a partir do ano de seu nascimento Variáveis ANO_NASCIMENTO, IDADE, ANO_ATUAL : inteiro; Início ANO_ATUAL = 2008; ler ANO_NASCIMENTO; IDADE = ANO_ATUAL – ANO_NASCIMENTO; escrever IDADE; Fim. ler = quando o programa pergunta alguma coisa para o usuário escrever = quando o programa mostra alguma coisa para o usuário 4.2.1 - Componentes de um algoritmo: // = comentário Os comentários são textos incluídos na listagem do algoritmo para documentar as explicações do programador. São ignorados pela máquina, sendo úteis apenas para a pessoa que está lendo o algoritmo. Todo comentário no português estruturado começa por duas barras seguidas (//). O corpo do algoritmo é identificado pelas palavras início e fim. = = Comando de atribuição Chamamos de atribuição ao comando que permite armazenar o resultado de uma expressão dentro de uma variável, sendo considerada a instrução mais simples que podemos solicitar à máquina. Sintaxe (como escrever) do comando de atribuição: <nome da variável> = <expressão> Expressão pode incluir números, operadores, parênteses e nomes de variáveis, desde que respeitada a sintaxe de montagem das expressões. A indentação presenteno algoritmo acima é um recuo à direita em relação ao que seria a “margem” do algoritmo. A indentação também é ignorada pela máquina; sua utilidade é mostrar, para quem está lendo, que existe uma dependência daquele comando em relação ao item anterior. Veremos mais à frente que também é possível termos mais de um nível de indentação no algoritmo. OBS: Identação ou Indentação é FUNDAMENTAL para o correto entendimento do algoritmo, e será cobrada constantemente ao longo da disciplina. Uma variável é um local com um nome dentro da memória do computador, criado em um algoritmo para se armazenar um determinado dado. 4.3 – Variável Talvez o conceito de variável seja o mais importante na construção de algoritmos. Dificilmente um algoritmo é feito sem que sejam utilizadas variáveis; é muito importante, pois, compreender o que são e como devemos usá-las. Seguindo nosso exemplo acima, percebemos que para calcularmos a idade de alguém, é preciso fazer o seguinte cálculo: ano_atual – ano_nascimento. Este cálculo produzirá o resultado esperado pelo algoritmo. No entanto, precisamos mostrar esta informação na tela do computador e isso só é possível se guardarmos o resultado em um espaço de memória do computador que chamamos de IDADE. Assim o programa armazenará o resultado e podemos em seguida com o comando escrever, mostrar a idade na tela do computador. ANO_ATUAL = 2008 ANO_NASCIMENTO = 1971 IDADE = 37 Outro exemplo no mesmo algoritmo é a variável ANO_ATUAL. Neste algoritmo optamos por armazenar o ano atual em uma variável, ao invés de colocá-lo diretamente no cálculo da idade. Outra forma seria: IDADE = ANO_ATUAL – 2008. Uma variável é como uma caixinha dentro da memória do computador. Esta caixa tem a capacidade de guardar um dado. A variável possui um nome que pode ser considerada como uma etiqueta colada na caixinha. O conceito de variável em algoritmos não é o mesmo da matemática. O nome variável é utilizado porque o valor que é armazenado pode ser modificado “variado” durante a execução do algoritmo pela máquina. As variáveis são criadas e existem na memória durante a execução do algoritmo. Quando ele termina, é como se todos os dados fossem apagados, e as caixas destruídas. No exemplo do algoritmo acima, nós temos as seguintes variáveis: IDADE, ANO_NASCIMENTO, ANO_ATUAL 4.3.1 – Nome de variáveis Toda variável precisa ter um nome definido pelo programador, que deve ser único dentro de um mesmo algoritmo; com este nome o programador poderá fazer referências à variável no português estruturado. Na sintaxe do português estruturado que usaremos nesta disciplina, o nome da variável deverá começar por uma letra, e depois deve incluir apenas letras, dígitos ou ainda o sinal de sublinhado (“_”). Em programação, estes e outros nomes que são inventados pelo programador são chamados de identificadores. Nos nossos algoritmos os identificadores não poderão conter acentos, nem podem ter o mesmo nome de uma palavra usada como parte deum comando (veremos adiante que existe um comando LER, de modo que uma variável não pode se chamar LER). Veja alguns exemplos de nomes de variável válidos: • valor_pago • soma • aa • k • num • precofinal • litros • nome_do_funcionario • idade Exemplos de nomes de variáveis inválidos: • 1nota -> não começa por uma letra • médaarit -> possui um acento • quantidade inicial -> possui um espaço • valor_em_R$ -> possui um caractere inválido ($) A regra que estamos estabelecendo para a formação de um identificador é muito parecida com aquelas utilizadas em programação, por isto, você deve se acostumar a criar variáveis com os nomes neste formato. 4.2 – Tipos de variáveis Quando criamos uma variável estamos separando um espaço na memória do computador para armazenar alguma informação. Para que este espaço possa ser separado, temos que informar o tipo de dado que queremos armazenar. Veja alguns exemplos: �� Queremos armazenar o preço de uma blusa em um algoritmo par uma loja de roupas. Podemos criar uma variável chamada PRECO_PRODUTO, e o tipo de dado que ela vai guardar é real; �� Uma variável que vai armazenar a quantidade de latas de cerveja no estoque de um bar. Podemos criar uma variável chamada QUANT_LATAS, e o tipo de dado que ela vai guardar é inteiro; �� Uma variável que guarde a primeira letra do nome de um livro. O identificador pode ser LETRALIVRO, e ela é do tipo caractere; �� Uma variável que vai armazenar o nome do cliente de um supermercado. Podemos definir uma variável chamada NOME_CLIENTE, e o seu tipo de dado será uma cadeia de caracteres. 5 – Tipos de Dados Devemos considerar o que deve ser armazenado para atingir a solução do problema (algoritmo). Toda a fundamentação da construção do algoritmo é feita a partir do dado. Um dado é alguma informação em estado primitivo, uma representação de uma situação ou idéia, cujo processamento pode gerar uma informação útil. Exemplo: � O número 8,5 pode ser um dado a ser utilizado em um algoritmo. Pode representar uma nota obtida por um aluno em um algoritmo para o cálculo da sua média final. Neste caso, o número 8,5 é uma informação. Em outro problema, ele também poderia representar a temperatura em uma noite fria de inverno, mudando totalmente a informação nele embutida; � A letra A, isoladamente, é um dado bruto. Num algoritmo, contudo, ela pode representar uma opção escolhida por alguém para “A”lterar o preço de um produto; � O valor 18 pode representar a informação de que uma pessoa tem 18 anos. Também poderia ser a quantidade de caixas de refrigerante no estoque de um bar. Um tipo de dado representa o conjunto de valores possíveis para um dado. Usaremos cinco tipos de dados: 5.1 – Inteiro Representa qualquer valor contido no conjunto dos números inteiros, como 18, 45, 32, -10, 0, 5200, etc. Utilizamos dados inteiros para representar informações que, por sua natureza, não têm parte fracionária. Exemplo: � A quantidade de funcionários em uma empresa é um dado inteiro, pois não existe parte fracionária (não há, por exemplo, uma ½ pessoa...); � O número de cheques emitidos por um correntista também é um dado inteiro, pois não há como emitir uma quantidade fracionária de cheques; � O número de automóveis fabricados por uma empresa é um tipo de dado inteiro, também porque não há frações de carros. 5.2 – Real O tipo real é mais abrangente, pois representa qualquer valor contido no conjunto dos números reais, tendo ou não parte fracionária. Ex.: 8.5, 3.14, 10, - 0,30, etc. Repare que o separador da parte decimal é um ponto; no nosso português estruturado, usaremos o ponto para acostumar o leitor a utilizar uma notação próxima a das linguagens de programação (quase todas usam o ponto decimal como separador). Veja alguns exemplos de tipos de dados reais: � O valor a pagar por uma compra em uma loja: real, pois representa um valor monetário que pode incluir centavos (uma compra pode até resultar em um valor exato, como R$100,00, mas a natureza do dado continua sendo real). � Litros abastecidos em um posto de gasolina é um tipo de dado real, pois é possível fazer um abastecimento de uma quantidade fracionária de litros (23.7, por exemplo); � Altura de uma pessoa em metros: também é real, pois normalmente medimos a altura com duas casas decimais (por exemplo, 1.83). 5.3 – Lógico Os tipos inteiro e real são utilizados para representar dados numéricos. Há situações, contudo, em que um algoritmo precisa armazenar na memória um dado que representaum estado, uma situação que só pode ser verdadeira ou falsa (e nenhuma outra a mais). Dizemos então que o tipo de dado é lógico (ou booleano, por ter sido desenvolvido na álgebra de Boole). Veja alguns exemplos: � Um cheque emitido pode ou não ter fundos: se quisermos armazenar a situação deste cheque (não o valor, mas o seu estado) o tipo é lógico, já que ter fundos é uma situação que só pode ser verdadeira ou falsa; � Estado de funcionamento de um automóvel: lógico, pois o automóvel só pode estar ligado ou desligado; � Estado de funcionamento de um chuveiro: lógico, uma vez que ele pode estar aberto ou fechado. 5.4 – Caractere Representa um caractere a ser armazenado na memória. Um caractere pode ser uma letra (A,F,K...) um dígito (7,4,0...) ou outro símbolo ($, @, %, um espaço em branco...). Acompanhe cós exemplos a seguir: � A opção escolhida por um aluno numa questão de múltipla escolha é um caractere, se considerarmos que ele pode escolher entre A e E; � O símbolo de uma operação aritmética escolhido pelo usuário em uma conta, por exemplo, + ou -, também é um dado do tipo caractere.; � O sinal de pontuação no final de uma frase é um dado do tipo caractere, pois pode ser o sinal “.” ou ainda “?” ou “!”. 5.5 – Cadeia de caracteres- String Representa um conjunto de caracteres a ser armazenado na memória, que pode ser composto por letras, dígitos ou outros símbolos. Veja os exemplos: � O nome do vendedor em uma loja: é uma cadeia, pois o nome é composto por letras e espaços (por exemplo, CARLA DA ROSA); � Um telefone de um cliente de uma corretora: também é uma cadeia. Observe que o telefone poderia se, por exemplo, 5555-1234 (uma cadeia composta por dígitos e o símbolo de traço). Mesmo que se imagine apenas dígitos (5551234), a sua natureza é ser uma cadeia de caracteres – ele não é um valor numérico; � Endereço de entrega de um produto: é uma cadeia. Ex: RUA DAS FLORES, 23 – Grupo 8. Observações sobre tipos de dados: Em algoritmos, sempre que quisermos escrever uma cadeia de caracteres, ou apenas um caractere, estes serão envolvidos por aspas simples (‘). Esta sintaxe será útil para não haver confusão com nomes que serão criados pelo programador. Assim, nos exemplos anteriores, teríamos as cadeias ‘CARLA DA ROSA’, ‘555-1234’, ‘B’ ou ainda ‘RUA DAS FLORES, 23 –Grupo 8’. Quando formos escrever um número, só usaremos dígitos, ponto decimal e sinal de mais ou de menos; qualquer outra escrita do número será considerada um erro de sintaxe. Ex: se tivermos que utilizar o valor R$20,50, referente a uma compra, escreveremos apenas o número 20.50, simplesmente (retirando o símbolo monetário e trocando a vírgula pelo ponto). Observações Importantes: � Os valores das variáveis que são dos tipos de dados caracter e cadeia de caracteres sempre deverão estar entre aspas simples. Ex.: ‘A’ ou ‘Sistemas de Informação’. � O separador usado para identificar as casas decimais será sempre o ponto. Ex.: 12.35 ou 1.5; 6– Sintaxe: Entrada: o Sintaxe: ler <VARIÁVEL>; o Ex.: ler NUM1; Saída: o Sintaxe: escrever <VARIÁVEL> , <expressão> , <mensagem>, ...; o Ex.: escrever NUM1; o Ex.: escrever “Ciência da Computação”; o Ex.: escrever NOME , “Ciência da Computação”; Exemplo: // Algoritmo para mostrar a soma de dois números Variáveis NUM1, NUM2, SOMA: inteiro; Início ler NUM1; ler NUM2; SOMA = NUM1 + NUM2; escrever SOMA; Fim Variáveis Início Fim Palavras que estruturam o algoritmo inteiro Tipo da variável ler escrever Comandos de entrada e de saída ; Indica o fim de um comando = + Atribuição de valores e sinal de operação // Comentário para documentar o algoritmo Continua...
Compartilhar