Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO ALGORITMO E LÓGICA DE PROGRAMAÇÃO 2 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO A Faculdade Multivix está presente de norte a sul do Estado do Espírito Santo, com unidades em Cachoeiro de Itapemirim, Cariacica, Castelo, Nova Venécia, São Mateus, Serra, Vila Velha e Vitória. Desde 1999 atua no mercado capixaba, des- tacando-se pela oferta de cursos de gradua- ção, técnico, pós-graduação e extensão, com qualidade nas quatro áreas do conhecimen- to: Agrárias, Exatas, Humanas e Saúde, sem- pre primando pela qualidade de seu ensino e pela formação de profissionais com cons- ciência cidadã para o mercado de trabalho. Atualmente, a Multivix está entre o seleto grupo de Instituições de Ensino Superior que possuem conceito de excelência junto ao Ministério da Educação (MEC). Das 2109 institui- ções avaliadas no Brasil, apenas 15% conquistaram notas 4 e 5, que são consideradas conceitos de excelência em ensino. Estes resultados acadêmicos colocam todas as unidades da Multivix entre as melhores do Estado do Espírito Santo e entre as 50 melhores do país. miSSão Formar profissionais com consciência cida- dã para o mercado de trabalho, com ele- vado padrão de qualidade, sempre mantendo a credibilidade, segurança e modernidade, visando à satisfação dos clientes e colaboradores. ViSão Ser uma Instituição de Ensino Superior reconheci- da nacionalmente como referência em qualidade educacional. GRUPO MULTIVIX 3 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO BiBliotecA mUltiViX (dados de publicação na fonte) As imagens e ilustrações utilizadas nesta apostila foram obtidas no site: http://br.freepik.com Pinto, Bruno Perche. Algoritimo e lógica da programação / Bruno Perche Pinto, Juliane Escola (revisora). – Serra : Multivix, 2017. editoriAl FAcUldAde cAPiXABA dA SerrA • mUltiViX Catalogação: Biblioteca Central Anisio Teixeira – Multivix Serra 2017 • Proibida a reprodução total ou parcial. Os infratores serão processados na forma da lei. Diretor Executivo Tadeu Antônio de Oliveira Penina Diretora Acadêmica Eliene Maria Gava Ferrão Penina Diretor Administrativo Financeiro Fernando Bom Costalonga Diretor Geral Helber Barcellos da Costa Diretor da Educação a Distância Pedro Cunha Coordenadora Acadêmica da EaD Carina Sabadim Veloso Conselho Editorial Eliene Maria Gava Ferrão Penina (presidente do Conselho Editorial) Kessya Penitente Fabiano Costalonga Carina Sabadim Veloso Patrícia de Oliveira Penina Roberta Caldas Simões Revisão de Língua Portuguesa Leandro Siqueira Lima Revisão Técnica Alexandra Oliveira Alessandro Ventorin Graziela Vieira Carneiro Design Editorial e Controle de Produção de Conteúdo Carina Sabadim Veloso Maico Pagani Roncatto Ednilson José Roncatto Aline Ximenes Fragoso Genivaldo Félix Soares Multivix Educação a Distância Gestão Acadêmica - Coord. Didático Pedagógico Gestão Acadêmica - Coord. Didático Semipresencial Gestão de Materiais Pedagógicos e Metodologia Direção EaD Coordenação Acadêmica EaD 4 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Aluno (a) Multivix, Estamos muito felizes por você agora fazer parte do maior grupo educacional de Ensino Superior do Espírito Santo e principalmente por ter escolhido a Multivix para fazer parte da sua trajetória profissional. A Faculdade Multivix possui unidades em Cachoei- ro de Itapemirim, Cariacica, Castelo, Nova Venécia, São Mateus, Serra, Vila Velha e Vitória. Desde 1999, no mercado capixaba, destaca-se pela oferta de cursos de graduação, pós-graduação e extensão de qualidade nas quatro áreas do conhecimento: Agrárias, Exatas, Humanas e Saúde, tanto na mo- dalidade presencial quanto a distância. Além da qualidade de ensino já comprova- da pelo MEC, que coloca todas as unidades do Grupo Multivix como parte do seleto grupo das Instituições de Ensino Superior de excelência no Brasil, contando com sete unidades do Grupo en- tre as 100 melhores do País, a Multivix preocupa- -se bastante com o contexto da realidade local e com o desenvolvimento do país. E para isso, pro- cura fazer a sua parte, investindo em projetos so- ciais, ambientais e na promoção de oportunida- des para os que sonham em fazer uma faculdade de qualidade mas que precisam superar alguns obstáculos. Buscamos a cada dia cumprir nossa missão que é: “Formar profissionais com consciência cidadã para o mercado de trabalho, com elevado padrão de quali- dade, sempre mantendo a credibilidade, segurança e modernidade, visando à satisfação dos clientes e colaboradores.” Entendemos que a educação de qualidade sempre foi a melhor resposta para um país crescer. Para a Multivix, educar é mais que ensinar. É transformar o mundo à sua volta. Seja bem-vindo! APRESENTAÇÃO DA DIREÇÃO EXECUTIVA Prof. Tadeu Antônio de Oliveira Penina diretor executivo do grupo multivix 5 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO SUmÁrio 2UNIDADE 1UNIDADE 1 NoçÕeS de lógicA de ProgrAmAção. 13 1.1 APRESENTAÇÃO DA UNIDADE 13 1.2 CONCEITOS BÁSICOS 13 1.3 ALGORITMO 14 1.3.1 MÉTODO PARA A CONSTRUÇÃO DE ALGORITMOS 17 1.3.2 REGRAS BÁSICAS PARA A CONSTRUÇÃO DE ALGORITMOS 18 1.3.3 CARACTERÍSTICA DE UM ALGORITMO 18 1.3.4 REPRESENTAÇÕES DE UM ALGORITMO 19 1.3.5 EXEMPLOS DE ALGORITMOS 23 2 coNceitoS FUNdAmeNtAiS PArA coNStrUção de AlgoritmoS eStrUtUrAdoS 26 2.1 APRESENTAÇÃO DA UNIDADE 26 2.2 ALGORITMO COM ESTRUTURA SEQUENCIAL 26 2.3 ALGORITMO COM ESTRUTURA CONDICIONAL 28 2.3.1 ESTRUTURA DE CONDIÇÃO SIMPLES: SE - ENTÃO (IF - THEN) 28 2.3.2 ESTRUTURA DE CONDIÇÃO COMPOSTA: SE - ENTÃO - SENÃO (IF - THEN - ELSE) 29 2.3.3 ESTRUTURA DE CONDIÇÃO CASO SEJA 31 2.4 ALGORITMO COM ESTRUTURA DE REPETIÇÃO 32 2.4.1 ENQUANTO-FAÇA 33 2.4.2 FAÇA-ENQUANTO 33 2.4.3 FAÇA-PARA 34 3 iteNS FUNdAmeNtAiS. 36 3.1 APRESENTAÇÃO DA UNIDADE 36 3.2 CONSTANTES 36 3.2.1 CONSTANTE NUMÉRICA 36 3.2.2 CONSTANTE LÓGICA 38 3.2.3 CONSTANTE LITERAL 38 3.3 VARIÁVEIS 39 3.3.1 FORMAÇÃO DE IDENTIFICADORES 40 3.3.2 DECLARAÇÃO DE VARIÁVEIS 41 3.4 COMENTÁRIOS 43 3UNIDADE 6 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 4UNIDADE 5UNIDADE 3.5 EXPRESSÕES ARITMÉTICAS 44 3.6 EXPRESSÕES LÓGICAS 45 3.6.1 OPERADORES LÓGICOS 46 3.6.2 PRIORIDADE 47 3.7 COMANDOS DE ATRIBUIÇÃO 47 3.8 COMANDOS DE ENTRADA E SAÍDA 48 3.8.1 ENTRADA DE DADOS 49 3.8.2 SAÍDA DE DADOS 50 4 coNStrUção de AlgoritmoS Por reFiNAmeNtoS SUceSSiVoS. 52 4.1 APRESENTAÇÃO DA UNIDADE 52 4.2 SUB-ROTINAS 52 4.3 ESCOPO DE VARIÁVEIS 57 4.4 PROCEDIMENTOS 58 4.5 FUNÇÕES 60 4.6 PARÂMETROS FORMAIS 62 4.6.1 PASSAGEM DE PARÂMETROS POR VALOR 63 4.6.2 PASSAGEM DE PARÂMETROS POR REFERÊNCIA 64 4.7 FUNÇÕES RECURSIVAS 65 5 coNStrUção de AlgoritmoS BÁSicoS: ordeNAção iNterNA. 68 5.1 APRESENTAÇÃO DA UNIDADE 68 5.2 ORDENAÇÃO 68 5.2.1 MEMÓRIA 69 5.2.2 ORDENAÇÃO INTERNA 71 6 coNStrUção de AlgoritmoS BÁSicoS: iNtercAlAção, mANiPUlAção de cArActereS e ArrAYS 89 6.1 APRESENTAÇÃO DA UNIDADE 89 6.2 INTERCALAÇÃO BALANCEADA DE VÁRIOS CAMINHOS 89 6.3 MANIPULAÇÃO DE CARACTERES 91 6.3.1 LENDO E IMPRIMINDO STRINGS 93 6.3.2 MANIPULANDO STRINGS 96 6.4 ARRAYS 98 6.4.1 DEFINIÇÃO DE ARRANJOS 99 6.4.2 DECLARAÇÃO DE VETORES 99 6.4.3 ACESSANDO OS ELEMENTOS DE UM VETOR 100 6.5 MATRIZES 103 6UNIDADE 7 FACULDADECAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 7 ArQUiVoS SeQUeNciAiS e diretoS 107 7.1 APRESENTAÇÃO DA UNIDADE 107 7.2 ARQUIVOS 107 7.3 ORGANIZAÇÃO DE ARQUIVOS 109 7.4 DECLARAÇÃO 109 7.5 ABERTURA DE ARQUIVO 110 7.6 FECHAMENTO DE ARQUIVO 111 7.7 COPIANDO UM REGISTRO 111 7.8 GUARDANDO UM REGISTRO 112 7.9 ELIMINANDO UM REGISTRO 113 7.10 ORGANIZAÇÃO SEQUENCIAL 113 7.11 ORGANIZAÇÃO DIRETA 117 8 dePUrAção e teSteS de AlgoritmoS. 122 8.1 APRESENTAÇÃO DA UNIDADE 122 8.2 TESTES 122 8.3 ESTRATÉGIA DE TESTES 124 8.3.1 TESTE DE UNIDADE 125 8.3.2 TESTE DE INTEGRAÇÃO 126 8.3.3 TESTE DE SISTEMA 127 8.3.4 TESTE DE VALIDAÇÃO 128 8.4 DEPURAÇÃO 130 8.4.1 ERRO DE SINTAXE 130 8.4.2 ERRO DE SEMÂNTICA 131 8.4.3 ERRO EM TEMPO DE EXECUÇÃO 132 reFerÊNciAS 133 7UNIDADE 8UNIDADE 8 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO icoNogrAFiA ATENÇÃO PARA SABER SAIBA MAIS ONDE PESQUISAR DICAS LEITURA COMPLEMENTAR GLOSSÁRIO ATIVIDADES DE APRENDIZAGEM CURIOSIDADES QUESTÕES ÁUDIOSMÍDIAS INTEGRADAS ANOTAÇÕES EXEMPLOS CITAÇÕES DOWNLOADS 9 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO OBJETIVO Ao final desta unidade, esperamos que possa: > Compreender os conceitos básicos da Administração de Pessoal. > Familiarizar-se com o tema e promover melhor absorção do conteúdo. UNIDADE 1 10 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO APRESENTAÇÃO Olá, acadêmico (a). Bem-vindo (a) à disciplina de Algoritmo e Lógica de Programação, na qual estudare- mos, para aprofundar seus conhecimentos sobre os principais conceitos da progra- mação como variáveis, operadores lógicos e aritméticos, estruturas de laço e estru- turas de decisão, algoritmos de ordenação e intercalação e terá a oportunidade de aplicar esses conceitos na prática, criando alguns algoritmos. Para que seu estudo se torne proveitoso e prazeroso, esta disciplina foi organizada em 8 unidades, com temas e subtemas que, por sua vez, são subdivididos em seções (tópicos), atendendo aos objetivos do processo de ensino-aprendizagem. De forma geral na disciplina de Algoritmo e Lógica de Programação, será seu primei- ro passo no aprendizado da programação de computadores. Pois é nela que você aprenderá os fundamentos básicos que servirão de alicerce para todas as demais dis- ciplinas da área de programação. Descreveremos as noções lógicas de programação. Detalharemos os conceitos fundamentais para a construção de algoritmos estrutura- dos. Abordaremos a construção de algoritmos por refinamentos sucessivos. Veremos os algoritmos mais utilizados para ordenação e intercalação. Ao longo da disciplina Algoritmo e Lógica de Programação promoveremos uma discussão partindo a con- textualização sobre depuração e teste de algoritmos, destacando sua aplicabilidade para assim realizar um bom curso. Esperamos que, até o final da disciplina, você possa: • ampliar o conhecimento sobre os princípios da programação; • identificar os aspectos sobre refinamentos sucessivos; • compreender sobre a sub-programação e sua importância; • conhecer os diferentes algoritmos de ordenação; • entender o funcionamento de testes e depuração de algoritmos. Para tanto, fique atento (a) à leitura e acompanhamento das novas tecnologias que vem surgindo. 11 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Antes de iniciar a leitura, gostaria que você parasse um instante para refletir sobre o desenvolvimento de programas de computadores, parece ser complexo, não é? Não se preocupe, até o final da disciplina, você terá respostas e, também, outras pergun- tas formuladas. Enfim, esperamos promover reflexões acerca do assunto e desejamos sucesso e bons estudos! 12 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO OBJETIVO Ao final desta unidade, esperamos que possa: > Compreender os conceitos da lógica de programação e de algoritmos; > Por meio de exemplos de algoritmos aplicados no nosso dia-a-dia você desenvolverá sua lógica de programação; > Entender as formas mais comuns para apresentações de algoritmos; UNIDADE 1 13 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 1 NOÇÕES DE LÓGICA DE PROGRAMAÇÃO. 1.1 APRESENTAÇÃO DA UNIDADE Nesta unidade iremos conhecer o conceito de lógica de programação, essa será sua primeira etapa no aprendizado da programação de computadores. Sendo assim, ela é a base para o curso, pois é nela que você aprenderá os princípios básicos que lhe darão suporte para todas as demais disciplinas desta área. 1.2 CONCEITOS BÁSICOS Nesta disciplina, iniciaremos nossos estudos sobre Lógica de Programação. Mas, afi- nal, qual o significado da palavra “Lógica”? Segundo Farrer (1999), a lógica pode ser vista como a arte de pensar corretamente. A lógica visa a colocar ordem no pensamento. Aplicamos a lógica no dia-a-dia muitas vezes até mesmo sem percebermos. Por exemplo: a) Sei que água do mar está gelada Estou querendo entrar no mar Posso concluir então que para entrar no mar terei que suportar a água gelada. b) Quero ganhar na Mega Sena Tenho que fazer a aposta Posso concluir então que para ganhar na Mega Sena, tenho que realizar a aposta. 14 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO As instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma ação ele- mentar a executar. Agora que entendemos o conceito de lógica e instruções, podemos definir que a lógi- ca de programação é a técnica de encadear pensamentos para atingir determinado objetivo. 1.3 ALGORITMO O principal objetivo do estudo da lógica de programação é a construção de algorit- mos que serão transformados em programas de computadores, afinal, o que é um algoritmo? Podemos pensar no algoritmo como uma receita de um bolo, uma sequência de ins- truções que com uma meta específica. Estas etapas devem ser claras e precisas, não podem ser redundantes nem subjetivas na sua definição. Segundo Forbellone (2005), o algoritmo trata-se de uma sequência de passos que de- vem ser seguidos para atingir um determinado objetivo. O algoritmo não é a solução do problema e sim o caminho para a solução do mesmo. O conceito de algoritmo não se aplica apenas na área da computação, ele define os passos necessários para realizar uma tarefa ou solucionar um problema, independente da área de atuação. Analisando as definições anteriores, podemos observar que executamos no dia-a-dia vários algoritmos como a leitura de um manual de aparelho eletrônico, uma receita de bolo de laranja, veja um exemplo de algoritmo na sequência. Problema: Sacar um dinheiro no caixa rápido. Sequência de Passos para Solução: Passo 1 – Ir até o banco 24 horas; Passo 2 – Colocar o cartão; Passo 3 – Digitar a senha; 15 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Passo 4 – Escolher a opção de saque; Passo 5 – Solicitar a quantia desejada; Passo 6 – Se o saldo for maior que a quantia desejada, sacar; caso contrário,mostrar mensagem de impossibilidade do saque; Passo 7 – Finalizar ação Passo 8 – Retirar o cartão Passo 9 – Sair do banco 24 horas; Esta solução é apenas uma das muitas soluções possíveis para o problema apresenta- do. Assim, ao criarmos um algoritmo, indicamos uma dentre várias possíveis sequên- cias de passos para solucionar o problema. Por exemplo, o problema acima poderia ser resolvido mesmo se alterássemos a se- quência de passos para: Passo 1 – Ir até o banco 24 horas; Passo 2 – Verificar se não tem nenhum estranho lhe observando; Passo 3 – Pegar a carteira; Passo 4 – Escolher o cartão a ser utilizado; Passo 5 – Colocar o cartão; Passo 6 – Digitar a senha; Passo 7 – Verificar o saldo; Passo 8 – Escolher a opção de saque; Passo 9 – Solicitar a quantia desejada; 16 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Passo 10 – Se o saldo for maior que a quantia desejada, sacar; caso contrário, mostrar mensagem de impossibilidade do saque; Passo 11 – Finalizar ação Passo 12 – Retirar o cartão Passo 13 – Sair do banco 24 horas; Agora considere o seguinte problema. Suponha que você dispõe de duas vasilhas de nove e quatro litros respectivamente. Como elas não possuem marcação, não é possí- vel ter medidas intermediárias sobre o volume ocupado. O problema consiste, então, em elaborar uma sequência de passos, por meio da utilização das vasilhas de nove e quatro litros, a fim de encher uma terceira vasilha com seis litros de água. A figura 1 abaixo, ilustra dois possíveis passos de um algoritmo para resolver o problema. Figura 1. Ilustra dois passos possíveis envolvendo as operações de encher e esvaziar as vasilhas. Em (a) apenas a primeira vasilha está cheia. Já em (b) os nove litros da primeira vasilha são colocados nas outras duas. 17 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Uma solução para o problema pode ser alcançada a partir do seguinte algoritmo: Algoritmo PArA eNcHer VASilHAS 1. Encha a vasilha de nove litros. 2. Usando a vasilha de nove litros, encha a de quatro. 3. Coloque a quantidade que sobrou (cinco litros) na terceira vasilha (v3 = 5). 4. Esvazie a vasilha de quatro litros. 5. Encha novamente a vasilha de nove litros. 6. Usando a vasilha de nove litros, encha a de quatro. 7. Esvazie a de quatro litros. 8. Usando a sobra da de nove litros (cinco litros), encha novamente a de quatro litros. 9. Coloque a sobra da de nove litros (agora um litro) na terceira vasilha (v3=5+1= 6). 1.3.1 MÉTODO PARA A CONSTRUÇÃO DE ALGORITMOS Para a construção de qualquer tipo de algoritmo precisamos descrever a sequência de instruções, de maneira simples e objetiva. Para isso utilizaremos algumas técnicas: • compreender o problema ser resolvido: - Por exemplo, o nosso problema pode ser a multiplicação de dois números inteiros; • identificarmos e definirmos os dados de entrada: - Para multiplicação de dois números é necessário um primeiro número inteiro 1 (num1) e outro número inteiro 2 (num2); 18 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO • descrever detalhadamente cada passo para processar ou transformar os da- dos de entrada para chegar ao objetivo do problema; - Depois da identificação dos dados de entrada, agora é definir como será o pro- cessamento da multiplicação de num1 com num2; • identificarmos e definirmos os dados de saída (objetivo do problema): - Após o processamento, teremos que ter o resultado de saída que é a multipli- cação de num1 com num2; • construirmos o algoritmo que representa a descrição dos passos; - Transcrição do algoritmo para representar a solução do problema; • testarmos o algoritmo para possíveis correções que possam vir a ser necessá- rias na lógica proposta; - Finalmente, depois do algoritmo pronto, realizamos testes para ver se a lógica atingiu o objetivo. 1.3.2 REGRAS BÁSICAS PARA A CONSTRUÇÃO DE ALGORITMOS • Usar somente um verbo na frase; • Imaginar que você está desenvolvendo um algoritmo para pessoas que não trabalham com informática; • Usar frases curtas e simples; • Ser objetivo; 1.3.3 CARACTERÍSTICA DE UM ALGORITMO Todo algoritmo, seja ele computacional ou não, recebe uma entrada, processa-a e gera uma saída segundo seu conjunto de passos. Todos eles possuem as seguintes características: 19 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 1. Entrada: zero ou mais valores de entrada, estas são insumos ou quantidades que são processadas pelos algoritmos durante a execução de seus passos; 2. Saída: pelo menos um valor é produzido, elas representam o resultado do traba- lhado realizado pelos algoritmos; 3. Clareza ou Definição: cada passo, instrução ou etapa de um algoritmo deve ser claro e não ambíguo; 4. Efetividade: cada passo, instrução ou etapa de um algoritmo deve ser executá- vel de maneira exata e em um tempo finito; 5. Finitude: o algoritmo deve ter um conjunto finito de passos. No caso do algoritmo para fazer o sanduíche, a entrada corresponde ao hambúrguer, pão, faca, maionese, alface e o tomate. O processamento ocorre com a execução de seus passos, gerando como saída o hambúrguer pronto. Os algoritmos computacio- nais, especificamente, possuem as seguintes características: 1.3.4 REPRESENTAÇÕES DE UM ALGORITMO Os três tipos mais utilizados para representar algoritmos são: descrição narrativa, flu- xograma e pseudocódigo ou portugol, que descrevemos a seguir. 1.3.4.1 DESCRIÇÃO NARRATIVA Consiste em analisar o enunciado do problema e escrever utilizando uma linguagem natural (português, inglês, francês, espanhol, etc.). Sua principal desvantagem se en- contra no fato da linguagem natural estar bem distante da linguagem utilizada pelos computadores. Logo, a tradução de uma para a outra se torna uma atividade bastan- te dispendiosa. Além disso, abre espaço para várias interpretações. Muitas vezes uma palavra pode ter vários significados, dependendo do contexto no qual são utilizadas. Em contrapartida, é bem mais fácil elaborar um algoritmo por meio de uma lingua- gem com a qual já temos uma certa familiaridade, do que através de linguagens que não são utilizadas com frequência no dia a dia. Não é necessário aprender nenhum 20 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO conceito novo, pois uma língua natural, neste ponto, já é bem conhecida. Os exem- plos de algoritmos mostrados anteriormente refletem esta forma de representação. 1.3.4.2 1.4.4.2 FLUXOGRAMA Os Fluxogramas ou Diagramas de Fluxo, são uma representação gráfica que utilizam formas geométricas padronizadas ligadas por setas de fluxo, para indicar as diversas ações (instruções) e decisões que devem ser seguidas para resolver o problema em questão. O fluxograma consiste em analisar o problema e escrever, utilizando símbolos gráficos predefinidos (TABELA 1) os passos a serem seguidos para a resolução do problema. Tabela 1- Símbolos utilizados em um fluxograma. No exemplo da Figura 2, a primeira ação é executada (‘abrir forno’) e então a segunda expressão é avaliada (‘fogo aceso?’) como verdadeira ou falsa; caso seja verdadeira, o algoritmo prossegue para a ação à esquerda (‘botar lenha’); caso seja falsa, o algorit- mo executa a ação à direita (‘acender fogo’). Em seguida, para qualquer um dos casos, a próxima ação a ser executada é (‘assar pão’). 21 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017Algoritmo e lógicA de ProgrAmAção SUMÁRIO Figura 2. Algoritmo representado em forma de um fluxograma. A vantagem de se fazer uso dos fluxogramas está na facilidade de compreendê-los. Descrições de algoritmos mediante formas gráficas são mais facilmente compreen- didas do que descrições que envolvem apenas textos. Além do mais, os fluxogramas possuem um padrão mundial no que se refere à sua simbologia, tornando sua utili- zação independente das peculiaridades das linguagens naturais. A desvantagem é que se faz necessário conhecer a simbologia do fluxograma bem como é mais trabalhoso fazer um desenho do que escrever um texto. A problemática é ainda maior quando é necessário fazer alguma alteração ou correção no desenho. Além dessas desvantagens, há uma limitação no seu poder de expressão, se compa- rado com a descrição narrativa. 22 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 1.3.4.3 PSEUDOCÓDIGO OU PORTUGOL O pseudocódigo é uma maneira intermediária entre a linguagem natural e uma lin- guagem de programação de representar um algoritmo. Consiste em analisar o enun- ciado do problema e escrever, por meio de regras definidas, os passos a serem segui- dos para a resolução do problema. Ela utiliza um conjunto restrito de palavras-chave, em geral na língua nativa do programador, que tem equivalentes nas linguagens de programação. A sintaxe do pseudocódigo não precisa ser seguida tão rigorosamente quanto a sin- taxe de uma linguagem de programação, já que o algoritmo não será executado como um programa. Esta é a linguagem mais utilizada por ser mais formal do que a descrição narrativa e mais fácil de manter do que um fluxograma. Além disso, essa linguagem é menos rígida do que uma linguagem de programação, dando assim liberdade ao progra- mador para “rascunhar” seus futuros programas sem ficar engessado na rigidez da linguagem de programação escolhida por ele. Geralmente, essa forma de represen- tação de algoritmos é uma versão reduzida de linguagens de alto nível como C e Pascal. A Figura 3 apresenta um exemplo de algoritmo na forma de representação de pseudocódigo. . Figura 3. Exemplo de Português Estruturado A grande vantagem em se utilizar pseudocódigo está na facilidade da transcrição do algoritmo para qualquer outra linguagem de programação é quase instantânea. Assim como os fluxogramas, a desvantagem fica por conta da limitação do seu poder de expressão, devido às regras impostas para a elaboração das instruções. 23 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 1.3.5 EXEMPLOS DE ALGORITMOS Com base nos três tipos de algoritmos citados anteriormente, os exemplos a seguir mos- tram os algoritmos para retornar o resultado da multiplicação de dois números inteiros. Algoritmo em descrição narrativa: • Passo 1 - Receber os dois números inteiros que serão multiplicados; • Passo 2 - Multiplicar os dois números; • Passo 3 - Mostrar o resultado da multiplicação; Veja abaixo na Figura 4, o algoritmo em fluxograma: Figura 4. Algoritmo em fluxograma Algoritmo em pseudocódigo: ALGORITMO DECLARE N1, N2, M NUMÉRICO ESCREVA “Digite dois números inteiros. ” LEIA N1, N2 M ← N1 * N2 ESCREVA “Multiplicação = “, M FIM ALGORITMO. 24 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Para aprofundar seus conhecimentos, recomendo a leitura do capítulo 1 do livro Tre- inamento em Lógica de Programação, de Sandra Rita Pinto ou o capítulo 3 do livro Técnicas de Programação - Uma Abordagem Moderna, do autor Mario Leite. 25 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO OBJETIVO Ao final desta unidade, esperamos que possa: > Compreender a diferenciação existente entre as estruturas de controle do fluxo de execução; > Estrutura sequencial; > Estrutura de seleção; > Estrutura de repetição; > Saber quando aplicar uma determinada estrutura de controle; UNIDADE 2 26 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 2 CONCEITOS FUNDAMENTAIS PARA CONSTRUÇÃO DE ALGORITMOS ESTRUTURADOS 2.1 APRESENTAÇÃO DA UNIDADE Na unidade anterior aprendemos que os algoritmos são etapas a serem seguidas para solucionar um problema. Vimos também que existem várias formas de repre- sentação dos algoritmos. As etapas dos algoritmos são executadas na sequência em que eles aparecem, porém, em várias situações é necessário alterar o fluxo de execu- ção destas etapas. Pode existir a necessidade da execução de uma etapa somente se uma determinada condição for verdadeira, ou talvez, pode ser necessário repetir um conjunto de passos várias vezes até que uma condição seja aceita. Neste capítulo vamos aprender sobre algumas estruturas de controles existentes de algoritmos. 2.2 ALGORITMO COM ESTRUTURA SEQUENCIAL Os algoritmos dos exemplos que vimos até agora apresentam uma sequência de passos que devem ser seguidos para atingir um objetivo final. Observe que, para o atingimento do objetivo, todos os passos dos algoritmos devem ser executados sem nenhuma alteração no seu fluxo, a não ser, claro, que exista alguma instrução explíci- ta para a mudança do fluxo. Trata-se de um conjunto de comandos que são executados numa sequência linear, de cima para baixo, na mesma ordem que aparecem. A Figura 5 ilustra o modelo básico para a escrita de algoritmos que será utilizado para escrever algoritmos. Como boas práticas acadêmicas, todo algoritmo deverá ter a identificação do bloco, colo- cando o início e o fim do trecho e dentro deles iniciamos com a declaração das variá- veis e depois colocamos o corpo do algoritmo. 27 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Figura 5. Modelo básico de algoritmo. A Figura 6 evidencia o algoritmo que recebe 4 notas de um aluno e calcula a média aritmética e depois imprime a nota do mesmo. Figura 6. Algoritmo de média aritmética 28 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 2.3 ALGORITMO COM ESTRUTURA CONDICIONAL Também conhecido como algoritmo com estrutura de seleção ou de decisão. A exe- cução de alguns passos neste tipo de algoritmo pode depender de decisões a serem tomadas. Dessa forma, algum fato indicará se um ou mais passos do algoritmo serão executados ou não. Por exemplo, considere que precisamos escrever um algoritmo que calcule um au- mento salarial de 10% para todos os funcionários que ganham até R$ 2.500,00 reais. Para esse problema sabemos que precisamos avaliar o salário de cada funcionário. Neste caso, para um intervalo de valores de até R$ 2.500,00 o algoritmo executa um conjunto de ações e para outro intervalo executa um outro conjunto de ações. Para este tipo de situação, em que um determinado valor é avaliado para executar alguma determinada ação, utilizamos as estruturas de condição. Podemos ter três tipos de estrutura de condição: condição simples, condição com- posta e condição múltipla. Vamos ver adiante estes três tipos. 2.3.1 ESTRUTURA DE CONDIÇÃO SIMPLES: SE - ENTÃO (IF - THEN) A estrutura de condição mais simples é a se-então, utilizada da seguinte forma: se <expressão-lógica> então: <bloco de comandos> fim-se Uma expressão (<expressão-lógica>) deve ter como resultado apenas dois valores pos- síveis: verdadeiro ou falso. A instrução (<blocode comandos>) só será executada se a condição tiver o valor verdadeiro. Caso seja falso, a execução do programa ignora o bloco de comando e continua na linha seguinte à estrutura de condição. Imagine um algoritmo que determine se o aluno estará aprovado se sua média for maior ou igual a 5.0 pontos, veja no exemplo de algoritmo como ficaria. 29 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Se MÉDIA > 5.0 Então Aluno Aprovado A Figura 7, ilustra o diagrama do mesmo algoritmo que verifica se a média da nota do aluno é maior que 5.0: Figura 7. Diagrama do fluxo da média Figura 8. Algoritmo da média da nota. 2.3.2 ESTRUTURA DE CONDIÇÃO COMPOSTA: SE - ENTÃO - SENÃO (IF - THEN - ELSE) A estrutura de condição se-então oferece a possibilidade de executarmos uma de- terminada ação ou comando se o resultado da expressão lógica for verdadeiro e de executarmos uma ação diferente se o resultado da expressão lógica for falso. Para essas situações é utilizado o comando senão, como mostrado abaixo. se <expressão-lógica> então: <bloco de comandos verdade> 30 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO senão: <bloco de comandos falsidade> fim-se A estrutura de decisão “SE/ENTÃO/SENÃO”, funciona exatamente como a estrutu- ra “SE”, com apenas uma diferença, em “SE” somente podemos executar comandos caso a condição seja verdadeira, diferente de “SE/SENÃO” pois sempre um comando será executado independente da condição, ou seja, caso a condição seja “verdadeira” o comando da condição será executado, chamado bloco-verdade, caso contrário o comando da condição “falsa” será executado, chamado bloco-falso. Se a estrutura de condição não possui uma cláusula “SENÃO”, então no caso da expressão lógica ser falsa, a execução do algoritmo continua na linha subsequente ao bloco “SE/ENTÃO”. Na Figura 9 podemos ver um exemplo de algoritmo que calcula o aumento salarial de 2% quando o funcionário receber mais que R$ 2.500,00 reais. Quando essa condi- ção não é atendida, o funcionário deverá receber 10% de aumento. Figura 9. Algoritmo que calcula o aumento salarial. Se MÉDIA >= 5.0 Então Aluno Aprovado Senão Aluno Reprovado 31 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO No exemplo acima está sendo executada uma condição que, se for verdadeira, exe- cuta o comando “APROVADO”, caso contrário executa o segundo comando “REPRO- VADO”. Podemos também dentro de uma mesma condição testar outras condições. Como no exemplo abaixo, na figura 10. Figura 10. Diagrama com condições composta 2.3.3 ESTRUTURA DE CONDIÇÃO CASO SEJA Uma outra forma de trabalhar com comandos condicionados a um determinado valor é a estrutura caso seja. Nessa estrutura o valor de uma determinada variável é testado e caso esse valor coincida com determinado valor pré-estabelecido um de- terminado comando é executado. A vantagem de se utilizar este comando é a legi- bilidade do código quando conhecemos os possíveis valores para uma determinada variável. A estrutura de condição caso é utilizada da forma mostrada a seguir: caso variável seja: <bloco de comandos> fim-se 32 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Este tipo de estrutura condicional tem a mesma função do se-então, com a diferença que a estrutura de condição caso oferece a opção chamada padrão. O bloco de co- mandos dentro da opção padrão será executado caso nenhuma dos casos informados sejam atendidos. A sua utilização é demonstrada na Figura 11, onde o algoritmo rece- be o número inteiro correspondente ao dia da semana e mostre por extenso este dia. Figura 11. Exemplo de algoritmo com estrutura de condição caso seja 2.4 ALGORITMO COM ESTRUTURA DE REPETIÇÃO Utilizamos os comandos de repetição também conhecido como estruturas de intera- ções ou estrutura de laços, quando desejamos repetir um conjunto de instruções ou comandos até que determinado objetivo seja atingido. Todas as estruturas de repe- tição têm em comum o fato de haver uma condição de controle, expressa através de uma expressão lógica, que é testada em cada ciclo para determinar o momento em que a repetição deva ser interrompida ou não. 33 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO As estruturas de repetição são basicamente três: enquanto-faça (while), faça-enquan- to (do-while) e para-faça (for). A diferença básica entre as estruturas de repetição é que enquanto-faça primeiro testa a condição para depois realizar o bloco de coman- do, ao contrário de faça-enquanto que primeiro executa o bloco para depois realizar o teste. Já na estrutura para-faça é necessário um controle para determinar quando o laço deverá ser finalizado. 2.4.1 ENQUANTO-FAÇA Neste caso, o bloco de operações será executado enquanto a expressão lógica (x) for verdadeira, ou seja, antes de realizar a estrutura de repetição, uma condição x é avaliada e caso o resultado da mesma for verdadeiro, os comandos que estão dentro da estrutura serão executados. O teste da condição será sempre realizado antes de qualquer operação e caso o resultado do teste de condição seja falso, o algoritmo sai da estrutura de repetição e segue para a próxima linha. A estrutura enquanto-faça é usada principalmente quando não se sabe com antecedên- cia a quantidade de repetições que precisam ser realizadas. Por exemplo, suponha um problema onde necessitamos fazer a leitura dos nomes dos funcionários de uma em- presa. Esse processo deverá ser executado várias vezes até que a palavra “fim” seja digita- da. Desta maneira não é possível saber quando o usuário digitará “fim” e não é possível definir quantas vezes o algoritmo deverá repetir essa ação. Na figura 12 a seguir é apre- sentado o formato básico da estrutura de repetição enquanto-faça de um algoritmo. Figura 12. Algoritmo de estrutura de repetição enquanto faça 2.4.2 FAÇA-ENQUANTO Muito conhecido também como repita-até, assim como o enquanto-faça, o coman- do faça-enquanto também é uma estrutura de repetição. Assim como o enquanto- -faça, o comando faça-enquanto também é uma estrutura de repetição. A principal diferença entre eles é que, no caso do faça-enquanto, o bloco de instruções dentro do laço é executado pelo menos uma vez, mesmo que a condição seja falsa. Isso acon- tece porque o teste da condição é realizado apenas ao final da estrutura, ou seja, as instruções já foram executadas. Seu formato é mostrado na Figura 13. 34 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Figura 13. Algoritmo de estrutura faça enquanto Figura 14. Algoritmo de estrutura repita até 2.4.3 FAÇA-PARA Esta estrutura também serve para criar um laço de repetição e geralmente é utilizado quando conhecemos a quantidade de vezes que queremos que as instruções sejam repetidas. Esta estrutura contém um controle para determinar quando o laço será finalizado. A estrutura é mostrada na Figura 14 e para ser utilizada precisa das infor- mações básicas: valores de início, fim e incremento. Figura 15. Algoritmo de estrutura faça para Em variável de início, geralmente um contador, recebe um valor inicial. Essa variável será incrementada ou decrementada de acordo com a expressão definida em in- cremento. O laço ficará executando as instruções (<bloco de comandos>) até que a condição definida em fim seja falsa. Para aprofundar seus conhecimentos,recomendo a leitura do capítulo 4 do livro Tre- inamento em Linguagem C – Curso Completo – Módulo 1 de Victorine Mizrahi e do capítulo 3 (da página 61 à 74) do livro C Completo e Total do autor Herbert Schildt. 35 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO OBJETIVO Ao final desta unidade, esperamos que possa: > Compreender os conceitos de tipos primitivos > Entender Variáveis > Entender como funciona as expressões aritméticas, lógicas e relacionais > Expressões Comandos de entrada e saída > Identificação dos blocos UNIDADE 3 36 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 3 ITENS FUNDAMENTAIS. 3.1 APRESENTAÇÃO DA UNIDADE Apresentar os tipos básicos de dados a serem adotados. Definir constantes, variáveis e comentários explicando a sua utilização. Explicar as expressões aritméticas e lógi- cas. Conceituar o processo de atribuição. Apresentar a importância e a aplicação dos comandos de entrada e saída. Conceituar blocos lógicos. 3.2 CONSTANTES Um dado é constante quando não sofre nenhuma variação no decorrer do tempo, ou seja, seu valor é constante desde o início até o fim da execução do algoritmo. Podemos associá-lo a uma posição de memória (endereço) que tem um conteúdo fixo. Uma constante pode ser um número (real ou inteiro), um valor lógico ou uma se- quência de caracteres quaisquer com algum significado para o problema em estudo. As constantes podem ser classificadas em: numéricas, lógicas ou literais. 3.2.1 CONSTANTE NUMÉRICA Uma constante numérica é formada por uma sequência de dígitos que: a. pode estar ou não precedida de um sinal positivo (+) ou negativo (-); Exemplo: 25; +3421; -315 b. pode estar ou não seguida de um ponto decimal (.) e outra sequência de dígitos; Exemplo: 3.14; +3421; -0.53 37 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO c. pode terminar ou não pela letra E seguida de outra sequência de dígitos. Entre a letra E e esta outra sequência de dígitos pode existir ou não sinal positivo (+) ou negativo (-). Exemplo: 7.8 E; -315.21E-3; 21E+3 1. Observe que: 2. não pode haver espaço em branco entre os caracteres usados para representar uma constante numérica; 3. a separação entre a parte inteira e a parte decimal de um número é feita com o ponto decimal (.) e não com a vírgula; 4. se existir ponto decimal numa constante numérica, pelo menos um dígito deve preceder o ponto decimal e pelo menos outro dígito deve sucedê-lo, sendo in- válido escrever constantes como no exemplo a seguir: Exemplo: 6.; .13; 5.E-10 5. os dígitos que seguem a letra E indicam a potência de 10 que deve multiplicar o número que a precede. Exemplo: -315.21E-3 significa -315,2110= -0,31521 Os dados numéricos podem ser de dois tipos: inteiras ou reais. Constantes inteiras são os números positivos ou negativos e que não possuem par- te decimal compreendidos num intervalo. Esse tipo de dado, quando armazenado na memória do computador, ocupa 2 bytes, por isso temos 28 x 28 = 2 * 16 = 65 536 possibilidades de representação dos números inteiros. O intervalo de valores inteiros possíveis é de -32768 até + 32767. Constantes reais podem ser positivos ou negativos e possuem parte decimal. Esse tipo de dados, quando armazenado na memória do computador, ocupa 4 bytes, por isso temos, 28 x 28 x 28 x 28 = 232 possibilidades de representação dos números reais. A faixa de valores reais possíveis é muito maior de 6 a 11 dígitos significativos com sinal. 38 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Nos números reais a parte decimal é separada da parte inteira por um .(ponto) e não por uma , (vírgula). Exemplos: 3; -521; 0; 30000 - constantes inteiras 3.146; -8.21; 6E24; 0.0 - constantes reais. 3.2.2 CONSTANTE LÓGICA As duas constantes lógicas são representadas pelas palavras true (verdadeiro) e false (falso) e são denominadas constantes booleanas. Esse tipo de dado, quando armaze- nado na memória do computador, ocupa 1 byte, pois possui apenas duas possibili- dades de representação. 3.2.3 CONSTANTE LITERAL São dados formados por uma cadeia de caracteres ou por apenas um único carac- tere. Esses caracteres podem ser os números, os caracteres especiais (&, #, @, ?, +), as letras maiúsculas e as letras minúsculas. Esses tipos de dado, ocupa um byte para cada caractere quando armazenado na memória do computador. As constantes literais predefinidas na linguagem PASCAL são formadas por uma se- quência de caracteres aceitos pela implementação da linguagem, incluindo as 26 letras latinas A B C D E F G H I J K L M N O P Q R S T U V W X Y Z, os dígitos 0 1 2 3 4 5 6 7 8 9, o espaço em branco e outros caracteres disponíveis no computador. Num programa em PASCAL, as constantes literais são representadas pelos caracteres correspondentes colocados entre apóstrofos simples (‘). 39 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Exemplo: ‘José da Silva’, ‘X1Y2W3, ‘Mensagem’, ‘*A!B?-’, ‘12345’, ’23/09/55’ A representação de um apóstrofo se faz com dois apóstrofos entre apóstrofos, portan- to, com quatro apóstrofos (‘’’’). 3.3 VARIÁVEIS Uma variável é um identificador que, como sugere o nome, tem a possibilidade de alterar o conteúdo da variável durante a execução de um algoritmo ou programa. Podemos associar uma variável a uma posição da memória (endereço) e poderemos armazenar (guardar) neste endereço qualquer valor do conjunto de valores de um tipo básico associado a ela. Segundo Farrer (1999), a memória é utilizada para armazenar tanto as instruções dos programas quando os dados utilizados pelos mesmos. Qualquer programa, para ser executado, tem de estar na memória. Uma variável pode assumir vários valores diferentes ao longo da execução do progra- ma, mas, em um determinado momento, possui apenas um valor. Ao escrevermos os algoritmos, necessitamos armazenar dados referentes ao proble- ma, como o resultado de uma operação, um número ou até mesmo um nome. Para armazenar esses dados, precisamos reservar uma área da memória do computador para esta utilização. A forma de solicitar ao computador a reserva dessa memória é chamada de declaração de variáveis. Veja a sintaxe da declaração: var nome_da_variavel: tipo_da_variavel onde: var: Indica o início do bloco de declaração de variáveis de um algoritmo. Indepen- dente da quantidade de variáveis a serem declaradas, a palavra var é escrita apenas uma vez. 40 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO nome_da_variavel: Para que o computador reserve o espaço de memória, temos que informar como será referenciado essa área de memória, ou seja, qual nome será dado a esse espaço de memória. As regras para nomear às variáveis serão abordadas ainda nesta unidade. tipo_da_variavel: É necessário informar o tipo de dados que será armazenado na variável para que o computador saiba o tamanho do espaço de memória necessário a ser reservado. Apresentado na sequência. As variáveis e outras entidades são representadas por identificadores. 3.3.1 FORMAÇÃO DE IDENTIFICADORES Suponhamos que, estamos desenvolvendo um algoritmo que calcule o aumento do dissídio dos colaboradores da empresa, precisamos de variáveis para armazenar o va- lor do salário e para os resultados dos cálculos. Assim, o nome dado à variável deve ser intuitivo evidenciandoo objetivo da mesma, as seguintes regras de formação tam- bém devem ser seguidas: 1. Um identificador deve começar com um caractere alfabético; 2. Podem ser seguidos por mais caracteres alfabéticos ou numéricos; 3. Não é permitido o uso de espaço em branco ou de qualquer outro caractere, que não seja letra, dígito ou underline na formação de um identificador; 4. Utilize nomes sugestivos. A linguagem PASCAL considera as letras maiúsculas de um identificador como equi- valente às minúsculas correspondentes. Exemplo: a) Identificador permitidos: A X5 Nota A32B Matrícula F1G3H5 Nota final LucroTotal 41 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO b) Identificadores não permitidos 5B X-Y E(13) Nota[1] A:B B*D Km/H Terca-feira Alguns identificadores possuem seu sentido prefixado na linguagem e não podem ser utilizadas como variáveis comuns, são as denominadas palavras reservadas ou palavras-chaves. As mais comuns são: and end nil set array file not then begin for of to case function or type const goTo packed until div if procedure var do in program while downTo label record with else mod repeat 3.3.2 DECLARAÇÃO DE VARIÁVEIS No ambiente computacional, os dados das variáveis são armazenados em memória. Podemos imaginar essa memória como sendo um armário repleto de gavetas, no qual as gavetas seriam os locais físicos responsáveis por armazenar objetos; os objetos (que podem ser substituídos) seriam os dados e as gavetas, as variáveis. 42 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Vimos que a forma de identificar e diferenciar as variáveis (gavetas) na memória (ar- mário) se faz por meio de identificadores (etiquetas). Cada variável (gaveta), pode guardar apenas um dado (objeto) de cada vez, sendo sempre do mesmo tipo primi- tivo (material). Portanto, quando declaramos uma variável, devemos ter em mente quais valores se- rão armazenados naquele espaço de memória. Uma variável pode ser de um dos seguintes tipos: • Tipo inteiro: Qualquer número inteiro, negativo, nulo ou positivo. Por exemplo, se precisarmos de uma variável para armazenar a idade dos funcionários, o tipo ideal para essa variável seria inteiro. • Tipo real: Qualquer número real, ou seja, valores com ponto decimal. Esse seria o tipo ideal para armazenar o salário dos funcionários. • Tipo caractere: Variável do tipo literal caractere para armazenar um único ca- ractere, que pode ser uma letra ou um símbolo. Por exemplo, para identificar o sexo do funcionário. • Tipo cadeia: Variável do tipo literal cadeia para armazenar uma sequencia de caracteres, ou seja, uma palavra. Por exemplo, para armazenar o nome do fun- cionário. • Tipo Lógico: Variável para armazenar valores lógicos. Será sempre verdadeiro ou falso. Sua sintaxe é: var nome_variavel1, nome_variavel2 : tipo_variavel1e2 nome_variavel2 : tipo_variavel3 43 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 3.4 COMENTÁRIOS À medida que um programa cresce, ele vai ficando cada vez mais difícil de ser lido e consequentemente de ser entendido. Para tornar o algoritmo legível e claro, deve- mos colocar textos que expliquem o raciocínio adotado durante seu desenvolvimen- to para que outras pessoas, ou o próprio desenvolvedor, ao ler o programa mais tarde, não tenhamos dificuldades em entender sua lógica. Esses textos são chamados de comentários. O comentário é um texto ou simplesmente uma frase, que aparece sempre delimi- tado por chaves, podendo ser colocado em qualquer ponto do algoritmo onde se façam necessários. No exemplo a seguir é mostrado um conjunto de declarações onde foram introduzi- dos comentários como o intuito de explicar o significado de cada uma das variáveis. var mat, {número de matrícula do aluno} nota {total de pontos obtidos no semestre letivo} cod: {código do curso} integer; var nome, {nome completo do aluno} end, {endereço do aluno} c: {conceito final} string; Na linguagem de programação C, há dois tipos de comentários: os comentários de linha e os comentários de bloco. Os comentários de linha são identificados pelo uso de duas barras seguidas (//). Assim, quando usamos // em uma linha, tudo o que esti- ver nessa linha depois do // são considerados comentários. 44 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Os comentários de bloco são iniciados por /* e finalizados por */. Tudo o que estiver entre esses dois símbolos são considerados comentários. Os comentários de bloco podem ocupar várias linhas. Figura 16. Exemplo de algoritmo com comentários A Figura 15 mostra a execução do programa acima. Note que o comentário só apare- ce no código fonte, não influenciando na execução do programa. 3.5 EXPRESSÕES ARITMÉTICAS As expressões aritméticas são escritas linearmente, usando-se a notação matemática, com as seguintes restrições: • O sinal de multiplicação é indicado com asterisco (*) e nunca deve ser suben- tendido; • A divisão é indicada com a barra (/); • Não existe sinal para a potenciação e radiciação, devendo-se indicá-las com combinações de produtos ou funções predefinidas; • A prioridade entre as operações: 1ª -> * / div mod 2ª -> + - 45 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO • Div e mod são operadores que só podem ser aplicados com operandos intei- ros dando, respectivamente, o quociente inteiro (obtido por divisão e trunca- mento, sem arredondamento) e o resto inteiro da divisão entre operandos. 11 div 4 dá resultado 2 11 mod 4 da resultado 3 • Uma expressão que só tenha operandos inteiros e operadores *, mod, div, + e – terá com resultado um valor inteiro. Se, pelo menos, um dos operandos for real (o outro podendo ser inteiro) e se os operadores forem *, /, + ou -, o resultado da expressão será real. • O operador / sempre conduz a um resultado do tipo real, mesmo que os dois operandos sejam inteiros. Os parênteses servem para indicar uma sequência de cálculo da expressão aritmética diferente da que seria indicada exclusivamente com o uso das prioridades preesta- belecidas. 3.6 EXPRESSÕES LÓGICAS São expressões formadas a partir do uso de variáveis e constantes, operadores relacio- nais e operadores lógicos. As expressões lógicas são avaliadas e retornam sempre um valor lógico: verdadeiro ou falso. Os operadores são comuns para construirmos equações. Adotaremos por convenção para esses operadores os seguintes símbolos apresentados na tabela 2. tabela 2 – operadores e funções 46 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO O resultado obtido de uma relação é sempre um valor lógico. Por exemplo,analisan- do a relação numérica A + B = C, o resultado será verdade ou falsidade à medida que o valor da expressão aritmética A + B seja igual ou diferente do conteúdo da variável C, respectivamente. Eis algumas relações: A <> B Nome == “Bruno” X = 1 Com as declarações: var x, y, z: integer; Nome, Cor: string; Têm-se as seguintes relações, a partir dos valores atribuídos às variáveis: VARIÁVEIS RELAÇÕES x y z Cor Nome X * X + Y > Z Cor = 'Azul' Nome <> 'Jose' 1 2 5 'azul' 'Paulo' false true true 4 3 1 'verde' 'Jose' true false false 1 1 2 'branco' 'Pedro' false false true 1 2 1 'azul' 'Jose' true true false 3.6.1 OPERADORES LÓGICOS A álgebra das preposições define três conectivos usados na formação de novas pre- posições a partir de outras já conhecidas. Esses conectivos são os operadores nas expressões lógicas: and para a conjunção or para a disjunção not para a negação 47 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Sejam as variáveis lógicas P, Q, R, S contendo, respectivamente, os valores true, false, false, true. O valor lógico das conjunções: a. P and S -> true b. P or R -> true c. Q and S -> false d. Q or R -> false 3.6.2 PRIORIDADE Como foi mostrado anteriormente, pode-se ter mais de um operado lógico na mes- ma expressão, além dos operadores de relação e dos operadores aritméticos. Em PASCAL, a prioridade das operações está dada na tabela 3. Tabela 3 – Prioridade das operações aritméticas PRIORIDADE OPERADORES 1ª not 2ª *, /, div, mod, and 3ª +, - , or 4ª =, <>, <, <=, >=, >, in 3.7 COMANDOS DE ATRIBUIÇÃO Um comando de atribuição permite-nos fornecer um valor a uma variável (guardar um valor na memória), em que o tipo de dado deve ser compatível com o tipo da variável, isto é, somente podemos atribuir um valor lógico a uma variável capaz de comportá-lo, ou seja, uma variável declarada como sendo do tipo lógico. O comando de atribuição possui a seguinte sintaxe: identificador <- expressão 48 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Onde: identificador: é o nome da variável à qual será atribuído o valor da expressão; <- : é denominado operador de atribuição; expressão: é uma expressão dos tipos já estudados. No exemplo a seguir: lógico: A, B inteiro: X; A <- B; X <- 4 + 6 div 2; B <- 5 = 3; X <- 2; Nos comandos em que o valor a ser atribuído à variável é representado por uma ex- pressão aritmética ou lógica, estas devem ser resolvidas em primeiro lugar, para que depois o resultado possa ser armazenado na variável. Notemos também que uma variável pode ser utilizada diversas vezes. Ao atribuirmos um segundo valor, o primeiro valor armazenado será descartado, sendo substituído pelo segundo. 3.8 COMANDOS DE ENTRADA E SAÍDA Um programa de computador se torna praticamente inútil se não apresentar algum tipo de interação com o usuário. Os algoritmos precisam de interações de dados pro- venientes do meio externo para efetuarem operações e cálculos que são necessários para alcançar o resultado desejado. Com essa finalidade, utilizamos os comandos de entrada e saída. 49 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 3.8.1 ENTRADA DE DADOS Para que o algoritmo possa receber os dados de que necessita, adotaremos o coman- do entrada de dados denominado leia, em PASCAL read e readln, cuja finalidade é atribuir o dado a ser referenciado à variável identificada. No PASCAL, a diferença entre read e readln é que neste último, após a leitura dos va- lores correspondentes à lista-de-identificadores, provoca uma mudança de linha na unidade de entrada utilizada. Se for feita a declaração: var num: integer; nota: real; e se forem fornecidas, na unidade de entrada, diversos valores como: 01 60.05 02 88.6 03 84.04 04 54.00 cada linha dispondo de quatro valores, então quatro execuções repetidas do coman- do readln (num, nota); atribuirão à variável num, sucessivamente, os valores: 01 03 e a variável nota, respectivamente, os valores: 60.05 84.04 Em cada linha, os valores, além do segundo, serão ignorados. Por outro lado, em quatro execuções repetidas do comando ao serem read(num, nota) fornecidas as mesmas linhas, serão atribuídos à variável num, sucessivamente, os valores: 01 02 03 04 50 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO e a variável nota, os respectivos valores: 60.05 88.6 84.04 54.00 3.8.2 SAÍDA DE DADOS Para que o algoritmo possa mostrar os dados que calculou, como resposta ao proble- ma que resolveu, adotaremos um comando de saída de dados denominado escreva, cuja finalidade será apresentar o valor da variável identificada. No PACAL, os coman- dos de saída possuem a forma write e writeln a diferença básica entre os comandos é que no writeln após a leitura dos valores correspondentes à lista-de-identificadores, provoca uma mudança de linha na unidade de saída utilizada. Exemplos: read(X); readLn (nome, n, y) write(k, soma) Para aprofundar seus conhecimentos, recomendo a leitura do capítulo 4 (da página 33 à 44) do livro Treinamento em Lógica de Programação, de Sandra Rita Pinto ou o capítulo 2 (da página 34 à 44) do livro Técnicas de Programação - Uma Abordagem Moderna, do autor Mario Leite. 51 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO OBJETIVO Ao final desta unidade, esperamos que possa: > Identificar o problema e pensar na solução bem geral ou abstrata; > Refinar até obter um nível apropriado de detalhamento, ou seja, a cada passo de refinamento a solução se torna menos abstrata; > Construção de sub- rotinas ou sub-algoritmos; > Identificação dos contextos das sub-rotinas; > Criação de subprogramas UNIDADE 4 52 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 4 CONSTRUÇÃO DE ALGORITMOS POR REFINAMENTOS SUCESSIVOS. 4.1 APRESENTAÇÃO DA UNIDADE Nesta unidade vamos conhecer as técnicas de refinamento sucessivos. Vamos abor- dar os conceitos de sub-rotinas e sua aplicabilidade reduzindo a complexidade do al- goritmo. Vamos aprender também o significado de escopo e a utilização de variáveis bem como a comparação dos diferentes contextos de sub-rotinas e suas aplicações. 4.2 SUB-ROTINAS A divisão de um problema em fragmentos menores é um fator determinante para a redução da complexidade. Um dos grandes pontos positivos quanto a esta decom- posição, está na possibilidade de concentrar as atenções em um conjunto pequeno de cada vez, possibilitando assim uma melhor compreensão do todo. Nos algoritmos, uma sub-rotina é um conjunto de algoritmo completo de instru- ções, com uma função bem definida no contexto do algoritmo. O algoritmo principal, quando necessário, realiza o desvio na execução indicando que aquele conjunto de instruções devem ser executadas. Após a execução desta sub-rotina, o fluxo dos co- mandos é retomado para o fluxo principal. Em geral, não existem regras específicas para a criação das sub-rotinas, porém, al- guns critérios devem ser analisados: • Divisão do problema de acordo com as principais partes; • Garantir que existem coerências nas divisões realizadas; 53 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO • Se mesmo após a divisão, o trecho ainda continuarcomplexo, divide-o novamente; • Analisar a divisão final para garantir a legibilidade e a coerência. A técnica de refinamentos sucessivos também conhecido como Top-Down (de cima para baixo), onde parte dos conceitos macros, ou seja, mais abstratos, até atingir o nível de detalhamento ideal para o entendimento do problema. Em geral, as sub-rotinas possuem os seguintes propósitos: • organizar conjuntos de instruções que se repetem em várias partes do algo- ritmo, possibilitando a escrita da solução uma única vez e indicar os pontos diferentes em que ela deva ser aplicada; • separar as instruções de forma a obter uma melhor organização do algoritmo, possibilitando maior clareza e entendimento do algoritmo; • testes e correções das sub-rotinas podem ser feitos em separado; • separar as instruções que realizam tarefa simples ou complexa, de forma que uma solução feita para um problema possa ser reaproveitado em outro, mini- mizando esforços; • uma sub-rotina independente pode ser utilizada em outros algoritmos que requeiram o mesmo processamento por ele executado. Uma sub-rotina não pode ser executado diretamente como um programa. Ele pre- cisa ser “invocado” ou “chamado” de algum ponto do código do programa como um todo do qual faz parte. Se durante a execução do fluxo de instruções atingir um pon- to de invocação, ou seja, quando em um determinado ponto do algoritmo contém o mesmo identificador utilizado na definição da sub-rotina, o fluxo de controle da execução passa para a sub-rotina, e, ao ser concluída a execução deste subprograma, o fluxo de controle é retomado imediatamente após o ponto de invocação do algo- ritmo de origem. Uma sub-rotina pode eventualmente invocar outras sub-rotina e assim sucessiva- mente. Muitas linguagens de programação permitem também que um sub-rotina invoque a si próprio. Nestes casos dizemos que ocorreu uma chamada recursiva. Este assunto ainda será explanado nesta unidade. 54 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Como pode ser observado no fluxo de execução do algoritmo na Figura 16, assim que for encontrado um identificador contendo o mesmo nome da sub-rotina, neste exemplo, Primeiro e Segundo, o fluxo é direcionado para as respectivas sub-rotinas e no final de cada trecho, retorna-se para o algoritmo principal. Figura 17. Figura 16. Fluxo de execução do algoritmo No exemplo seguinte observe as etapas do algoritmo para calcular o salário líquido de um empregado (FIG. 17). Figura 18. Etapas de algoritmo O comando “determine o salário” pode ser refinado como a seguir (FIG. 18): Figura 19. Refinamento das etapas de algoritmo 55 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Observe que no refinamento realizado acima, não foi detalhado como seria a lógica dos cálculos de vantagens e das deduções. Estas ações serão definidas adiante em sub-rotinas específicas, conforme a Figura 19. Figura 20. Refinamento mais aprofundado das etapas de algoritmo As sub-rotinas seriam (FIG. 20 e 21): Figura 21. Sub-rotina para cálculos das vantagens Figura 22. Sub-rotina para cálculo das deduções A versão final do refinamento sucessivo do algoritmo ficaria da seguinte forma (FIG. 22, 23 e 24): Figura 23. Algoritmo refinado. 56 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Figura 24. Algoritmo refinado do cálculo das vantagens. Figura 25. Algoritmo refinado do cálculo das deduções. Já no exemplo a seguir, o objetivo é receber o salário de um funcionário e conceder um aumento salário de acordo com o % informado. Para solução deste problema, uma sub-rotina foi utilizada (FIG. 25) Figura 26. Algoritmo para cálculo salarial. O programa principal é executado linearmente até a linha 4. Nesse ponto é chama- do a sub-rotina cálculo, o programa principal fica aguardando o retorno da sub-roti- na. As instruções a serem executadas neste momento é direcionada para a linha 9. O controle retorna sua execução novamente ao programa principal apenas quando a linha 13 é executada. 57 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO 4.3 ESCOPO DE VARIÁVEIS Quando trabalhamos com várias sub-rotinas, nos deparamos com questões relativas à visibilidade das variáveis em diferentes partes do programa. Ou seja, se uma variável é visível ou acessível em certas partes de um programa. Todas as variáveis declaradas no início do algoritmo os tornam visíveis e utilizáveis em qualquer sub-rotina integrante. Essas variáveis são denominadas globais. Em algumas situações, as variáveis são utilizadas apenas em uma sub-rotina especí- fica. Neste caso, não justifica uma definição global, pois a mesma deverá ser visível e utilizada apenas dentro daquele limite de instruções lógicas. Nesta situação, a variá- vel é declarada internamente na sub-rotina, denominada, variável local. Para entendermos como funciona a visibilidade das variáveis, precisamos falar sobre o escopo. O escopo ou abrangência de uma variável é a parte do programa na qual ela é visível e pode ser acessada. A visibilidade refere-se a hierarquia, ou seja, uma va- riável é global quando e visível e acessada por todas as sub-rotinas inferiores, e local, quando é visível apenas em seu contexto e não nas sub-rotinas superiores. Observe na Figura 26 as variáveis K e J definidos no início do algoritmo são visíveis, a princípio, a todo e qualquer módulo, ou seja, são globais a todos. A variável M é local ao módulo 3 e visível a apenas estes, assim como a variável Y é local do módulo 2. Figura 27. Escopo de variáveis. 58 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Em outra situação temos a variável X, que é local ao módulo 1, sendo visível também no módulo 2, podendo ser definida relativamente como global ao módulo 2. Em uma situação bastante particular, na qual ocorre um conflito de declaração da variável K (início do algoritmo e interior do módulo 1), assumiremos que sempre que a variável a ser utilizada no interior do módulo será a que foi definida neste, ignoran- do a existência de outra variável de mesmo nome no âmbito global. Temos, então, que os módulos 1 e 2 não enxergam a mesma variável global K vista pelo módulo 3, e sim a variável K definida localmente a 1 e globalmente a 2. 4.4 PROCEDIMENTOS No processo de escrita de algoritmo frequentemente escrevemos instruções que pode se repetir várias vezes ao longo da lógica. Por exemplo, se quisermos calcular a média salarial do Centro de Tecnologia da empresa composta por dois analistas de sistemas da equipe, temos que somar o salário do analista 1 com o salário do analista 2 e dividir por 2. Se tivermos que calcular a média salarial de outra equipe da empre- sa, temos que repetir esse mesmo cálculo: somar os salários e dividir pela quantidade de analistas. Inicialmente, a forma mais simples de resolver esse problema é replican- do esse algoritmo para cada equipe. Imagine se essa empresa possuir mais de 30 setores e decida realizar esse cálculo? A repetição de trechos de código em um programa é considerada uma péssima prá- tica. Imagine que após a replicação deste mesmo trecho de código para os 30 se- tores, é identificado um erro no cálculo. A resposta para a eliminar a repetição de código chama-se: procedimentos e funções. É muito comum o isolamento dos códigos em procedimentos ou funções de acordo com as instruções que se repetem em vários trechos do código. Quando precisarmosexecutar estas instruções repetidas vezes, basta invocar o nome do bloco de código que as contém. A esse bloco de código é que chamamos de procedimentos ou funções. Depois de decompor um problema complexo em subproblemas, podemos criar um procedimento para cada um destes problemas menores. Para delimitar um procedi- mento, utilizaremos os delimitadores procedimento e fim_procedimento. A forma genérica do procedimento é apresentada abaixo (FIG.27). 59 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Figura 28. Algoritmo contendo a declaração do procedimento. O identificador é o nome dado ao procedimento, este deverá ser único e não confli- tante com as demais declarações (como variáveis e tipos). A lista de parâmetros, que pode ser nula ou até mesmo vazia, lista os parâmetros formais do procedimento (de- talhados nas próximas seções). As declarações de variáveis internas correspondem a quaisquer declarações, seja de tipos, variáveis, sub-rotinas e etc. A sequência de ações corresponde às instruções que devem ser executadas para completar o propósito do procedimento. Estes comandos manipulam os parâmetros e as declarações internas para obter-se o resultado desejado. As variáveis, os tipos e as constantes declaradas dentro de um procedimento só são acessíveis dentro dos comandos do procedimento. São chamadas variáveis locais. Dentro do procedimento podem ser utilizadas tanto variáveis locais quanto variáveis globais. Todas as variáveis locais aos procedimentos são alocadas somente quando o procedimento entra em execução, mas são liberadas quando o procedimento ter- mina, perdendo assim, seus conteúdos. Caso seja necessário o aproveitamento dos dados manipulados, o procedimento deverá utilizar as variáveis globais (FIG.28) Figura 29. Algoritmo utilizando chamada de procedimentos. 60 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO 4.5 FUNÇÕES Outro tipo de sub-rotina são as funções. Uma função possui o mesmo objetivo de um procedimento, ou seja, desviar a execução do algoritmo principal para realizar uma tarefa específica, com uma única diferença, uma function sempre retorna um valor. Diferente dos procedimentos, uma função não deverá simplesmente ser chamada, mas deverá ser atribuída à alguma variável. Uma função deve ter um nome e um tipo, e sua sintaxe é mostrada abaixo (FIG. 29) Figura 30. Algoritmo de declaração de função. O nome da função é quem deve assumir o valor da função, como se fosse uma variá- vel. O tipo corresponde ao tipo do valor que será retornado. NOME é o próprio nome dado à função. Já a lista-de-parâmetros-formais, corresponde à lista dos objetos que serão substituídos por outros objetos, fornecidos quando da chamada da função. Assim como nos procedimentos, uma função deve ser definida dentro do espaço de declaração de variáveis do programa. Para que a função possa retornar um valor, este deverá ser explicitamente atribuído ao nome da função, dentro da rotina da fun- ção. A diferença entre procedimentos e funções é unicamente no retorno do bloco de código: funções retornam valores após a execução da sua lista de instruções, procedi- mentos não. Os algoritmos a seguir resolvem o mesmo problema, com uma simples diferença, no algoritmo da Figura 30 é utilizado procedimento, enquanto que na Fi- gura 31 é utilizado função. O resultado dos algoritmos neste caso, é o mesmo. 61 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO Figura 31. Algoritmo com procedimento somar. Figura 32. Algoritmo com função somar. 62 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Para facilitar o entendimento, vamos ver o exemplo a seguir na Figura 32. Figura 33. Algoritmo para calcular a média utilizando função. Agora criamos uma função que calcula a média das notas com base nos parâmetros recebidos, e devolve o valor da média ao invés de fazer a impressão. A função deve ser definida usando o tipo de retorno que ela irá fornecer (no caso do exemplo, valor de tipo real) além dos parâmetros que são opcionais. Dentro do bloco da função, devemos usar uma instrução que indique o valor que será retornado (nas linguagens geralmente a palavra é return para retornar um valor). Em pseudocódigo, a represen- tação usada é de que o nome da função recebe o valor, isso quer dizer que quando chamarmos essa função podemos atribuí-la a uma variável de tipo real, pois ela irá conter um valor de resposta. 4.6 PARÂMETROS FORMAIS Os parâmetros possuem a capacidade de permitir uma solução genérica para o có- digo da sub-rotina e, no momento da chamada, é indicado o (s) argumento (s) sobre o qual as ações serão realizadas. Estes argumentos podem ser tantos constantes ou 63 FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017 Algoritmo e lógicA de ProgrAmAção SUMÁRIO variáveis que serão correspondidos na sub-rotina na mesma ordem em que estão definidos no algoritmo chamador, ou seja, o primeiro argumento corresponde ao pri- meiro parâmetro, o segundo argumento ao segundo parâmetro e assim por diante. Como exemplo do uso de parâmetros em um procedimento, observe a Figura 33, que realiza a troca do valor inteiro de duas variáveis. Figura 34. Algoritmo para troca de valores em duas variáveis. Ao invocar a sub-rotina Troca, supondo valores 15 e 7 para os respectivos parâmetros A e B. Após executar todas as instruções, A valerá 7 e B valerá 15, realizando assim a troca de valores. Uma sub-rotina comunica-se com o algoritmo chamador de duas maneiras: através de passagem e retorno de valores ou modificando os valores que são globais à fun- ção. Estes dois comportamentos distintos para os parâmetros refere-se a passagem por valor ou passagem por referência. 4.6.1 PASSAGEM DE PARÂMETROS POR VALOR Na passagem de parâmetros por valor não existe ligação entre o parâmetro e a variá- vel usada na chamada. Esta variável poderá ser utilizada e alterada dentro da função sem afetar a variável da qual ela foi gerada, pois esta possui sua própria área de me- mória para armazenamento. Ao finalizar a função chamada, todas as variáveis criadas para os parâmetros locais deixam de existir. A passagem de parâmetro por valor é simples e geralmente é a melhor que se encaixa nos casos. Mas em algumas situações pode ser desejável ter uma forma de modificar variáveis externas à uma determinada sub-rotina e, para isso, usa-se a passagem de parâmetros por referência. 64 Algoritmo e lógicA de ProgrAmAção FACULDADE CAPIXABA DA SERRA/EAD Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO Como exemplo do uso da passagem de parâmetro por valor, observe o comporta- mento do procedimento na Figura 34. Figura 35. Algoritmo exemplificando a passagem de parâmetro por valor. O resultado impresso será: “O valor da variável A é”: 3. Observe que na passagem de parâmetro por valor, o valor da variável é copiado para o procedimento, garantindo assim que o seu valor original não sofra modificações caso seja alterado dentro do procedimento. 4.6.2 PASSAGEM DE PARÂMETROS POR REFERÊNCIA Passagem de parâmetros por referência indica que, na sub-rotina, o parâmetro formal é uma referência à variável utilizada no momento da chamada. O termo referência quer dizer que o endereço de memória do parâmetro e da variável é o mesmo. A con- sequência disso é que qualquer modificação realizada no parâmetro formal é refletida também, na variável externa. A principal utilização de
Compartilhar