Objectivo Geral Instruir os conceitos bsicos de algoritmos de programao, familiarizando os acadmicos com os recursos computacionais na resoluo de problemas reais. Com a utilizao de pseudocdigos ou portugus estruturado, aplicar tanto prtica como teoricamente, as estruturas bsicas de programao de computadores. A aplicao dos objectivos especficos, servir como manual introdutrio para as demais disciplinas que trataro de anlise e desenvolvimento de sistemas computacionais. Objetivos Especficos Introduo a Algoritmos
Portugus Estruturado
Conceitos de Variveis, Operadores (Matemticos, Relacionais e Lgicos)
Conceitos de Tipos de Dados
Definio da Estrutura de um programa de Computador 1. INTRODUO LGICA DE PROGRAMAO I. Introduo Programao de Computadores II. Conceito de Algoritmos III. Importncia do Algoritmo IV. Caractersticas do Algoritmo V. Formas de Representao do Algoritmo VI. Princpios de resoluo de problemas VII. Estruturas chaves da construo de Algoritmos Estrutura Sequencia Estrutura Condicional (deciso ou Seleo) 2. Linguagem Algortmica I. Conceito de Variveis II. Operao de Atribuio III. Operadores de Entrada e Sada IV. Estrutura Sequencial V. Estrutura Condicional(Deciso ou Seleo) Programas e Programao de Computadores Programa de computador um conjunto de instrues que descrevem uma tarefa que ser executada por um computador.
Um programa de computador tambm conhecido como software, software aplicativo, software de sistema ou simplesmente programa.
O termo software mais utilizado quando feita uma referncia parte no fsica do sistema computacional, juntamente com o termo hardware, que faz referncia ao conjunto de componentes eletrnicos que constituem um computador.
Classificao dos Software Computacionais Software de Sistema (Base) Software que do suporte funcional (arranque, funcionamento e Manuteno) aos Computadores: Sistemas Operativos; Drivers de Dispositivos; Software de Aplicao(Aplicativos) Programas que permitem ao utilizadores realizar as diversas tarefas especficas do dia dia: Folhas de Clculo (Ms Excel) Editores de Texto (Ms Word) Navegadores de Internet (Ms Internet Explorer, Mozilla) Software no Computacionais Software Embutidos (Embarcados) Exemplos: Bombas Injetoras; Micro-Ondas, etc Programao de Computadores
O acto de desenvolver programas para o computador, mediante uma Linguagem de Programao.
A programao o processo de escrita, teste e manuteno de um programa (ASCENIO e CAMPOS, 2002).
Assim como o Portugus, o Ingls e o Espanhol, as linguagens de programao tm as suas regras e devemos segui-las para escrever nossos programas corretamente.
Portanto, a programao de computadores uma cincia e, por isso, devemos seguir uma metodologia para termos como resultado: programas seguros e eficientes.
LINGUAGENS DE PROGRAMAO
Mtodo padronizado para a criao de programas de computadores.
Uma linguagem de programao um conjunto de regras sintticas e semnticas usadas para definir um programa.
O conjunto de cdigos (palavras e smbolos), compostos de acordo com essas regras, constituem o cdigo fonte do nosso programa. Para ser executado pelo processador, o cdigo fonte precisa ser traduzido para cdigo de mquina.
Aprender uma linguagem de programao um pouco similar a aprender um novo idioma. Temos que saber o significado das palavras, as regras da estruturao das frases, etc., para podermos nos comunicar corretamente no novo idioma.
Formas de Classificao da Linguagens de Programao Paradigma de Programao Programao estruturada ou imperativa Programao Orientada a objectos Programao Funcional Estrutura do tipo Fracamente tipada Fortemente tipada Dinamicamente tipada Estaticamente tipada Grau de Abstrao Linguagem Mquina Linguagem de Baixo nvel Linguagem de Alto Nvel Linguagem de Mquina A linguagem de mquina a linguagem natural dos computadores. Estas linguagens so ininteligveis para o ser humano no treinado. As linguagens de mquina so representadas por sequncias de bits (zeros e uns). Estas sequncias representam instrues que sero executadas pelo processador do computador.
Linguagem de Baixo Nvel As linguagens de baixo nvel so prximas da linguagem de mquina. No entanto, os zeros e uns que formam uma instruo foram substitudos por palavras que representam tais instrues, tornando-as um pouco mais legveis. Estas linguagens so mais voltadas para a mquina, isto , so escritas usando as instrues do microprocessador do computador. So chamadas de linguagens Assembly (que significa montagem).
Linguagens de Alto Nvel As linguagens de alto nvel so mais prximas linguagem humana (do Ingls, por exemplo) e mais distantes das linguagens de mquina.
Necessitam de compiladores ou interpretadores para gerar instrues do microprocessador.
Interpretadores fazem a interpretao de cada instruo do programa fonte executando-a dentro de um ambiente de programao, Basic e Java so exemplos de linguagens interpretadas.
Os compiladores fazem a traduo de todas as instrues do programa fonte gerando um programa executvel. Estes programas executveis (*.exe) podem ser executados fora dos ambientes de programao.
Classificao da Linguagens de Alto Nvel
Genricas Para o desenvolvimento de programas de propsito geral; C, Java, Pascal Object, C# (C Sharp), VBNet
Especficas Fortran - utilizada para execuo de clculos matemticos;
LISP - desenvolvimento de aplicaes na rea de inteligncia artificial;
CLIPPER utilizada para aplicaes que manipulam bancos de dados. Criao, Compilao e Execuo de um Programa
Criao do programa fonte, que consiste no texto formado pelo conjunto de comandos que ns desejamos que o computador execute.
Compilao. O compilador um programa que verifica se o programa fonte no apresenta nenhum erro de sintaxe e gera o programa executvel. Quando o programa fonte apresenta algum problema, dizemos que ocorreu um erro de compilao.
Execuo do programa executvel. Neste momento, o programador dever testar se o programa est produzindo os resultados esperados. Conceitos de Algoritmos
A automatizao de tarefas um aspecto marcante da sociedade moderna. O aperfeioamento tecnolgico alcanado, com respeito a isto, teve como elementos fundamentais a anlise e a obteno de descries da execuo de tarefas em termos de aes simples o suficiente, tal que pudessem ser automatizadas por uma mquina especialmente desenvolvida para este fim, O COMPUTADOR.
Em cincia da computao houve um processo de desenvolvimento simultneo e interativo de mquinas (hardware) e dos elementos que gerenciam a execuo automtica (software) de uma dada tarefa. E essa descrio da execuo de uma tarefa, como considerada acima, chamada algoritmo. O conceito central da programao e da Cincia da Computao o conceito de algoritmos, isto , programar basicamente construir algoritmos
A palavra algoritmo, primeira vista, parece-nos estranha. Embora possua designao desconhecida, fazemos uso constantemente de algoritmos em nosso cotidiano: a maneira como uma pessoa toma banho um algoritmo. Outros algoritmos frequentemente encontrados so:
instrues para se utilizar um aparelho eletrodomstico;
uma receita para preparo de algum prato;
Formulrios de preenchimento de confirmao de matrcula ou inscrio de um aluno;
a maneira como as contas de gua, luz e telefone so calculadas mensalmente; etc
Utilizamos algoritmos (No computacionais) no nosso cotidiano para realizar atividades corriqueiras, definindo a sequncia de passos que deve ser executada para atingirmos um objetivo, como, por exemplo, os passos que executamos para tomar banho, calibrar um pneu ou fazer um bolo. So vrios os conceitos para algoritmo: Um conjunto finito de regras que prov uma sequncia de operaes para resolver um tipo de problema especfico - [KNUTH]
Sequncia ordenada, e no ambgua, de passos que levam soluo de um dado problema - [TREMBLAY]
Processo de clculo, ou de resoluo de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restries, as regras formais para a obteno do resultado ou da soluo do problema - [AURLIO]
Importncia do Algoritmo A importncia do algoritmo est no facto de termos que especificar uma sequncia de passos lgicos para que o computador possa executar uma tarefa qualquer, pois o mesmo por si s no tem vontade prpria, faz apenas o que mandamos.
Com uma ferramenta algortmica, podemos conceber uma soluo para um dado problema, independendo de uma linguagem especfica e at mesmo do prprio computador.
a forma pela qual descrevemos solues de problemas do nosso mundo, afim de, serem implementadas utilizando os recursos do mundo computacional.
Como este possu severas limitaes em relao ao nosso mundo, exige que, sejam impostas algumas regras bsicas na forma de solucionar os problemas, para que, possamos utilizar os recursos de hardware e software disponveis.
Pois, os algoritmos, apesar de servirem para representar a soluo de qualquer problema, no caso do Processamento de Dados, eles devem seguir as regras bsicas de programao para que sejam compatveis com as linguagens de programao.
Caractersticas do Algoritmos Incio o Fim
No dar margem dupla interpretao (no ambguo);
Capacidade de receber dado(s) de entrada do mundo exterior;
Poder gerar informaes de sada para o mundo externo ao do ambiente do algoritmo;
Ser efetivo (todas as etapas especificadas no algoritmo devem ser alcanveis em um tempo finito).
Forma de Representao do Algoritmo DESCRIO NARRAVATIVA Faz-se uso do portugus para descrever algoritmos.
EXEMPLO: Receita de Bolo: Providencie manteiga, ovos, 2 Kg de massa, etc. Misture os ingredientes Despeje a mistura na forma de bolo Leve a forma ao forno Espere 20 minutos Retire a forma do forno Deixe esfriar Prove
DESCRIO NARRATIVA
VANTAGENS O Portugus bastante conhecido por ns
DESVANTAGENS Impreciso; Pouca confiabilidade (a impreciso acarreta desconfiana) Extenso (normalmente escreve-se muito para dizer uma coisa)
FLUXOGRAMA
Terminal: indica o incio e o fim de um programa Conexo: serve para unio dos fluxos de informao Entrada de Dados: Indica a entrada de informao passada pelo utilizador Processamento: Utilizado para fazer clculos e atribuio de valores Sada: indica a sada de informaes processadas para o usurio por qualquer dispositivo de sada como monitor, impressora, etc. Condio: Indica a diviso do fluxo por uma determinada condio Seta de Fluxo de Informaes: indica o caminho que o processamento pode tomar FLUXOGRAMA Exemplo
Incio Leia NUM DOBRO <-NUM*2 Escreve DOBRO Fim Incio Leia N1 Media =N1+N2/2 Fim Leia N2 Se Media>=10 Apto N/ Apto FLUXOGRAMA Vantagens Uma das mais conhecidas ferramentas Figuras dizem muito mais que palavras Padro mundial
Desvantagens Faz com que a soluo do problema esteja amarrada a dispositivos fsicos; Pouca ateno aos dados, no oferecendo recursos ara descreve-los ou representa-los; Complica-se medida que o algoritmo cresce;
PSEUDO-CDIGO (LINGUAGEM ALGORITMICA) Exemplo
Algoritmo CALCULA_DOBRO inicio LEIA NUM DOBRO <- 2 * NUM Escreva DROBRO fim
Algoritmo MEDIA inicio Resultado: caractere N1, N2, soma, Med:real Leia(N1, N2) soma <- N1+N2 Med <- soma/2 Se(med > = 10) Resultado <- APROVADO Seno Resultado <- REPROVADO Escreva(Resultado) fim
PSEUDO-CDIGO (LINGUAGEM ALGORITMICA) VANTAGENS Independncia fsica da soluo(soluo lgica apenas) Usa o portugus como base; Pode-se definir quais e como os dados vo estar estruturados; Passagem quase imediata para uma linguagem de programao qualquer. DESVANTAGENS Exige a definio de uma linguagem no real para trabalho; No existem padres
ESTRUTURA DE CONSTRUO DE ALGORITMO SEQUENCIAL CONCEITO DE VARIVEIS E IDENTIFICADORES
TIPOS DE DADOS
OPERADORES DE ATRIBUIO
OPERADORES DE ENTRADA E SADA DE DADOS
OPERADORES MATEMTICOS
CONSTRUO DE ALGORITMOS COM ESTRUTURA SEQUENCIAL Conceito de Variveis Sabe-se da Matemtica que uma varivel a representao simblica dos elementos de um certo conjunto.
Nos algoritmos destinados a resolver um problema no computador, a cada varivel corresponde uma posio de memria, cujo contedo pode variar ao longo do tempo durante a execuo de um algoritmo. Embora a varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante.
Toda varivel identificada por um nome ou identificador. Assim, por exemplo, num algoritmo para calcular a rea de um tringulo retngulo pelo teorema de Pitgoras (a2 = b2 + c2), os identificadores A, B e C podem representar as posies de memria que armazenam o valor da hipotenusa e dos catetos. importante que nunca usemos uma palavra reservada, isto , que faa parte da linguagem algortmica, como um identificador, pois poder causar ambiguidade no entendimento do algoritmo.
Na nossa linguagem algortmica, vamos admitir que nossas variveis podero armazenar valores numricos ou alfanumricos (strings). Regra para nomenclatura das variveis
O Nome das variveis no pode coincidir com o nome do programa ou algoritmo
O nome das variveis no pode coincidir com as palavras reservadas da linguagem.
O primeiro caractere do nome de uma varivel no poder ser em hiptese alguma, um algarismo, sempre dever ser uma letra;
O nome de uma varivel no poder possuir espaos nem poder conter;
O nome das variveis no dever conter caracteres especiais, tais como: (@, #, $, %, &, *, _, , ., :, etc...)
Obs.: o caracter _ Under-line ou sublinhado considerado uma letra Assinale com X os nomes vlidos para identificadores de variveis:
( ) Endereo ( ) 21Angola ( ) Tele&Come ( ) NomeUsuario ( ) Salario Base ( ) _Num1 ( ) Imposto ( ) Nome_Usuario ( ) N_Matrcula ( ) Idade ( ) Num2345 ( ) Salrio Liquido Tipos de Dados As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres, Alfanumricas ou lgicas. Numericos Inteiros(int): So tipos inteiros, os dados numricos positivos ou negativos, excluindo-se, destes qualquer fracionrio. Como exemplo deste tipo de dado, tm-se os valores : 35,0,-56; Numricos Reais(decimal): So tipos reais, os dados numricos positivos, negativos e nmeros fracionrios. Ex. : 35,0,-56,1.2,-45.897 Caracter (String): So caracteres, as sequncias contendo letras, nmeros e smbolos especiais. Uma sequncia de caractere deve ser indicada entre aspas(). Ex.:PROGRAMAO,Rua Alfa, ,98. Lgicos (Boolean): So tipos lgicos ou boleanos, os dados com valores verdadeiro ou falso, e deve ser escrito entre pontos. Ex.: .Falso.,.Verdadeiro. (True/False)
Indique o tipo de varivel que podero armazenar os valores abaixo: Int Inteiro; Decimal Real; String Alfanumerico; Bool Logico
( ) 1000 ( ) -456 ( ) -1.46 ( ) 0 ( ) -900 ( ) True ( ) -456 ( ) 34 ( ) Casa 8 ( ) 0 ( ) 1.56 ( ) false ( ) 34+12 ( ) Salrio Operador de Atribuio A atribuio uma notao utilizada para atribuir um valor a uma varivel, ou seja, para armazenar um determinado contedo em uma varivel. A operao de atribuio, normalmente, representada por uma seta apontando para a esquerda, mas existem outros smbolos para representar a atribuio, depende da forma de representao do algoritmo. Sintaxe da atribuio em Algorito Sintaxe da atribuio em C#, C, C++ e Java varivel<- expresso varivel=expresso Exemplos A <- 2 B <- A NOTA <-10 NOME <-Joo SENHA <- ABC A<-B+C A=2 B = A NOTA=10 NOME = Joo Senha = XPTO A = B+C C<-1/3 NOTA <-NOTA -1 C = 1/3 NOTA = NOTA +1 Operadores de Entrada e Sada Existem basicamente duas instrues principais em algoritmos (e em programao em geral) que so: Escrever e Ler. Veremos inicialmente como funciona a instruo Escrever.
A instruo Escrever utilizada quando deseja-se mostrar informaes na tela do computador, ou seja, um comando de sada de dados. Para simplificar, usa-se a instruo Escrever, quando necessita-se mostrar ou solicitar algum dado para o usurio do algoritmo (e posteriormente do programa).
Em C# a Sintaxe utilizada para usar o comando de sada de dados o Console.WriteLine(); Dispositivos de Sada
A instruo Ler utilizada quando deseja-se obter informaes do teclado do computador, ou seja, um comando de entrada de dados. Para simplificar, usa-se a instruo Ler, quando necessita-se que o usurio do algoritmo digite algum dado (e posteriormente do programa).
Em C# a Sintaxe utilizada para usar a comanda de sada de dados o Console.ReadLine(); Dispositivos de Entrada Operadores Matemticos Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos trs tipos de operadores:
ARITMTICOS
RELACIONAIS
LGICOS Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtrao, multiplicao e diviso, podem utilizar tambm o operador para exponenciao.
Os smbolos para os operadores aritmticos so: Operador(smbolo) Descrio + Adio - Subtrao * Multiplicao / Diviso % Resto da Diviso Operadores Aritmticos de Atribuio Reduzida Esses operadores so usados para compor uma operao aritmtica e uma atribuio, conforme descrito seguir:
Operador Usabilidade Descrio Significado += A+=expresso Mais igual A = A + expresso -= A-=expresso Menos igual A = A expresso *= A*=expresso Vezes igual A = A * expresso /= A/=expresso Dividido igual A = A / expresso %= A%=expresso Resto igual A = A % expresso Exemplo:
Int x = 5;
X+=5 a mesma coisa que x=x+5 Os operadores relacionais comparam dois valores e retornam um valor lgico(booleano) que pode ser verdadeiro ou falso (true/false). Os smbolos para os operadores relacionais so: Operador(smbolo) Descrio == Igual a != Diferente de > Maior que < Menor que >= Maior ou igual <= Menor ou igual Os operadores lgicos trabalham como operadores booleanos e o seu resultado tambm ser booleano(true/false). Eles so usados somente para expresses lgicas. Os smbolos para os operadores relacionais so: Operador(smbolo) Descrio && AND = E || OR = Ou ! NOT = No Assim, em um teste lgico usando o operador && (AND), o resultado somente ser verdadeiro (true) se todas as expresses lgicas forem avaliadas como verdadeiras.
J, se o operador usado for o || (OR), basta que apenas uma das expresses lgicas seja verdadeira para que o resultado tambm seja verdadeiro.
Completando, o operador lgico ! (NOT) usado para gerar uma negao. Desta forma, invertida toda a lgica da expresso.
Exerccios de Algoritmos com estrutura Sequencial (Visualg & C Sharp) Resoluo de Exerccios baseados nas Listas enviadas por E-mail usando:
Linguagem Algortmica VisualG
Linguagem de Programao C#
Estrutura Condicional ou Seleo 1. Estruturas de Seleco ou Deciso o Estruturas de Controlo o Estruturas IfElse(se seno) o If simples o If Composto o If Aninhado o Switch(Escolha Caso) o Identao de um programa
Nos programas que desenvolvemos at este momento, todos os comandos que aparecem no programa so executados, ou seja, o processador vai passando e executando cada um dos comandos do programa. Existem situaes em que no queremos que todos os comandos sejam executados. Nestes casos, devemos utilizar alguma estrutura de seleo, que nos permite desviar de uma sequncia de comandos do programa. Neste captulo, iremos aprender a utilizar as estruturas de seleo disponveis na linguagem C#, que so: if e switch.
Estas estruturas correspondem ao se e escolha do Portugol. As estruturas de seleo tambm podem ser chamadas de: estruturas de deciso ou estruturas de desvio. Vamos avanar, um pouco mais, nossos conhecimentos em C#?
De um modo geral, os comandos de um programa so executados um aps o outro, na ordem em que foram escritos de cima para baixo e da esquerda para a direita. Este o fluxo de execuo de um programa. Mas, atravs do uso de estruturas de controlo, podemos controlar o fluxo de execuo dos nossos programas.
Existem trs tipos de estruturas de controlo:
Sequncia: nesta estrutura, todos os comandos so executados uma nica vez, de forma linear, um aps o outro. At ento, nossos programas foram desenvolvidos desta forma.
Seleo: esta estrutura permite que um grupo de comandos seja executado ou no, dependendo do resultado de uma condio (representada por expresses relacionais ou lgicas). Dessa forma, poderemos ter um conjunto de comandos do nosso programa que no vai ser executado.
Repetio: com estas estruturas, poderemos fazer com que uma sequncia de comandos seja executada vrias vezes. A estrutura de seleo if a estrutura de seleo mais simples. No entanto, esta estrutura resolve todo e qualquer problema de seleo. Esta estrutura permite executar um entre vrios blocos de comandos. A escolha de qual bloco ser executado depende do resultado de uma condio (expresso relacional ou lgica). A sintaxe geral para o comando if apresentada abaixo: Sintaxe if(condicao) { bloco_de_comando1 }else { bloco_de_comando2 } Neste comando, a condio verificada e, caso o resultado seja verdade, o bloco_de_comandos1 ser executado. Caso contrrio, o bloco_de_comandos2 executado. Note que somente um dos blocos ser executado. Apesar de possuir uma forma geral, esta estrutura pode se apresentar de modos ligeiramente diferentes: if simples, composto ou aninhado. If Simples O if simples o if sem o else. O if simples utilizado quando se deseja executar uma sequncia de comandos, apenas se a condio for verdade. Dessa forma, no existe uma sequncia de comandos para ser executada quando a condio falsa. A figura apresenta o fluxograma do if simples..
Sintaxe para o If Simples
Exemplo do uso do If Simples O programa 1.1 solicita o saldo atual do cliente e o valor que ele deseja retirar no banco. O programa vai calcular e apresentar o valor do saldo do cliente, aps o saque. Caso o saldo fique negativo, deve ser escrito uma mensagem informando esta situao ao cliente.
Sintaxe if (condicao) if (condicao) { comando1; comando2; } Exerccios com IF Simples If Composto O if composto o if com o else, dessa forma, teremos uma sequncia de comandos que executada quando a condio resulta em verdade e uma outra sequncia que executada quando a condio falsa. SINTAXE Caso 1 Caso 2 if (condicao) Comando1
else Comando 2 if (condicao) { comando1; comando2; }else { comando3; } Caso 3 Caso 4 if (condio) comando1;
else { comando2; comando3; } if (condio) { comando1; comando2; } else { comando3; comando4; } Exemplo de If Composto
Este programa l o nome do aluno e as suas duas notas. Em seguida, calcula a mdia do aluno e apresenta uma mensagem informando se o aluno foi aprovado ou reprovado (considerar que a mdia para ser aprovado igual ou maior que 14.0) If Aninhado O if aninhado ocorre quando temos mais de duas possibilidades de respostas (ou situao). Por exemplo, ao comparar dois nmeros (x e y), temos trs possibilidades de resposta: x menor que y, x maior que y, ou ainda, x e y so iguais. Assim, a primeira possibilidade ser testada na condio do if (verificando se x menor que y). Se a condio for falsa, ainda temos duas possibilidades de resposta. Para fazer esta verificao, necessitamos de um outro if. Este novo if ser colocado dentro da sequncia de comandos do else. Assim, teremos um if dentro do outro, por isso chamado de if aninhado. Caso1: 3 Possibilidade de Respostas Caso2: Quatro possibilidade de Respostas if (condio1)
comando1;
else { if (condicao2)
comando2;
else
comando3; } if (condio1)
comando1;
else { if (condicao2) comando2; else { if (condicao3)
comando3;
else comando4; } } Exemplo do If Aninhado Neste programa, sero lidos dois nmeros inteiros(x e y) e seus valores sero comparados. O programa ir escrever uma das trs mensagens: x maior que y, x menor que y ou x e y so iguais. Na sequncia, as linhas do programa sero comentadas.
Exerccios com IF Composto e IF Aninhado Switch uma estrutura de deciso que permite a execuo de uma sequncia de comandos a partir da anlise do valor de uma varivel inteira ou de uma varivel com um nico caractere.
Normalmente, o switch usado quando sabemos os provveis valores que uma varivel pode armazenar, e para cada valor, temos que executar uma sequncia de comandos diferente.
A grande restrio do switch que ele no funciona para variveis reais, nem cadeia de caracteres. Alm disso, o switch testa se a varivel igual a um valor.