Apostila algoritmos

891 visualizações

Publicada em

Apostila algoritmo

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
891
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
23
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Apostila algoritmos

  1. 1. Elisamara de Oliveira Algoritmos e Linguagem de Programação Revisada por Clausia Mara Antoneli (janeiro/2013)
  2. 2. APRESENTAÇÃO É com satisfação que a Unisa Digital oferece a você, aluno(a), esta apostila de Algoritmos e Lingua-gem de Programação, parte integrante de um conjunto de materiais de pesquisa voltado ao aprendizado dinâmico e autônomo que a educação a distância exige. O principal objetivo desta apostila é propiciar aos(às) alunos(as) uma apresentação do conteúdo básico da disciplina. A Unisa Digital oferece outras formas de solidificar seu aprendizado, por meio de recursos multidis-ciplinares, como chats, fóruns, aulas web, material de apoio e e-mail. Para enriquecer o seu aprendizado, você ainda pode contar com a Biblioteca Virtual: www.unisa.br, a Biblioteca Central da Unisa, juntamente às bibliotecas setoriais, que fornecem acervo digital e impresso, bem como acesso a redes de informação e documentação. Nesse contexto, os recursos disponíveis e necessários para apoiá-lo(a) no seu estudo são o suple-mento que a Unisa Digital oferece, tornando seu aprendizado eficiente e prazeroso, concorrendo para uma formação completa, na qual o conteúdo aprendido influencia sua vida profissional e pessoal. A Unisa Digital é assim para você: Universidade a qualquer hora e em qualquer lugar! Unisa Digital
  3. 3. SUMÁRIO INTRODUÇÃO................................................................................................................................................ 5 1 ALGORITMOS............................................................................................................................................ 7 1.1 O que é um Algoritmo?..................................................................................................................................................7 1.2 Conceitos Básicos da Programação de Computadores.....................................................................................9 1.3 Etapas da Programação de Computadores.........................................................................................................12 1.4 Expressão de Algoritmos ...........................................................................................................................................13 1.5 Os Algoritmos serão Expressos em Pseudolinguagem..................................................................................18 1.6 Resumo do Capítulo.....................................................................................................................................................19 1.7 Atividade Proposta........................................................................................................................................................19 2 PSEUDOLINGUAGEM DE PROGRAMAÇÃO: PORTUCÊ.............................................. 21 2.1 Identificadores................................................................................................................................................................21 2.2 Tipos Básicos e Declaração de Variáveis................................................................................................................22 2.3 Comando de Atribuição..............................................................................................................................................23 2.4 Operadores Aritméticos .............................................................................................................................................24 2.5 Operadores Lógicos .....................................................................................................................................................25 2.6 Operadores Relacionais..............................................................................................................................................28 2.7 Comando Condicional.................................................................................................................................................29 2.8 Comando de Repetição..............................................................................................................................................31 2.9 Comandos de Entrada e Saída..................................................................................................................................33 2.10 Separador de Comandos ........................................................................................................................................37 2.11 Comentários..................................................................................................................................................................37 2.12 Bloco de Programa.....................................................................................................................................................38 2.13 Resumo do Capítulo..................................................................................................................................................41 3 CONSTRUÇÃO DE ALGORITMOS EM PORTUCÊ: PRATICANDO OS COMANDOS E FAZENDO CÁLCULOS.....................................................................................43 3.1 Declaração de Variáveis – Comandos “leia” e “imprima”.................................................................................43 3.2 Comando Condicional “se”.........................................................................................................................................44 3.3 Bloco de Programa........................................................................................................................................................45 3.4 Operações Básicas com Números...........................................................................................................................46 3.5 Operações com Operadores Lógicos e Relacionais..........................................................................................49 3.6 Resumo do Capítulo.....................................................................................................................................................51 3.7 Atividades Propostas....................................................................................................................................................51 4 METODOLOGIA PARA A CONSTRUÇÃO DE ALGORITMOS.................................... 55 4.1 Os Passos da Metodologia.........................................................................................................................................55 4.2 Solução de Exercícios utilizando a Metodologia...............................................................................................57 4.3 Resumo do Capítulo.....................................................................................................................................................57 4.4 Atividades Propostas....................................................................................................................................................58
  4. 4. 5 A LINGUAGEM DE PROGRAMAÇÃO C................................................................................... 61 5.1 Tipos Básicos e Declaração de Variáveis em C....................................................................................................61 5.2 Operadores de Atribuição, Aritméticos, Relacionais e Lógicos (Binários) em C ...................................62 5.3 Comando Condicional em C (if)...............................................................................................................................65 5.4 Comando de Seleção Múltipla em C (switch).....................................................................................................68 5.5 Comando de Repetição em C (while).....................................................................................................................71 5.6 Comando de Repetição em C (for)..........................................................................................................................72 5.7 Comandos de Leitura e Escrita em C .....................................................................................................................76 5.8 Comentários em C ........................................................................................................................................................79 5.9 Bloco de Programa em C ...........................................................................................................................................79 5.10 Funções Úteis em C....................................................................................................................................................81 5.11 Tradução de PortuCê para a Linguagem C........................................................................................................84 5.12 Resumo do Capítulo..................................................................................................................................................89 5.13 Atividades Propostas.................................................................................................................................................89 6 USANDO COMANDOS DE REPETIÇÃO EM C.................................................................... 91 6.1 Comando de Repetição – Entrada Indeterminada de Dados (uso de flags)...........................................91 6.2 Comando de Repetição – Entrada de Dados Determinada..........................................................................94 6.3 Exemplo dos Minutos Telefônicos...........................................................................................................................96 6.4 Exemplo do Preço Final de Automóveis.............................................................................................................100 6.5 Exemplo da Eleição.....................................................................................................................................................104 6.6 Exemplo da Série Numérica....................................................................................................................................108 6.7 Resumo do Capítulo...................................................................................................................................................112 6.8 Atividades Propostas..................................................................................................................................................112 7 OUTROS PROGRAMAS EM C......................................................................................................119 8 PRÁTICA EM LABORATÓRIO.......................................................................................................127 8.1 Estudo Dirigido............................................................................................................................................................ 127 9 CONSIDERAÇÕES FINAIS..............................................................................................................131 RESPOSTAS COMENTADAS DAS ATIVIDADES PROPOSTAS....................................133 REFERÊNCIAS............................................................................................................................................175
  5. 5. Unisa | Educação a Distância | www.unisa.br 5 INTRODUÇÃO Esta apostila se refere à disciplina Algoritmos e Linguagem de Programação do curso de Engenha-ria de Produção, na modalidade a distância, da Unisa. O objetivo desta disciplina é capacitar você, caro(a) aluno(a), a fazer os primeiros programas de computador utilizando uma linguagem de programação. Escrever programas de computador é uma ta-refa muito interessante, instigante e desafiadora! Vamos começar entendendo o que é um algoritmo, que é um roteiro com instruções sequenciais para se resolver um problema ou se realizar alguma tarefa. É como uma receita de bolo, que indica os ingredientes e as instruções para se fazer o bolo passo a passo. Usando essa analogia, os ingredientes seriam os dados, os passos seriam as instruções do programa e o forno para assar o bolo seria o computador! O universo dos computadores é muito simples, muito limitado, mas muito poderoso: tudo se ba-seia na base 2, que possui apenas 2 algarismos: 0 e 1. Esses dois dígitos binários, ou bits, formam a lingua-gem de máquina, que é a única linguagem que o computador digital entende. Mas nós vamos aprender a escrever as instruções dos nossos programas numa linguagem de programação chamada C, que é mais próxima da nossa linguagem de comunicação. Nós nos comunicamos em Português, certo? Então vamos começar a escrever nossos primeiros algoritmos em PortuCê, uma pseudolinguagem, e depois traduzi- -los para um programa em linguagem C. Isso ainda não resolve nosso problema: para que o computador possa executar nosso programa em C, ele precisa ser traduzido para linguagem de máquina! Mas isso será feito facilmente pelo compilador C, um programa que faz exatamente isso: traduz programas em C para instruções binárias (linguagem de máquina). Como você pode ver, será um belo desafio! Então, caro(a) aluno(a), afie seu raciocínio lógico e pre-pare- se para entrar num mundo em que a lógica será o carro-chefe! Não tema nada, pois tudo será ensinado de forma simples e didática... Mais algumas páginas à frente e você já estará programando seu computador! Profa. Dra. Elisamara de Oliveira
  6. 6. “Programar é construir algoritmos.” “Programa = algoritmo + estruturas de dados.” “No processo de construção de programas, a formulação do algoritmo e a definição das estruturas de dados estão intimamente ligadas.” Unisa | Educação a Distância | www.unisa.br 7 1 ALGORITMOS Em nosso dia a dia, executamos mecanicamente uma série de ações, que são seguidas sequencial-mente e que provocam o acontecimento de algo. Por exemplo, temos um trajeto frequente ao sairmos diariamente de casa em direção ao nosso trabalho ou à nossa universidade, que, sempre que seguido, nos leva ao nosso destino. Isso é um algoritmo. Em outras palavras, um algoritmo descreve eventos com duração finita, que envolvem um conjunto de objetos cujas características podem ser alteradas, através de ações que ocorrem sequencialmente. 1.1 O que é um Algoritmo? Vamos, juntos, entender o que são algoritmos, utilizando inicialmente alguns conceitos já definidos na literatura técnica da área: Atenção Além dessas importantes definições, acrescentemos que, num algoritmo, podem-se observar os seguintes aspectos: ƒƒação: evento que ocorre num período de tempo finito; ƒƒestado: propriedades de um objeto numa dada situação; ƒƒprocesso: sequência temporal de ações; ƒƒpadrão de comportamento: toda vez que é seguido, um evento ocorre.
  7. 7. Elisamara de Oliveira Algoritmo para fazer “batatas fritas para o jantar” “Traga a cesta com batatas da despensa”; “Traga a panela do armário”; “Coloque óleo na panela”; Se “a roupa é clara” então “coloque o avental”; Enquanto “nº de batatas é insuficiente para o número de pessoas” faça “Pique as batatas”; “Esquente o óleo da panela”; “Frite as batatas na panela”; “Escorra o excesso de óleo das batatas fritas”; “Coloque as batatas fritas numa vasilha com papel absorvente”. Unisa | Educação a Distância | www.unisa.br 8 Saiba mais Exemplo de um algoritmo “descasque as batatas”; Apesar de muito simples, algumas observações importantes podem ser notadas nesse algoritmo: ƒƒo tempo verbal está na forma imperativa (“faça”, “traga”, “frite” etc.); ƒƒhá um sequenciamento das ações, que estão separadas por um ponto e vírgula; ƒƒo avental não é usado toda vez: existe um motivo para colocá-lo, ou seja, há uma condição para que o avental seja colocado; ƒƒo número de batatas descascadas varia; a ação de “descascar uma batata” repete-se até que a condição de parada (ser suficiente para alimentar as pessoas que irão jantar) seja alcançada; ƒƒa ordem das ações é importante: primeiro descasca-se a batata, pica-se a batata, para depois fritá-la... Exemplos de algoritmos conhecidos: ƒƒQual é o algoritmo que você descreve para vir estudar? ƒƒQual é o algoritmo para se fazer uma feijoada? ƒƒQual é o algoritmo para se trocar uma lâmpada? Apesar de receitas culinárias e trajetos rotineiramente percorridos encaixarem-se perfeitamente no conceito inicial de algoritmo, no nosso curso, estamos interessados num tipo de algoritmo especial, que seja capaz de ser executado por um computador. Para tanto, é necessário que identifiquemos problemas do mundo real que possam ser traduzidos em ações primitivas finitas e dos quais se possa extrair um padrão de comportamento.
  8. 8. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 9 Com base nos exemplos apresentados até aqui, estamos prontos para definir o que é um algoritmo. Um algoritmo é a descrição de um padrão de comportamento, expresso em termos de um repertório bem definido e finito de ações primitivas que podem ser executadas. Analise a definição e veja como é coerente com o que apresentamos; não é mesmo? Além disso, é importante observar que, num algoritmo, distinguem-se claramente dois aspectos: ƒƒaspecto estático: que corresponde ao texto; ƒƒaspecto dinâmico: que corresponde à sua execução (a partir de valores iniciais). O curso de Algoritmos e Linguagem de Programação é, na realidade, um curso de Programação de Computadores para alunos(as) que iniciam cursos superiores na área de Engenharia e Informática. Sei que você está curioso(a) para conhecer um algoritmo, mas, para começar a construir seus algoritmos e fazer seus primeiros programas de computador, é necessário que você domine uma série de conceitos básicos, que são apresentados a seguir, a começar pelo próprio computador! 1.2 Conceitos Básicos da Programação de Computadores Fonte: http://evotecinformatica.blogspot.com/p/como- -cuidar-do-seu-computador.html. Computador: é uma máquina capaz de seguir uma espécie de algoritmo chamado programa, que está escrito em linguagem de máquina. Linguagem de máquina: internamente, o computador executa uma série de instruções que ficam armazenadas em sua memória principal em código binário, ou seja, em linguagem de máquina (zeros (0) e uns (1), que são os dígitos binários ou bits). Linguagem de alto nível: para escrever os programas de computador, os programadores utilizam linguagens que estão mais próximas da linguagem humana, que são chamadas linguagens de alto nível ou, simplesmente, linguagens de programação. Exemplos de linguagens de programação (alto nível) são: C, C++, C#, Pascal, Delphi, Java, Basic, VisualBasic, Fortran, Cobol, entre muitas outras.
  9. 9. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 10 Linguagem de montagem ou Assembly: há programas de computador que precisam interferir diretamente no hardware da máquina para permitir a execução de funções específicas, como as ofere-cidas por sistemas operacionais, por exemplo. Nesse caso, os programadores utilizam as linguagens de montagem ou linguagens assembly, que estão muito próximas da linguagem de máquina e mais distan-tes das linguagens de programação, sendo, por isso, chamadas linguagem de baixo nível. A Figura 1 mostra a relação entre as linguagens discutidas anteriormente. Figura 1 – Relação entre linguagens de baixo e de alto nível. Numa ponta da Figura 1, está a linguagem de máquina e, no outro extremo, estão as linguagens humanas. Quanto mais próxima da linguagem de máquina, mais de “baixo nível” é a linguagem; em con-trapartida, quanto mais próxima das linguagens humanas, mais “alto nível”. As linguagens de programa-ção fazem uma espécie de ponte entre a linguagem binária, ou linguagem que o computador entende, e a linguagem que nós humanos utilizamos. Linguagem de programação: “Uma linguagem de programação é uma linguagem utilizada por uma pessoa para expressar um processo através do qual o computador possa resolver um problema.” (SEBESTA, 2000). Pessoas que possuem uma compreensão limitada da linguagem natural tendem a ser mais limitadas para expressar seus pensamentos, especialmente em termos de capacidade de abstração. Programadores que tiveram pouca educação formal em disciplinas de Computação tendem a continuar a usar a mesma linguagem de programação, mesmo que esta esteja em desuso. A aprendizagem con-tínua é fundamental. É necessário que os programadores conheçam os fundamentos das linguagens de programação para que possam ler, entender e aprender com os manuais e livros técnicos das novas linguagens e os novos paradigmas que venham a surgir. Compilador: permite que os programadores utilizem linguagens de alto nível para escrever os programas de computador, pois se encarrega de traduzi-los para linguagem de máquina. O compilador é um programa que traduz uma determinada linguagem de programação para linguagem de máquina. Dessa forma, existem diversos compiladores específicos para cada uma das linguagens de programação e para cada sistema operacional, conforme ilustra a Figura 2.
  10. 10. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 11 Figura 2 – Os compiladores são específicos para cada linguagem e para cada sistema operacional. Conforme ilustra a Figura 2, um compilador C para o sistema operacional Windows (compilador X) é diferente de um compilador C para o sistema operacional Linux (compilador Y), que também é di-ferente de um compilador C para o sistema operacional Mac OS (compilador Z), por exemplo, embora a linguagem de programação (C) seja a mesma (linguagem de alto nível). O compilador de linguagem de montagem ou linguagem assembly é chamado assembler. Caro(a) aluno(a), dadas essas explicações básicas, como unir todas essas informações para come-çarmos a programar? A Figura 3 vai nos ajudar, mostrando o ciclo completo da elaboração do algoritmo à execução de um programa de computador. Cada um dos componentes desse ciclo é explicado a seguir. Figura 3 – Do algoritmo à execução de um programa de computador.
  11. 11. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 12 ƒƒAlgoritmo: estrutura do programa; instruções que descrevem a lógica do programa; ƒƒEditor de texto: permite que o código-fonte do programa seja editado em um arquivo-fonte. Alguns compiladores têm editores com ambiente de programação integrados, como é o caso do compilador Dev C++; ƒƒCódigo-fonte: conjunto de comandos escritos na linguagem de programação escolhida (que, neste curso, será a linguagem C). O código-fonte fica armazenado no arquivo-fonte em forma-to ASCii, ou seja, em texto [o arquivo-fonte possui a extensão relativa à linguagem de progra-mação usada, por exemplo, .pas (Pascal), .c (C), .cpp (C++), .cs (C#), .java (Java)]; ƒƒCompilador: lê o código-fonte do programa e cria outro arquivo, com o mesmo programa escrito em linguagem de máquina; ƒƒCódigo-objeto: arquivo resultante da compilação do código-fonte. Contém informações so-bre alocação de memória, os símbolos do programa (como nomes de variáveis e de funções) e também informações sobre debug (o arquivo-objeto possui a extensão .obj para a maioria das linguagens de programação); ƒƒArquivos de biblioteca: contêm funções já compiladas que podem ser utilizadas no programa; ƒƒLinker: programa auxiliar do compilador que cria o programa executável a partir de arquivos- -objeto e dos arquivos de biblioteca; ƒƒCódigo executável: programa que pode ser executado no computador (o arquivo executável possui a extensão .exe). Resumindo todo esse processo, caro(a) aluno(a), vamos precisar passar por 5 etapas: obter um pro-blema a ser resolvido; escrever um algoritmo em pseudolinguagem para solucionar esse problema; tra-duzir o algoritmo para a linguagem de programação C; e, finalmente, editar esse programa e usar um compilador C para testar seu funcionamento! 1.3 Etapas da Programação de Computadores Como acabamos de dizer, para conseguirmos construir programas de computador, é necessário cumprir 5 etapas básicas da programação. As 5 etapas da programação de computadores são: 1. identificação de um problema do mundo real; 2. confecção do algoritmo; 3. teste do algoritmo; 4. confecção do programa de computador; 5. execução do programa no computador. Para realizarmos esse ciclo de etapas com sucesso, quer dizer, para conseguirmos fazer programas de computador com qualidade e confiáveis, é muito importante a utilização de técnicas de programação, como a programação estruturada. A programação estruturada é uma metodologia de projeto e desen-volvimento que pretende:
  12. 12. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 13 ƒƒfacilitar a escrita; ƒƒfacilitar o entendimento; ƒƒpermitir a verificação; ƒƒfacilitar a alteração e a manutenção dos programas de computador. O principal objetivo da metodologia de programação estruturada é reduzir a complexidade dos problemas. Essa metodologia, quando utilizada, induz o programador a produzir programas: ƒƒconfiáveis; ƒƒde fácil manutenção; ƒƒflexíveis; ƒƒdocumentados; ƒƒlegíveis. Sendo assim, caro(a) aluno(a), vamos aprender a programar da melhor maneira possível: utilizando as regras da programação estruturada! 1.4 Expressão de Algoritmos Os algoritmos podem ser expressos através de diagramas, de pseudolinguagens ou da própria lin-guagem de programação. Vamos examinar cada uma dessas três opções e, no final deste capítulo, vamos optar por uma delas, para que possamos começar a fazer nossos primeiros algoritmos! Expressão de Algoritmos Através de Diagramas A utilização de diagramas para a expressão de algoritmos foi bastante utilizada até a década de 1980. Diagramas de Chapin e fluxogramas foram os principais métodos utilizados então. Nos métodos baseados em diagramas, uma grande variedade de formas geométricas, como quadrados, retângulos, hexágonos, pentágonos etc., é utilizada para representar as instruções de leitura e impressão de dados, assim como os comandos condicionais, de repetição etc. Além disso, uma série de regras para a dispo-sição dessas formas e/ou setas para representar o sequenciamento das instruções fazem parte desses métodos. Apesar de terem sido utilizados largamente pelas primeiras gerações de programadores, esses mé-todos apresentam uma série de inconveniências, tais como: ƒƒo programador tem que memorizar todas as formas geométricas e conhecer as regras de in-ter- relacionamento entre elas; ƒƒo programador perde um tempo considerável para fazer e refazer desenhos, tendo que possuir diversas réguas com os símbolos dos diagramas; ƒƒpara algoritmos muito grandes, os desenhos começam a ocupar muitas páginas, tornando im-
  13. 13. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 14 praticável a visualização de toda a solução; ƒƒa memorização de regras de expressão desvia a atenção do programador, que não tem apenas de se concentrar na lógica do problema, como seria desejável, mas tem as preocupações adi-cionais de elaborar desenhos e consultar regras e regras. Além de todos os inconvenientes citados, que de longe esgotam os seus problemas, os métodos baseados em diagramas se distanciam muito do alvo da programação, que é a expressão da lógica al-gorítmica na própria linguagem de programação! Além disso, esses métodos não são nem um pouco intuitivos. Veja a Figura 4 e tente descobrir o que o programa faz, sem muito esforço, se for possível: Figura 4 – Algoritmo expresso através de um diagrama de Chapin. A Figura 5 mostra um exemplo de um algoritmo expresso através de um fluxograma. Observe a existência de diferentes formas geométricas para as diferentes instruções e o uso de setas para represen-tar o fluxo dos dados. Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin, da Figura 4).
  14. 14. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 15 Figura 5 – Algoritmo expresso através de um fluxograma. Expressão de Algoritmos Através de Linguagem de Programação Expressar um algoritmo através de uma linguagem de programação é o objetivo, a meta do pro-gramador, com certeza, mas isso é feito quando o programador já adquiriu bastante experiência de pro-gramação, quer dizer, quando o programador já consegue programar diretamente da linguagem de pro-gramação. Os programadores iniciantes podem ter grandes dificuldades para aprender a programar se forem diretamente às instruções da linguagem de programação. Uma linguagem de programação permite, além da expressão do raciocínio algorítmico, a sua exe-cução no computador (por causa do compilador, conforme já aprendemos). Embora as linguagens de programação sejam chamadas linguagens de alto nível, devido à sua proximidade com a linguagem hu-mana, suas instruções vêm em inglês. O inglês é uma das diversas linguagens humanas, claro, mas pode oferecer certo desconforto aos estudantes, principalmente aos que falam português, como é o nosso caso. Existem diversas linguagens de programação. Cada uma pode ser mais adequada à resolução de problemas específicos e recebe alguns rótulos por isso, como linguagens para aplicações científicas, lin-guagens para desenvolvimento de software básico, linguagens para utilização intensiva de recursos
  15. 15. Elisamara de Oliveira gráficos, para manipulação de bancos de dados etc. e linguagens para o ensino de programação! Veja a Figura 6. É um código escrito em Pascal. Unisa | Educação a Distância | www.unisa.br 16 Figura 6 – Algoritmo expresso na linguagem de programação Pascal. A Figura 6 mostra um algoritmo expresso na linguagem de programação Pascal, ou seja, já é um programa de computador. Observe a estrutura do programa: começa com PROGRAM, depois tem a se-ção VAR, na qual as variáveis são declaradas e, depois, vêm as instruções contidas entre o BEGIN (início) e o END (fim). Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin e pelo fluxograma, mostrados nas Figuras 4 e 5). Agora, observe o exemplo de um programa escrito na linguagem de programação C. Figura 7 – Algoritmo expresso na linguagem de programação C.
  16. 16. Algoritmos e Linguagem de Programação A Figura 7 mostra um algoritmo expresso na linguagem de programação C, ou seja, também é um programa de computador. Observe a estrutura do programa: começa com um comentário, depois tem a inclusão de uma biblioteca de funções, depois a declaração das variáveis e, em seguida, vem a seção main, na qual as instruções do programa estão contidas entre o { (início) e o } (fim). Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse programa faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma e pelo programa Pascal, mostrados nas Figuras 4, 5 e 6). O programa traz um comentário dizendo explicitamente o que ele faz. Portanto, garanto que você conseguiu responder à primeira pergunta. Com relação às variáveis que o programa utiliza e seu tipo básico, observe a declaração “int valor, menor;” no programa. Há duas variáveis ali declaradas: valor e menor; o tipo básico é int; um pouquinho de imaginação e int = inteiro! Que tal você comparar o código C com o código Pascal? Semelhanças? Qual dos dois lhe pareceu Unisa | Educação a Distância | www.unisa.br 17 mais fácil de entender? Bem, se sua resposta foi o código Pascal, digo-lhe que o Pascal tem o “rótulo” de linguagem mais adequado ao ensino de programação. Se sua resposta foi o código C, saiba que é uma linguagem que foi criada para ser utilizada por programadores experientes. Mas, se você teve dificuldade de entender am-bos os códigos, não se preocupe! O curso está apenas começando e há muito que se aprender de lógica de programação! Garanto que no final do curso esse programa vai parecer muito, muito fácil para você! Expressão de Algoritmos Através de Pseudolinguagem Uma pseudolinguagem é uma notação para expressão de algoritmos para ser utilizada nas 3 pri-meiras etapas da programação definidas na seção 1.3, quais sejam, identificação de um problema do mun-do real, confecção e teste do algoritmo. É apresentada na forma de português estruturado. Embora seja uma pseudolinguagem, possui estrutura, sintaxe e semântica semelhantes às de uma linguagem de pro-gramação. A principal diferença entre a pseudolinguagem e a linguagem de programação é que a primeira não possui um compilador. Isso significa que é possível expressar o raciocínio algorítmico utilizando-se uma pseudolinguagem, mas o programa não pode ser executado no computador. São muitas as vantagens de se utilizar uma pseudolinguagem para escrever algoritmos: ƒƒé uma linguagem independente de máquina; o programador pensa somente no problema a ser resolvido, sem se preocupar com possíveis restrições do compilador ou do hardware (com-putador); ƒƒo programador tem que conhecer a sintaxe, a semântica e a estrutura da pseudolinguagem, mas tem total liberdade para criar novos comandos ou usar instruções em alto nível (ou em forma de frases); por um lado, ele vai se acostumando com a rigidez da sintaxe das linguagens de programação, mas, por outro, tem a liberdade de expressar seu raciocínio sem esbarrar em limitações de contexto; ƒƒuma vez estando pronto o algoritmo na pseudolinguagem, a sua implementação no compu-tador (etapas 4 e 5 da programação: confecção e execução do programa) fica muito facilitada, pois toda a lógica já foi desenvolvida e testada e somente uma tradução para a linguagem de programação-alvo se faz necessária.
  17. 17. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 18 Veja o exemplo de um algoritmo escrito na pseudolinguagem PortuCê. Figura 8 – Algoritmo expresso na pseudolinguagem PortuCê. A Figura 8 mostra um algoritmo expresso na pseudolinguagem PortuCê. Observe a estrutura do algoritmo: começa com um comentário dizendo o que o algoritmo faz, tem a declaração das variáveis e depois vem a seção principal ( ), em que são apresentadas as instruções contidas entre o { (início) e } (fim) do algoritmo. Você seria capaz de dizer o que esse algoritmo faz? Quais as variáveis que ele utiliza e de que tipo básico elas são? (Dica: esse algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma, pela linguagem Pascal e pela linguagem C, mostrados nas Figuras 4, 5, 6 e 7). Esse algoritmo em PortuCê corresponde ao programa em C mostrado na Figura 7. Observe a gran-de semelhança entre eles. Essa semelhança é proposital, com certeza. O PortuCê é quase a tradução de um programa C para o português. As vantagens de se utilizar o PortuCê são muitas. Pense sobre elas, pois o PortuCê será nosso maior aliado no aprendizado de algoritmos! Um exercício interessante para você fazer agora seria visitar os exemplos deste algoritmo escritos no diagrama de Chapin e no fluxograma e compará-los com o PortuCê. Diga-me: qual deles é mais fácil de entender? Qual dessas formas de expressão de algoritmos você escolheria? 1.5 Os Algoritmos serão Expressos em Pseudolinguagem Em função de tudo o que foi dito e após conhecermos as 3 formas de expressão de algoritmos, usa-remos pseudolinguagem para escrever nossos primeiros algoritmos! As justificativas dessa nossa esco-lha são muitas e foram já fundamentadas. A pseudolinguagem PortuCê utiliza o português, numa forma estruturada, e tem estrutura, sintaxe e semântica muito semelhantes às da linguagem de programação C. Apesar de o Pascal ter se consagrado como uma linguagem adequada para o ensino da progra-mação aos estudantes que a iniciam, ou seja, como primeira linguagem de programação, a linguagem C, antes restrita à comunidade científica, ganhou uma popularidade inquestionável na década de 1990 que se estende aos dias atuais, pois é a base de novas linguagens, como o Java, o C# e até o Android. Em função disso, a linguagem C passou a ser alvo do interesse dos estudantes. A resistência, que já existiu,
  18. 18. Algoritmos e Linguagem de Programação em utilizá-la como primeira linguagem de programação pelos professores se deveu, em parte, ao fato de seus criadores, Dennis Ritchie e Brian Kernighan, terem afirmado que “C retém a filosofia básica de que os programadores sabem o que estão fazendo” (KERNIGHAN; RITCHIE, 1989). Bem, se considerarmos que programadores iniciantes não têm condições de saber com segurança o que estão fazendo, exatamente pelo fato de serem inexperientes, a adoção da linguagem seria realmente questionável. No entanto, as linguagens de programação evoluíram bastante e as mais utilizadas hoje, como o Java e o C#, têm como base a linguagem C. Além disso, a adoção de um método adequado e coerente para o ensino da programação de computadores pode atuar como um facilitador do processo de apren-dizagem, permitindo que uma linguagem mais complexa, como o C, possa ser ensinado sem oferecer Caro(a) aluno(a), o PortuCê, além de oferecer o conforto de utilizar nossa língua pátria, o que o torna muito familiar ao programador, não requer a memorização das abomináveis formas geométricas e setas e mais setas dos diagramas. Fique tranquilo, meu(minha) estudante, mais duas lições e você já estará fazendo seus primeiros programas de computador! Unisa | Educação a Distância | www.unisa.br 19 obstáculos à aprendizagem. Assim, a adoção do PortuCê, nossa pseudolinguagem, e da metodologia de ensino proposta pela professora viabiliza a adoção da linguagem de programação C como primeira linguagem. Isso vai ao en-contro das expectativas dos estudantes e coloca o ensino da programação na direção da atual tendência da programação de computadores, que vem utilizando, cada vez mais, o C como base dos novos e mo-dernos paradigmas de programação. 1.6 Resumo do Capítulo 1.7 Atividade Proposta 1. Tente deduzir qual o padrão de comportamento utilizado para gerar as sequências: 1, 5, 9, 13, 17, 21, 25 ... 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
  19. 19. Caro(a) aluno(a), suponha que você ganhou de presente uma viagem para os Estados Unidos. O que você deveria fazer antes de ir para lá? Estudar inglês! Já que os americanos falam essa língua, claro. Então, neste nosso curso, você está ganhando a chance única de aprender a programar. Este capítulo o convida a aprender PortuCê, que é a língua que os algoritmos (que são as bases dos programas de computador) falam! O PortuCê é, basicamente, uma tradução da linguagem C para Português. Assim, aprendendo bem o PortuCê, você já estará se preparando para aprender a própria linguagem C, de forma simples e fácil! Unisa | Educação a Distância | www.unisa.br 21 PSEUDOLINGUAGEM DE 2 PROGRAMAÇÃO: PORTUCÊ 2.1 Identificadores Todo programa de computador manipula dados, que são armazenados em variáveis. Uma variável precisa ter um nome que a identifique de forma única no programa: é o identificador. Atenção • Um identificador em PortuCê é formado por caracteres alfanuméricos; • O primeiro caractere tem que ser uma letra; os outros caracteres podem ser: • letras: A-Z, a-z; • dígitos: 0-9; • sublinhado: _ . • Não pode haver dois identificadores iguais. • Letras minúsculas e letras maiúsculas são diferentes. • Os identificadores não podem ser acentuados. • Não pode haver espaço em branco num identificador. • O caractere “ç” não pode ser usado num identificador. • Um identificador não pode ter o mesmo nome das palavras reservadas do PortuCê (como: principal, se, senão, inteiro, real etc.). Exemplos de identificadores válidos: NOME, raiz1, letra4, Total_dos_Salarios, Nome_de_Familia.
  20. 20. Elisamara de Oliveira Exemplos de identificadores INVÁLIDOS: Unisa | Educação a Distância | www.unisa.br 22 4pontos (começa com número) CUSTO FINAL (tem espaço em branco) PreçoTotal (caractere “ç” não pode ser usado) Pessoa+Alta (caractere “+” não pode ser usado) Preco-caro (caractere “-” não permitido) Total_dos_salários (palavra acentuada) inteiro (palavra reservada do PortuCê) 2.2 Tipos Básicos e Declaração de Variáveis Os dados manipulados por um programa são armazenados em variáveis. As variáveis precisam ter um nome (identificador), um tipo associado, e precisam ser declaradas antes que possam ser utilizadas. Saiba mais • Há três tipos básicos que podem ser associados às variáveis: • inteiro; • real; • caractere. • Para declarar uma variável, escreve-se o nome de seu tipo, salta-se um espaço em branco, em seguida escreve-se o nome do seu identificador e “;” para finalizar a declaração. • Se mais de uma variável for do mesmo tipo básico, elas podem ser declaradas juntas, apenas separadas por vírgulas. • Toda variável precisa ser declarada antes de ser utilizada. • Não pode haver duas variáveis com mesmo nome, mesmo que tenham tipos básicos diferentes, a menos que algum caractere maiúsculo ou minúsculo as diferencie. Exemplos de declaração de variáveis válida: caractere NOME[20], letra; inteiro soma; real raiz1, Total_dos_Salarios; caractere Nome_de_familia[30]; Exemplos de declaração de variáveis INVÁLIDA: caractere NOME[20]; letra4; (o separador de identificadores deve ser a vírgula) inteiro: SOMA; (não pode haver o sinal de dois-pontos após o nome do tipo) raiz1, Total_dos_Salarios real; (o tipo básico deve vir antes dos identificadores) caractere Nome_de_Familia[30]; (o nome do tipo básico está errado) real SOMA; (a variável SOMA já foi declarada: um identificador não pode ser duplicado)
  21. 21. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 23 2.3 Comando de Atribuição O conteúdo das variáveis do programa pode ser determinado através de dois tipos de comandos: comando de atribuição e comando de leitura. O comando de atribuição permite que um determinado valor seja armazenado numa variável. Atenção • O símbolo do comando de atribuição é = . • Não se deve atribuir a uma variável um valor que NÃO seja compatível com o tipo básico dessa variável, ou seja, números inteiros devem ser atribuídos a variáveis do tipo inteiro; números reais devem ser atribuídos a variáveis do tipo real; frases e letras devem ser atribuídas a variáveis do tipo caractere. • Caso não haja compatibilidade entre o dado e o tipo da variável, podem acontecer efeitos indesejados. Então, muito cuidado, pois nesse tipo de atribuição ocorre a CONVERSÃO AUTOMÁTICA DE TIPOS e o que chega na variável de destino pode ser um desastre! • Toda variável deve ter um valor a ela atribuído antes de ser usada no programa; • Em variáveis reais, SÓ EXISTE PONTO DECIMAL; não se pode usar vírgula decimal. Exemplos de atribuições válidas: letra = ‘L’; soma = 0; Total_dos_Salarios = 1275.50; NOME = “Luiza”; Exemplos de atribuições INVÁLIDAS: NOME = Maria; (a cadeia de caracteres tem que estar entre aspas) NOME = ‘Maria’; (o símbolo que delimita a cadeia de caracteres não pode ser apóstrofo, devem-se usar aspas) Total_dos_Salarios = ‘1275.50’; (o valor a ser atribuído a uma variável numérica não pode estar entre apóstrofos nem entre aspas) Total_dos_Salarios = 1275,50; (não existe vírgula decimal, o certo é usar ponto decimal) soma = 10.0; (numa variável do tipo inteiro,como é o caso da variável soma, não pode haver parte decimal; esse caso está sujeito à conversão automática) soma := 0; (o símbolo do comando de atribuição é = e não :=)
  22. 22. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 24 2.4 Operadores Aritméticos Os operadores aritméticos permitem que expressões da Matemática sejam atribuídas às variáveis. Os operadores aritméticos implementam as operações básicas (adição, subtração, divisão e multiplica-ção) e algumas operações mais avançadas da Matemática (como logaritmo, raiz quadrada, seno, cosseno etc.). A variável que vai receber o resultado de uma operação aritmética tem que ser de um tipo numéri-co compatível, capaz de armazenar o valor resultante, senão poderá ocorrer uma conversão automática com resultados muitas vezes indesejados ou mesmo imprevisíveis. Saiba mais • Os operadores aritméticos básicos são: • + (adição); • - (subtração); • * (multiplicação); • / (divisão real); • ++ (adiciona 1); • -- (subtrai 1). • Alguns operadores aritméticos mais avançados são: • % (resto da divisão inteira); • / (quociente da divisão inteira); • sqrt( ) (raiz quadrada); • abs( ) (valor absoluto). Exemplos de expressões aritméticas válidas: resto = 10 % 3; quociente = 10 / 3; salario = ((totaldehoras*32.50)+102.00) - descontoinss; valoremdolares = salario / 1.85; impostoderenda = salario * (0.20); nome = nome + “da silva”; contador = contador +1; ++contador; --contador; raiz = sqrt(numero);
  23. 23. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 25 Exemplos de expressões aritméticas INVÁLIDAS: resto = 10.0 % 3; (o operador % só pode envolver números inteiros) valoremdolares = salario / 1,85; (não existe vírgula decimal, o separador é sempre o ponto decimal) salario = totaldehoras *+ 32.50; (os operadores * e + são diádicos, envolvem sempre dois operadores, portanto não podem ser utilizados juntos) nome = nome * 3; (em variáveis do tipo caractere só pode ser feita adição ou subtração de caracteres) contador = *1; (o operador * é diádico, tem que envolver dois operandos) 2.5 Operadores Lógicos Os operadores lógicos permitem que os três principais operadores da Álgebra de Boole possam ser utilizados num programa: E, OU e NÃO. O estado dos operandos e o resultado de uma operação lógica são sempre FALSOS (avaliados como zero) ou VERDADEIROS (avaliados como diferentes de zero). Saiba mais • Os operadores lógicos são: • e (conjunção); • ou (disjunção); • ! (negação). • O operador binário “e” envolve sempre dois operandos e o resultado é VERDADEIRO somente quando ambos os operandos forem VERDADEIROS, ou seja, basta que um operando seja FALSO para que o resultado seja FALSO. • O operador binário “ou” envolve sempre dois operandos e o resultado é FALSO somente quando ambos os operan-dos forem FALSOS, ou seja, basta que um operando seja VERDADEIRO para que o resultado seja VERDADEIRO. • O operador unário “!” muda o estado do operando de FALSO para VERDADEIRO ou de VERDADEIRO para FALSO. Caro(a) aluno(a), aqui cabe uma explicação um pouco mais detalhada para melhorar o entendi-mento dos operadores lógicos E, OU e ! (não): ƒƒuma variável lógica é aquela que pode assumir apenas os valores VERDADEIRO ou FALSO; ƒƒna prática, as variáveis lógicas são utilizadas para descrever o funcionamento de um sistema, como um circuito formado por uma bateria e uma lâmpada:
  24. 24. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 26 ƒƒa representação dos níveis lógicos (1=verdadeiro e 0=falso) pode ser melhor entendida através de chaves que representam um circuito. Se a chave está fechada (valor 1 ou valor VERDADEI-RO), a corrente pode passar, o que pode permitir que a lâmpada se acenda. Se a chave está aberta (valor 0 ou valor FALSO), a corrente não pode passar, o que pode impedir que a lâmpada se acenda; ƒƒuma função “E” resulta em 1=VERDADEIRO se, e somente se, todas as variáveis lógicas de en-trada tiverem valor 1=VERDADEIRO. Em outras palavras, a lâmpada do circuito só acende se ambas as chaves estiverem fechadas, o que caracteriza um circuito com chaves em sequência, como o mostrado a seguir (na função “E”, somente se ambas as entradas forem verdadeiras a expressão é avaliada como verdadeira);
  25. 25. Algoritmos e Linguagem de Programação ƒƒuma função “OU” resulta em 1=VERDADEIRO se, pelo menos, uma das variáveis lógicas de en-trada tiver valor 1=VERDADEIRO. Em outras palavras, a lâmpada acende se uma das chaves estiver fechada ou quando as duas estiverem fechadas (forem verdadeiras), o que caracteriza um circuito com chaves em paralelo, como o mostrado a seguir (na função “OU”, basta que uma entrada seja verdadeira para a expressão ser avaliada como verdadeira); ƒƒuma função “!” (não) é uma operação de inversão. Ela converte o estado ou valor de uma variá-vel lógica em seu inverso lógico: de VERDADEIRO para FALSO e de FALSO para VERDADEIRO. No caso do circuito, funciona assim: se a chave está aberta, ela se fecha e acende a luz, e, se está fechada, ela se abre e apaga a luz. Unisa | Educação a Distância | www.unisa.br 27 Exemplos de expressões lógicas válidas: se (altura > 1.80 e idade < 21 e escolaridade >= 2) se (idade >= 13 e idade <=20) se ((media >= 7.0 e faltas <= 18) ou foiDispensado == 1) se !( numero % 2 == 0)
  26. 26. Elisamara de Oliveira Exemplos de expressões lógicas INVÁLIDAS: Unisa | Educação a Distância | www.unisa.br 28 se (altura > 1.80 e ou idade < 21) (os operadores “e” e “ou” são binários, envolvem sempre 2 operandos, portanto não podem ser utilizados juntos) se (idade >=13 e <= 20) (a variável idade deveria ser repetida para obter o resultado lógico da comparação) 2.6 Operadores Relacionais Os operadores relacionais permitem a comparação entre conteúdos de variáveis ou de valores e resultam sempre num resultado FALSO (avaliado como zero) ou VERDADEIRO (avaliado como diferente de zero). Saiba mais • Os operadores relacionais são: • > (maior que); • >= (maior ou igual a); • < (menor que); • <= (menor ou igual a); • == (igual a); • != (diferente de). Importante: o sinal “=” corresponde ao comando de atribuição e o sinal “==” significa comparação! Exemplos de expressões relacionais válidas: se (resposta == ‘S’) se (resposta == ‘S’ ou resposta == ‘s’) se (resposta != ‘S’ e resposta != ‘s’) se (sexo == ‘F’ e altura <= 1.50) Exemplos de expressões relacionais INVÁLIDAS: se (resposta ! = ‘S’) (o símbolo do operador “diferente” está errado: não pode haver espaço em branco entre o “!” e o “=“) se (altura < = 1.50) (o símbolo do operador “menor que” está errado: não pode haver espaço em branco entre o “<“ e o “=“)
  27. 27. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 29 se (resposta = ‘S’) (o problema aqui é o uso do símbolo “=”, que é do comando de atribuição, e não “==” que é a igualdade; na verdade, o comando não está errado, mas está sendo feita uma atribuição e não uma comparação. Portanto, muito cuidado!) 2.7 Comando Condicional O comando condicional permite que se tomem 2 caminhos diferentes e mutuamente exclusivos a partir da avaliação de uma condição. Se a condição é avaliada como verdadeira, um caminho é seguido; se é avaliada como falsa, outro caminho é escolhido, nunca ambos! A associação do comando condicional com fatos rotineiros é imediata: “se estiver chovendo eu vou de carro, senão eu vou de bicicleta”; nesse exemplo, a pessoa avalia a condição do tempo antes de decidir se sairá de carro ou de bicicleta e não há possibilidade de ela sair com ambos os meios de transporte! Atenção • A sintaxe do comando condicional é: se (<condição>) { <bloco de comandos 1> } senão { <bloco de comandos 2> } • A semântica (como funciona) do comando condicional é: • a <condição> é avaliada como VERDADEIRA (valor diferente de zero) ou FALSA (valor igual a zero); • se a <condição> for VERDADEIRA, o <bloco de comandos 1> é executado e o comando condicional é finalizado; • se a <condição> for FALSA, o <bloco de comandos 2> é executado e o comando condicional é finalizado. • “senão” é cláusula do comando “se”, ou seja, não é comando, apenas faz parte do comando “se”. • A cláusula “senão” pode não existir num comando “se”. Nesse caso, (quando não existe a cláusula “senão”), quando a <condição> é avaliada como FALSA, nenhum comando é executado e o comando “se” é finalizado. • Os delimitadores de início { e de fim } são obrigatórios quando existe mais de um comando no <bloco de comandos 1> ou mais de um comando no <bloco de comandos 2>. Quando existir apenas um comando, os delimitadores ficam opcionais.
  28. 28. Elisamara de Oliveira Exemplos de comandos condicionais VÁLIDOS: Unisa | Educação a Distância | www.unisa.br 30 se (media >= 7.0) aprovado = 1; se (media >= 7.0) { aprovado = 1; } se (media >= 7.0) { aprovado = 1; ++contadoraprovados; } se (media >= 7.0) aprovado = 1; senão aprovado = 0; se (media >= 7.0) { aprovado = 1; ++contadoraprovados; } senão aprovado = 0; se (media >= 7.0 e faltas <= 9) { aprovado = 1; ++contadoraprovados; } senão { aprovado = 0; ++contadorreprovados; } Exemplos de comandos condicionais INVÁLIDOS: se media >= 7.0 aprovado = 1; (faltou colocar parênteses na condição) se (media >= 7.0) { aprovado = 1; ++contadoraprovados; (faltou colocar o delimitador de fim { no final do comando )
  29. 29. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 31 se (media >= 7.0) aprovado = 1 senão aprovado = 0; (faltou ; depois do comando aprovado = 1) se (media >= 7.0) { aprovado = 1; ++contadoraprovados; } senão aprovado = 0 (novamente faltou ; após o comando aprovado = 0) se (media >= 7.0 e faltas <= 9) { aprovado = 1; ++contadoraprovados; } senão aprovado = 0; ++contadorreprovados; } (faltou o delimitador { após o “senão”) se (media >= 7.0) aprovado = 1; ++contadoraprovados; senão aprovado = 0 (faltaram os delimitadores { } após a condição do comando se caso verdadeiro (antes do senão)) 2.8 Comando de Repetição O comando de repetição permite que um comando ou um bloco de comandos seja executado diversas vezes. O número de vezes é determinado por uma condição que é constantemente avaliada. Enquanto a condição for avaliada como verdadeira (ou diferente de zero), o comando ou bloco de co-mandos é executado repetidamente; quando a condição fica falsa, o comando de repetição para. A associação do comando de repetição com fatos rotineiros é possível: “enquanto o número da casa for menor que o procurado, continue subindo a rua e verificando se é a casa procurada”; nesse exemplo, a pessoa avalia a condição, que é a verificação do número desejado entre diversas casas de uma rua, por exemplo. Essa avaliação continua até que a casa procurada seja encontrada ou que se encontre uma casa cujo número seja superior ao procurado, supondo que a numeração esteja em ordem crescente.
  30. 30. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 32 Atenção • A sintaxe do comando de repetição é: enquanto (condição) { <bloco de comandos> } • A semântica (como funciona) do comando de repetição é: • a condição é avaliada como VERDADEIRA (diferente de zero) ou FALSA (igual a zero); • se a condição for VERDADEIRA, o <bloco de comandos> é executado e, ao chegar ao delimitador de fim } ou final do comando, automaticamente se retorna à avaliação da condição; • se a condição for FALSA, o comando de repetição é finalizado. • Entre os comandos do <bloco de comandos> é ESSENCIAL que exista um comando que altere a <condição> que é constantemente avaliada, pois, caso contrário, o comando “enquanto” NUNCA TERMINARÁ! • Os delimitadores { e } são obrigatórios quando existe mais de um comando no <bloco de comandos>. Quando existir apenas um comando, os delimitadores ficam opcionais e o “;” funcionará como delimitador de fim, indicando o final do comando “enquanto”. Exemplos de comandos de repetição válidos: enquanto (contador < 3) ++contador; numero = 1; enquanto (numero <= 50) { se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; } Exemplos de comandos de repetição INVÁLIDOS: enquanto contador <= 10 ++contador; (faltaram parênteses na condição) numero = 1; enquanto (numero <= 50) { se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; (faltou colocar o delimitador fim } após o último comando)
  31. 31. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 33 numero = 1; enquanto (numero <= 50) se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; (como não existem os delimitadores de início e fim { }, somente o comando “se” faz parte do comando “enquanto” e, como o comando “se” não altera a variável numero, o comando “enquanto” nunca vai pa-rar!) numero = 1; enquanto (numero <= 50); { se (numero % 2 == 0) ++contapar; senão ++contaimpar; ++numero; } (como foi colocado ; após a condição, o comando “enquanto” foi finalizado; a va-riável numero não será alterada e o comando “enquanto” nunca vai parar!) 2.9 Comandos de Entrada e Saída O comando de entrada permite que o usuário possa fornecer valores ao programa, através do te-clado, que serão armazenados nas variáveis. O comando de saída permite que informações e valores de variáveis possam ser enviados ao usuário pela tela do monitor. É dessa forma que se consegue estabelecer um diálogo com o usuário. Se o programa deseja saber o nome do usuário, por exemplo, usa-se o comando de saída para fazer a pergunta “qual é o seu nome?” e usa-se o comando de entrada para obter a resposta e armazená-la numa variável.
  32. 32. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 34 Atenção • A sintaxe do comando de entrada é: leia(“%letra”, [&] variável); em que: “%letra” representa os especificadores de formato e depende do tipo associado à variável: • “%d” ou “%i” para variáveis do tipo inteiro (integer); • “%f” para variáveis do tipo real (float); • “%c” para variáveis do tipo caractere (único) (character); • “%s” para variáveis do tipo caractere (cadeia ou string); • O símbolo & deve ser utilizado apenas para os tipos numéricos, ou seja, para variáveis declaradas como inteiras ou reais. • A semântica (como funciona) do comando de entrada é: • a variável tem que ter sido previamente declarada; • o usuário vai utilizar o teclado para fornecer o dado e, depois que ele teclar <ENTER>, tudo o que ele tiver digi-tado será armazenado na variável automaticamente. • Recomenda-se utilizar o comando “leia” para ler uma só <variável> de cada vez. A tabela a seguir mostra um exemplo de declaração de variáveis de tipos básicos e a forma correta de leitura. Declaração Leitura Exemplos de conteúdos inteiro numero; leia(“%i”, &numero); numero = -5; numero = 2002; real valor; leia(“%f”, &valor); valor = -5.867; valor = 2002.50; caractere ch; leia(“%c”, ch); ch = ‘5’; ch = ‘s’; ch = ‘#’; caractere nome[20]; leia(“%s”, nome); nome = “Maria”; nome = “fim”; Observe, na tabela, a diferença entre a declaração, a leitura e a atribuição de valores a um caractere único (%c) e a uma cadeia de caracteres (%s). Um único caractere vem entre apóstrofos (‘ ’) e uma cadeia de caracteres entre aspas (“ “)!
  33. 33. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 35 Atenção • A sintaxe do comando de saída é: imprima(“ frase e %letra ” [, lista de variáveis] ); • Entre aspas, podem ser escritas frases formadas por palavras intercaladas pelos especificadores de formato %s, %c, %i, %d ou %f, descritos no comando “leia”. Para cada especificador utilizado, a variável do tipo correspondente deve constar da lista de variáveis. • A lista de variáveis é opcional; deve existir somente quando um especificador de formato é colocado na frase entre aspas e, nesse caso, deve haver uma vírgula separando a frase da lista de variáveis e vírgulas separando as variáveis da lista. • A semântica (como funciona) do comando de saída é: • pode ser impressa qualquer frase e qualquer variável dentro de um comando “imprima”, desde que a frase esteja entre aspas e as variáveis estejam devidamente listadas após a vírgula que separa a frase da lista de variáveis; • a frase entre aspas é copiada integralmente para a tela e os especificadores de formato são substituídos pelas variáveis da lista de variáveis; • quando existe uma variável, o seu conteúdo é copiado para a tela; • a ordem em que as palavras da frase e as variáveis aparecem no comando “imprima” é mantida quando é im-pressa na tela. Exemplos de comandos de entrada e saída válidos: imprima (“Qual é o seu nome? “); leia(“%s”,nome); imprima (“Qual é a sua idade? “); leia (“%i”,&idade); imprima (“Qual é a sua altura? “); leia (“%f”,&altura); imprima (“Qual é o seu sexo? (F/M) “); leia (“%c”,sexo); imprima (“O seu nome é: %s e você tem %i anos “,nome, idade); imprima (“Você foi aprovado no curso com média= %f”, Media); Exemplos de comandos de entrada e saída INVÁLIDOS: imprima (“Qual é o seu nome? ); (faltaram aspas após a interrogação para delimitar a frase a ser impressa)
  34. 34. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 36 imprima (“Qual é a sua idade? “); leia (“%i”,idade); (faltou o & antes do identificador idade, pois o tipo é numérico: %i) imprima (“A sua idade é %i “ idade); (faltou uma vírgula entre a frase entre aspas e a variável idade) imprima (“Você foi aprovado no curso com média= “, media); (faltou o especificador de formato da variável Media (%f) após o = na frase entre aspas) imprima (“Qual é o seu nome? “); leia (“%s”,&nome); (não pode haver & na leituras de variáveis do tipo caractere (%c e %s) ) Saiba mais Explicação adicional – Passo a passo do comando de impressão: imprima (frase variável1 variável2 variável3); (entre a frase e a variável e entre as variáveis deve haver uma vírgula separando-as). imprima (frase , variável1, variável2, variável3); (a frase deve vir entre aspas). imprima (“frase ” , variável1, variável2, variável3); (dentro da frase, deve vir um formato para cada variável, compatível com o seu tipo bási-co). imprima (“frase %s %i %f ”,variável1,variável2,variável3); Exemplo: imprima (“Vc se chama %s, tem %i anos e %f m de altura ”, nome, idade, altura);
  35. 35. Algoritmos e Linguagem de Programação 2.10 Separador de Comandos • O separador de comandos é: ; Exemplos de erro na separação de comandos: se (resposta != ‘s’); { <comandos> } Unisa | Educação a Distância | www.unisa.br 37 Todos os comandos do PortuCê são separados por ponto e vírgula. Atenção 2.11 Comentários (o ; depois da condição finaliza o comando “se”) enquanto (contador < 5) ; { <comandos> } (o ; depois da condição do comando “enquanto” coloca o programa em loop infinito!) Os comentários não pertencem às instruções dos algoritmos, mas são úteis para que o programa-dor explique o que está sendo feito. Saiba mais • Os comentários podem vir delimitados entre /* */ Ou podem ser comentários de linha // Exemplos de comentários: /* Este trecho calcula a media de notas */ desc = preco*0.15; // calcula desconto de 15%
  36. 36. Elisamara de Oliveira O Bloco de Programa em PortuCê tem a forma: /* comentários */ <declaração de variáveis>; principal() { <bloco de comandos>; } • É desejável que todo algoritmo escrito em PortuCê comecer com um comentário dizendo o que o programa faz, embora comentários sejam opcionais. • Em seguida, devem ser declaradas todas as variáveis que serão utilizadas no <bloco de comandos>. • Após a declaração das variáveis, deve-se escrever a palavra principal( ), que delimita a seção em que os comandos podem ser utilizados. • O <bloco de comandos> pode conter todos os comandos válidos em PortuCê, separados por ponto e vírgula, e estes devem estar contidos entre os delimitadores { e }. Nenhum comando pode ser usado fora dessa seção. • É importante notar que letras maiúsculas e minúsculas alteram os identificadores e as palavras reservadas do PortuCê. Unisa | Educação a Distância | www.unisa.br 38 2.12 Bloco de Programa Bloco de programa é o nome que se dá à estrutura de um programa escrito numa determinada linguagem. O bloco de programa em PortuCê pode ser visto a seguir. Saiba mais Exemplos de programas escritos em PortuCê válidos: /* sexo.c: le o nome e o sexo de uma pessoa e imprime uma frase dizendo se é masculino, feminino ou invalido */ caractere nome[20], sexo; principal ( ) { imprima (“Qual eh o seu nome? “); leia(“%s”,nome); imprima (“Qual eh o seu sexo? (f/m) “); leia (“%c”,sexo); se (sexo == ‘f’ ou sexo == ‘F’) imprima (“%s voce eh do sexo feminino. “,nome); senão se (sexo == ‘m’ ou sexo == ‘M’) imprima (“%s voce eh do sexo masculino. “,nome); senão imprima (“Voce digitou um sexo invalido “); imprima(“Fim do programa.”); }
  37. 37. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 39 /* nota.c: le a nota de um aluno e verifica se ele foi aprovado ou repro-vado */ real nota; principal() { imprima (“Digite sua nota final: “); leia(“%f”,&nota); se (nota >= 6.0) imprima (“Voce foi aprovado! “); senão imprima (“Voce foi reprovado. “); imprima(“Fim do programa.”); } /* idade.c: le o ano atual e o ano de nascimento de uma pessoa e imprime uma frase dizendo qual eh a idade da pessoa */ inteiro anoatual, anonasc, idade; principal() { imprima (“Qual eh o ano atual? “); leia(“%i”,&anoatual); imprima (“Qual eh o seu ano de nascimento? “); leia (“%i”,&anonasc); idade = anoatual – anonasc; imprima (“Voce fez ou fara %i anos “, idade); imprima(“Fim do programa.”); } /* parimpar.c: le um numero e verifica se ele eh par ou impar */ inteiro n; principal() { imprima (“Digite um numero inteiro: “); leia(“%i”,&n); se (n % 2 == 0) imprima (“O numero %i eh par “, n); senão imprima (“O numero %i eh impar “, n); imprima(“ Fim do programa.”); }
  38. 38. Elisamara de Oliveira Exemplos de programas escritos em PortuCê INVÁLIDOS: Unisa | Educação a Distância | www.unisa.br 40 caractere sexo, caractere[20]; principal ( ) { imprima (“Qual eh o seu nome? “); leia(“%s”,caractere); imprima (“Qual eh o seu sexo? (F/M) “); leia (“%c”,sexo); se (sexo == ‘F’) imprima (“%s voce eh do sexo feminino. “,caractere); senão imprima (“%s você eh do sexo masculino. “,caractere); } (a variável caractere tem o mesmo nome da palavra reservada caractere) real nota; { imprima (“Digite sua nota final: “); leia(“%f”,&nota); se (nota >= 6.0) imprima (“Voce foi aprovado! “); senão imprima (“Voce foi reprovado... “); imprima(“Fim do programa.”); } (faltou a palavra principal( ) para dar início à seção de comandos) real nota; nota = 7.5; principal() { imprima (“Digite sua nota final: “); leia(“%f”,&nota); se (nota >= 6.0) imprima (“Voce foi aprovado! “); senão imprima (“Voce foi reprovado... “); imprima(“ Fim do programa.”); } (há um comando de atribuição nota=7.5; na seção de declaração de variáveis: não pode!)
  39. 39. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 41 inteiro anoatual, anonasc, idade; principal() imprima (“Qual eh o ano atual? “); leia(“%i”,&anoatual); imprima (“Qual eh o seu ano de nascimento? “); leia (“%i”,&anonasc); idade = anoatual – anonasc; imprima (“Voce fez ou fara %i anos “, idade); imprima(“Fim do programa.”); } (faltou o delimitador { para iniciar a seção de comandos do programa) inteiro N; principal() { imprima (“Digite um numero inteiro: “); leia(“%i”,&n); se (n % 2 == 0) imprima (“O numero %i eh par “, n); senão imprima (“O numero %i eh impar “, n); imprima(“ Fim do programa.”); } (não foi declarada a variável n ou foi declarada errada (N maiúsculo é diferente de n minúsculo)) 2.13 Resumo do Capítulo Caro(a) aluno(a), este capítulo foi um convite a aprender PortuCê, que é a língua que os algorit-mos (que são as bases dos programas de computador) falam! O PortuCê é, basicamente, uma tradução da linguagem C para Português. Assim, aprendendo bem o PortuCê, você já estará se preparando para aprender a própria linguagem C, de forma simples e fácil!
  40. 40. CONSTRUÇÃO DE ALGORITMOS EM PORTUCÊ: PRATICANDO OS COMANDOS E FAZENDO CÁLCULOS 3 3.1 Declaração de Variáveis – Comandos “leia” e “imprima” Unisa | Educação a Distância | www.unisa.br 43 1. Escreva um comando que leia um número inteiro. 2. Escreva comandos para pedir e ler um número inteiro. 3. Escreva comandos para pedir, ler e imprimir um número inteiro. 4. Repita o exercício 3 para um número real. Saiba mais Ao invés de usar %f para apresentar a altura, usamos %.2f O que isso significa? Que nós queremos apresentar a altura com apenas 2 dígitos na parte decimal! Afinal, a forma tra-dicional de se apresentar uma altura é com 2 dígitos apenas, como 1.75, 1.62, 1.88 etc., não é mesmo? 5. Declare as variáveis utilizadas nos exercícios de 1 a 4.
  41. 41. Elisamara de Oliveira 3.2 Comando Condicional “se” Unisa | Educação a Distância | www.unisa.br 44 6. Escreva comandos para pedir, ler e imprimir o nome e a idade de uma pessoa. 7. Escreva um comando para verificar se a idade lida no exercício 6 corresponde a um adulto (maior que 17 anos). Se for verdadeiro, imprimir uma frase dizendo que é um adulto. 8. Escreva um comando para verificar se a idade lida no exercício 6 corresponde a uma criança (menor que 13 anos). Se for, imprima uma frase dizendo que é uma criança. 9. Escreva um comando para verificar se a idade lida no exercício 6 corresponde a um adolescen-te (entre 13 e 17 anos). Se for, imprima uma frase dizendo que é um adolescente. 10. Escreva um único comando capaz de classificar uma pessoa pela faixa etária e ainda verificar se a idade é válida.
  42. 42. Algoritmos e Linguagem de Programação 3.3 Bloco de Programa Unisa | Educação a Distância | www.unisa.br 45 11. Transforme o exercício 6 num algoritmo, ou seja, construa o Bloco de Programa em PortuCê. 12. Escreva um algoritmo que leia o nome e a idade de uma pessoa e imprima uma frase dizendo se a pessoa é uma criança, um adolescente, um adulto ou se a idade é inválida.
  43. 43. Elisamara de Oliveira 3.4 Operações Básicas com Números Unisa | Educação a Distância | www.unisa.br 46 13. Escreva um comando para somar dois números: n1 e n2. Observe que soma é a variável na qual o resultado da adição de n1 com n2 será armazenado. São usados apenas o comando de atribuição “=“ e o operador “+”. 14. Escreva comandos para subtrair e multiplicar dois números: n1 e n2. O raciocínio para subtrair e multiplicar dois números é o mesmo usado na adição. 15. Escreva um comando para dividir dois números: n1 por n2. Antes de dividir um número n1 (numerador) por um número n2 (denominador) é necessário que verifiquemos se o denominador é diferente de zero, pois não existe divisão por zero! O comando “divisao = n1 / n2;” é válido do ponto de vista sintático, mas em programação temos que pensar nos erros que porventura possam ocorrer quando da execução dos comandos. Para evitarmos a divisão eventual por zero, usamos o comando “se”. Somente se n2 for diferente de zero é que a divisão será calculada; caso contrário, uma mensagem é impressa para comunicar ao usuário o motivo pelo qual o cálculo não foi efetuado. O resultado da divisão é um número real. 16. Escreva um comando para calcular o quadrado de um número inteiro n1 e também n1 elevado a 3. Com certeza, é muito mais fácil do que você pensava, não é? São pequenos truques da programa-ção. Mas se quisermos calcular n1 elevado a 1000 ou n1 elevado a um número qualquer, teremos que escrever um pequeno trecho de algoritmo. Depois eu mostro como fazer.
  44. 44. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 47 17. Escreva um comando para calcular a raiz quadrada de um número n1. Novamente, para evitarmos um erro tentando calcular a raiz de um número negativo, usamos o comando “se”. Observe que sqrt( ) é um operador aritmético cuja sintaxe é diferente dos outros vis-tos nos exercícios anteriores. Esse tipo de operador, na verdade, é uma função que recebe n1 como parâmetro e devolve a sua raiz quadrada calculada. Existem muitas outras funções e elas serão apresentadas na medida em que se fizer necessária a sua utilização. 18. Escreva comandos para fornecer o quociente e o resto da divisão inteira de n1 por n2. No caso da divisão inteira de n1 (numerador) por um número n2 (denominador), também é neces-sário que o denominador seja diferente de zero. Nesse caso, é importante você notar que ambos os números (n1 e n2) têm que ser inteiros para que os operadores “/” (quociente da divisão) e “%” (resto da divisão inteira) possam ser utilizados! Como você pode notar, não existe um operador específico para o quociente da divisão inteira; usa- -se o “/” (que é da divisão real), mas, como n1 e n2 são inteiros, haverá uma conversão automática de tipos, com o truncamento da parte fracionária do resultado, o que nos fornece o quociente da divisão inteira. Isso é um trunfo do PortuCê: nunca se esqueça disso! Se n1 for 7 e n2 for 3, por exemplo, quais seriam os valores de quociente e resto? (7 dividido por 3 dá 2 (quociente) e sobra 1 (resto), não é?) Saiba mais Qual a diferença entre divisão real e divisão inteira? 3.5 este é o resultado da divisão real 7 / 2 = 3 (quociente da divisão inteira) 7 % 2 = 1 (resto da divisão inteira)
  45. 45. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 48 19. Escreva um comando para calcular 10% de um número. Em primeiro lugar, vamos esclarecer que NÃO EXISTE O OPERADOR “porcentagem”. Na verdade, “%” é o resto da divisão inteira. Portanto, o cálculo da porcentagem tem que ser feito pela ope-ração equivalente: 10% = 10/100 = 0.10. A variável “porc” deve ser do tipo real. Não recomendo o uso de 10/100, pois 10/100 pode ser zero, com a conversão automática de tipos. Então, use sempre 0.10 no cálculo de 10%. 20. Suponha que um produto custe um determinado preço, mas, se pago à vista, o cliente ganha 5% de desconto. Escreva comandos para calcular o valor do desconto e o valor final do produto. 21. Escreva comandos para separar os dígitos de um número inteiro menor que 100 em dezena e unidade. Vamos entender, primeiramente, o que se quer: dado um número menor que 100, por exemplo, 29, deseja-se obter o dígito 2 (dezena) separado do dígito 9 (unidade); no caso de um número de um só dígito, por exemplo, 3, o resultado seria 0 (dezena) e 3 (unidade). Bem, este é um problema muito comum na programação e muito fácil de ser resolvido também! Basta usar os operadores “/” e “%” com números inteiros. Vamos fazer um pequeno teste: 29 dividido por 10 dá 2 e sobra 9, certo? 2 é a dezena de 29 e coinci-de com o quociente da divisão inteira; 9 é a unidade de 29 e coincide com o resto da divisão inteira por 10! No caso de n1 ser igual a 3, ficaria assim: 3 dividido por 10 dá 0 e sobra 3. Nesse caso, 0 é a dezena (“/”) e 3 é a unidade (“%”). Um bom teste aqui seria você responder: como poderíamos separar os 3 dígitos de números entre 100 e 999? Se não conseguir resolver, esta é uma boa pergunta para o fórum!
  46. 46. Algoritmos e Linguagem de Programação 22. Suponha que, numa certa universidade, os alunos têm um número de 5 dígitos que os identi-ficam. Desses 5 dígitos, os 2 primeiros indicam o ano em que o aluno entrou na universidade. Escreva comandos para separar os 2 primeiros dígitos de um número inteiro de 5 dígitos que representa a identificação do aluno. Vamos entender o que se quer: dado um número de 5 dígitos, por exemplo, 99211, se deseja obter os 2 primeiros dígitos, no caso, 99 (que indicaria que o aluno entrou em 1999 na universidade). Mas e se o aluno entrou em 2000 ou 2009? O resultado teria que ser ano de entrada = 0. Vamos fazer, agora, os testes. Vejamos: n1 é 00211. 00211 dividido por 1000 dá ZERO (que é o quociente) e sobra 211. Pode parecer estranho, mas pense: quando se divide um número por 1000, o menor resto é zero e o maior resto pode ser 999. Como queremos apenas o quociente da divisão inteira, o resultado será “anoentrada = 0” (que, no caso, representaria 2000). Funciona! Outro teste: n1 igual a 10231. 10231 dividido por 1000 dá 10 e sobra 231, certo? 10 é o quociente, o que resulta em “anoentrada= 10” (que seria 2010)! Funciona mesmo! Faça outros testes e verifique que dá certo. E como o cálculo é simples, não? Unisa | Educação a Distância | www.unisa.br 49 3.5 Operações com Operadores Lógicos e Relacionais 23. Escreva um comando para verificar se um número é positivo ou negativo. Observe que 0 pode ser considerado um número positivo e todo número menor que 0 é negativo. 24. Escreva um comando para verificar se um número é par ou ímpar. Um número par é aquele que, dividido por 2, tem resto zero: 0, 2, 4, 6, 8, 10..., e um número ímpar é aquele que, dividido por 2, tem resto diferente de zero: 1, 3, 5, 7, 9...
  47. 47. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 50 25. Escreva um comando para verificar se um número é maior que 100. 26. Escreva um comando para verificar se um número está entre 10 e 100. Para se verificar se um número está entre dois limites, são necessárias duas comparações: uma para o limite inferior e outra para o limite superior, e essas comparações têm que estar ligadas pelo conectivo lógico “e”, quer dizer, somente quando as duas comparações forem verdadeiras, o número está dentro dos limites. Não é como na Matemática, que usamos uma expressão do tipo “10 ≤ n1 ≤ 100”! 27. Suponha que certo clube esportivo quer selecionar atletas para o time de basquete. As exi-gências são: ter 1.85 m de altura ou mais, ter menos de 21 anos e ter, pelo menos, o primeiro grau completo. Escreva um comando para verificar se um candidato pode ser ou não aprova-do para o time de basquete. O grau de instrução é definido como: “0= sem instrução”, “1=pri-meiro grau”, “2=segundo grau”, “3=superior”. Observe que, ao se fazer a comparação da altura, não se faz referência à unidade de medida “me-tros”, quer dizer, estaria errada uma comparação do tipo “altura >= 1.85 m”. O mesmo acontece com a idade, em que os “anos” foram (e devem) ser omitidos.
  48. 48. Algoritmos e Linguagem de Programação 28. Suponha que o clube esportivo deseje, agora, formar um time masculino (sexo == ‘m’) e outro feminino (sexo == ‘f’) e tenha mudado um pouco seus critérios. As exigências passaram a ser: ter 1.85m de altura ou mais para os homens e 1.75 ou mais para as mulheres e ter menos de 21 anos. Escreva um comando para verificar se um candidato ou candidata pode ser ou não aprovado(a) para o time de basquete. Observe que surgiu o conectivo “ou” ligando as comparações de altura para os sexos diferentes, que continuaram a ser ligados pelo conectivo “e” na comparação de idade! Pense por que é assim. Caro(a) aluno(a), este capítulo foi uma excelente oportunidade para exercitarmos a linguagem de Unisa | Educação a Distância | www.unisa.br 51 3.6 Resumo do Capítulo programação. 3.7 Atividades Propostas Agora é hora de você praticar um pouco sozinho(a)! A minha forte recomendação é que você faça os exercícios sozinho(a), consultando os exemplos anteriores para ajudá-lo(a). Somente depois da sua tentativa, é que você deve conferir as respostas. Boa sorte! 1. Escreva um algoritmo que leia e imprima o nome e as duas notas de um aluno. 2. Escreva um comando que calcule a média das duas notas lidas no exercício 3.1.1. 3. Escreva um comando que verifique se a média calculada no exercício 3.1.2 é maior ou igual a 7.0; se for, imprima uma frase dizendo que o aluno foi aprovado, caso contrário, imprima uma frase dizendo que foi reprovado. 4. Escreva um algoritmo que leia o nome e as duas notas de um aluno, calcule a média das notas e imprima uma frase dizendo se ele foi aprovado (média maior ou igual a 7.0) ou reprovado.
  49. 49. Elisamara de Oliveira Unisa | Educação a Distância | www.unisa.br 52 5. Considere o trecho de algoritmo em PortuCê: se (B1) C1; senão se (B2) se (B3) C2; senão { C3; C4; } C5; Em PortuCê, não existe uma variável do tipo “lógico” a qual se possa atribuir um valor “verda-deiro” ou “falso”. No entanto, o PortuCê considera o valor 0 (zero) como sendo falso e qualquer outro valor diferente de zero como sendo verdadeiro. Nos exercícios que se seguem, considere que os valores de B1, B2 e B3 representam valores “verdadeiros” (diferentes de zero) ou “falsos” (iguais a zero) e responda à pergunta: “quais comandos serão executados”. a) Se B1= Verdadeiro B2 =Verdadeiro e B3=Falso? b) Se B1=Falso B2= Verdadeiro e B3= Falso? c) Se B1=Falso B2=Verdadeiro e B3=Verdadeiro? d) Quais os valores de B1, B2 e B3 para que somente o comando C5 seja executado? 6. Dado um conjunto de respostas “sim” ou “não” de várias pessoas e seu sexo (F=feminino, M=masculino), escreva comandos em PortuCê para calcular: a) o número de mulheres que responderam sim; b) o número de homens que responderam não; c) o número de mulheres e homens que responderam não.
  50. 50. Algoritmos e Linguagem de Programação Unisa | Educação a Distância | www.unisa.br 53 7. Observe o algoritmo a seguir. Qual o valor de L após a execução deste algoritmo? inteiro A, B, C; real X, Y; inteiro L; principal() { A = 0; /* falso */ B = 1; /* verdadeiro */ C = 0; /* falso */ X = 1.5; Y = 3.2; se (C ou (X+Y>5) ou não(A e B)) L = 0; senão L = 1; } 8. Escreva trechos de algoritmo em PortuCê que ajudem o Instituto Brasileiro de Geografia e Es-tatística (IBGE) a fazer o censo populacional de uma certa cidade. Sabendo-se que os seguin-tes dados foram pedidos aos cidadãos: SEXO (‘H’= homem, ‘M’= mulher) e RENDA (número de salários-mínimos – sm), os trechos de algoritmo devem fornecer: a) o total de homens; b) o total de mulheres; c) o total de pessoas da classe C (até 4 sm), da classe B (até 20 sm) e da classe A (acima de 20 sm). 9. Fornecidos os dados das candidatas a modelo: ALTURA, PESO e IDADE, escreva um trecho de algoritmo para verificar se os dados se enquadram nos seguintes limites: ALTURA: de 1.70 a 1.85 m PESO: de 48.0 a 60.0 kg IDADE: de 17 a 21 anos Se os dados da candidata corresponderem a esses limites, deve ser impressa uma frase dizendo que ela foi aprovada; caso contrário, que não foi aprovada. 10. Modifique o exercício anterior para que uma frase seja impressa após a verificação de cada quesito, dizendo se a candidata foi aprovada ou não em cada um deles e uma frase final dizen-do se foi aprovada ou não como modelo.
  51. 51. Neste capítulo, caro(a) aluno(a), você aprenderá uma metodologia que facilitará o processo de de-senvolvimento de soluções algorítmicas para os problemas que serão propostos para você resolver. A metodologia é composta de uma sequência de passos, cujo principal objetivo é ajudá-lo(la) a resolver problemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficará bem claro logo adiante, resolvendo cada parte do problema por vez, consegue-se chegar a soluções completas e com-plexas a partir de soluções simples, que já foram, muitas vezes, encontradas para diversos outros proble-mas semelhantes. Você conhecerá os passos da metodologia e vários exemplos práticos serão fornecidos de maneira a familiarizá-lo(la) com o método. É importante ressaltar que a metodologia é um processo dinâmico. Você pode estar num passo mais adiante e identificar uma variável auxiliar e voltar aos passos anteriores e alterá-los, por exemplo. Portanto, não se detenha aos detalhes, pelo contrário, sinta-se livre para criar suas soluções. O método pretende ajudá-lo(la) e não engessá-lo(LA)! Vamos em frente! 4.1 Os Passos da Metodologia Unisa | Educação a Distância | www.unisa.br 55 METODOLOGIA PARA A CONSTRUÇÃO 4 DE ALGORITMOS Passo 1: Ler e entender o problema É importante ler e reler, pelo menos 3 vezes, o problema até que ele seja completamente compreen-dido. Não adianta querer buscar a solução de um problema que não esteja suficientemente esclarecido! Passo 2: Listar todos os dados de entrada do problema Um dado de entrada é aquele que será fornecido pelo usuário, ou seja, o dado que será lido pelo programa. Passo 3: Listar todos os dados de saída do problema Um dado de saída é algo que será produzido ou calculado pelo programa; tudo aquilo que deve ser apenas impresso não deve ser considerado um dado de saída.
  52. 52. Elisamara de Oliveira Passo 4: Listar todas as variáveis auxiliares do programa Unisa | Educação a Distância | www.unisa.br 56 Uma variável auxiliar é identificada como aquela que é necessária para o cálculo de alguma variável de saída e não é variável de entrada. Por exemplo, num problema em que vários números serão lidos e sua média deve ser calculada, o número é uma variável de entrada e a média é uma variável de saída, mas como, para calcular a média, é necessário somar os números e dividir a soma pela quantidade de números lidos, a soma e a quantidade de números são variáveis auxiliares do programa. Assim, para identificar as variáveis auxiliares, basta analisar cada uma das saídas e verificar se, dadas as entradas, há necessidade de mais alguma variável para facilitar o seu cálculo. Passo 5: Declarar todas as variáveis do programa Cada dado de entrada, cada dado de saída e cada variável auxiliar “geram” uma variável. As variáveis do programa deverão ser uma para cada dado de entrada, uma para cada dado de saída e uma para cada variável auxiliar. É extremamente importante que o programador escolha nomes de variáveis significativos, que possam exprimir a função da variável. Por exemplo, uma variável que receberá a idade de uma pessoa não deveria se chamar “x”, nem mesmo “i” seria bom, o ideal seria “idade”. Passo 6: Inicializar as variáveis do programa Há um conjunto de pequenas regras que pode nos ajudar a encontrar os valores iniciais de cada variável do programa, apesar de que nem todas as variáveis precisam ter valores iniciais: ƒƒtoda variável de entrada é inicializada com o comando “leia”; ƒƒtodo contador e todo somador devem ser inicializados com 0 ( zero); ƒƒtodo produto deve ser inicializado com 1 (um). Passo 7: Escrever o código para calcular cada uma das saídas do programa Os principais problemas a serem solucionados, na maior parte das vezes, resumem-se no cálculo das saídas do programa. Portanto, neste passo, cada uma das saídas deve ser analisada individualmente e sua solução encontrada separadamente. Passo 8: Imprimir os resultados do programa Aqui, só devem ser impressos os resultados pedidos na especificação do problema. Passo 9: Montar o algoritmo unindo os resultados dos passos 5 a 8 Os passos 5 a 8 têm a solução do problema. A montagem do algoritmo/programa pode seguir um esquema básico, mas vai depender muito da lógica de cada problema. Portanto, o esquema a seguir
  53. 53. Algoritmos e Linguagem de Programação serve apenas de orientação. Cada problema deve, no entanto, ser analisado logicamente para chegar ao seu algoritmo. Atenção /* Nome do Programa e o que ele faz */ <passo 5 – declarar todas as variáveis do programa> principal() { <passo 6 – inicializar as variáveis do programa > <passo 7 – calcular cada uma das saídas do programa> <passo 8 – imprimir os resultados do programa> imprima(“Fim do programa”); } A estratégia que utilizaremos nesta seção é propor uma lista de exercícios e resolver alguns de-les usando a metodologia, deixando outros para que você, utilizando soluções semelhantes, resolva-os sozinho(a), ok? Então, vamos lá! Unisa | Educação a Distância | www.unisa.br 57 Passo 10: Fazer o “teste de mesa” do programa a partir de diferentes valores iniciais O “teste de mesa” consiste na execução de todas as instruções do programa a partir de conjuntos de valores iniciais. Os valores iniciais devem ser escolhidos de maneira que as “condições de contorno” do problema sejam verificadas. Por exemplo, num programa que trabalhe com flags, deve ser testada a condição em que o valor do flag seja fornecido como dado inicial; num programa que só leia números positivos, devem ser fornecidos números negativos e zero; entre outras situações possíveis. 4.2 Solução de Exercícios utilizando a Metodologia 4.3 Resumo do Capítulo Neste capítulo, caro(a) aluno(a), você aprendeu uma metodologia que facilitará o processo de de-senvolvimento de soluções algorítmicas para os problemas que serão propostos para você resolver. A metodologia é composta de uma sequência de passos, cujo principal objetivo é ajudá-lo a resolver pro-blemas dividindo-os por partes, diminuindo, assim, a sua complexidade. Como ficará bem claro logo adiante, resolvendo cada parte do problema por vez, consegue-se chegar a soluções completas e com-plexas a partir de soluções simples que já foram, muitas vezes, encontradas para diversos outros proble-mas semelhantes. Você conhecerá os passos da metodologia e vários exemplos práticos serão fornecidos de maneira a familiarizá-lo com o método.
  54. 54. Elisamara de Oliveira 4.4 Atividades Propostas Unisa | Educação a Distância | www.unisa.br 58 1. Escreva um algoritmo em PortuCê para calcular e imprimir a área e o perímetro de uma sala retangular, sendo que os comprimentos das paredes (comprimento e largura) são fornecidos pelo usuário. 2. Escreva um algoritmo em PortuCê para calcular e imprimir a área de uma esfera. O raio da es-fera será fornecido pelo usuário. Obs.: A = 3.14*R2. 3. Escreva um algoritmo em PortuCê que calcule e imprima o valor em reais correspondente aos dólares que um turista possui no cofre do hotel. O programa deve solicitar os seguintes dados: quantidade de dólares guardada no cofre e cotação do dólar naquele dia. 4. Escreva um algoritmo em PortuCê que leia um número e informe se ele é par ou ímpar. 5. Escreva um algoritmo em PortuCê que leia 2 números e diga qual deles é o maior. 6. Escreva um algoritmo em PortuCê que calcule e imprima a quantidade de tijolos iguais neces-sária para construir uma determinada parede. São dados de entrada do programa: dimensões do tijolo (comprimento e largura) e dimensões da parede a ser construída (comprimento e largura). 7. Escreva um algoritmo em PortuCê que calcule S, o alcance de um projétil, dados a velocidade inicial v0 e o ângulo θ entre o cano do canhão e o solo. O valor de g corresponde à gravidade que é de 9.8 m/s2. A fórmula a ser utilizada é: 8. Escreva um algoritmo em PortuCê que calcule a área A de um triângulo pela fórmula de Herão, lendo os valores de entrada s, que é o semiperímetro, e a, b e c, que são os lados do triângulo: 9. Escreva um algoritmo em PortuCê para calcular o valor do desconto, sendo que o preço do produto é fornecido pelo usuário e o desconto é de 5%. Apresentar o preço do produto, o valor do desconto e o preço final com o desconto.
  55. 55. Algoritmos e Linguagem de Programação 10. Escreva um algoritmo em PortuCê para calcular e imprimir qual foi a porcentagem de desconto dada em um determinado produto, sabendo-se o preço original do produto e o preço que foi cobrado por ele depois do desconto serão fornecidos pelo usuário. 11. Escreva um algoritmo em PortuCê que receba dois valores inteiros nas variáveis A e B. O progra-ma deve trocar os valores entre as variáveis (ou seja, ao término do programa, a variável A deve Unisa | Educação a Distância | www.unisa.br 59 ter o valor inicial de B e vice-versa). Apresentar as duas variáveis no final. 12. Escreva um algoritmo em PortuCê para calcular e imprimir o valor a ser pago pelo período de es-tacionamento do automóvel. O usuário entra com os seguintes dados: hora e minuto de entra-da, hora e minuto de saída. Sabe-se que esse estacionamento cobra R$ 10,00 por hora ou fração. 13. Escreva um algoritmo em PortuCê que leia o valor de uma conta de luz e, caso o valor seja maior que R$ 50,00, apresente a mensagem: “Você está gastando muito”. Caso contrário, exiba a mensagem: “Seu gasto foi normal, parabéns”. 14. Escreva um algoritmo em PortuCê que receba a leitura do termômetro. Caso a temperatura esteja abaixo de 100 °C, apresentar a mensagem de que a temperatura está muito baixa. Caso a temperatura esteja entre 100 e 200 °C, apresentar a mensagem de que a temperatura está baixa. Caso a temperatura esteja acima de 200 °C e inferior a 500 °C, apresentar a mensagem de que a temperatura está normal. Caso contrário, apresentar a mensagem de que a temperatura está muito alta. 15. Escreva um algoritmo em PortuCê que leia o valor do salário atual, calcule e imprima o valor do novo salário de um funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que R$ 500.00. Se o salário for maior ou igual a 500, mas menor ou igual a R$ 1000.00, o reajuste deve ser de 10%. Caso o salário seja maior que R$ 1000.00, o reajuste deve ser de 5%. 16. Escreva um algoritmo em PortuCê que determine quanto será gasto para encher o tanque de um carro, sabendo-se que o preço da gasolina é R$ 2.60 e o preço do álcool é R$ 1.80. O usuário fornecerá os seguintes dados: tipo de carro (as opções como tipo de carro são a letra “G” – gaso-lina ou a letra “A” – álcool; rejeitar valores inválidos) e capacidade do tanque em litros.
  56. 56. 5 A LINGUAGEM DE PROGRAMAÇÃO C Neste capítulo, você, caro(a) aluno(a), poderá começar a traduzir seus primeiros algoritmos para a linguagem de programação C. Isso o(a) capacitará a realizar as primeiras aulas práticas em laboratório. Recomenda-se que você prepare em seu computador um ambiente adequado à programação em C e comece a trabalhar sozinho(a), fazendo os programas da lista 4.1 como atividades extraclasse. O interes-sante em se utilizar o PortuCê como pseudolinguagem é que ele segue quase totalmente as mesmas Unisa | Educação a Distância | www.unisa.br 61 regras da linguagem C. Assim, começar a programar em C será muito fácil, você verá! 5.1 Tipos Básicos e Declaração de Variáveis em C Saiba mais • Um identificador em C é formado por caracteres alfanuméricos. • O primeiro caractere tem que ser _ ou uma letra; os outros caracteres podem ser: • letras: A-Z, a-z; • dígitos: 0-9; • sublinhado: _ . • Não pode haver dois identificadores iguais. • Letras minúsculas e letras maiúsculas são diferentes. • Os identificadores não podem ser acentuados. • Não pode haver espaço em branco num identificador. • O caractere “ç” não pode ser usado num identificador. • Um identificador não pode ter o mesmo nome das palavras reservadas do C (como main, if, else, int, char). • Na linguagem C, há 5 tipos básicos (int, float, double, char e void) e quatro modificadores de tipos (long, short, signed e unsigned), o que amplia muito os tipos de variáveis, mas, neste curso, usaremos apenas 3 tipos básicos: • int; • float; • char. • O tipo de dados “double (%Lf )” corresponde ao float, mas com maior capacidade de armazenamento. • Para se declarar uma variável, escreve-se o nome de seu tipo, salta-se um espaço em branco, em seguida o nome do seu identificador e ponto e vírgula para finalizar a declaração. • Se mais de uma variável for do mesmo tipo básico, elas podem ser declaradas juntas, apenas separadas por vírgulas. • Pode-se inicializar uma variável na sua declaração atribuindo-se a ela um valor inicial compatível com seu tipo. • Toda variável precisa ser declarada antes de ser utilizada. • Não pode haver duas variáveis com mesmo nome, mesmo que tenham tipos básicos diferentes, a menos que algum caractere maiúsculo ou minúsculo as diferencie.

×