Sumário Algoritmia e Programação Vitor Pereira Conceitos sobre a unidade curricular e a licenciatura Introdução à programação de computadores Algoritmos diversos O Visual Basic e o Visual Studio Vitor Pereira [[email protected]] Docente Algoritmia e Programação Conceitos sobre a unidade curricular e a licenciatura Docente: Prof. Vítor Pereira Gabinete 8 – Edifício D Email: [email protected] Use o Assunto para resumir o conteúdo do email. Assine o email indicando o seu nome, número e curso. Nota 1: Utilize o email para esclarecer dúvidas sobre a ficha de exercícios. Nota 2: Não utilize o email para assuntos fora do âmbito da unidade curricular ou de docência. Nota 3: questões sobre a unidade curricular mas específicas ao regulamento institucional devem ser colocadas na secretaria (por exemplo, “tive a nota X. tenho oral?”) Vitor Pereira [[email protected]] 1 Algoritmia e Programação Objectivo: Tomar consciência das capacidades e limitações do computador na resolução de problemas do mundo real, utilizando uma linguagem de programação simples mas poderosa para criar aplicações úteis. Site da unidade curricular (UC): Considerações sobre as Licenciaturas http://alunos.fam.ulusiada.pt/~d1227/ap/ 3 anos. 2 semestres por ano (6 no total, portanto). 5 UCs por semestre (30 no total, portanto). 15 semanas de aulas teórico-práticas (TP). 20 semanas de aulas de orientação-tutória (OT) (as últimas 5 coincidem com as avaliações). 40 horas de estudo por semana: 15 horas de contacto: 3 horas por UC (2 horas TP + 1 hora OT) + 25 horas de estudo individual Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Aulas TP e OT Avaliação Geral TP: Teórico-Práticas Aula onde o docente expõe a matéria teórica necessária à compreensão dos conhecimentos a serem transmitidos, complementada pela demonstração de exercícios práticos. Dois regimes Aula usada para esclarecimento de dúvidas e orientação do estudo, onde o centro do processo ensinoaprendizagem é o estudante. Avaliação contínua + Frequência Elementos de avaliação contínua: pontos escritos, trabalhos individuais/grupo, intervenção oral, visitas estudo, outros elementos. Ponderação da informação final de frequência: Nota da avaliação contínua: 60%; nota da frequência: 40% Regime B Exame + Oral (para notas iguais ou superiores a 8 valores) Mais informações: Vitor Pereira [[email protected]] OT: Orientação-Tutória Regime A http://www.fam.ulusiada.pt/ingresso/regulamentos.htm Regulamentos disponíveis na página web da unidade curricular Vitor Pereira [[email protected]] 2 Avaliação Contínua de Algoritmia e Programação Dois pontos escritos: 75% Datas Ver ficheiro no site da unidade curricular. Outros elementos: 25% Bibliografia Participação em trabalhos/exercícios práticos; Participação em iniciativas e trabalhos desenvolvidos nas aulas; Intervenções orais; Nível de expressão literária, incluindo o aspecto formal da exposição oral ou redacção, a pontuação e a ortografia. Bibliografia Principal: Vitor Pereira, “O Guia Prático do Visual Basic 2010”, Centro Atlântico. http://www.centroatlantico.pt/ Disponível no site da unidade curricular: programa da unidade curricular: informações sobre a unidade curricular, incluindo todos os detalhes sobre a bibliografia. syllabus: planeamento das aulas e respectiva bibliografia recomendada. Nota: está disponível na reprografia da Universidade um texto sobre a introdução à algoritmia/programação. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Linguagem de Programação Faculdade de Engenharia e Tecnologias Visual Basic 2010 Express (grátis). Descarregue a partir da Internet o ambiente de desenvolvimento integrado Visual Studio (tamanho: 700 MB); http://www.microsoft.com/express/Windows/ Em alternativa, copie o Visual Studio a partir dos servidores da Universidade: 1. 2. 3. 4. 5. 6. Diretor da Faculdade: Prof. Doutor Rui Silva Email: [email protected] Abra o explorador do Windows (Os Meus Documentos) Na barra de endereço digite: \\caldo\ciul Na janela de login que aparece insira o seu nome de utilizador e palavrapasse Abra a pasta Software Copie a pasta com o Visual Studio para uma pen Copie da pen para o SEU computador e execute o ficheiro setup.exe Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 3 Faculdade de Engenharia e Tecnologias 1º Ciclo (Licenciaturas) em em em em Engenharia Engenharia Engenharia Engenharia 2º Ciclo (Mestrados) Eletrónica e Informática e Gestão Industrial Civil Mecânica Mestrado Mestrado Mestrado Mestrado Mestrado Doutoramento em Engenharia e Gestão Industrial Licenciatura Licenciatura Licenciatura Licenciatura Algoritmia e Programação Introdução à programação de computadores em Gestão de Energia em Engenharia e Gestão Industrial em Gestão de Operações em Engenharia Electrónica e Informática em Automação Industrial 3º Ciclo (Doutoramento) Vitor Pereira [[email protected]] Sumário 1. 2. 3. 4. 5. Diagrama de um Computador Introdução à Programação de Computadores Introdução à Informática Algoritmia Dados, Tipos de Dados e Operações Primitivas Variáveis, Constantes e Operadores Vitor Pereira [[email protected]] Entrada de Dados (input) Processamento Saída de Dados (output) Vitor Pereira [[email protected]] 4 Programação de Computadores Definições Linguagens de Programação Simplicidade/A mbiguidade São conjuntos de palavras utilizadas na escrita de programas, de acordo com um léxico próprio sujeito a uma determinada estrutura e, na maior parte das vezes, vocacionadas para uma particular área de assuntos Enunciado do Problema Em Linguagem Natural Programa Conjunto de instruções com um sequência lógica e previamente estabelecida que permite a execução de tarefas pelo computador Algoritmo Da Resolução em Linguagem Pseudo-Natural Vitor Pereira [[email protected]] É a única linguagem que o computador entende e tem por base zeros e uns (sistema binário). Os zeros e uns (0,1) representam a passagem de corrente de baixa e alta tensão pelo cabo de alimentação do computador. Linguagem orientada para a máquina cujas instruções podem ser directamente utilizadas pelo computador. Depende de computador para computador, isto é, existem diferentes versões de linguagem máquina. Vitor Pereira [[email protected]] Complexidade/O bjetividade Programa em Linguagem Máquina Vitor Pereira [[email protected]] Linguagem Máquina Programa em Linguagem Formal Classificação de Linguagens Existem dois grandes tipos: Linguagens de alto nível Linguagens de baixo nível de acordo com a proximidade que têm da linguagem humana. Linguagem de baixo nível: orientadas para a máquina (computador), difícil de entender por um ser humano. Exemplo: LD A,B; ADD A,C Linguagem de alto nível: fáceis de entender por um ser humano. Exemplo: soma=a+b+c Vitor Pereira [[email protected]] 5 Linguagens de Programação Classificação de Linguagens Linguagem Nível Classificação Função Assembly, C Baixo, Médio Linguagem Máquina e Assembler Desenvolvimento de sistemas Algol, APL, Pascal, C, Fortran, Basic, PL/1 Médio, Alto Cobol, PL/1, Basic Logo, ADA, Lisp, RPG, Prolog Alto Alto Linguagens Científicas Linguagens “comerciais” Linguagens “inteligentes” Trabalhos académicos e investigação científica Programa de gestão e comércio Inteligência artificial Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Linguagens de Programação C, médio/alto nível, linguagem bastante flexível, semelhante à linguagem Pascal. C++: extensão da linguagem C orientada aos objetos. C#: linguagem recente da Microsoft derivada das linguagens C e C++, Java e Visual Basic, entre outras. Borland Delphi: a versão Delphi 2007 suporta a linguagem de programação Delphi (Object Pascal) e o C++/C#. Usado em aplicações de bases de dados J#: contra-ataque da Microsoft à linguagem Java. Java: linguagem popular orientada aos objetos e otimizada para a Internet desenvolvida pela Sun Microsystems. Vitor Pereira [[email protected]] Assembler: baixo nível, orientada para a máquina. ADA (Lady Ada Lovelace, 1860): em honra da matemática e primeira programadora. Algol (Algorithmic Oriented Language): linguagem de alto nível para expressar algoritmos. APL (A Programming Language): Alto nível, vocacionada para a utilização de vectores, matrizes e funções matemáticas. Basic (Beginner’s All-purpose Symbolic Instruction Code): linguagem de alto nível e de fácil compreensão. Linguagens de Programação Cobol (Common Business Oriented Language): orientada para aplicações comerciais. Fortran (Formula Translation System): de alto nível, destinada a aplicações técnico-científicas. Pascal (Blaise Pascal, 1640, matemático): linguagem estruturada e de alto nível. PL/1 (Programming Language One): alto nível, orientada para o problema e aplicações comerciais. RPG (Report Program Generator): orientada para a administração. Vitor Pereira [[email protected]] 6 Compiladores Fases da Actividade de Programação Definição do problema Planificação da resolução Implementação – codificação Teste e depuração Documentação Manutenção 1. 2. 3. 4. 5. 6. Software que permite traduzir um dado programa escrito numa dada linguagem de programação para linguagem máquina. Infelizmente, por falta de padronização a 100% existem diferentes dialectos para uma mesma linguagem de programação, todos eles com pequenas diferenças relativamente aos outros. Exemplos: Basic, Basica, GWBasic, Turbo Basic, MS Quick Basic. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Programas Programa fonte: programa original, escrito numa qualquer linguagem de programação. Programação São guardados em ficheiros com extensão BAS, VB, C, CS, etc., de acordo com a linguagem. Programa objecto: programa em linguagem máquina resultado da compilação e que pode ser executado. Vitor Pereira [[email protected]] Engloba todo o conjunto de trabalhos de concepção, escrita e teste de programas. O método mais comum é o da programação estruturada, designado por método Top-Down (isto é, refinar sucessivamente cada passo da solução). Top-Down. Permite o estabelecimento de módulos e figuras lógicas padrão, com o objectivo de reduzir o grau de incerteza dos resultados e o tempo dos testes. Emprega o mínimo de estruturas lógicas, usando estruturas condicionais e de repetição. Outro método comum é o da programação modular. Vitor Pereira [[email protected]] 7 Estrutura Genérica de Programa Cabeçalho Corpo geral do programa Identificação do Programa Identificação dos Dados Início Operação 1 a efetuar Operação 2 a efetuar ... Operação n a efetuar Fim Módulo A partes do programa com função específica Módulo N Introdução à Informática: Computador Início Parte A Fim parte A Efectua tarefa a1 Efectua tarefa a2 ... Efectua tarefa an Início Parte N Efectua tarefa n1 ... Efectua tarefa nm Fim parte N Vitor Pereira [[email protected]] Diagrama de Blocos de um Computador Digital 1 2 ... Memória Unidade Central de Processamento (Microprocessador) Dispositivos de Input/Output Vitor Pereira [[email protected]] n Vitor Pereira [[email protected]] O computador é um dispositivo lógico programável de uso geral capaz de executar várias funções e tomar decisões para alterar a execução do programa. É necessário, geralmente, conceitos e conhecimentos de duas disciplinas diferente: conceitos de hardware da electrónica e de programação da informática. O hardware é a estrutura física do computador; A programação fá-lo funcionar: Uma área sem a outra não faz sentido. Diagrama de Blocos de um Computador Digital A UCP está associada ao cérebro humano: é aqui que todas as decisões são tomadas A Memória armazena a sequência de comandos que indicam o que fazer (programa) bem como dados necessários à execução do programa. Os dispositivos de I/O são necessários para que a tarefa tenha utilidade: teclado, monitor, etc. Estes três componentes comunicam entre si através de um conjunto de linhas que servem como meio de comunicação. Vitor Pereira [[email protected]] 8 Diagrama de Blocos de um Computador Digital Unidade Central de Processamento (UCP) Memória: cada célula tem um número identificador ou endereço. A cada endereço está associado um conteúdo, que é o valor armazenado naquela célula de memória O que significa o conteúdo de cada célula? Números sem significado para nós; para a UCP representam um conjunto preciso de comandos que a instruem a executar uma sequência de operações. Estes números representam os códigos das operações para as várias instruções do conjunto de instruções da UCP. Unidade Central de Processamento Unidade Aritmética e Lógica (UAL) Unidade de Controlo (UC) Registos (área de armazenamento temporário de dados) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] UCP Bits e Bytes Unidade Aritmética e Lógica (UAL). Área onde são realizadas as operações sobre os dados; operações aritméticas: soma e subtracção, etc.; operações lógicas: E (AND), OU (OR), NÃO (NOT). Registos: São áreas de armazenamento de dados temporários durante a execução do programa. Unidade de Controlo (UC). Envia sinais para sincronizar e controlar todas as operações do computador. Controla o fluxo de dados entre o microprocessador, a memória, e os dispositivos I/O. Vitor Pereira [[email protected]] Unidade básica de informação é o bit – 0/1: (binary digit – dígito binário). 1 byte=8 bits “Este computador tem um processador Pentium de 32 bits, 128 megabytes de RAM e um disco rígido de 40 gigabytes.” Servem para medir a capacidade da memória (RAM/ROM), de discos e disquetes e o tamanho ocupado por ficheiros. Um computador é uma máquina ON/OFF. Os circuitos lógicos que controlam as operações do computador produzem +5V ou 0V. Vitor Pereira [[email protected]] 9 Porquê usar o sistema binário? Circuitos do computador apenas têm de manipular 2 dígitos, em vez de 10 Desenho é simplificado Menor custo Rentabilidade melhorada Componentes electrónicos operam num modo binário Tudo o que pode ser feito na base 10 pode também ser feito em binário. aceso ligado on verdadeiro 1 apagado desligado off falso 0 Memória Principal Representação de dados: sistema binário Subdivisão mais comum: cada endereço armazena 1 byte. Códigos: número de dígitos binários determinam o número de valores de códigos possíveis n dígitos binários permitem 2n códigos (4 bits 16 códigos; 8 bits 256 códigos, etc.) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Potências de Base 2 Nome Abreviatura Tamanho Kilo K 210=1,024 Mega M 220=1,048,576 Giga G 230=1,073,741,824 Tera T 240=1,099,511,627,776 Peta P 250=1,125,899,906,842,624 Exa E 260=1,152,921,504,606,846,976 Zetta Z 270=1,180,591,620,717,411,303,424 Yotta Y 280=1,208,925,819,614,629,174,706,176 Vitor Pereira [[email protected]] Tipos de Dados O computador manipula e armazena vários tipos de dados diferentes: Números inteiros sem sinal (positivos) Números inteiros com sinal (positivos e negativos) Números fraccionários Valores lógicos (verdadeiro/falso) Caracteres não numéricos (letras, sinais de pontuação, caracteres especiais) Vitor Pereira [[email protected]] 10 Valores e significado de 3 bits String de bits 000 001 010 011 100 101 110 111 Inteiro sem sinal 0 1 2 3 4 5 6 7 Inteiro com sinal +0 +1 +2 +3 -4 -3 -2 -1 Unicode Fracção sem sinal Cor Cidade 0 1/8 ¼ 3/8 ½ 5/8 3/4 7/8 Preto Castanho Vermelho Laranja Amarelo Verde Azul Violeta Porto Lisboa Braga Famalicão Coimbra Faro Guimarães Beja É o código usado pela maior parte dos computadores e que representa todos os caracteres, independentemente da língua, programa ou sistema operativo. Cada carácter ocupa 2 bytes/16 bits. Logo, pode representar 65536 códigos possíveis (216). Alfabeto em maiúsculas e minúsculas, numerais, sinais de pontuação e outros caracteres não imprimíveis (CR = carriage return e LF = line feed). Dígitos e alfabeto estão ordenados sequencialmente. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmia “Os Computadores são máquinas estúpidas” Não pode haver ambiguidade nas instruções que damos ao computador; não pode haver a possibilidade de interpretações alternativas. Exemplo de instrução imprecisa : “calcula a nota média deste teste”: Vitor Pereira [[email protected]] Infelizmente, os computadores fazem aquilo que lhes mandamos fazer, não necessariamente, aquilo que queremos que eles façam. Onde estão as notas? Quantas são? O que fazer com os alunos que faltaram? etc. Vitor Pereira [[email protected]] 11 Resolução do Problema e Programação Programação de Computadores Sequência de instruções escritas numa dada linguagem de programação, que descrevem acções a serem executadas pelo computador, visando a resolução de um problema. A programação de computadores pode ser difícil: Problema Difícil Os bons programadores são bem pagos. É uma actividade complexa que combina vários processos mentais. É possível, no entanto, torná-la mais simples (técnica do “dividir para conquistar”: dividir um problema complexo em várias sub-tarefas menos complexas). Programa de Computador (Solução) Vitor Pereira [[email protected]] Consiste num processo de duas fases: Fase resolução do problema. Objectivo: produzir uma solução para o problema em forma algorítmica. Fase implementação. Objectivo: implementar o algoritmo numa determinada linguagem de programação Vitor Pereira [[email protected]] Solução na Forma Algorítmica Fase implementação Vitor Pereira [[email protected]] Desenvolvimento de Programas de Computador Fase resolução do problema Fase Resolução do Problema Não é fácil! Não existe uma fórmula, algoritmo, ou método que garanta uma solução para o problema. É fundamental que os programadores principiantes pratiquem as suas habilidades de resolução de problemas e construam uma base de experiências por forma a poderem resolver novos problemas propostos. Existem alguns princípios orientadores por forma a facilitar resolução de problemas... Vitor Pereira [[email protected]] 12 Princípio Orientador “DIVIDIR PARA CONQUISTAR” Problemas difíceis são tornados mais simples se forem divididos em problemas mais simples, isto é, problemas para os quais seja mais fácil encontrar uma solução. De seguida, as resoluções dos vários problemas mais simples são combinadas de uma forma organizada para atingir a resolução do problema original. Níveis de Detalhe Os algoritmos podem ser expressos em vários níveis de detalhe. O problema é, ele próprio, uma solução, apesar de a um nível geral ou abstracto; A implementação final é a solução com mais nível de detalhe; No meio encontram-se outras soluções, com outros níveis de abstracção. Outro princípio é reconhecer semelhanças entre um dado problema e problemas resolvidos anteriormente. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmos Algoritmos Sequência finita e ordenada de passos não ambíguos sob a forma de instruções, que conduzem à resolução de um problema num tempo finito Propriedades dos algoritmos: As instruções têm de pertencer às operações básicas (primitivas) que o computador conhece; O computador pode não saber multiplicar mas pode, contudo, realizar multiplicações através de somas. A resolução tem de ser conseguida num tempo finito. Uma sequência de instruções para calcular todos os número primos não é um algoritmo. Exemplo de Solução finita mas sequência de instruções infinita. 1. 2. 3. Vitor Pereira [[email protected]] Exemplo: dividir um número positivo X por 5: Q 0. X X – 5. Q Q + 1 Se 0 < X < 4 termina. O quociente é Q e o resto é X. Se não, retorna ao passo 2. Funciona se X 5; Não funciona se 0 < X < 4. Vitor Pereira [[email protected]] 13 Algoritmos Resultados corretos para X > 0: 1. 2. Formas de Expressar Algoritmos 3. Q 0. Se 0 < X < 4 termina. O quociente é Q e o resto é X. Se não, X X – 5. Q Q + 1 Retorna ao passo 2. Algoritmos “corretos” também podem ser melhorados. Algoritmos robustos devem garantir que os valores introduzidos produzem resultados corretos. A formulação de algoritmos corretos e robustos é um dos mais importantes aspetos da programação Descrição narrativa Fluxograma Linguagem algorítmica Uma descrição verbal dos passos que levam à resolução do problema. Forma gráfica da descrição de um problema Uma mistura entre a linguagem natural e a precisão lógica de esquemas como os fluxogramas. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Descrição Narrativa Exemplos: Receitas de Culinária Outro exemplo: Receita de Culinária Identificação do Programa Bacalhau à Brás Ler um conjunto de quatro notas. Calcular a média somando-as e dividindo o resultado por 4. Se esta média for inferior a 10, mostre a média com uma mensagem de não aprovado; senão mostre a média com uma mensagem de aprovado. A linguagem natural é imprecisa: pode haver ambiguidade e/ou perda de informação. Usa muitas palavras. Vitor Pereira [[email protected]] Identificação dos Dados 600 gramas de bacalhau 0,5 dl de azeite 30 gramas de margarina 1 dente de alho 1 cebola grande 150 gramas de chouriço de carne 750 gramas de batatas 6 ovos sal e pimenta q.b. (quanto basta) salsa e azeitonas Vitor Pereira [[email protected]] 14 Receita de Culinária Corpo Geral do Programa 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Limpe o bacalhau, retire-lhe todas as espinhas e corte-o em cubos com 1 cm de lado. Corte o chouriço também em pequenos dados iguais. Descasque as batatas, corte-as igualmente em pequeninos cubos, lave-as muito bem, escorra-as e frite-as; tempere-as depois de fritar (com sal). REPITA o Passo 5 seis vezes Parta um ovo para dentro de um recipiente. Bata os ovos. Pique grosseiramente a cebola e o dente de alho, deite-os num tacho largo (ou numa frigideira), leve ao lume a refogar e, logo que comece a querer alourar, junte o chouriço e o bacalhau e vá mexendo sempre, sobre o lume, durante 2 minutos. Junte depois as batatas, mexa muito bem mais um minuto e, por fim, junte os ovos batidos. Vá mexendo com cuidado até os ovos estarem mais ou menos passados, a seu gosto. Deite então numa travessa e sirva quente, polvilhado com salsa picada e azeitonas. SE gostar de vinho maduro ENTÃO aconselha-se vinho alentejano; SENÃO beba o que tiver disponível. Fluxograma “Uma imagem vale por mil palavras” Um mapa de uma cidade ou um diagrama para montagem de um produto são exemplos de imagens que valem por mil palavras. Um Fluxograma é uma forma gráfica que representa a descrição de um problema Mostra a lógica do algoritmo, salientando os passos individuais e as suas interconexões, isto é, a forma como o controlo passa de uma acção para a seguinte. Vitor Pereira [[email protected]] Fluxogramas: Símbolos Vitor Pereira [[email protected]] Fluxograma: Exemplo Simples Início Cálculo Decisão Entrada de dados (input) Saída de dados (output) Fluxo de dados nota1, nota2, nota3, nota4 Vitor Pereira [[email protected]] Ler as notas Média(nota1+nota2+ nota3+nota4)/4.0 Sim Média <10? “Reprovou com a nota”, Média Fim Calcular a média Não “Parabéns! Passou com a nota”, Média Mostrar o output Vitor Pereira [[email protected]] 15 Linguagem Algorítmica 1. 2. 3. 4. Os algoritmos são descritos de uma forma linear: fáceis de ler e compreender. Usa uma sequência de passos numerados escritos de uma forma prosaica. Também conhecido por pseudocódigo. Ler um conjunto de quatro notas Calcular a sua média, somando e dividindo por quatro Se a média for inferior a 10, mostrar a mensagem “Não Aprovado”; senão, mostrar a mensagem “Aprovado” Fim Problema 2. 3. Buscar os itens necessários Pesar a farinha Guardar os itens A ordem da resolução é importante! 1. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Refinar Passo 1 do Algoritmo 1.1 Buscar o saco de farinha 1.2 Buscar a balança 1.3 Buscar a taça Pesar meio quilo de farinha para uma taça. Refinar Passo 2 do Algoritmo 2.1 Pesar a taça e memorizar o peso 2.2 Deitar um pouco de farinha na taça 2.3 ENQUANTO não existir exactamente meio quilo de farinha na taça, adicionar ou remover um pouco de farinha Nota: foi usado um sistema de numeração hierárquico (estes passos são um refinamento do passo 1). Vitor Pereira [[email protected]] O computador pode repetir uma ou mais instruções enquanto uma determinada condição for verdadeira. Os programadores usam o termo ciclo para se referirem às repetições. Um ciclo é, portanto, uma estrutura de controlo da sequência de um algoritmo O passo 2.3 pode ainda ser refinado Vitor Pereira [[email protected]] 16 Refinar o passo 2.3 2.3 ENQUANTO o peso da taça, medido pela balança, não for igual ao peso da taça mais meio quilo: SE o peso da taça e da farinha for inferior ao peso da taça mais meio quilo ENTÃO adicione um pouco de farinha à taça; SENÃO remova um pouco de farinha da taça. Atente na nova estrutura de controlo da sequência de um algoritmo. Uma condição é avaliada e de seguida um conjunto de duas alternativas é executado. A estrutura SE...ENTÃO...SENÃO está contida dentro do ciclo. A condição associada ao SE é avaliada repetidas vezes. Algoritmo Final 1.1 1.2 1.3 2.1 2.2 2.3 Buscar o saco de farinha Buscar a balança Buscar a taça Pesar a taça e memorizar o peso Deitar um pouco de farinha na taça ENQUANTO o peso da taça, medido pela balança, não for igual ao da taça mais meio quilo: SE o peso da taça e da farinha for inferior ao peso da taça mais meio quilo ENTÃO adicione um pouco de farinha à taça; SENÃO remova um pouco de farinha da taça. 3.1 Guardar a balança 3.2 Guardar a farinha Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmo 94 (versão 1) 1. 2. Variáveis Calcular 94 (nove à quarta), isto é, 9999. Calcular 9999 Mostrar o resultado O computador usa dados armazenados em memória e armazena os resultados também em memória. Para que o resultado do cálculo do passo 1 possa ser usado no passo 2 é necessário uma variável. Vitor Pereira [[email protected]] peso É uma entidade à qual está associado um valor armazenado em memória. O valor armazenado pode variar mas num dado instante apenas um valor está disponível. Uma variável é especificada através de um nome (ou identificador). Por exemplo, para atribuir o valor zero a uma variável Soma é: Soma 0 Vitor Pereira [[email protected]] 17 Cálculo de 94 1. 2. Cálculo de 94 (continuação) Produto 9*9*9*9 Mostrar o valor armazenado na variável Produto Note a utilização do operador * (asterisco) para a multiplicação. O exemplo seguinte mostra uma alternativa, ilustrando como armazenar e mais tarde obter o valor de uma variável (este algoritmo já está terminado) 1.1 1.2 1.3 1.4 1.5 2. Produto 1 Produto Produto * 9 Produto Produto * 9 Produto Produto * 9 Produto Produto * 9 Mostrar o valor de Produto Os passos são executados pela ordem que aparecem. Combinando o cálculo da potência uma multiplicação de cada vez com a noção de ciclo enquanto permite a criação de um algoritmo mais genérico (ver acetato seguinte) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Tabela de Traçagem do Algoritmo (incompleta) Algoritmo 94 (versão 2) 1. 2. 3. 4. 5. 6. Base 9 Expoente 4 Produto 1 Contador 1 Repete Enquanto Contador <= Expoente 5.1 Produto Produto * Base 5.2 Contador Contador + 1 Mostrar os valores de Base, Expoente e Produto Passo Base Expoente Produto Contador 1 9 ? ? ? 3 9 4 1 ? 4 1 2 4 5 5.1 5.2 5 5.1 Vitor Pereira [[email protected]] 9 4 9 4 9 9 9 9 9 4 4 4 4 ? 1 9 1 9 81 Resultado ? 1 9 Teste Ciclo 1 2 2 2 True True Vitor Pereira [[email protected]] 18 Algoritmo Soma Primeiros 100 Números Inteiros Algoritmo Potenciação Escrever (“Qual a base?”) Ler (Base) Escrever (“Qual o expoente?”) Ler (Expoente) Produto 1 Contador 1 Repete Enquanto Contador <= Expoente 1. 2. 3. 4. 5. 6. 7. 8. 7.1 Produto Produto * Base 7.2 Contador Contador + 1 Calcular a soma dos primeiros 100 números inteiros (1+2+3+...+98+98+100) Total 0 Contador 1 Repete Enquanto Contador <= 100 1. 2. 3. 4. 3.1 Total Total + Contador 3.2 Contador Contador + 1 Escrever(Total) Crie uma tabela de traçagem deste algoritmo Escrever(Base, Expoente, Produto) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Dados, Tipos de Dados e Operações Primitivas O computador manipula informação ou dados: Inteiros (sem parte fraccional) Reais (contêm sempre parte decimal) Booleanos (tipos de dados lógicos) Texto/Caracteres (cadeias de caracteres) Exemplo: 13 7 -6 208 -295 7830 -1 Exemplo: 10.0 23.8 2.672 -8.910 -7.7 3.14159265 Verdadeiro, Falso (em Inglês, True, False) Caracteres alfabéticos, dígitos e caracteres especiais São colocados entre aspas (“”) Exemplo: “Universidade Lusíada” “2003” “3 + 4 é igual a 7” Vitor Pereira [[email protected]] Tipos de Dados Primitivos Dados Numéricos Inteiros Reais Alfanuméricos (Cadeias de Caracteres; Strings) Lógicos Vitor Pereira [[email protected]] 19 Expressões,Variáveis, Constantes e Operadores As expressões combinam variáveis, operadores e constantes para produzir um resultado. As variáveis são nomes usados para representar posições na memória onde estão dados que serão processados. As constantes são símbolos usados para representar dados. Os operadores são usados para combinar as variáveis e constantes fornecendo um valor como resposta. Exemplos de Expressões 0.5 * base * altura (nota1 + nota2) / 2.0 (temperatura > 0) e (quantidade < limite) A>B 0.3*x*x – 2*x + 3 Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Expressões Variáveis As expressões são escritas sempre na mesma linha. Os símbolos usados para multiplicação e divisão são “*” e “/”, respectivamente. Aquando da avaliação de uma expressão, avalia-se primeiro as operações de maior prioridade, por exemplo (multiplicação e divisão). Altera-se a ordem de avaliação de uma expressão usando parêntesis. Exemplo: (a+b)/c Vitor Pereira [[email protected]] Uma variável é uma entidade que possui um valor e é conhecida pelo programa por um nome. Em matemática, o conceito é familiar: Num triângulo rectângulo, com lados a, b e c, o teorema de Pitágoras dá-nos a relação: a2=b2+c2 a b c Vitor Pereira [[email protected]] 20 Variáveis Nomes de Variáveis Uma relação expressa através de variáveis define a fórmula geral que pode ser aplicada a cálculos específicos. Se o lado a é 5 e o lado b é 4, então usando a fórmula temos: (5)2=(4)2+c2 c=3 Se o lado b é 5 e o lado c é 12, então usando a fórmula temos: a2=(5)2+(12)2 Regras de construção de nomes de variáveis: Devem começar por uma letra e ser seguido de qualquer número de letras, números ou “_”. O espaço não é permitido. Não há diferença entre minúsculas e maiúsculas Exemplos de nomes válidos: a=13 Triângulo diferente mas a fórmula geral é a mesma para o cálculo. total lado2 x_ao_quadrado a123 um_nome_longo caixa_preta Exemplos de nomes inválidos 3lado x+y soma total não começa com uma letra “+” não é permitido (é usado para a soma) não são permitidos espaços Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Constantes Constantes: Exemplos As constantes aparecem em expressões do tipo base * altura * 0.5 Nesta expressão temos a variável base multiplicada pela variável altura e o resultado multiplicado pela constante 0.5. Cada variável representa uma posição de memória. As constantes são armazenadas junto com o código do programa, não ocupando espaço da área onde estão os dados. As constantes também têm associado um tipo de dados (inteiro, real, lógico, caracteres). Vitor Pereira [[email protected]] Inteiras Reais Caracteres +256 128 -32768 555 -12345 3.141516 -22.354 +0.567 128.0 “a” “!” “ ” “a-z” “Computador” “12345” “Universidade Lusíada” True False (Verdadeiro Falso) Lógico Vitor Pereira [[email protected]] 21 Operadores Classificação dos Operadores São símbolos que indicam a operação que deve ser realizada entre os operandos (constantes e/ou variáveis). Exemplos de operadores: + – * / = > < ^ (exponenciação; 2^3=8) De acordo com o tipo de operandos envolvidos. Aritméticos Lógicos Relacionais Caracteres Exemplos: Aritméticos, quando os operandos são dados aritméticos. Vitor Pereira [[email protected]] Lógicos, quando os operandos são dados lógicos. Exemplos: optou ou saiu maior e aprovado não terminou (OR) (AND) (NOT) Exemplos: Classificação dos Operadores Relacionais, quando comparamos dados de tipos compatíveis e o resultado é um valor lógico. a > 10 x < -1 Caracteres, quando os operandos são dados do tipo carácter (varia de linguagem para linguagem). Um exemplo de operação comum em várias linguagens é a concatenação (isto é, juntar) de cadeias de caracteres através do símbolo &. Dadas as seguintes cadeias de caracteres “Programação”, “de“, “Computadores” e “ “ Vitor Pereira [[email protected]] a+b 4.0 * raio Vitor Pereira [[email protected]] Classificação dos Operadores A operação “Programação” & “ “ & “de“ & “ “ & “Computadores” Cria a cadeia de caracteres “Programação de Computadores” Vitor Pereira [[email protected]] 22 Representação de Expressões Aritméticas Expressão Matemática A BC Expressão Computacional 4 x y A+B*C b*b – 4*a*c 1 b a 1/a*b 1 ab Não existem operações implícitas como em 4ac, que significa 4 vezes a vezes c. 4 / (x + y) b 2 4 ac Expressões Aritméticas: Observações A solução deve ser 4*a*c Cuidado com expressões do tipo: A expressão computacional correta é (a+b)/(c-d) A expressão a + b / c – d equivale a: 1/(a*b) Vitor Pereira [[email protected]] Operadores Relacionais Usados para fazer comparação entre dados compatíveis. Operador Matemático = < > Operador Algorítmico = <> < <= > >= Significado Igual a Diferente de Menor que Menor ou igual a Maior que Maior ou igual a Vitor Pereira [[email protected]] ab cd a b d c Vitor Pereira [[email protected]] Precedência dos Operadores Por ordem decrescente de precedência; operadores na mesma linha têm precedência igual Operador Significado Associatividade ^ – *, / Exponenciação Sinal menos (unário) Multiplicação e divisão EsquerdaDireita +, – >, <, >=, <=, Adição, subtracção Operadores relacionais EsquerdaDireita <> EsquerdaDireita Vitor Pereira [[email protected]] 23 Interacção com o Utilizador Algoritmia e Programação Mostrar dados no ecrã: função Escrever. Sintaxe: Escrever(dados) Exemplos: Algoritmos diversos Escrever(“Visual Basic”) Escrever(10 + 20) Escrever(“O resultado é ”, res) Ler dados do teclado: função Ler. Sintaxe: Ler(variavel) Exemplos: Ler(x) Ler(x, y, z) Vitor Pereira [[email protected]] Estrutura Sequencial Algoritmo: média de 2 valores (v1) Var Real: x, y, media Início Instrução 1 Escrever(“Insira Ler(x) Escrever(“Insira Ler(y) media (x + y) Escrever(“Média: Instrução 2 ... Instrução n Fim Vitor Pereira [[email protected]] o 1º valor: ”) o 2º valor: ”) / 2 ”, media) Vitor Pereira [[email protected]] 24 Algoritmo: média de 2 valores (v2) Algoritmo: média de 2 valores (v3) Var Real: x, y Var Real: x, y Escrever(“Insira o 1º valor: ”) Ler(x) Escrever(“Insira o 2º valor: ”) Ler(y) Escrever(“Média: ”, (x + y) / 2) Ler(x) Ler(y) Escrever(“Média: ”, (x + y) / 2) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Estrutura de Decisão Sintaxe Algoritmia/VB: Se <condição> Então <instruções se condição Verdadeira> Senão <instruções se condição Falsa> Fim Se If <condição> Then <instruções> Else <instruções> End If Uma condição é uma expressão cujo resultado ou é Verdadeiro ou é Falso. Exemplos: Fluxograma False instrução(ões) condição True instrução(ões) x>0 nota >= 10 salario < 1000 x=y x <> y Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 25 Algoritmo: aprovado ou reprovado Var Algoritmo: maior de 2 valores Var Inteiro: nota Real: x, y, maior Ler(x) Ler(y) Se x > y Então Ler(nota) Se nota >= 10 Então maior x Escrever(“Aprovado”) Senão Senão maior y Fim Se Escrever (“O maior é ”, maior) Escrever(“Reprovado”) Fim Se Vitor Pereira [[email protected]] Algoritmo: maior de 3 valores (v1) Vitor Pereira [[email protected]] Algoritmo: maior de 3 valores (v2) Var Var Ler(x) Ler(y) Ler(z) Se x > y Então Ler(maior) Ler(y) Se y > maior Então Real: x, y, z, maior Real: maior, y, z maior y Fim Se Ler(z) Se z > maior Então maior x Senão maior y maior z Fim Se Se z > maior Então Fim Se maior z Fim Se Escrever (“O maior é ”, maior) Escrever (“O maior é ”, maior) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 26 Algoritmo: maior de 3 valores (v3) Var Var Real: x Real: maior, corrente Ler(maior) Ler(corrente) Se corrente > maior Então maior corrente Fim Se Ler(corrente) Se corrente > maior Então maior corrente Fim Se Algoritmo: positivo/negativo ou zero Ler(x) Se x > 0 Então Escrever(“Positivo”) SenãoSe x < 0 Então Código Igual Escrever(“Negativo”) Senão Escrever(“Zero”) Fim Se Escrever (“O maior é ”, maior) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmo: classificar nota (v1) Var Inteiro: nota Ler(nota) Se nota <= 4 Então Escrever(“Muito Insuficiente”) SenãoSe nota < 10 Então Escrever(“Insuficiente”) Nota 0…4 5…9 10…14 15…17 18…20 Classificação Muito Insuficiente Insuficiente Suficiente Bom Muito Bom SenãoSe nota <= 14 Então Algoritmo: classificar nota (v2) Var Inteiro: nota Ler(nota) Se nota >= 18 Então Escrever(“Muito Bom”) SenãoSe nota >= 15 Então Escrever(“Bom”) Nota 0…4 5…9 10…14 15…17 18…20 Classificação Muito Insuficiente Insuficiente Suficiente Bom Muito Bom SenãoSe nota >= 10 Então Escrever(“Suficiente”) Escrever(“Suficiente”) SenãoSe nota <= 17 Então SenãoSe nota >= 5 Então Escrever(“Bom”) Escrever(“Insuficiente”) Senão Senão Escrever(“Muito Bom”) Escrever(“Muito Insuficiente”) Fim Se Fim Se Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 27 Algoritmo: Bónus Versão 1 Crie um algoritmo que leia o nome de um empregado, o número de horas extras trabalhadas, e o número de horas de faltas e calcule um bónus de Natal, de acordo com a seguinte tabela: EXTRAS – 2/3 * FALTAS > 20 horas >15 e <= 20 horas >10 e <= 15 horas >5 e <= 10 horas <= 5 horas Bónus a Pagar €50 €40 €30 €20 €10 Vitor Pereira [[email protected]] Var Real: extras, faltas, bonus Texto: nome Ler(nome, extras, faltas) Se extras – 2 / 3 * faltas > 20 Então bonus 50 SenãoSe extras – 2 / 3 * faltas > 15 Então bonus 40 SenãoSe extras – 2 / 3 * faltas > 10 Então bonus 30 SenãoSe extras – 2 / 3 * faltas > 5 Então bonus 20 Senão bonus 10 Fim Se Escrever(nome, “ recebe um bónus de ”, bonus, “ Euros”) Versão 2 Condições Compostas Var Real: extras, faltas, bonus, temp Texto: nome Ler(nome, extras, faltas) temp extras – 2 / 3 * faltas Se temp > 20 Então bonus 50 SenãoSe temp > 15 Então bonus 40 SenãoSe temp > 10 Então bonus 30 SenãoSe temp > 5 Então bonus 20 Senão bonus 10 Fim Se Escrever(nome, “ recebe um bónus de ”, bonus, “ Euros”) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Operadores Lógicos: Exemplos: And (E), Ou (Ou), Not (Não) x > 0 And x < 100 idade >= 18 And idade <= 30 preco < 100 Or preco > 900 opcao = 1 Or opcao = 2 Or opcao = 3 nota = 8 Or nota = 9 Not (nota = 8 Or nota = 9) Vitor Pereira [[email protected]] 28 Estrutura de Repetição Sintaxe Algoritmia/VB: Para var = inicio Até fim [Passo valor] <instruções a repetir> Proximo Exemplos: Fluxograma For var = inicio To fim [Step valor] <instruções a repetir> Next Para var = inicio Até fim Falso Verdadeiro Para i = 1 Até 10 Escrever(i) Proximo instrução(ões) Para i = 1 Até 10 Passo 3 Escrever(i) Proximo Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmo: ler 5 notas e mostrar, para cada nota, “Aprovado” ou “Reprovado” Exemplos Para i = 1 Até 10 Passo 5 Escrever(i) Proximo Var Inteiro: nota Para i = 1 Até 5 Ler(nota) Se nota >= 10 Então Para i = 10 Até 0 Passo -2 Escrever(i) Proximo Escrever (“Aprovado”) Senão Escrever (“Reprovado”) Para i = 10 Até 1 Escrever(i) Proximo Fim Se Proximo Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 29 Algoritmo: ler 5 notas e mostrar a contagem de positivas e negativas Algoritmo: ler n notas e mostrar a contagem de positivas e negativas Var Inteiro: contapos, contaneg, nota Var Inteiro: contapos, contaneg, n, nota contapos 0 contaneg 0 Para i = 1 Até 5 Ler(nota) Se nota >= 10 Então contapos contapos + Senão contaneg contaneg + Fim Se Proximo Escrever(“Nº positivas = ”, Escrever(“Nº negativas = ”, contapos 0 contaneg 0 Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos + Senão contaneg contaneg + Fim Se Proximo Escrever(“Nº positivas = ”, Escrever(“Nº negativas = ”, 1 1 contapos) contaneg) Vitor Pereira [[email protected]] Repetição (Ciclos controlados por uma sentinela) Sintaxe Algoritmia/VB Repete Enquanto <condição> Do While <condição> Fim Enquanto Loop <instruções a repetir> Exemplo x 1 Enquanto x <= 10 Escrever(x) x x + 1 Fim Enquanto Equivalente a: 1 1 contapos) contaneg) Vitor Pereira [[email protected]] Fluxograma iniciação <instruções a repetir> condição Falso Verdadeiro [inicia a variável de ciclo] [condição de controlo do ciclo] [incrementa a variável] instruções a repetir incremento/decremento Para i = 1 Até 10 Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 30 Algoritmo: ler um nº desconhecido de notas e mostrar a contagem de positivas e negativas Var Inteiro: contapos, somapos, n, nota contapos 0 somapos 0 Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então Var Inteiro: contapos, contaneg, nota contapos 0 contaneg 0 Escrever(“Insira uma nota (-1 para terminar)”) Ler(nota) Enquanto nota <> -1 Se nota >= 10 Então contapos contapos + 1 Senão contaneg contaneg + 1 Fim Se Escrever(“Insira uma nota (-1 para terminar)”) Ler(nota) Fim Enquanto Escrever(“Nº positivas = ”, contapos) Escrever(“Nº negativas = ”, contaneg) Algoritmo: ler n notas e mostrar a média das positivas contapos contapos + 1 somapos somapos + nota Fim Se Proximo Escrever(“Média positivas = ” , somapos / contapos) Vitor Pereira [[email protected]] Algoritmo: ler n notas e mostrar a média das positivas e das negativas. Var Inteiro: contapos, somapos, contaneg, somaneg, n, nota contapos 0 somapos 0 contaneg 0 somaneg 0 Ler(n) Vitor Pereira [[email protected]] (continuação) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos somapos somapos + Senão contaneg contaneg somaneg somaneg + Fim Se Proximo + 1 nota + 1 nota Escrever(“Média positivas = ”, somapos / contapos) Escrever(“Média negativas = ”, somaneg / contaneg) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 31 Algoritmo: maior de 3 valores (v1) Var Algoritmo: maior de 3 valores (v2) Var Real: x, y, z, maior Real: maior, y, z Ler(x) Ler(y) Ler(z) Se x > y Então Ler(maior) Ler(y) Se y > maior Então maior x maior y Senão Fim Se Ler(z) Se z > maior Então maior y Fim Se Se z > maior Então maior z maior z Fim Se Escrever (“O maior é ”, maior) Fim Se Escrever (“O maior é ”, maior) Vitor Pereira [[email protected]] Algoritmo: maior de 3 valores (v3) Vitor Pereira [[email protected]] Algoritmo: maior de 3 valores (v4) Var Var Ler(maior) Ler(corrente) Se corrente > maior Então maior corrente Fim Se Ler(corrente) Se corrente > maior Então maior corrente Fim Se Ler(maior) Para i = 1 Até 2 Ler(corrente) Se corrente > maior Então maior corrente Fim Se Proximo Real: maior, corrente Real: maior, corrente Escrever (“O maior é ”, maior) Escrever (“O maior é ”, maior) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 32 Algoritmo: maior de n valores (v1) Var Nota: Real.MinValor representa o menor valor possível que se pode armazenar num real (~ -1.8E+308; VB = Double.MinValue). Real: maior, corrente Inteiro: n Ler(n) Ler(maior) Para i = 2 Até n Algoritmo: maior de n valores (v2) [número de valores a ler] [lê o primeiro valor] Ler(corrente) Se corrente > maior Então maior corrente Fim Se Proximo Escrever(“O maior é ”, maior) Vitor Pereira [[email protected]] Var Real: maior, corrente Inteiro: n Ler(n) [número de valores a ler] maior Real.MinValor [inicia maior] Para i = 1 Até n Ler(corrente) Se corrente > maior Então maior corrente Fim Se Proximo Escrever(“O maior é ”, maior) Vitor Pereira [[email protected]] Algoritmo: factorial Ler n notas e mostrar a contagem e respectiva percentagem de positivas e negativas Var Ler um valor e calcular o seu factorial. Definição: n! = n * (n-1) * (n-2) * … * 2 * 1 Exemplo: 5! = 5*4*3*2*1 = 120 Var Inteiro: n, factorial Ler(n) factorial 1 Para i = n Até 1 Passo -1 factorial factorial * i Proximo Escrever(n, “! = ”, factorial) Vitor Pereira [[email protected]] Inteiro: contapos, contaneg, n, nota contapos 0 contaneg 0 Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos + 1 Senão contaneg contaneg + 1 Fim Se Proximo Escrever(“Nº positivas = ”, contapos) Escrever(“% positivas = ”, Round(contapos / (contapos + contaneg) * 100)) Escrever(“Nº negativas = ”, contaneg) Escrever(“% negativas = ”, Round(contaneg / (contapos + contaneg) * 100)) Vitor Pereira [[email protected]] 33 Algoritmo: Amplitude Térmica Este algoritmo determina a amplitude térmica entre 5 temperaturas registadas, isto é, a diferença entre a maior e a menor dessas temperaturas. Var Real: temp, maior, menor Ler(maior) [lê a primeira temperatura ...] menor maior [... e inicia as variáveis maior e menor] Para i = 2 Até 5 Ler(temp) Se temp > maior Então maior temp Fim Se Se temp < menor Então menor temp Fim Se Proximo Escrever(“A amplitude é ”, maior - menor) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmo: processamento mensal de salários Crie um algoritmo que leia a informação associada a n colaboradores, consistindo no número de empregado (numero), valor recebido por hora (valorhora) e horas trabalhadas este mês (horas). De seguida calcule o valor a pagar por colaborador (valorpagar) bem como o total da massa salarial a pagar pela empresa (totalpagar). O pagamento é feito da seguinte forma: até 160 horas o valor a receber é o valor/hora multiplicado pelo número de horas; acima deste valor, os colaboradores recebem o valor/hora pelas primeiras 160 horas e 1.5x para cada hora adicional. Vitor Pereira [[email protected]] Var Inteiro: n, numero Real: valorhora, horas, valorpagar, totalpagar totalpagar 0.0 Ler(n) Para i = 1 Até n Ler(numero, valorhora, horas) Se horas <= 160 Então valorpagar valorhora * horas Senão valorpagar valorhora * 160 + 1.5 * valorhora * (horas - 160) Fim Se Escrever(numero, valorhora, horas, valorpagar) totalpagar totalpagar + valorpagar Proximo Escrever(“Total Massa Salarial = ”, totalpagar) Vitor Pereira [[email protected]] 34 Algoritmia: Conceitos mais importantes Decisões Algoritmo: maior de 2 valores Algoritmo: maior de 3 valores Real: maior, corrente Real: x, maior Ler(maior) Ler(corrente) Se corrente > maior Então maior corrente Fim Se Ler(corrente) Se corrente > maior Então maior corrente Fim Se Escrever(“Insira o 1º valor: ”) Ler(maior) Escrever(“Insira o 2º valor: ”) Ler(x) Se x > maior Então maior x Fim Se Escrever (“O maior é ”, maior) Código Igual Escrever (“O maior é ”, maior) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 35 Algoritmo: positivo/negativo ou zero Real: x Algoritmo: classificar nota (v1) Inteiro: nota Ler(nota) Se nota <= 4 Então Ler(x) Se x > 0 Então Escrever(“Muito Insuficiente”) SenãoSe nota < 10 Então Escrever(“Positivo”) Escrever(“Insuficiente”) SenãoSe x < 0 Então SenãoSe nota <= 14 Então Nota 0…4 5…9 10…14 15…17 18…20 Escrever(“Suficiente”) Escrever(“Negativo”) SenãoSe nota <= 17 Então Senão Escrever(“Bom”) Senão Escrever(“Zero”) Escrever(“Muito Bom”) Fim Se Fim Se Vitor Pereira [[email protected]] Algoritmo: classificar nota (v2) Inteiro: nota Ler(nota) Se nota >= 18 Então Escrever(“Muito Bom”) SenãoSe nota >= 15 Então Escrever(“Bom”) SenãoSe nota >= 10 Então Classificação Muito Insuficiente Insuficiente Suficiente Bom Muito Bom Nota 0…4 5…9 10…14 15…17 18…20 Classificação Muito Insuficiente Insuficiente Suficiente Bom Muito Bom Vitor Pereira [[email protected]] Algoritmo: classificar nota (v3) Inteiro: nota Texto: tipo Ler(nota) Se nota <= 4 Então tipo “Muito Insuficiente” SenãoSe nota < 10 Então Nota 0…4 5…9 10…14 15…17 18…20 Classificação Muito Insuficiente Insuficiente Suficiente Bom Muito Bom tipo “Insuficiente” Escrever(“Suficiente”) SenãoSe nota <= 14 Então SenãoSe nota >= 5 Então tipo “Suficiente” Escrever(“Insuficiente”) SenãoSe nota <= 17 Então Senão tipo “Bom” Escrever(“Muito Insuficiente”) Senão Fim Se tipo “Muito Bom” Vitor Pereira [[email protected]] Fim Se Escrever(nota, “ é ”, tipo) Vitor Pereira [[email protected]] 36 Algoritmo: Bónus Crie um algoritmo que leia o nome de um empregado, o número de horas extras trabalhadas, e o número de horas de faltas e calcule um bónus de Natal, de acordo com a seguinte tabela: EXTRAS – 2/3 * FALTAS > 20 horas >15 e <= 20 horas >10 e <= 15 horas >5 e <= 10 horas <= 5 horas Bónus a Pagar €50 €40 €30 €20 €10 Vitor Pereira [[email protected]] Real: extras, faltas, bonus, temp Texto: nome Ler(nome, extras, faltas) temp extras – 2 / 3 * faltas Se temp > 20 Então bonus 50 SenãoSe temp > 15 Então bonus 40 SenãoSe temp > 10 Então bonus 30 SenãoSe temp > 5 Então bonus 20 Senão bonus 10 Fim Se Escrever(nome, “ recebe um bónus de ”, bonus, “ Euros”) Vitor Pereira [[email protected]] Algoritmo: classificar n notas em “Aprovado” ou “Reprovado” Repetições Inteiro: n, nota Texto: tipo Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então tipo “Aprovado” Senão tipo “Reprovado” Fim Se Escrever(tipo) Proximo Vitor Pereira [[email protected]] 37 Algoritmo: ler n notas e mostrar a contagem de positivas e negativas Algoritmo: ler um nº desconhecido de valores Inteiro: n, nota, contapos, contaneg // Estrutura de um ciclo controlado por uma sentinela contapos 0 contaneg 0 Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos + Senão contaneg contaneg + Fim Se Proximo Escrever(“Nº positivas = ”, Escrever(“Nº negativas = ”, Escrever(“Insira um valor (-1 para terminar)”) Ler(valor) Enquanto valor <> -1 // Processar valor (classificar, contar, somar, calcular, …) Escrever(“Insira um valor (-1 para terminar)”) Ler(valor) Fim Enquanto 1 1 // Mostrar valores calculados contapos) contaneg) Vitor Pereira [[email protected]] Algoritmo: ler um nº desconhecido de notas e mostrar a contagem de positivas e negativas Algoritmo: ler n notas e mostrar a média das positivas Inteiro: n, nota, contapos, somapos Inteiro: contapos, contaneg, nota contapos 0 contaneg 0 Escrever(“Insira uma nota (-1 para terminar)”) Ler(nota) Enquanto nota <> -1 Se nota >= 10 Então contapos contapos + 1 Senão contaneg contaneg + 1 Fim Se Escrever(“Insira uma nota (-1 para terminar)”) Ler(nota) Fim Enquanto Escrever(“Nº positivas = ”, contapos) Escrever(“Nº negativas = ”, contaneg) Vitor Pereira [[email protected]] contapos 0 somapos 0 Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos + 1 somapos somapos + nota Fim Se Proximo Escrever(“Média positivas = ” , somapos / contapos) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 38 Algoritmo: ler n notas e mostrar a média das positivas e das negativas. Inteiro: n, nota, contapos, somapos, contaneg, somaneg contapos 0 somapos 0 contaneg 0 somaneg 0 Ler(n) (continuação) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos somapos somapos + Senão contaneg contaneg somaneg somaneg + Fim Se Proximo + 1 nota Escrever(“Média positivas = ”, somapos / contapos) Escrever(“Média negativas = ”, somaneg / contaneg) Vitor Pereira [[email protected]] Algoritmo: maior de n valores (v1) Inteiro: n Real: maior, corrente Ler(n) Ler(maior) Para i = 2 Até n + 1 nota Vitor Pereira [[email protected]] Algoritmo: maior de n valores (v2) Nota: Real.MinValor representa o menor valor possível que se pode armazenar num real (~ -1.8E+308; VB = Double.MinValue). [número de valores a ler] [lê o primeiro valor] Ler(corrente) Se corrente > maior Então maior corrente Fim Se Proximo Escrever(“O maior é ”, maior) Vitor Pereira [[email protected]] Inteiro: n Real: maior, corrente Ler(n) [número de valores a ler] maior Real.MinValor [inicia maior] Para i = 1 Até n Ler(corrente) Se corrente > maior Então maior corrente Fim Se Proximo Escrever(“O maior é ”, maior) Vitor Pereira [[email protected]] 39 Algoritmo: factorial Ler n notas e mostrar a contagem e respetiva percentagem de positivas e negativas Ler um valor e calcular o seu factorial. Definição: Inteiro: contapos, contaneg, n, nota contapos 0 contaneg 0 Ler(n) Para i = 1 Até n Ler(nota) Se nota >= 10 Então contapos contapos + 1 Senão contaneg contaneg + 1 Fim Se Proximo Escrever(“Nº positivas = ”, contapos) Escrever(“% positivas = ”, Round(contapos / n * 100)) Escrever(“Nº negativas = ”, contaneg) Escrever(“% negativas = ”, Round(contaneg / n * 100)) n! = n * (n-1) * (n-2) * … * 2 * 1 Exemplo: 5! = 5*4*3*2*1 = 120 Inteiro: n, factorial Ler(n) factorial 1 Para i = n Até 1 Passo -1 factorial factorial * i Proximo Escrever(n, “! = ”, factorial) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Algoritmo: Amplitude Térmica Este algoritmo determina a amplitude térmica entre 5 temperaturas registadas, isto é, a diferença entre a maior e a menor dessas temperaturas. Vitor Pereira [[email protected]] Real: temp, maior, menor Ler(maior) [lê a primeira temperatura ...] menor maior [... e inicia as variáveis maior e menor] Para i = 2 Até 5 Ler(temp) Se temp > maior Então maior temp Fim Se Se temp < menor Então menor temp Fim Se Proximo Escrever(“A amplitude é ”, maior - menor) Vitor Pereira [[email protected]] 40 Algoritmo: processamento mensal de salários Crie um algoritmo que leia a informação associada a n colaboradores, consistindo no número de empregado (numero), valor recebido por hora (valorhora) e horas trabalhadas este mês (horas). De seguida calcule o valor a pagar por colaborador (valorpagar) bem como o total da massa salarial a pagar pela empresa (totalpagar). O pagamento é feito da seguinte forma: até 160 horas o valor a receber é o valor/hora multiplicado pelo número de horas; acima deste valor, os colaboradores recebem o valor/hora pelas primeiras 160 horas e 1.5x para cada hora adicional. Inteiro: n, numero Real: valorhora, horas, valorpagar, totalpagar totalpagar 0.0 Ler(n) Para i = 1 Até n Ler(numero, valorhora, horas) Se horas <= 160 Então valorpagar valorhora * horas Senão valorpagar valorhora * 160 + 1.5 * valorhora * (horas - 160) Fim Se Escrever(numero, valorhora, horas, valorpagar) totalpagar totalpagar + valorpagar Proximo Escrever(“Total Massa Salarial = ”, totalpagar) Vitor Pereira [[email protected]] Diapositivo propositadamente deixado em branco Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Diapositivo propositadamente deixado em branco Vitor Pereira [[email protected]] 41 Sumário Algoritmia e Programação O Visual Basic e o Visual Studio 2. 3. 4. 5. 6. Decisões Se determinada condição for verdadeira, o computador executa um conjunto de instruções. Se a condição for falsa, o computador executa outras instruções. Repetições Permitem executar um conjunto de instruções um determinado número de vezes. Por exemplo, calcular a média final para 20 estudantes. Vitor Pereira [[email protected]] For…Next, Do While…Loop Procedimentos: Subrotinas e Funções Vectores Strings Vitor Pereira [[email protected]] Principais Tópicos da Programação 1. Permitem armazenar valores na memória do computador. Permitem realizar cálculos (adição, multiplicação, …) e comparações (maior que, diferente, …). If…Then…Else e Select Case Estruturas de repetição (ciclos) Tipos de Dados Permitem adequar os valores a armazenar e respectivas operações. Variáveis Operadores Aritméticos, relacionais, atribuição, lógicos, funções matemáticas. Estruturas de decisão Principais Tópicos da Programação Existem instruções para escrever no ecrã e para ler valores do teclado. Interacção com o utilizador Numéricos, texto, booleano, datas, estruturas Variáveis e Literais Operadores 1. Principais tópicos da programação Introdução ao Visual Studio Tipos de dados 2. 3. Interacção com o utilizador Console.WriteLine("Programação em Visual Basic") Dim x as Integer x = Console.ReadLine Console.WriteLine("O quadrado do valor lido é: " & x * x) Variáveis Exemplos: x, y, z, a, b, c, nota, valor, media, soma, total, nome, … Tipos de Dados Dim Dim Dim Dim Números inteiros (Integer). Número reais (Double). Caracteres (String), … x As Integer a, b, c As Integer valor, media As Double nome As String Vitor Pereira [[email protected]] 42 O Visual Studio Principais Tópicos da Programação 4. 5. Operadores Decisões Se nota >= 10 Então If nota >= 10 Then Senão Else Fim Se End If x = 1 Faz Enquanto x <= 10 Escreve(x) x x + 1 Fim Enquanto x = 1 Do While x <= 10 Console.WriteLine(x) x = x + 1 Loop Escreve("Aprovado") Escreve("Reprovado") 6. z=-a+b*c/2^d Repetições Console.WriteLine("Aprovado") É um ambiente de desenvolvimento integrado (Integrated Development Environment - IDE). Inclui, entre outras, as seguintes características: Console.WriteLine("Reprovado") Editor de código (incluindo a ferramenta IntelliSense) Suporte para diversas linguagens de programação (Visual Basic, C++, C#) Compilador (programa que converte o código em linguagem máquina). Debugger (permite executar linha a linha) Acesso à plataforma .NET (uma biblioteca de classes) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Menu File New Project/Open Project/Close Project Save All O projecto em Disco Permitem criar um projecto novo, abrir um existente, ou fechar o projecto activo. Guarda o projecto em disco (sugere-se o uso do disco rígido e não uma pen). Por omissão o projecto é guardado em: Os Meus Documentos\Visual Studio 2010\Projects Depois de guardar o projecto uma vez, o Visual Studio grava o projecto automaticamente sempre antes de o executar. Atenção: NÃO use a opção “Save Module1 As…”, uma vez que não guarda o projecto todo! Exit Fecha o Visual Studio. Nota: Ao fechar um projecto/ficheiro que não foi gravado o Visual Studio pergunta se pretende guardar (Save) ou não (Discard). Vitor Pereira [[email protected]] Consiste num conjunto de pastas e ficheiros. Para abrir um projecto pode fazer duplo clique nos ficheiros com extensão .sln (solução) ou .vbproj (projecto). O código reside nos ficheiros .vb. O executável encontra-se na pasta bin\Release (ou bin\Debug) com o nome <nomedoprojecto>.exe. ATENÇÃO: Para copiar um projecto deve copiar toda esta estrutura. Vitor Pereira [[email protected]] 43 Menu Edit Menu View Undo (Ctrl+Z)/Redo Copy/Cut/Paste/Delete Ctrl+C/Ctrl+X/Ctrl+V/Del Nota: o editor está optimizado para manipular linhas. Para copiar, cortar ou eliminar UMA ÚNICA LINHA, coloque o cursor nessa linha sem seleccionar qualquer texto e pressione o atalho pretendido. Select All (Ctrl+A) Quick Find (Ctrl+F)/Quick Replace (Ctrl+H) Comment Selection/Uncomment Selection Selecciona todo o código Procurar e Substituir Other Windows > Solution Explorer Other Windows > Error List Comentar/remover os comentários do código seleccionado. Acessível pela barra de ferramentas: Explorador da Solução: permite gerir os ficheiros que fazem parte da solução (eliminar, adicionar, renomear). Nota: se abrir um projecto e a janela de código não aparecer, abra o Solution Explorer e faça duplo clique em Module1.vb. Mostra a janela com a listagem dos erros do programa. Faça duplo clique sobre um erro para identificar a linha associada. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Menu Debug IntelliSense Ajuda na codificação: desenvolvimento mais rápido e reduz erros. Debug = remover os bugs (erros do programa). Start Without Debugging (Ctrl+F5) Start Debugging (F5) Step Into (F8) Step Over (Shift+F8) Toggle Breakpoint (F9) Windows > Locals Compila e executa o programa sem informação de debugging. Inicia o debugging. Executa a próxima linha. Se a instrução for um método então o controlo passa para dentro do método. Executa a próxima linha. Se a instrução for um método então executa o método sem visualizar o código. Com a opção pretendida seleccionada, pressione a tecla que vem depois dessa selecção: Adiciona/remove um ponto de paragem. Mostra uma janela com o valor das variáveis locais. Vitor Pereira [[email protected]] Carácter . (ponto final) “ (aspas) ( = +,-,*,/,^, etc. Enter Exemplo Conso. Console.“ Math.( s= soma=n+ x = Console.R Texto Visualizado Console. Console.WriteLine“ Math.Sqtr( soma= soma=nota1+ x = Console.ReadLine Vitor Pereira [[email protected]] 44 Tipos de Dados I Tipos de Dados II Numéricos Inteiros Integer Tipo de dados com melhor desempenho. Permite armazenar valores de -2.147.483.648 a 2.147.483.647 De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Long Não Inteiros Double Decimal Armazena cerca de 18 dígitos. Sujeito a erros de arredondamento. Maior valor positivo: 1,79769313486231570E+308 Texto String Lógicos Boolean Armazena até 29 dígitos. Adequado para cálculos financeiros, pois não permite erros de arredondamento. Permite armazenar de zero até cerca de 2 mil milhões de caracteres (letras, dígitos, sinais de pontuação, etc.). Permite armazenar os valores True ou False. Permitem manipular informação do tipo verdadeiro/falso, sim/não, ligado/desligado. Exemplo: Dim ligado As Boolean ligado = False Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Datas Estrutura Date: Propriedades Tipo de dados Date Declarar e iniciar variáveis: Dim d1 As Date Dim d2 As Date = #12/25/2010# Dim d3 As Date = #12/25/2010 10:00:00 AM# Dim d4 As Date = #12/25/2010 10:00:00 PM# Year Datas literais (constantes) são especificadas dentro de cardinais e no formato #mes/dia/ano#. Propriedades Today e Now: Propriedade Date Day DayOfWeek DayOfYear Hour Millisecond Minute Month Now Second TimeOfDay Today UtcNow Date.Today: retorna a data corrente Date.Now: retorna a data e hora corrente Vitor Pereira [[email protected]] Descrição Retorna a componente data desta instância. Retorna o dia do mês representado por esta instância. Retorna o dia da semana representado por esta instância. Retorna o dia do ano representado por esta instância. Retorna a hora da data representada por esta instância. Retorna os milissegundos da data representada por esta instância. Retorna os minutos da data representada por esta instância. Retorna o mês da data representada por esta instância. Retorna um Date que possui a data e hora locais actuais do computador. Retorna os segundos da data representada por esta instância. Retorna a hora do dia para esta instância. Retorna a data actual. Retorna um objecto Date que possui a data e hora, em Tempo Universal Coordenado (UTC), actuais do computador. Retorna o componente ano da data representada por esta instância. Vitor Pereira [[email protected]] 45 Datas: exemplo Estrutura Date: Métodos Método AddDays AddHours AddMilliseconds AddMinutes AddMonths AddSeconds AddYears DaysInMonth IsLeapYear Subtract ToLongDateString ToLongTimeString ToShortDateString ToShortTimeString Descrição Adiciona o número especificado de dias ao valor desta instância. Adiciona o número especificado de horas ao valor desta instância. Adiciona o número especificado de milissegundos ao valor desta instância. Adiciona o número especificado de minutos ao valor desta instância. Adiciona o número especificado de meses ao valor desta instância. Adiciona o número especificado de segundos ao valor desta instância. Adiciona o número especificado de anos ao valor desta instância. Retorna o número de dias do mês e ano especificados. Retorna um Boolean que indica se o ano especificado é um ano bissexto. Subtrai a hora especificada ou duração desta instância. Converte a data corrente para uma representação data longa, do tipo string, equivalente. Converte a data corrente para uma representação hora longa, do tipo string, equivalente. Converte a data corrente para uma representação data curta, do tipo string, equivalente. Converte a data corrente para uma representação hora curta, do tipo string, equivalente. Dim d1 As Date = #12/31/2020 11:59:59 PM# Dim d2 As Date = #12/25/2020# Dim d3 As Date = Date.Now Console.WriteLine(d1) Console.WriteLine(d1.ToShortDateString()) Console.WriteLine(d1.ToShortTimeString()) d1 = d1.AddSeconds(1) Console.WriteLine(d1.ToLongDateString()) Output 31-12-2020 23:59:59 31-12-2020 23:59 sexta-feira, 1 de Janeiro de 2021 Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Estruturas Estruturas: exemplo Isto é, tipo de dados definido pelo programador. São declaradas fora de qualquer subrotina/função (método) mas dentro do módulo. Podem conter atributos (dados) e métodos (operações). Atributos e métodos são designados indiferenciadamente como membros. Acesso aos membros é feito com o operador ponto (.): variavel.membro Module Module1 Structure Estudante Dim nome As String Dim saldo As Decimal End Structure Sub Main() Dim x As Estudante x.nome = "Ana Beatriz" x.saldo = 100 Console.WriteLine("Nome: " & x.nome & " Saldo: " & x.saldo) End Sub End Module Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 46 Conversões I Permitem alterar um valor de um tipo de dados para outro tipo de dados. Por exemplo: Conversões II De Double para Integer De String para Double Implícitas/Explícitas: feitas automaticamente pelo VB ou realizadas à custa de uma função. Por promoção/despromoção: de um tipo mais “pequeno” para um “maior” (de Integer para Long, por exemplo), ou o oposto. Variáveis CInt CLng CDbl CDec CStr Converte para Integer Converte para Long Converte para Double Converte para Decimal Converte para String Exemplos: Dim d As Double = 12.21 Dim i As Integer = CInt(d) Vitor Pereira [[email protected]] Declarar Variáveis Definição: é uma entidade à qual está associado um valor em memória. Em VB, todas as variáveis têm obrigatoriamente que ser declaradas antes de serem usadas. Exemplos: Vitor Pereira [[email protected]] Conversões Funções de conversão do VB x, y, z, a, b, c, nota, valor, media, soma, total, nome, … Vitor Pereira [[email protected]] Declarar = Criar = Dimensionar Sintaxe: Dim <variável> [, <variável> …] As <tipodedados> <variável> é o nome da variável escolhida pelo programador. <tipodedados> é um dos tipos de dados existentes: Integer, Long, Double, String, Date, … Podem ser declaradas várias variáveis do mesmo tipo de dados na mesma instrução. Para renomear uma variável clique com o botão direito do rato e escolha Rename. Vitor Pereira [[email protected]] 47 Nomes de Variáveis (e outros elementos) O VB é case-insensitive. Isto é, não distingue entre maiúsculas e minúsculas. Exemplo: as variáveis idade, IDADE e Idade referem-se todas à mesma entidade. Esfera de Acção das Variáveis Nota: C# (lê-se “C Sharp”) e Java são exemplos de linguagens de programação case-sensitive. Regras de atribuição de nomes às variáveis: Deve começar com uma letra do alfabeto (A…Z); Apenas pode conter letras (A…Z), dígitos (0…9) e o carácter sublinhado (_). Depois de criar uma variável, que instruções lhe podem aceder? Esfera de acção (ou alcance): Bloco Procedimento Módulo Uma variável declarada dentro de um bloco só pode ser acedida pelo código dentro desse bloco que se encontre após a declaração da variável. Blocos mais comuns: If…End If, Select Case…End Select, For…Next, Do…Loop Uma variável declarada numa subrotina/função, mas fora de qualquer bloco, é acedida pelo código desse procedimento que se encontra após a declaração da variável. Uma variável declarada fora de qualquer procedimento é visível em todo o código do módulo, incluindo código que aparece antes da declaração da variável. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Literais (Constantes) Definição: um literal é um valor fixo que é representado no código através de uma forma passível de ser entendido por um ser humano. Constantes Use constantes com nomes para facilitar a leitura e manutenção do código. Exemplo: Exemplos: 24 e “Visual Basic” Valores sem parte fraccionária: -123, 0, 1024. Const meses As Integer = 12 Const semanas As Integer = 52 Valores com parte fraccionária: 10.0, 3.14, -9.99. Const dias = 365 Texto delimitado por aspas: “Visual Basic”, “Lusíada”. Delimitado por cardinais: #12/31/2020# Integer Double String Datas ' dias é do tipo Integer (inferência do tipo de dados) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] 48 Conversão entre Expressões Matemáticas e Expressões Computacionais Expressões Uma expressão é uma combinação de Variáveis Operadores Literais Exemplo: No exemplo anterior existem: area = base * altura / 2 No VB, as expressões matemáticas: três variáveis: area, base e altura. três operadores: =, * e /. uma constante: 2 São escritas numa única linha (isto é, não existe o traço de fração); Não possuem operações implícitas, como xy, que deve ser convertido para x*y; Só utilizam parênteses curvos (não existem parênteses rectos como na matemática); Não podem ter variáveis com letras gregas (a, b, etc.) ou constantes (como p). Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Comentários Inferência de Tipos de Dados Permitem adicionar texto para ajudar a documentar o código. Um programador que consulte código desenvolvido por outro programador entende mais facilmente o objectivo das instruções. O programador que desenvolveu o código pode, passado algum tempo, recordar-se qual a lógica associada à resolução do problema. Uma plica (') permite iniciar um comentário. Exemplo ' Calcula a área do triângulo area = base * altura / 2 Nota 1: A plica encontra-se na mesma tecla que o caráter ? Nota 2: Utilize os comandos da barra de ferramentas: Vitor Pereira [[email protected]] Exemplos Dim Dim Dim Dim i = d = str l = 10 10.0 = "Visual Basic" 30000000000 ' ' ' ' Integer Double String Long Útil em ciclos For Each, por exemplo. Exemplo: For Each x In vector Se vector for Integer, x é Integer; se vector for Double, x é Double, se vector for String, x é String, … Vitor Pereira [[email protected]] 49 Operadores Operador Atribuição Definição: é um símbolo que realiza uma operação em um ou mais operandos. Podem ser divididos em Unários Requerem apenas um operando. Exemplos: b = - a y = Not x Binários ' negação ' Não lógico Requerem dois operandos. Exemplos: m = n c = a + b z = x And y ' atribuição ' adição (e atribuição) ' E lógico (e atribuição) Permite atribuir um valor a uma variável. Símbolo: = Exemplo: area = base * altura / 2 Do lado esquerdo do = só pode estar uma variável. Do lado direito do = pode estar uma expressão matemática, por muito complexa que seja. A atribuição é uma operação destrutiva, isto é, o valor anterior é perdido. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Categorias de Operadores Principais categorias: Aritméticos Relacionais Lógicos Atribuição Funções Matemáticas Aritméticos Operador +, -, *, /, … +- >, >=, <, <=, <>, = And, Or, Not +*/ =, +=, -=, *=, /=, … ^ Math.Cos, Math.Sin e Math.Tan (co-seno, seno e tangente), Math.Sqrt (square root = raiz quadrada), Math.Round (arredondar) Vitor Pereira [[email protected]] \ Mod Descrição Exemplos Identidade e Negação (operadores unários) Se x=-5, então: +x = +(-5) = -5 -x = -(-5) = 5 Exponenciação. Operador que eleva uma expressão a um valor. 2^3 = 8 5^2 = 25 Adição, Subtracção, Multiplicação e Divisão (Real) Divisão inteira. Devolve um quociente inteiro, ignorando o resto. 5/2 = 2.5 -2*-3 = 6 10\3 = 3 5\2 = 2 10 Mod 3 = 1 Resto da divisão inteira. Divide dois números e devolve o resto dessa divisão. 20 Mod 4 = 0 Vitor Pereira [[email protected]] 50 Relacionais (resultado: True ou False) Operador Descrição = (Igual) Devolve True se os operandos forem iguais; False caso contrário. <> (Diferente) Devolve True se os operandos forem diferentes; False caso contrário. > (Maior do que) Devolve True se o operando da esquerda for maior do que o operando da direita; False caso contrário. >= (Maior ou igual) Devolve True se o operando da esquerda for maior ou igual do que o operando da direita; False caso contrário. < (Menor do que) <= (Menor ou igual) Devolve True se o operando da esquerda for menor do que o operando da direita; False caso contrário. Devolve True se o operando da esquerda for menor ou igual do que o operando da direita; False caso contrário. Exemplos 10=20 (False) 20=10 (False) 10=10 (True) 10<>20 (True) 20<>10 (True) 10<>10 (False) 10>20 (False) 20>10 (True) 10>10 (False) 10>=20 (False) 20>=10 (True) 10>=10 (True) 10<20 (True) 20<10 (False) 10<10 (False) 10<=20 (True) 20<=10 (False) 10<=10 (True) And/Or A B A And B A Or B F V F V V V V V F V Not F F F F Not A V F F Nota: A e B são duas condições. Português E (conjunção) OU (disjunção) NÃO (negação) Visual Basic And Or Not Exemplo: If x > y And x > z Then … End If Vitor Pereira [[email protected]] Atribuição (X e Y são reais com os valores 5 e 10) Operador F V A Vitor Pereira [[email protected]] Lógicos: Tabelas de Verdade Lógicos Atribuição simples += Adiciona e atribui -= Subtrai e atribui *= /= V \= ^= Vitor Pereira [[email protected]] Descrição = Exemplos X=2 X = 20 X -= 1 X -= Y X=4 X = -5 X += 2 X += X + Y Multiplica e atribui X *= X Divide e atribui (o quociente é inteiro) Y \= 3 Y \= X + 1 Divide e atribui (o quociente é real) Exponencia e atribui Resultado X=2 X=2*Y X /= 2 X ^= 2 Y ^= X - 1 X=7 X = 20 X = 25 X = 2.5 Y=3 Y = 1 (e não 3) X = 25 Y = 10000 (e não 99999) Vitor Pereira [[email protected]] 51 A Classe Math Funções Matemáticas (Math.) Acesso a funções predefinidas básicas. Digite Math. para seleccionar uma função: Nome da Função Abs Cos, Sin, Tan Log Calcula o logaritmo na base 10 de um valor. Max, Min Calculam o valor máximo e mínimo entre dois valores. Round Arredonda um valor para o inteiro mais próximo ou para um número especificado de casas decimais. Constante que representa o valor de p. PI Sqrt Calcula a raíz quadrada (SQuare RooT) de um valor. Truncate Retorna a parte inteira de um valor. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Decisão: If…Then…Else Precedência dos Operadores Operador Significado Associatividade ^ – *, / Exponenciação Negação (unário) Multiplicação e divisão EsquerdaDireita EsquerdaDireita +, – >, <, >=, <=, Adição, subtracção Operadores relacionais EsquerdaDireita <>, = Vitor Pereira [[email protected]] Calculam, respectivamente, o co-seno, seno e tangente de um ângulo (em radianos). Calcula o logaritmo natural de um valor. Log10 Por ordem decrescente de precedência; operadores na mesma linha têm precedência igual Significado Calcula o valor absoluto (módulo) de um valor. Sintaxe: If <condição1> Then ' instruções a executar se condição1 for verdadeira ElseIf <condição2> Then ' instruções a executar se condição2 for verdadeira Else ' instruções a executar caso todas as condições anteriores falhem End If As componentes ElseIf e Else são opcionais (use tantos ElseIf quantos forem necessários). Apenas é permitido um Else e terá que ser a última das alternativas. Digite if seguido de dois TABs para inserir uma decisão. Vitor Pereira [[email protected]] 52 If…Then…Else: exemplo Dim nota As Integer = 15 Decisão: Select Case If nota <= 4 Then Console.WriteLine("Muito Insuficiente") ElseIf nota < 10 Then Console.WriteLine("Insuficiente") ElseIf nota < 15 Then Console.WriteLine("Suficiente") Else Console.WriteLine("Bom") End If Sintaxe: Select Case <expressaodeteste> Case <listaexpressoes> ' instruções se <listaexpressoes> for Verdadeiro para <expressaodeteste> … Case Else ' instruções a executar se todas as condições anteriores falharem End Select <expressaodeteste> é uma variável de cujo valor dependem as instruções a executar. Use tantas componentes Case quantas forem necessárias. As instruções associadas à componente Case Else serão executadas caso todas as <listaexpressoes> falharem. <listaexpressoes> pode ser: Um conjunto de valores separados por vírgula: valor1, valor2, … , valorn. Um intervalo de valores: inicio To fim. Uma condição envolvendo um operador relacional (>, >=, <, <=). Exemplo: <= 10. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Select Case: exemplo ' Digite sel seguido de dois TABs para inserir um Select Case. For i = 1 To 10 Select Case i Case 1 Console.WriteLine("Igual a 1") Case 2 Console.WriteLine("Igual a 2") Case 3, 4, 5 Console.WriteLine("Igual a 3 ou 4 ou 5") Case Else Console.WriteLine("Diferente de 1 a 5") End Select Next Repetições (Ciclos) For…Next Do While…Loop Realizado zero ou mais vezes. Usado normalmente em ciclos controlados por uma sentinela (repetir instruções um número indeterminado/desconhecido de vezes). For Each…Next Vitor Pereira [[email protected]] Realizado zero ou mais vezes. Frequentemente usado para repetir instruções um número determinado/conhecido de vezes (por exemplo, 10 ou n). Realizado zero ou mais vezes. Usado para percorrer todos os elementos de uma colecção, como um vector. Vitor Pereira [[email protected]] 53 Repetição: For…Next ' Ciclo realizado 10 vezes: 1 a 10. For i = 1 To 10 Console.WriteLine(i) Next Sintaxe: For variavel [As tipodedados] = inicio To fim [Step incremento] <instruções a repetir> Next <variavel>: variável usada para contar o número de repetições. <tipodedados>: tipo de dados numérico da variável (Integer ou Double, por exemplo). É opcional. <inicio>: valor de início da contagem. <fim>: valor de fim da contagem. <incremento>: valor do incremento à variável. Digite for seguido de dois TABs para inserir o ciclo for. For…Next: exemplos ' Ciclo realizado 10 vezes: 10 a 1. For i = 10 To 1 Step -1 Console.WriteLine(i) Next ' Ciclo NÃO realizado. For i = 10 To 1 Console.WriteLine(i) Next Vitor Pereira [[email protected]] Repetição: Do While…Loop Sintaxe Do While…Loop: Do While <condição> ' instruções a repetir Loop O ciclo é repetido enquanto (while) a condição for Verdadeira. Quando a condição se tornar falsa, o programa continua na instrução imediatamente a seguir à linha com o Loop. Digite dowhile seguido de TAB para o Visual Basic inserir um ciclo Do While…Loop. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Do While…Loop: exemplo ' Este programa lê um número desconhecido de valores. ' Lê um valor. Console.Write("Insira um valor (-1 para terminar): ") Dim valor As Integer = Console.ReadLine() Dim conta As Integer = 0 ' Repete enquanto o valor for diferente de -1 (que é a sentinela). Do While valor <> -1 conta += 1 ' Conta mais um valor lido. ' Lê mais um valor. Console.Write("Insira um valor (-1 para terminar): ") valor = Console.ReadLine() Loop Console.WriteLine("Foram lidos " & conta & " valores.") Vitor Pereira [[email protected]] 54 Repetição: For Each…Next Usado quando se pretende, cumulativamente: Aceder a todos os elementos de um vector (e não apenas a uma parte); Percorrer o vector do início para o fim (e não do fim para o início); Apenas ler os valores (e não modificá-los). Sintaxe: For Each <variavel> In <vector> ' instruções a repetir Next <variavel> é uma variável que vai tomar todos os valores do vector. <vector> é o vector/colecção a percorrer. For Each…Next: exemplo ' Ver também exemplo com vectores. ' Este programa lê um texto e mostra-o invertido. Console.Write("Insira um texto: ") Dim str As String = Console.ReadLine() ' Inverte os caracteres. Dim inverte As String = "" For Each letra In str inverte = letra & inverte Next Console.WriteLine("Texto invertido: " & inverte) Vitor Pereira [[email protected]] Subprogramas Funções e Subrotinas: Diferenças Também designados por procedimentos ou métodos. Definição: é um bloco de instruções, independente e delimitado, que executa uma tarefa específica, como parte de um programa. Tipos de procedimentos: Vitor Pereira [[email protected]] Subrotinas Funções Permitem dividir o programa: mais fácil de codificar e testar. Permitem a reutilização de código. Escondem detalhes da codificação. Vantagens: Vitor Pereira [[email protected]] Uma função devolve um valor para a instrução que a chamou. Exemplos: nome = Console.ReadLine() res = Math.Sqrt(x) area = AreaCirculo(raio) media = Media(notas) Uma subrotina não devolve nenhum valor. Exemplos: Console.WriteLine(“Visual Basic”) ImprimeRelatorio() CalculaTotaisMensais(clientes) Por outras palavras, uma função tem sempre um tipo e um valor de retorno associados, enquanto que uma subrotina não devolve qualquer valor. Vitor Pereira [[email protected]] 55 Características dos Métodos I Cada método tem que ter um nome único, o qual serve para a sua invocação algures no programa a que pertence. Um método pode ser chamado a partir de outro método. Um método deve realizar UMA ÚNICA TAREFA bem definida. Um método deve comportar-se como uma “caixa negra”. Não interessa como funciona, o que interessa é que o resultado final seja o esperado, sem efeitos colaterais. Características dos Métodos II O código de um método deve ser o mais independente possível do resto do programa, e deve ser tão genérico quanto possível, para poder ser reutilizado noutros projectos. Um método pode receber valores que alterem o seu comportamento de forma a adaptar-se facilmente a situações distintas. Uma função deve retornar, para o procedimento que a chamou, um valor como resultado do seu trabalho. O código de um método só é executado quando é chamado pelo programa onde se encontra. Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Como Funciona um Método Sempre que um método é chamado, o procedimento que o chamou é suspenso temporariamente. Em seguida são executadas as instruções presentes no corpo do método. Uma vez terminado o método, o controlo de execução do programa volta ao local em que este foi chamado. O programa que invoca o método pode enviar argumentos, que são recebidos pelo método. Estes são recebidos e armazenados em variáveis locais que são automaticamente iniciadas com os valores enviados. A estas variáveis dá-se o nome de parâmetros. Vitor Pereira [[email protected]] Classificação de Métodos I Quanto ao valor de retorno: Não retornam valor (ou seja, subrotinas): Console.WriteLine() Retornam um valor (funções): Dim str As String = Console.ReadLine() Dim d As Double = Math.Sqrt(10) Número de parâmetros: Zero, um, dois, três, quatro, cinco, seis, … Dim str As String = Console.ReadLine() Dim d1 As Double = Math.Sqrt(10) Dim d2 As Double = Math.Round(3.1415, 3) Vitor Pereira [[email protected]] 56 Classificação de Métodos II Tipo de dados retornado: Integer, Double, String, Date, Boolean, estrutura, vector de qualquer tipo de dados, … Dim res As Double = Math.Sqrt(10); Dim pos As Integer = str.IndexOf("idade"); Dim existe As Boolean = str.Contains("dade"); Tipo de método: Partilhado. Pertence à classe. Sintaxe: classe.metodo De instância. Pertence ao objecto. Sintaxe: variavel.metodo Dim str As String = String.Concat("string", 123, 456.7) str = String.Format("{0:X}", 255) Dim i As Integer = str.IndexOf("idade") Dim existe As Boolean = str.Contains("dade") Declaração de Métodos Subrotinas Funções Vitor Pereira [[email protected]] Function <NomeDaFunção>(<listadeparâmetros>) As <tipodedados> End Function <NomeDaSubrotina>/<NomeDaFunção> é o nome da subrotina/função escolhido pelo programador. <listadeparâmetros> é uma lista opcional de parâmetros (valores) que o procedimento recebe do procedimento que o chama. <tipodedados> é o tipo de dados do valor que a função retorna. Nomes de Métodos I A instrução Return permite terminar o procedimento, passando o controlo de execução do programa para o local em que o método foi chamado. Em funções devem possuir uma expressão que retorne um valor. Sintaxe: End Sub Vitor Pereira [[email protected]] A instrução Return Sub <NomeDaSubrotina>(<listadeparâmetros>) Return resultado Podem existir vários Return num procedimento. Vitor Pereira [[email protected]] A escolha do nome de um método obedece às mesmas regras apresentadas para a criação de nomes de variáveis. O nome de um método deve ser único (não pode ser igual ao nome de outro método ou de uma variável). O nome de um método deve especificar aquilo que o procedimento na realidade faz e deve ser de fácil leitura e interpretação. Vitor Pereira [[email protected]] 57 Nomes de Métodos II Use a técnica conhecida por Pascal Casing, (origem na linguagem de programação Pascal). Tudo em minúsculas excepto a primeira letra de cada palavra. Exemplos: VolumeCilindro AlcanceProjectil CalculaTotaisMensais CalculaBonusColaboradores ImprimeRelatorioMensal LeDadosClientes Métodos: exemplos ' Retorna a média de três valores. Function Media3(ByVal x As Double, ByVal y As Double, ByVal z As Double) As Double ' Variável temporária para cálculo da média Dim media As Double = (x + y + z) / 3 ' Retorna a média Return media End Function ' Recebe um valor e retorna o quadrado do valor. Function Quadrado(ByVal n As Double) As Double ' Como se trata de um cálculo trivial, ' não é necessário uma variável temporária. Return n * n End Function ' As funções podem chamar outras funções. Function Cubo(ByVal n As Double) As Double ' Chama a função Quadrado. Return Quadrado(n) * n End Function Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Vectores Declaração: Declaração e iniciação: Exemplos: Vectores: exemplo ' Dimensionar vector para armazenar 10 inteiros. Dim notas(9) As Integer Dim <variavel>(<ultimoindice>) As <tipodedados> Dim <variavel>() As <tipodedados> = {<valores>} ' Ler as notas para o vector For i = 0 To notas.Length - 1 Console.Write("Insira a nota " & i + 1 & ": ") Dimensionar vector para 10 inteiros. Índices 0 a 9: Dim notas(9) As Integer Dimensionar e iniciar 4 Double: Dim valores() As Double = { 1.1, 2.2, 3.3, 4.4 } Dimensionar 20 strings: Next Dim nomes(19) As String Dimensionar 10 elementos da estrutura Estudante: Dim turma(9) As Estudante Vitor Pereira [[email protected]] ' Ler nota notas(i) = Console.ReadLine() Vitor Pereira [[email protected]] 58 Ciclo: For Each Usado quando se pretende, cumulativamente: For Each: exemplo Aceder a todos os elementos de um vector (e não apenas a uma parte); Percorrer o vector do início para o fim (e não do fim para o início); Apenas ler os valores (e não modificá-los). ' Assume a existência de um vector chamado notas ' (ver exemplo com vectores) Sintaxe: ' Calcula a média de todas as notas Dim soma As Integer = 0 <variavel> é uma variável que vai tomar todos os valores do vector. <vector> é o vector/colecção a percorrer. For Each nota In notas ' Soma todas as notas soma += nota Next For Each <variavel> In <vector> ' instruções a repetir Next Console.WriteLine("Média: " & soma / notas.Length) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Manipulação de Strings Operações Básicas: Criar strings Comparar strings Obter o número de caracteres de uma string Procurar texto (strings) dentro de strings Extrair texto (strings) de strings Vitor Pereira [[email protected]] Criar strings Declaração e Iniciação Dim tipo As String tipo = "Universidade" Dim nome As String = "Lusíada" Concatenação (operador &) nome = tipo & " " & nome ' nome = "Universidade Lusíada" Vitor Pereira [[email protected]] 59 Comparar strings Comprimento de uma String Pode-se comparar/relacionar strings, por exemplo para se fazer uma ordenação alfabética, utilizando o método Compare: Exemplo: Dim str1, str2 As String str1 = "Programação" str2 = "Visual" If String.Compare(str1, str2) = 0 Then ' str1 é igual a str2 ElseIf String.Compare(str1, str2) < 0 Then ' str1 é "menor" do que str2 Else ' str1 é "maior" do que str2 End If A propriedade Length dá o comprimento (número de caracteres) de uma string: Exemplo: Dim str As String = "Visual Basic" Console.WriteLine ("Comprimento: " & str.Length) ' Output: Comprimento: 12 str = "" Console.WriteLine ("Comprimento: " & str.Length) ' Output: Comprimento: 0 Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Procurar texto numa string A função IndexOf permite procurar uma string dentro de outra string (dá-nos a posição da string procurada na string a procurar; se a string a procurar não existir, a posição é -1): Exemplo: ' procurar uma string dentro de outra Dim str As String = "Visual Basic" Dim pos As Integer = str.IndexOf("Basic") ' pos = 7 (posição a partir da qual se encontra a string procurada) Vitor Pereira [[email protected]] Extrair um carácter de uma string A utilização de parênteses curvos permite o acesso aos caracteres de uma string (o primeiro carácter está na posição zero; o último na posição Length-1): Exemplo: ' escreve um carácter por linha Dim str As String = "Visual Basic" Console.WriteLine (str(0)) For i = 1 To str.Length - 1 Console.WriteLine(str(i)) Next Vitor Pereira [[email protected]] 60 Extrair substrings de strings O método SubString permite extrair uma string de dentro de outra string: Exemplo: A classe String Métodos de classe. Métodos de variável (ou instância). Dim str As String = "Visual Basic" Dim pos As Integer = str.IndexOf(" ") ' extrai uma string a partir da primeira ' posição (0) com o comprimento pos Dim primeira As String = str.SubString(0, pos) ' extrair a segunda palavra Dim segunda As String = str.SubString(pos + 1) Vitor Pereira [[email protected]] Vitor Pereira [[email protected]] Métodos Predefinidos Nenhum destes métodos altera a string original. Utilize o operador atribuição (=) para guardar o resultado da operação (na mesma ou outra string). Exemplo: str = str.ToLower Principais métodos predefinidos EndsWith – verifica se uma string termina com outra string. StartsWith – verifica se uma string começa com outra string. Insert – insere uma string numa determinada posição. Remove – remove um determinado número de caracteres. Replace – substitui numa string uma determinada string por outra. ToUpper/ToLower – converte para maiúsculas/minúsculas. Trim – elimina espaços à esquerda e à direita de uma string. Vitor Pereira [[email protected]] Métodos por Categoria Categoria Métodos Remover caracteres Trim, Remove Criar strings Comparar Procurar Converter Extrair caracteres (substrings) Inserir/Substituir &, &=, Format, Concat, Join Compare, StartsWith, EndsWith Contains, IndexOf, LastIndexOf ToUpper, ToLower (), Substring Insert, Replace Vitor Pereira [[email protected]] 61