e-Tec Brasil/CEMF/Unimontes Escola Técnica Aberta do Brasil Informática Algoritmos Marilée Patta Daniel Carli Colares e Silva Ministério da Educação e-Tec Brasil/CEMF/Unimontes Escola Técnica Aberta do Brasil Informática Algorítimos Marilée Patta Daniel Carli Colares e Silva Montes Claros - MG 2011 Presidência da República Federativa do Brasil Ministério da Educação Secretaria de Educação a Distância Ministro da Educação Fernando Haddad Secretário de Educação a Distância Carlos Eduardo Bielschowsky Coordenadora Geral do e-Tec Brasil Iracy de Almeida Gallo Ritzmann Governador do Estado de Minas Gerais Antônio Augusto Junho Anastasia Secretário de Estado de Ciência, Tecnologia e Ensino Superior Alberto Duque Portugal Coordenadores de Cursos: Coordenador do Curso Técnico em Agronegócio Augusto Guilherme Dias Coordenador do Curso Técnico em Comércio Carlos Alberto Meira Coordenador do Curso Técnico em Meio Ambiente Edna Helenice Almeida Coordenador do Curso Técnico em Informática Frederico Bida de Oliveira Coordenador do Curso Técnico em Vigilância em Saúde Simária de Jesus Soares Reitor João dos Reis Canela Coordenador do Curso Técnico em Gestão em Saúde Zaida Ângela Marinho de Paiva Crispim Vice-Reitora Maria Ivete Soares de Almeida ALGORITMOS e-Tec Brasil/CEMF/Unimontes Pró-Reitora de Ensino Anete Marília Pereira Elaboração Marilée Patta Daniel Carli Colares e Silva Diretor de Documentação e Informações Huagner Cardoso da Silva Coordenador do Ensino Profissionalizante Edson Crisóstomo dos Santos Diretor do Centro de Educação Profissonal e Tecnólogica - CEPT Juventino Ruas de Abreu Júnior Projeto Gráfico e-Tec/MEC Supervisão Wendell Brito Mineiro Diagramação Hugo Daniel Duarte Silva Marcos Aurélio de Almeda e Maia Diretor do Centro de Educação à Distância - CEAD Jânio Marques Dias Impressão Gráfica RB Digital Coordenadora do e-Tec Brasil/Unimontes Rita Tavares de Mello Designer Instrucional Angélica de Souza Coimbra Franco Kátia Vanelli Leonardo Guedes Oliveira Coordenadora Adjunta do e-Tec Brasil/ CEMF/Unimontes Eliana Soares Barbosa Santos Revisão Maria Ieda Almeida Muniz Patrícia Goulart Tondineli Rita de Cássia Silva Dionísio AULA 1 Alfabetizaçãoe-Tec DigitalBrasil/CEMF/ Apresentação Unimontes Prezado estudante, Bem-vindo ao e-Tec Brasil/Unimontes! Você faz parte de uma rede nacional pública de ensino, a Escola Técnica Aberta do Brasil, instituída pelo Decreto nº 6.301, de 12 de dezembro 2007, com o objetivo de democratizar o acesso ao ensino técnico público, na modalidade a distância. O programa é resultado de uma parceria entre o Ministério da Educação, por meio das Secretarias de Educação a Distancia (SEED) e de Educação Profissional e Tecnológica (SETEC), as universidades e escola técnicas estaduais e federais. A educação a distância no nosso país, de dimensões continentais e grande diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao garantir acesso à educação de qualidade, e promover o fortalecimento da formação de jovens moradores de regiões distantes, geograficamente ou economicamente, dos grandes centros. O e-Tec Brasil/Unimontes leva os cursos técnicos a locais distantes das instituições de ensino e para a periferia das grandes cidades, incentivando os jovens a concluir o ensino médio. Os cursos são ofertados pelas instituições públicas de ensino e o atendimento ao estudante é realizado em escolas-polo integrantes das redes públicas municipais e estaduais. O Ministério da Educação, as instituições públicas de ensino técnico, seus servidores técnicos e professores acreditam que uma educação profissional qualificada – integradora do ensino médio e educação técnica, – não só é capaz de promover o cidadão com capacidades para produzir, mas também com autonomia diante das diferentes dimensões da realidade: cultural, social, familiar, esportiva, política e ética. Nós acreditamos em você! Desejamos sucesso na sua formação profissional! Ministério da Educação Janeiro de 2010 Algoritmos 5 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital Indicação de ícones Os ícones são elementos gráficos utilizados para ampliar as formas de linguagem e facilitar a organização e a leitura hipertextual. Atenção: indica pontos de maior relevância no texto. Saiba mais: oferece novas informações que enriquecem o assunto ou “curiosidades” e notícias recentes relacionadas ao tema estudado. Glossário: indica a definição de um termo, palavra ou expressão utilizada no texto. Mídias integradas: possibilita que os estudantes desenvolvam atividades empregando diferentes mídias: vídeos, filmes, jornais, ambiente AVEA e outras. Atividades de aprendizagem: apresenta atividades em diferentes níveis de aprendizagem para que o estudante possa realizá-las e conferir o seu domínio do tema estudado. Algoritmos 7 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital Sumário Palavra dos professores conteudistas........................................ 11 Projeto instrucional............................................................ 13 Aula 1 - Construção do conceito de lógica e de algoritmos............. 15 1.1 Conceitos básicos.................................................... 15 Resumo.................................................................... 23 Atividades de aprendizagem............................................ 23 Aula 2 - Tipos de dados, variáveis, expressões matemáticas, sintaxes e semânticas.................................................................... 25 2.1 Tipos de dados....................................................... 25 2.2 Variáveis.............................................................. 27 2.3 Expressões, operadores e funções................................ 31 2.4 Expressões lógicas................................................... 36 2.5 Prioridade na execução das expressões.......................... 37 Resumo.................................................................... 37 Atividades de aprendizagem............................................ 38 Aula 3 - Pseudolinguagem..................................................... 39 3.1 Pseudocódigo......................................................... 39 3.2 Endentação........................................................... 40 3.3 Declaração de variáveis em pseudocódigo....................... 40 3.4 Atribuição de valores às variáveis................................. 41 3.5 Entrada de dados.................................................... 41 3.6 Saída de dados....................................................... 42 Resumo.................................................................... 43 Atividades de aprendizagem............................................ 44 Aula 4 - Comandos sequenciais............................................... 45 4.1 Comando sequenciais................................................ 45 Resumo.................................................................... 52 Atividades de aprendizagem............................................ 53 Aula 5 - Comandos condicionais.............................................. 55 5.1 Condição Simples e condição composta........................... 55 5.2 Condição simples: conectivo condicional se... então........... 57 5.3 Condição composta: conectivo condicional se... então senão.58 5.4 Estrutura condicional - Caso....................................... 62 Resumo.................................................................... 71 Atividades de aprendizagem............................................ 71 Aula 6 - Estruturas de repetição............................................. 73 6.1 Iteração............................................................... 73 6.2 Estrutura de repetição condicional com teste no início.......... 74 6.3 Comandos repetitivos condicionais com teste no final............ 78 Algoritmos 9 e-Tec Brasil/CEMF/Unimontes 6.4 Comandos repetitivos condicionais com contadores............ 81 Resumo.................................................................... 86 Atividades de aprendizagem............................................ 87 Aula 7 - Variáveis homogêneas – Vetores e Matrizes...................... 89 7.1 Vetores................................................................. 89 7.2 Matrizes............................................................... 93 Resumo.................................................................... 96 Atividades de aprendizagem............................................ 96 Aula 8 - Ordenação e pesquisa de dados................................... 101 8.1 Ordenação de Dados................................................ 101 8.2 Pesquisa de Dados.................................................. 103 Resumo...................................................................106 Atividades de aprendizagem...........................................106 Aula 9 - Variáveis heterogêneas – Registros ...............................109 9.1 Registros..............................................................109 Resumo .................................................................. 112 Atividades de aprendizagem........................................... 113 Aula 10 - Arquivos............................................................. 115 10.1 Operações Básicas................................................. 115 10.2 Organização de arquivos.......................................... 115 Resumo .................................................................. 118 Atividades de aprendizagem........................................... 118 Aula 11 - Modularização: procedimentos e funções...................... 119 11.1 Modularização...................................................... 119 11.2 Variaveis locais e Globais......................................... 120 11.3 Parâmetros......................................................... 121 11.4 Procedimentos..................................................... 122 11.5 Função............................................................... 124 Resumo................................................................... 127 Atividades de aprendizagem........................................... 127 Referências..................................................................... 131 Currículo do professor conteudista......................................... 132 e-Tec Brasil/CEMF/Unimontes 10 Informática AULA 1 Alfabetização Digital Palavra dos professores conteudistas Amigo(a) estudante, A disciplina “Algoritmos” do curso “Técnico em Informática” propõe ao indivíduo, o desenvolvimento de competências e habilidades para a resolução de problemas nas diversas atividades da área de Informática e, como objetivo principal, auxilia o aluno a aplicar o pensamento lógico-matemático nas atividades de programação de computadores. Assim, ao desenvolver cada unidade de ensino, podemos perceber a importância do conteúdo estudado, não só para a disciplina de Algoritmo, mas para as demais disciplinas do curso. Deem devida atenção à teoria aqui estudada e resolvam os exercícios de cada unidade. Caro aluno, Algoritmo é uma disciplina desafiadora que instiga e encanta quando se obtém o entendimento dos recursos que podem ser utilizados para a resolução dos problemas computacionais. Reforça-se aqui a ideia de que, só se aprende algoritmos resolvendo muitos exercícios. Bom trabalho e aproveitem seu tempo! Algoritmos Marilée Patta Daniel Carli C e Silva 11 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital Projeto instrucional Disciplina: Algoritmos (carga horária: 120 horas). Ementa: Lógica. Variáveis e tipos de dados. Pseudolinguagem. Sequência simples. Estrutura Condicional (simples e composta). Estrutura de repetição. Variáveis homogêneas. Variáveis heterogêneas. Registros. Procedimentos. Funções. OBJETIVOS DE APRENDIZAGEM MATERIAIS CARGA HORÁRIA 1. Construção do conceito de lógica e de algoritmo - Entender o pensamento lógico e perceber a sua aplicação nos problemas cotidianos; - Aplicar a lógica para produzir detalhamento de comandos computacionais. - 5h 2. Tipos de Dados, Variáveis, Expressões Matemáticas, sintaxes e semanticas - Conhecer o conceito de variáveis e quais são os tipos de dados básicos; - Definir e compreender o uso de variáveis; - Aplicar o uso de expressões e operadores; - Compreender, identificar e aplicar a sintaxe e a semântica. - 10 h 3. Pseudolinguagem Conhecer a pseudolinguagem utilizada na construção de algoritmos para ser aplicada em qualquer linguagem de programação. - 5h 4. Comandos Sequenciais Entender a estruração sequencial dos comandos escritos na pseudolinguagem. - 5h 5. Comandos Condicionais Compreender e aplicar as possibilidades de testes condicionais simples e compostos. - 5h 6.Comandos de repetições Iterações Compreender e aplicar as possibilidades de produzir laços de comandos repetitivos. - 20 h - Utilizar variáveis que podem armazenar vários conteúdos ao mesmo tempo na memória; - Utilizar índices para acesso aos dados das variáveis. - 20 h Utilizar variáveis que podem armazenar persistentemente tipos distintos de dados. - 20 h Dividir o algoritmo em módulos, funções e procedimentos. - 20 h AULA 7. Variáveis homogêneas: vetores e matrizes 8. Variáveis Heterogêneas: Registros e arquivos 9. Procedimentos e Funções Algoritmos 13 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital do conceito de lóAula 1 - Construção gica e de algoritmos Objetivos - Entender o pensamento lógico e perceber a aplicação do mesmo nos problemas cotidianos; - Aplicar a lógica para produzir detalhamento de comandos computacionais. 1.1 Conceitos básicos O estudo se inicia abordando alguns conceitos que são fundamentais para sua formação como Técnico em Informática. Vamos apresentar a Lógica, o Algoritmo, os Dados e a Informação, os Dados de Entrada e Saída, para mostrar a você o princípio do funcionamento do Processamento de Dados que utiliza a Lógica de Programação. Você vai perceber que os problemas que utilizamos nesta unidade são encontrados em seu cotidiano. Tal fato pode colaborar para iniciarmos um processo de raciocínio. Assim, vamos procurar identificar o problema e os componentes necessários para sua resolução. 1.1.1 Lógica Toda vez que você vai resolver um determinado problema, usa o pensamento lógico de forma intuitiva. Por exemplo, quando vai atravessar a rua, o que você pensa? Um modelo de pensamento lógico pode ser: se vier carro do lado direito ou do lado esquerdo, então espero os carros passarem. Ainda assim, volta a conferir se a rua está mesmo liberada em ambos os lados para que ande, de forma segura, até o outro lado da rua e suba no passeio. Se não for assim, continua esperando, até que as condições para atravessar a rua sejam propícias. Talvez você pense: “isso é lógico” !!! Assim, podemos formular os seguintes passos: Se vem carro do lado direito e do lado esquerdo da rua, então espero. Senão, atravesso. Algoritmos 15 Mas o que você tem que perceber é que esse pensamento possui várias inferências nas quais você se informa com as visões possíveis para detectar se pode tomar a decisão e, portanto, executar a ação. e-Tec Brasil/CEMF/Unimontes Em geral, as pessoas dizem: “isso é lógico, é lógico que tenho conhecimento”, ou ainda, “é lógico que isso não daria certo”. Mas o que é lógica, afinal? Você pode responder? Um sistema lógico é um conjunto de axiomas e regras de inferência que visam representar formalmente o raciocínio válido, dedutivo ou indutivo. O pensamento dedutivo se caracteriza por apresentar conclusões que devem, necessariamente, ser verdadeiras caso todas as premissas sejam verdadeiras. Já o pensamento indutivo significa partir de premissas particulares na busca de uma lei geral, universal. Vamos mostrar um exemplo de pensamento dedutivo e outro de pensamento indutivo. Podemos então concluir que a Lógica é a ciência das formas do pensamento. A Lógica estuda a correção do raciocínio, visto que ele é a forma mais complexa do pensamento. Podemos dizer que a Lógica visa à ordem da razão, isto é, a razão pode funcionar desordenadamente e a lógica estuda e ensina a colocar ordem no pensamento. Bem, vamos mostrar a origem da palavra lógica. Ela vem do grego clássico - λογική - logos, que significa palavra, pensamento, ideia, argumento, relato, razão lógica ou princípio lógico. A Lógica foi criada pelo filósofo grego Aristóteles no século IV a.C. para estudar o pensamento humano e distinguir interferências e argumentos certos e errados. A Lógica é uma ciência de índole matemática, fortemente ligada à Filosofia. É também a designação para o estudo de sistemas prescritivos de raciocínio, ou seja, sistemas que definem como se “deveria” realmente pensar para não errar, usando a razão, dedutivamente e indutivamente. Todo homem morre João é homem Portanto, João morre O ferro conduz eletricidade O ferro é metal O ouro conduz eletricidade O ouro é metal O cobre conduz eletricidade O cobre é metal Logo: os metais conduzem eletricidade. Observamos que a indução pode trazer resultados falsos. Veja o exemplo abaixo: O cavalo, o burro e a mula são quadrúpedes. O cavalo, o burro e a mula são mamíferos. Logo: Todos os mamíferos são quadrúpedes. Muito bem! Agora que você já sabe o que é lógica e a aplicação da mesma nos problemas cotidianos, vamos refletir: qual a relação entre a lógica e o algoritmo? 1.1.2 Algoritmos Você já ouviu falar de algoritmos??? Não!!! Você usa algoritmos todos os dias! Pense bem! Como fazer para fritar um ovo? Passo 1) Vá até a geladeira Passo 2) Se a porta estiver fechada, então abra Passo 3) Pegue o ovo e-Tec Brasil/CEMF/Unimontes 16 Informática Passo 4) Feche a geladeira Passo 5) Pegue a frigideira Passo 6) Pegue o óleo Passo 7) Pegue o sal Passo 8) Coloque a frigideira no fogão e ascenda o fogo Passo 9) Coloque o óleo e o sal na frigideira Passo 10) Espere esquentar Passo 11) Quebre o ovo batendo-o na beira da frigideira e coloque dentro da mesma Passo 12) Espere tostar o ovo por baixo Passo 13) Vire o ovo Passo 14) Tire o ovo da frigideira e coloque num prato (prato????) Você pegou o prato?? Onde estava??? Passo 15) Desligue o fogo ........ Agora é com você!!! Relacione os passos detalhados para se obter um ovo frito. Assim, pode-se entender que algoritmo é um conjunto de ações detalhadas, devidamente pensadas de forma lógica, visando obter um resultado final. A prática do desenvolvimento do algoritmo resulta no aprimoramento do raciocínio lógico, que indica, logicamente, como cada tarefa é realmente executada, passo a passo. Mas, qual seria a relação existente entre algoritmos e a lógica de programação? Nós usamos a lógica para a construção dos passos finitos que são designados a resolver um determinado problema. Assim, para construir algoritmos temos que pensar de forma lógica. Dê exemplos de algoritmos que você utiliza para resolver seus problemas. E pra que serve a lógica de programação ??? Vamos responder mais adiante a essa questão. Você já ouviu falar de automação? Você se lembra o que é automação? Vivemos num mundo em que automação se torna presente na nossa vida. Quando necessitamos realizar uma transferência bancária, da nossa casa, podemos usar um computador com acesso à internet, e entrar no site do banco, e realizar a transferência de valores de uma conta para outra. Assim, podemos perceber que todas as transações bancárias, como depósitos, verificação de saldos e extratos, aplicação financeira, etc., são frutos do processo de automação bancária. Algoritmos 17 Farrer et al. (1999) mostram que Algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações. Para SALIBA (1993), Automação é um processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por máquinas, não importando se estas máquinas são mecânicas ou eletrônicas O objetivo maior da automação é que o resultado de uma tarefa possa ser conhecido ou obtido várias vezes no mesmo intervalo de tempo e com a mesma qualidade. e-Tec Brasil/CEMF/Unimontes Você percebe a automação em outras atividades? Vamos refletir como as áreas abaixo relacionadas se inserem na automação: 1) Medicina 2) Educação 3) Governo 4) Comércio 5) Indústrias 6) Polícia 7) Hospitais 8) etc... Faça uma pesquisa e descubra em quais cursos a disciplina de algoritmos é ministrada. Divulgue no AVEA. Assim, para que a automação seja possível, devemos entender o que é processamento de dados 1.1.3 Processamento de dados Toda vez que nos referimos ao um determinado tipo de processamento de dados, estamos também falando de algoritmos e de estruturas de dados. Há processamento de dados quando, por exemplo, necessitamos calcular a média da turma obtida na disciplina de algoritmos. Mas, pra você, o que significa processamento de dados? Assim, para se obter a saída diferente da entrada, devemos submeter os dados a um processo de transformação. Lembre-se, todo processamento transforma os dados. O processamento de dados constitui-se basicamente de três etapas: entrada de dados, processamento e saída. EntradaprocessamentoSaída Vamos relembrar o exemplo do cálculo da média descrito anteriormente. Quais seriam os dados de entrada? Quais seriam os dados de saída? Assim, se a turma tem 100 alunos que possuem notas, as notas dos 100 alunos seriam a entrada de dados. Observe o trecho do algoritmo que trata da entrada de dados: ...... Ler nota.aluno1 Ler nota.aluno2 Ler nota.aluno 3 ....., Ler nota. aluno 100 Observe o trecho do algoritmo que trata do processamento: Soma = soma + nota.alunoxx e-Tec Brasil/CEMF/Unimontes 18 Informática Observe o trecho do algoritmo que trata da saída de dados Imprima (“A Média da turma é =”, soma/ 100) Assim, a lógica de programação é aplicada para submeter os dados a ações que os transformam de dados de entrada, para dados de saída. Nos processos diversos de automação, quando se utiliza computadores e sistemas computacionais para auxiliar ou desenvolver determinadas tarefas, o que se pretende é produzir informação suficiente aos usuários para as suas tomadas de decisão. Assim, podemos dizer que o dado é a matéria-prima da informação, ou seja, a informação é composta de um conjunto organizado de dados. O dado puro e simples não carrega obrigatoriamente nenhum caráter informativo. Porém, aquele dado com caráter informativo pode se confundir com a informação. Com base em suas reflexões, cremos que já é possível você descrever alguns exemplos de dados e de informação. 1.1.4 Lógica de programação A lógica de programação é composta de instruções as quais os dados serão submetidos. Mas, o que significa instrução? As atividades pertinentes á programação de computadores, quando nos é dado um problema, o primeiro passo é entender o que se quer produzir, o que se quer obter. Assim, devemos pensar nos dados que necessitamos trabalhar para se definir a sequência de instruções para transformar os dados de entrada em dados de saída e assim obter a solução do problema. Quando os dados de saída trouxeram algum significado ao receptor, mudando seu estado de conhecimento e dando a ele condições de decidir, então, o que se produziu foi informação. A palavra informação vem do latim informatio, onis, (“delinear, conceber ideia”) que deve atribuir “dar forma útil”, significado ao(s) dado(s). Instrução pode ser considerada um conjunto de regras ou normas definidas para a realização de uma tarefa. Em informática, instrução é a informação que indica a um computador uma ação elementar a executar. Agora, para que você exercite seus conhecimentos sobre lógica de programação, vamos lhe propor um desafio. Você conhece o Jogo da Torre de Hanói? Nesse jogo, teremos três hastes que chamaremos de haste origem, haste destino e haste temporária e 3 discos de tamanhos diferentes posicionados inicialmente na haste origem. Os discos estão dispostos na ordem de tamanho, de forma que o maior disco fique embaixo, em seguida, o segundo maior, e assim por diante. O objetivo deste jogo é movimentar os discos da haste origem para a haste destino, utilizando a haste temporária como auxiliar. Nenhum disco pode ser colocado sobre um disco menor. Bem, uma possível resposta seria: Mova o disco 1 da haste O para a haste D. Mova o disco 2 da haste O para a haste T. Mova o disco 1 da haste D para a haste T. Algoritmos 19 e-Tec Brasil/CEMF/Unimontes Mova Mova Mova Mova Faça uma pesquisa sobre o algoritmo torre de Hanói quando o mesmo utiliza 5 hastes para a troca de discos. Troque idéias com seus colegas no AVEA. o o o o disco disco disco disco 3 1 2 1 da da da da haste haste haste haste O para a haste D. T para a haste O. T para a haste D. O para a haste D. Resolvido o problema da torre de Hanói, vamos verificar alguns exemplos de instrução Faça A = B; Faça B = C; Faça D = 0; Faça F = ((A * B) ** D) / C Imprima (F); A = 1; B = 1: C = 1; D = 0; F = ((1*1)**0)/1 F=1 A = 2; B = 2; C = 2; D = 0; F = ((2*2)**0)/2 F = 1/2 X1 = (-B+( (SQRT(B**2) – (4*A*C))/2*A X2 = (-B-( (SQRT(B**2) – (4*A*C))/2*A Imprima (X1,X2) INÍCIO Ando até a porta; Se a porta está fechada então abro a porta Senão saio e fecho Fim se; Se alunos fora da sala então aguardo a entrada dos alunos em sala Início os trabalhos Fim. Vamos agora analisar um algoritmo genérico escrito em uma pseudolinguagem (a pseudolinguagem ou pseudocódigo será estudado na unidade 3): e-Tec Brasil/CEMF/Unimontes 20 Informática INÍCIO LEIA (o problema proposto); ENQUANTO não houver entendimento FAÇA LEIA (o problema proposto); FIM ENQUANTO; Desenvolver raciocínio; ENQUANTO raciocínio não finalizado FAÇA Desenvolver raciocínio; FIM ENQUANTO; Testar a solução implementada; ENQUANTO não fim de teste FAÇA Teste a solução proposta; FIM ENQUANTO; SE a solução estiver correta ENTÃO mostra a solução; SENÃO mostra relatórios de erros; FIM SE; FIM. 1.1.5 Descrição narrativa Você sabe o que é descrição narrativa? Quando nos deparamos com a necessidade de automação de qualquer atividade, devemos buscar entender o problema analisando-o detalhadamente. Por meio desta análise, é possível identificar alguns dos passos que devem ser seguidos e respeitados para que seja possível a resolução da situação-problema. Esses passos compõem dados de estudo do problema e servirá como base para a construção da Descrição Narrativa de como o problema deve ser resolvido. Em geral, os usuários passam, de forma oral ou escrita, às necessidades de suas atividades. Não conseguir identificar aquilo que se pede (problema), o que se espera obter (dados de saída), o que será necessário para o processamento (dados de entrada) e a maneira de processar esses componentes dificulta muito ou mesmo inviabiliza o processo de resolução. Portanto, aproveitamos para destacar a importância do exercício diário da leitura, seja no contexto escolar, seja no profissional, seja no lar. Mediante o hábito da leitura, firmamos ainda mais a compreensão ou interpretação do que lemos e essas competências são fundamentais para todas as áreas do conhecimento, não somente quando tratamos da Língua Portuguesa, como equivocadamente pensam muitos estudantes. Algoritmos 21 Pode-se perceber que um dos maiores desafios enfrentados, para a construção de algoritmos, é a interpretação de textos. Geralmente não se conseguem textos objetivos de forma a elucidar o problema em questão. Há também redundâncias, controvérsias, falta de conhecimento sobre o assunto, e demais problemas existentes no processo de comunicação. e-Tec Brasil/CEMF/Unimontes Nos casos descritos, a seguir, nos próximos tópicos, por exemplo, você precisará interpretar o texto para identificar os elementos necessários à sua resolução. Portanto, exercite a leitura e verá como isso poderá ajudá-lo não somente em informática, mas em todas as áreas do conhecimento, ok? Na descrição narrativa, podemos observar três tipos de resoluções de problemas: sequencial, condicional e repetitiva. Vamos pensar num exemplo bastante simples. Para ilustrar a resolução sequencial de problemas, inicialmente vamos pensar numa criança atravessando a rua em companhia de seu pai: 1. pai pega a mão da criança 2. pai caminha com a criança até o outro lado da rua Para ilustrar a resolução condicional, agora vamos pensar numa criança atravessando uma rua em companhia de seu pai, considerando a possibilidade de estar no colo: 1. Se a criança é de colo então a. pai pega a criança no colo b. pai caminha com a criança no colo até o outro lado da rua 1. senão a. pai pega dá a mão para a criança b. pai caminha com a criança até o outro lado da rua Por fim, para ilustrar a resolução repetitiva de problema, vamos pensar num grupo de crianças atravessando a rua em companhia de um responsável, considerando a possibilidade de estar no colo: 1. Enquanto ainda existir criança para atravessar a rua 2. Se a criança é de colo então c. pai pega a criança no colo d. pai caminha com a criança no colo até o outro lado da rua 3. senão a. pai pega dá a mão para a criança b. pai caminha com a criança até o outro lado da rua 4. pai volta para o outro lado da rua. e-Tec Brasil/CEMF/Unimontes 22 Informática Resumo Chegamos ao final desta unidade, em que você teve a oportunidade de identificar o que é Lógica e a sua importância para se aprender algoritmo. Você estudou o conceito de algoritmo e automação. Pôde verificar o que é dado e informação, e a relação entre esses dois conceitos, enfatizando os dados de entrada e de saída. Percebeu como é importante entender o problema em geral e seus componentes. Assim, pode compreender o que é Processamento de Dados e em que a lógica de programação influencia no mesmo. Além disso, pôde entender o que é instrução e como as instruções podem ser organizadas: sequencial, condicional e repetitiva. Você deve ter percebido, pelo estudo desta unidade, que falamos um pouco sobre os conceitos básicos que envolvem as técnicas de programação. São noções que precisam ser compreendidas de modo significativo para uma futura compreensão de toda a lógica envolvida nos processos de programação na área da Informática. Bem, agora que você já teve contato com as primeiras conceituações, podemos dar um passo adiante! Realmente, esperamos que nossa conversa nesta unidade tenha fornecido a você os subsídios mínimos para continuidade do trabalho! Mas, se ainda restam dúvidas, leia esta unidade quantas vezes julgar necessário. Lembre-se sempre de que você é capaz! Vamos para a unidade II! Atividades de aprendizagem 1) Como vimos na primeira unidade, a lógica vem da Filosofia e é considerada a base para a construção de algoritmos e assim propor soluções para problemas computacionais. Mostre como a Filosofia auxilia na aplicação da lógica de programação. 2) O que você pode construir usando a lógica de programação? 3) Como a lógica influencia na automação de processos? 4) Cite 5 atividades automatizadas que você tem contato. 5) Quais as atividades que compõem o processamento de dados? Crie um exemplo que retrate tais passos. Algoritmos 23 e-Tec Brasil/CEMF/Unimontes 6) Faça uma distinção entre dado e informação. 7) As instruções são componentes da lógica de programação. O que você entende por instrução? 8) Como a descrição narrativa influencia no processo de construção de algoritmos? 9) Quais problemas podem ser encontrados na descrição narrativa? 10) Faça um resumo dos itens estudados na unidade 1. e-Tec Brasil/CEMF/Unimontes 24 Informática AULA 1 AulaAlfabetização 2 - Tipos deDigital dados, variáveis, expressões matemáticas, sintaxes e semânticas Na unidade anterior, mostramos a você os conceitos básicos para o ingresso ao processo de resolução de problemas enfatizando o raciocínio lógico. Para ingressar nas atividades de desenvolvimento de algoritmos com o uso de pseudocódigo, nesta unidade, você terá contato com conceitos de tipos de dados, variáveis e expressões matemáticas. Assim, por meio do estudo desta unidade, esperamos que você seja capaz de: • Compreender o que são e quais são os tipos de dados básicos; • Definir e compreender o uso de variáveis; • Conhecer a definição e o correto uso de expressões e operadores; • Compreender, identificar e aplicar sintaxe e semântica. 2.1 Tipos de dados Quando falamos em tipos de dados, estamos também falando de conceito de domínio. Tal conceito está ligado à limitação do conjunto de valores que um determinado dado pode conter. Quando vamos programar em uma linguagem de programação, a mesma já tem seus próprios tipos de dados, ou seja, a delimitação de valores que processa. Devemos observar que o tipo de dado está relacionado ao tipo de informação que nela estão contidos. Lembramos que a classificação aqui estudada não se aplica a nenhuma linguagem de programação específica, pois a ideia é mostrar, de forma sintetizada, os padrões utilizados na maioria das linguagens. 2.1.1 Dados numéricos Os dados numéricos são divididos, basicamente, em dois grandes conjuntos: inteiros e reais. Números inteiros são aqueles que não possuem componentes decimais ou fracionários, podendo ser positivos ou negativos. Esse é fácil! Quer ver alguns exemplos? Vamos lá! Algoritmos 25 e-Tec Brasil/CEMF/Unimontes 144 é um número inteiro positivo 0 é um número inteiro - 4 é um número inteiro negativo Os dados de tipo Real são aqueles que podem possuir componentes decimais ou fracionários, podendo também ser positivos ou negativos. Vamos pensar.... Bem, agora vejamos... Podemos citar como exemplos de dados de tipo real: 144.01 é um número real positivo com duas casas decimais 180. é um número real positivo com zero (nenhuma) casa decimal - 16.9 é um número real negativo com uma casa decimal 0.0 é um número real com uma casa decimal 0. é um número real com zero (nenhuma) casa decimal. É importante observar que há uma diferença entre 0, que é um dado do tipo inteiro, e 0. ou 0.0, que são dados do tipo real. Portanto, a simples existência do ponto decimal serve para diferenciar um dado numérico do tipo inteiro de um tipo real. Você sabe dizer alguns exemplos relativos ao tipo de dados numérico? Podemos citar, por exemplo: Matricula do aluno Salário Quantidade de material em estoque Número de filhos Média da turma Etc... Agora é com você!!! Em frente de cada exemplo citado, classifique como inteiro ou real. 2.1.2 Dados literais Você já ouviu falar em dado literal, caractere ou string? O tipo de dados literal é constituído por uma sequência de caracteres com letras, dígitos e/ou símbolos especiais. Esse tipo de dado é também muitas vezes chamado de alfanumérico, cadeia de caracteres ou, ainda, String. Usualmente, os dados literais são representados nos algoritmos pela coleção de caracteres, delimitada em seu início e término com o caractere aspas (“). É comum, em algumas linguagens, a diferenciação entre a representação de um único dado literal, que é chamado de caractere (por exem- e-Tec Brasil/CEMF/Unimontes 26 Informática plo: ‘M’) com o uso de aspas simples e um conjunto de caracteres, chamado de String (por exemplo: “Oi, estou no e-tec Brasil”) com o uso de aspas duplas. Você sabia que na Linguagem C e Java há essa diferença? O dado do tipo literal possui um comprimento dado pelo número de caracteres nele contido. Veja os exemplos: 1)”QUEM ?” - Literal de comprimento 6 2)”QUEM ?” - Literal de comprimento 5 3)” “ - Literal de comprimento 1 4)”[email protected]” - - Literal de comprimento 15 5)”4+5-1=” - Literal de comprimento 6 6) “1” - Literal de comprimento 1 Não se confunda ao analisar os exemplos 5 e 6. Se o conteúdo estiver entre aspas num dado do tipo literal, então, não importa se é composto de números, letras, caracteres especiais. É um dado do tipo literal. Podemos citar, por exemplo: Nome do aluno Endereço Nome do produto Descrição do produto Etc... Você sabe dizer alguns exemplos relativos ao tipo de dados literal? 2.1.3 Dados lógicos Nos dados lógicos, cada dado pode ser representado apenas por dois valores: verdadeiro ou falso. É bom lembrar que o dado do tipo lógico serve como dado de controle, um sinalizador para que o algoritmo execute ou não um conjunto de instruções. Você sabe dizer alguns exemplos relativos ao tipo de dados do tipo Ele é chamado por alguns de tipo booleano, devido à contribuição do filósofo e matemático inglês George Boole na área da lógica matemática. logico? Impresso – s/n Processado – s/n Encontrado – s/n 2.2 Variáveis Uma variável é um local na memória RAM (Randomic Access Memory) do computador, um endereço que armazena um conteúdo do tipo numérico, literal ou lógico para o processamento dos dados. Por que se chama variável? Algoritmos 27 Faça uma pesquisa e descubra se existe relação matemática entre os conceitos dos tipos de dados numéricos e dê a sua opinião. Discuta com seus colegas no AVEA. e-Tec Brasil/CEMF/Unimontes A cada novo processamento submetido, os valores de conteúdos dos espaços de memórias sofrem alterações. A cada novo processamento, o espaço de memória alocado para o armazenamento de variáveis, passa a ter um novo conteúdo. Uma vez definidos o nome e o tipo de uma variável, não podemos alterá-los no decorrer de um algoritmo. Por outro lado, o conteúdo da variável é um objeto de constante modificação no decorrer do programa, de acordo com o seu fluxo de execução. Para facilitar a programação, é permitido que se atribua nome a esse endereço e esse nome é definido como variável. Assim, podemos criar as variáveis com os seus conteúdos como a seguir: A = 2; B = A; A = A + B; C = D * F; Contador = Contador + 1; Num = 0; Para atribuir valores a uma variável, usaremos o símbolo de atribuição ← ou := ou =, como mostram o exemplos a seguir. Nos três primeiros casos, a variável A recebe o conteúdo da variável B. Nos quarto e quinto exemplos, a variável B recebe o resultado da expressão matemática. 1) A ← B; 2) A = B; 3) A := B; 4) B ← C * 2 + 1; 5) B = C * 2 + 1; Quando formos dar nome às variáveis, faz-se necessário seguirmos algumas regras: • O primeiro caractere é uma letra; • Se houver mais de um caractere, só poderemos usar: letra ou algarismo; • Nomes de variáveis escritas com letras maiúsculas serão diferentes de letras minúsculas; • Nenhuma palavra reservada à ferramenta (linguagem de • programação) poderá ser usada como nome de uma variável; • Procure dar nomes representativos para a variável. Lembre-se de que ao ler seu nome, é importante saber o que ela contém. É bom ressaltar que o algoritmo tem uma estrutura bem definida, como a seguir: e-Tec Brasil/CEMF/Unimontes 28 Informática Início Declaração de variáveis Inicialização de variáveis Procedimento lógico Entradas Processamento Exibição dos resultados Fim Você pode perceber que as variáveis são definidas no início, pois isso permite a alocação (reserva) de uma área na memória (endereço) para a variável. Outro objetivo da declaração de variáveis é que, após a declaração, o algoritmo sabe os tipos de operação que cada variável pode realizar. Algumas operações só podem ser realizadas com variáveis do tipo inteiro. Outras só podem ser realizadas com variáveis dos tipos inteiro ou real, e outras só com variáveis de caractere, entre outras que serão vistas. 2..2.1 Declaração de variáveis As variáveis e estruturas de dados a serem utilizadas para o processamento de um determinado problema devem ser definidas no algoritmo. Essa definição implica em alocar um espaço de memória específico para processar o conteúdo de cada variável. Uma declaração de uma variável corresponderá a criação de locais na memória rotulada com o nome da variável, sendo esse o identificador do local criado na memória e marcada com o tipo de valores que pode conter. O levantamento e o estudo do problema fornecem uma visão inicial de quais variáveis serão necessárias para o desenvolvimento do algoritmo. Muitas vezes, no decorrer do desenvolvimento do algoritmo, faz-se necessária, a criação e definição de algumas variáveis, além daquelas definidas no seu início, quando no entendimento do problema. Toda variável primitiva deve ser definida, conforme sintaxe abaixo: Tipo: V1, V2,...,Vn; Vejamos o exemplo a seguir: Inteiro : x1; (valores inteiros) Real: a,b; (Valores (reais) Caractere: nome; (caracteres ou string) Lógico: verdadeiro (falso ou verdadeiro) Para declarar as variáveis que serão utilizadas no processamento, devemos saber claramente, qual é o objetivo do algoritmo que estamos construindo, interpretando o problema em questão. Algoritmos 29 e-Tec Brasil/CEMF/Unimontes Assim, devemos retirar das especificações, quais dados serão produzidos, quais são as entradas necessárias e quais são as variáveis temporárias utilizadas para auxiliar o processamento. Que tal observarmos alguns exemplos para tornar ainda mais clara essa ideia? Vamos lá... Problema 1 Faça um algoritmo que escreva o valor total da compra composta de produtos com código, quantidade e preço de oito produtos. Inteiro: código; Real: quantidade, preço, valor total; Caractere: nome.produto; Problema 2 Faça um algoritmo que apure o valor da multa, caso o cliente faça o pagamento em atraso. Real: valor.conta, taxa.multa, valor.multa, valor.total; Problema 3 Um motorista percorre uma rota em km. Ao chegar ao seu destino, a empresa deseja saber a quantidade de metros percorridos na viagem. Real: km, Metros; Você pode observar que a identificação de variáveis e de seus tipos é, na maioria das vezes, um trabalho muito fácil, pois basta identificá-los no enunciado. O que ocorre também com grande frequência é a identificação de algumas variáveis necessárias apenas durante a resolução do algoritmo, mas isso não é problema. Ao perceber a necessidade de tais variáveis, elas devem ser inseridas à lista já existente, relacionando-as ao seu tipo respectivo. Assim, ao utilizarmos a pseudolinguagem Portugol, temos 4 tipos primitivos de variáveis. São eles: Faça uma pesquisa para investigar se há algum software que faça o mapeamento de variáveis em tempo de execução de um processo algorítmico. Inseria os resultados no AVEA e discuta com seus colegas. Inteiro – qualquer número inteiro negativo, nulo ou positivo. Ex: 2 , 5, -4, 0; Real – qualquer número real negativo, nulo ou positivo. Ex: -5, 30.5, 0, 40; Caractere – qualquer conjunto de caracteres alfanuméricos. Ex: “João”, “xyz”, “manga”, “a122”; Lógico – conjunto de valores falso ou verdadeiro. Ex: sim ou não, 1 ou 0. e-Tec Brasil/CEMF/Unimontes 30 Informática 2.3 Expressões, operadores e funções Para que possamos realizar os cálculos matemáticos, devemos construir as expressões matemáticas ou fórmulas. Em cada expressão, o conjunto de variáveis e constantes numéricas se relaciona por meio de operadores, que, ao ser processada, resulta em um valor. Para entendermos como as expressões são montadas e executadas, devemos ter alguns conceitos. Que tal buscarmos o entendimento em relação aos Operadores? Nas expressões, os operadores atuam sobre os operandos para produzir resultado. Veja um exemplo bem simples: 10 – 2 = 8 10 e 2 são operandos - é um operador Veja como os operadores podem ser classificados: 1) binários: operações matemáticas simples nas quais o operador envolve dois algarismos. Veja o exemplo: 24 - 22 04 + 01 2) unários: o operador somente se encarrega de informar se o número é positivo ou negativo. Veja o exemplo: -48 -1,1418 2.3.1 Expressões aritméticas Somente é permitido o uso de operadores aritméticos e de variáveis numéricas em expressões deste tipo. Além disso, os operadores têm uma ordem de execução, como mostra o quadro 1. QUADRO 1 Operadores aritméticos Operador Tipo Operação Prioridade Exemplo + Unário Mantém sinal 1 -(-2) = 2 - Unário Inverte sinal 1 +2=2 ** ou ^ Binário Exponenciação 2 4**2 = 16 * Binário Multiplicação 3 4*2= 8 / Binário Divisão 3 4/2 = 2 + Binário Soma 4 4+4=8 - Binário Subtração 4 6 - 8 = -2 Fonte: Adaptado de Farrer, Harry, eT AL (1999, pg.33) Algoritmos 31 e-Tec Brasil/CEMF/Unimontes Mas, preste atenção !!! A prioridade entre operadores define a ordem em que eles devem ser avaliados dentro de uma mesma expressão. Quando há dois ou mais operadores de mesma prioridade em uma expressão, a execução se dá da esquerda para a direita. Todas as operações internas aos parênteses são primeiramente executadas. Depois é obedecida a ordem de prioridade dos operadores aritméticos. Observe as expressões abaixo: 1) A * B * C / (D*E*F) (A*B*C)/(D*E*F) 2) A*B/C*D/E*F(((A*B)/(C*D)/E)*F 3) A**B**C(A**B)**C 4) A/B/C/D((A/B)/C)/D 5) X> Y ou Q (A>Y) ou Q 6) A+B < C (A+B) < C Vamos atribuir valores ás variáveis: A= 2, B= 4, C= 2, D=8, E = 4, F = 2. Vamos substituir as variáveis pelos seus respectivos valores tanto na primeira como na segunda expressão, segundo o exemplo apresentado em 1, como mostra o quadro 2. QUADRO 2 Exemplo de prioridade de execução Prioridade de Execução A * B * C / (D*E*F) Resultado (D*E*F) 64 A*B*C 16 16/64 0.25 Prioridade de Execução (A*B*C)/(D*E*F) Resultado (A*B*C) 16 (D*E*F) 64 16/64 2.25 Fonte: Própria. Podemos observar que no exemplo estudado anteriormente, não houve alteração nos resultados. Bem, vamos continuar nossa analise. Vamos substituir as variáveis pelos seus respectivos valores (A= 2, B= 4, C= 2, D=8, E = 4, F = 2) tanto na primeira como na segunda expressão, segundo o exemplo apresentado em 2, como mostra o quadro 3. e-Tec Brasil/CEMF/Unimontes 32 Informática QUADRO 3 Exemplo de prioridade de execução Prioridade de Execução A*B/C*D/E*F Resultado A*B 8 8/C 4 4*D 32 32/E 8 8*F 16 Prioridade de Execução (((A*B)/(C*D)/E)*F Resultado (A*B) 8 (C*D) 16 8/16 0.5 0.5/E 0.125 0.125*F 0.25 Fonte: Própria. Agora é com você !! As expressões acima se diferenciam em função dos parênteses inseridos em seus termos. Atribua valores diferentes dos anteriormente apresentados às variáveis da primeira e da segunda coluna e verifique o que acontece com os resultados. Veja bem. Em função dos parênteses inseridos na segunda expressão do exemplo, os resultados foram drasticamente alterados. 2.3.2 Operadores lógicos Além dos operadores aritméticos, também dispomos dos operadores lógicos para elaborar as nossas expressões. O quadro 4 mostra os operadores lógicos. QUADRO 4 Operadores lógicos Operador Descrição Tipo Prioridade Ou ou v Disjunção Binário 3 E ou ^ Conjunção Binário 2 Não ou Negação Unário 1 Fonte: Adaptado de Farrer, Harry, eT AL (1999, pg.36). Algoritmos 33 e-Tec Brasil/CEMF/Unimontes 2.3.3 Operadores relacionais Veja bem! Para criarmos nossas expressões condicionais, devemos utilizar os operadores relacionais como mostra o quadro 5. QUADRO 5 Operadores relacionais Operador Descrição = Igual # <> Diferente > GT Maior < LT Menor >= GE Maior ou igual <= LE Menor ou igual Fonte: Forbellone, Andre Luiz Villar (2005, P 21). Vamos agora passar a você alguns exemplos de operadores relacionais, como mostra o quadro 6. QUADRO 6 Exemplos de operadores relacionais Exemplo Valor Questionamento Resultado A<>B A= 3 e B = 4 A é diferente de B? verdadeiro A<>B A= 3 e B = 3 A é diferente de B? Falso X=1 X=2 X = 1? falso X=1 X=1 X = 1? verdadeiro 7>6 7 > 6? verdadeiro 6<8 6 < 9? verdadeiro 1<=y Y=1 1 é menor ou igual a y? verdadeiro 1<=y Y=2 1 é menor ou igual a y? verdadeiro 1<=y Y=0 1 é menor ou igual a y? falso 4 >= w W=4 4 é maior ou igual a W? verdadeiro 4 >= w W=3 4 é maior ou igual a W? verdadeiro 4 >= w W=5 4 é maior ou igual a W? falso Fonte: Forbellone, Andre Luiz Villar (2005, P 21). e-Tec Brasil/CEMF/Unimontes 34 Informática 2.3.4 Funções Função nada mais é do que um algoritmo já desenvolvido que pode ser utilizado como parte de outro algoritmo. Assim, podemos utilizar as seguintes funções, como mostra o quadro 7. QUADRO 7 Funções Operador Descrição Raiz (x) ou SQRT (x) Raiz quadrada de x Sen (x) Seno de x Cós (x) Cosseno de x Tg (x) Tangente de x Arctg(x) Arco tangente de x Abs(x) ou sinal (x) Valor absoluto de x Int (x) Parte inteira de x Mod (A,B) Resto da divisão de a por B Div (A,B) Quociente da divisão de A por B Exp(x) Expoente de x Random(x) Calcula valor randômico entre 0 e x Fonte: Adaptado de Farrer, Harry, eT AL (1999, pg.33). Para um melhor entendimento, vamos utilizar as funções e buscar identificar seus resultados. Vamos supor que temos duas variáveis x e y, com valores 5 e 2 respectivamente. Ao aplicar às funções, qual seria o valor de saída? A = sen (x) B = Cós (y) C = Arctg (y+x) D = Abs (x) E = int(5,34) F = Mod (x,y) G = Div (x,y) Agora é com você. Pense em outros valores para as variáveis e as substitua para obter os resultados das funções, como fizemos juntos na atividade anterior. Veja o que aconteceu: A = sen (5) B = Cós (2) C = Arctg (7) D = Abs (5) E = int(5,34) F = Mod (5,2) = 1 G = Div (5,2) = 2 Algoritmos 35 e-Tec Brasil/CEMF/Unimontes 2.4 Expressões lógicas As proposições transmitem pensamentos, isto é, afirmam fatos ou exprimem juízos que formamos a respeito de determinados entes. As proposições vistas no exemplo anterior são ditas simples ou atômicas, pois não contêm nenhuma outra proposição como parte integrante de si mesma. Há somente a ocorrência de uma informação sendo repassada. Chama-se proposição composta ou proposição molecular aquela formada pela combinação de duas ou mais proposições As expressões lógicas são aquelas cujo resultado da avaliação é um valor do tipo lógico podendo ser Verdadeiro ou Falso. Para descrever as expressões lógicas, devemos usar os operadores lógicos estudados na seção 2.3.2. Para tratar expressões lógicas, vamos recorrer à lógica matemática, na qual a proposição é vista como todo o conjunto de palavras ou símbolos que exprimem um pensamento de sentido completo. Podemos citar como exemplo de proposição: a) A Lua é um satélite da terra. b) Recife é a capital de Pernambuco. c) 2 é 8. 3 A lógica matemática (assim como a que veremos para algoritmos) adota como regras fundamentais do pensamento os dois seguintes princípios: a) Princípio da não contradição: uma proposição não pode ser verdadeira e falsa ao mesmo tempo; b) Princípio do terceiro excluído: toda a proposição ou é verdadeira ou é falsa, isto é, verifica-se sempre um destes casos, e nunca um terceiro. Os exemplos a seguir mostram a você a proposição composta ou molecular: a) Carlos é careca e Pedro é estudante. b) Carlos é careca ou Pedro é estudante. c) Se Carlos é careca, então é infeliz. Quando pensamos, efetuamos, muitas vezes, certas operações sobre proposições, chamadas operações lógicas, quais sejam: a) Negação Chamamos negação de uma proposição p, a proposição representada por não p, cujo valor lógico é a verdade quando p é falsa, e a falsidade quando p é verdadeira. Assim não p tem o valor lógico oposto daquele de p; b) Conjunção Chamamos conjunção de duas proposições p e q a proposição representada por p E q, cujo valor lógico é verdade quando as proposições p e q são ambas verdadeiras, e falsa nos demais casos; c) Disjunção Chama-se disjunção de duas proposições p e q a proposição representada por p OU q cujo valor lógico é a verdade quando ao menos uma das proposições p e q é verdadeira, e a falsidade quando as proposições p e q são ambas falsas. Os operadores lógicos também são chamados de operadores booleanos e-Tec Brasil/CEMF/Unimontes 36 Informática Suponha duas perguntas feitas a quatro pessoas que se candidataram a uma entrevista de emprego de programador. As respostas às perguntas serão Sim ou Não. Suponha também que só será chamado para a entrevista o candidato que responder Sim às duas perguntas, como mostra a tabela verdade constante no Quadro 8. QUADRO 8 Tabela verdade caso entrevista Candidato Conhece linguagem C? Conhece l inguagem Pascal? Candidato Aprovado para entrevista Patrícia Sim Sim Sim Joelmo Sim Não Não Valdir Não Sim Não Santos Não não Não Fonte: Adaptado de Forbellone, Andre Luiz Villar (2005, P 21) . Nesse caso, somente a candidata Patrícia será chamada para a entrevista. 2.5 Prioridade na execução das expressões Depois de conhecer os recursos quanto aos operadores aritméticos, lógicos, relacionais e funções, você deve conhecer a prioridade na execução das expressões: 1 – parênteses e funções 2 – expressões aritméticas: +- unários,**, */, + - (binários) 3 – Comparação: <,<=, =, >, >=, # 4 – não 5–e 6 – ou Sintaxe e Semântica Para finalizar o estudo desta unidade, vamos estudar os aspectos da sintaxe e da semântica. Portanto, a linguagem utilizada para a lógica de programação possui sintaxe e semântica, ou seja, regras para formação dos comandos e o significado delas quando no momento de execução dos mesmos. Resumo Para o embasamento do aprendizado de algoritmos, o conteúdo estudado é de grande relevância. Foram aqui apresentados conceitos e exemplos de tipos de dados possíveis de uso em nossos pseudocódigos, conceitos Algoritmos 37 SINTAXE: São regras gramaticais de formação de sentenças/ asserções válidas ou gramaticalmente corretas; SEMÂNTICA: É a associação das asserções ao significado, permitindo sua interpretação. A sintaxe de uma linguagem expressa regras que devem ser obedecidas para atingir determinado resultado, fazendo uso dela. E a semântica representa o conteúdo das palavras da linguagem, permitindo assim uma interpretação correta do texto escrito com determinada linguagem. e-Tec Brasil/CEMF/Unimontes e regras para uso de variáveis, além de uma introdução sobre expressões e operações. Na parte de expressões lógicas, você pode verificar uma pequena demonstração sobre suas operações. Todos esses conceitos serão utilizados nas próximas unidades. Daí a relevância de uma releitura, caso ainda restem dúvidas. Encerramos esta unidade por aqui, esperando, é claro, que esses conceitos e exemplos tenham ajudado a você a compreender ainda mais as etapas da programação. Mas ainda temos um longo caminho. Vamos em frente! Atividades de aprendizagem 1) Qual é o conceito de domínio de dado? 2) Liste e explique os tipos de dados que podem ser usados na pseudolinguagem. 3) Um supermercado trabalha com o controle de vendas de seus produtos. Para tal, é necessário armazenar dados como o código do produto, descrição, unidade, preço unitário de venda. Relacione os dados aos seus tipos. 4) Os dados do tipo lógico podem conter apenas dois valores: verdadeiro ou falso. Pense numa aplicação que deve conter um dado do tipo lógico. 5) Qual o conceito de variável? 6) O tipo e o nome da variável não podem ser alterados quando o algoritmo entrar em execução. Justifique. 7) Relacione as regras de composição de nome de variáveis. 8) Faça uma distinção entre operadores aritméticos, lógicos e relacionais. 9) Quais os recursos podem ser utilizados para se criar uma expressão lógica? 10) Qual a ordem de prioridade de execução de comandos em uma expressão computacional? e-Tec Brasil/CEMF/Unimontes 38 Informática AULA 1 Alfabetização Digital Aula 3 - Pseudolinguagem Para facilitar o desenvolvimento do raciocínio lógico e a aplicação da lógica de programação em qualquer linguagem de programação, vai ser introduzida, na pseudolinguagem, uma linguagem de programação hipotética, muito usada em todo o mundo. Para você, é importante, pois utiliza o idioma nativo, no nosso caso a Língua Portuguesa, e algumas regras sintáticas. Por meio de exemplos, você terá contato com a representação de algoritmos recorrendo a pseudocódigos. Abordaremos também os pseudocódigos com estruturas condicionais e faremos breve comentário sobre funções. possa: Assim, esperamos que, ao final da leitura desta unidade, você - Conhecer e entender pseudocódigos; Compreender a importância da endentação; Saber atribuir valores iniciais as variáveis; Saber utilizar as instruções Leia e Escreva. 3.1 Pseudocódigo Você sabe o que é pseudocódigo? O pseudocódigo é a escrita, por meio de regra predefinida, dos passos a serem seguidos para a resolução de um problema. É o resultado da análise e resolução de um problema exposto em um enunciado. Para transformar o algoritmo em uma linguagem de programação, basta ter o conhecimento do vocabulário e regras sintáticas da linguagem/idioma desejado. 3.1.1 Estrutura básica de um pseudocódigo Para Saliba (1993), pseudocódigo é uma forma para representação de algoritmos rica em detalhes, como a definição dos tipos das variáveis usadas no algoritmo. Por assemelhar-se bastante à forma em que programas são escritos, encontra muita aceitação. Para construção do pseudocódigo, trazemos palavras do nosso idioma que representarão comportamentos e ações que deverão ser assumidos pelo algoritmo. A essas palavras, dá-se o nome de Palavras Reservadas à Linguagem, ou seja, você NÃO pode utilizar tais palavras para outros fins senão àquele que ela representa. Começaremos agora, pouco a pouco, a conhecer essas palavras. Para isso, veja no quadro 9 a estrutura básica que um pseudocódigo deve ter. Algoritmos 39 e-Tec Brasil/CEMF/Unimontes QUADRO 9 Estrutura básica do pseudocódigo As palavras reservadas estão em negrito e o texto em itálico deverá ser preenchido pelo programador, desconsiderando os sinais < >. Não se assuste, é muito simples. Estrutura básica para um pseudocódigo Algoritmo <nome> Variáveis <lista> início <bloco de instruções> fim. Algoritmo – É o início de um novo programa. Seu nome é fornecido pelo programador e deve representar o seu objetivo. Variáveis – Todas as variáveis utilizadas no programa devem ser definidas de acordo com o seu respectivo tipo. Início - O processamento do programa é iniciado. O bloco de instruções se refere aos comandos que darão resolução ao problema. Fim – O fim do programa deve ser informado, assim como foi informado o início. Fonte: Adaptado de Farrer, Harry, eT AL (1999, pg.45). A seguir, você observará um algoritmo, retratando as estruturas básicas do pseudocódigo: Algoritmo E-tecBrasil Variáveis Início Escreva “Hei, você participa do E-tec Brasil” Fim 3.2 Endentação A endentação é um recuo que se atribui aos comandos subordinados. Com o seu uso, fica fácil detectar quais instruções são internas a outras. Para formatar o programa e dar uma visão de quais comandos estão sob coordenação de quais outros, usa-se a endentação, tendo como finalidades principais: - melhorar a legibilidade; - facilitar a manutenção; - facilitar a identificação do erro lógico durante a execução. Observe que no pseudocódigo anterior, a instrução Escreva está endentada e, visivelmente, nota-se que ela está sob o controle de Início e Fim. 3.3 Declaração de variáveis em pseudocódigo Você já estudou tipos de variáveis e composição de nomes na unidade 2. A declaração das variáveis a serem manipuladas no algoritmo deve estar entre as palavras reservadas Variáveis e Início. Toda variável utilizada deve ter um nome e um tipo. e-Tec Brasil/CEMF/Unimontes 40 Informática O exemplo, a seguir, mostra a declaração de variáveis utilizando-se pseudocódigo. Algoritmo <nome> Variáveis A: inteiro; B: Real; C: caractere; D: lógico; início <bloco de instruções> fim. 3.4 Atribuição de valores às variáveis A atribuição de valores iniciais às variáveis se dá quando precisamos armazenar algum valor para ser usado inicialmente em nosso algoritmo, seja para efetuar operações aritméticas ou para compor a informação para o usuário. Além disso, no corpo do algoritmo as variáveis devem receber novos valores para oferecerem o resultado necessário. O exemplo a seguir mostra a inicialização de variáveis utilizando-se pseudocódigo. Algoritmo <nome> Variáveis A: inteiro; B: Real; C: caractere; D: lógico; Início A ← 1; B ← 0; C ← “Orozimbo”; D ← falso; <bloco de instruções> Fim. Com base na inicialização das variáveis do exemplo anterior e considerando os tipos utilizados no exemplo, defina outros valores para tais variáveis. 3.5 Entrada de dados Uma operação de entrada de dados se refere a qualquer valor que seja informado e que seja armazenado na memória com o uso das variáveis. Tal valor pode ser digitado pelo usuário ou lido de dispositivos de armazenamento de dados como, por exemplo, um arquivo no disco rígido. No que diz respeito ao comando de Entrada de dados, faz-se necessário que seja estabelecida uma convenção. Tal comando aqui será definido como Leia. Algoritmos 41 Veja bem! Um valor literal não pode ser armazenado em uma variável numérica, porém um valor numérico pode ser armazenado em uma variável literal, mas esse será tratado como literal. e-Tec Brasil/CEMF/Unimontes Quando for possível, você pode usar somente uma instrução Leia para receber o valor de várias variáveis. Para introduzir cada valor às variáveis definidas no algoritmo, você pode usar uma instrução Leia para cada uma. Veja o exemplo de um algoritmo que possui a entrada de dados de várias variáveis com várias instruções Leia. Algoritmo entrada Variáveis Nome: Caractere; Salario: Real; idade: inteiro; Início Escreva “Digite seu nome”; Leia nome; Escreva “Digite seu Salário”; Leia Salário; Escreva “Digite sua idade”; Leia idade; Escreva “Olá ”,nome,” você ganha “, salário, “por mês e tem “, idade, “anos” Fim. Veja agora o exemplo de um algoritmo que tem instruções de entrada de dados, uma instrução LEIA recebendo várias variáveis: Algoritmo exemploleia Variáveis Nome: Caractere; Salario: Real; idade: inteiro; Início Escreva “Digite seu nome, seu salário e sua idade”; Leia nome, salário, idade; Escreva “Olá”,nome,” você ganha “, salário, “por mês e tem “, idade, “anos” Fim. 3.6 Saída de dados Uma operação de saída de dados se refere a qualquer valor exibido ou retornado ao usuário. Esse valor pode ser uma mensagem de orientação, o resultado de uma expressão, um valor constante ou uma variável existente na variável. e-Tec Brasil/CEMF/Unimontes 42 Informática Quando representamos um algoritmo por meio de pseudocódigos, várias palavras de nosso idioma podem ser utilizadas, tais como Escreva, Imprima, Informe, Mostre ou Exiba. Aqui você vai usar a palavra Escreva. Veja o exemplo de um algoritmo que tem várias instruções de saída de dados: Algoritmo saída Variáveis idade: inteiro; Início Idade ← 25; Escreva “Sou aluno do E-tec Brasil”; Escreva ”Eu tenho “, idade, “anos” Fim. Veja o exemplo de um algoritmo que tem a mesma saída em uma só instrução: Algoritmo saída Variáveis idade: inteiro; É interessante saber que, quando desejarmos exibir ao usuário uma frase, esta deve estar entre aspas (estas aspas podem ser a simples ou as duplas, mas usaremos as duplas). Se quisermos exibir um valor numérico constante, basta informá-lo após a instrução. Se o que desejarmos exibir ao usuário for o conteúdo de uma variável, basta informarmos tal variável após a instrução Escreva. Início Idade ← 25; Escreva “Sou aluno do E-tec Brasil e tenho “, idade, “ de idade”)”; Fim. Resumo A unidade estudada apresenta a estrutura básica para se desenvolver algoritmos. Apresentamos a você a estrutura básica do pseudocódigo identificando a forma de declarar variáveis e também de inicializar as mesmas. Além disso, as instruções de entrada e de saída de dados foram também ilustradas. Devemos informar a você que tratamos aqui somente da estrutura básica da construção de pseudocódigo. Vamos estudar, nas unidades seguintes, os comandos sequenciais, os comandos condicionais, os comandos repetitivos, além de apresentarmos, mais adiante, as estruturas homogêneas e heterogêneas de dados, com suas respectivas formas de manipulação. Algoritmos 43 e-Tec Brasil/CEMF/Unimontes Atividades de aprendizagem 1) O que você entende como pseudocódigo? 2) O que se entende por palavras reservadas da linguagem? 3) Explique cada componente da estrutura básica de um pseudocódigo, Algoritmo <nome> Variáveis <lista> início <bloco de instruções> fim. 4) Qual a importância da endentação no processo de criação de algoritmos? 5) Por que razão é necessário atribuir valores iniciais às variáveis? 6) Para que serve a Instrução Leia? Existe algum sinônimo para tal instrução? 7) Para que serve a instrução Escreva? Existe algum sinônimo para tal instrução? 8) Com quais valores devem ser inicializadas duas variáveis: a primeira que receberá uma soma e a segunda que receberá o resultado de multiplicação? 9) Qual deve ser o tamanho máximo da lista de variáveis e do bloco de comandos? 10) Quais são as regras necessárias para construir um pseudocódigo? e-Tec Brasil/CEMF/Unimontes 44 Informática AULA 1 Alfabetização Digital Aula 4 - Comandos sequenciais Para o aprendizado de desenvolvimento de algoritmos, faz-se necessário o estudo dos conceitos e das instruções primitivas estudados nas unidades anteriores. Além disso, a unidade que trata dos comandos sequenciais vem agregar conhecimento para a resolução e representação de algoritmos em sua forma de pseudocódigos. Assim, por meio do estudo desta unidade, esperamos que você seja capaz de: • Compreender a estrutura dos comando sequencias; • Identificar o uso dos comandos seqüenciais em outras estruturas de comandos. 4.1 Comando sequenciais Assim, para elucidar o uso de comandos sequenciais, vamos detalhar a situação de pagamentos de funcionários de uma empresa. Sobre o salário bruto de um funcionário, são descontados 8% de INSS, 10% de IR (imposto de renda) e sobre o restante 0,5% referente à filiação sindical. Para cada dependente (filhos), o funcionário ganha R$ 50,00. Ao ser fornecido o valor do salário bruto do funcionário e a quantidade de dependentes, calcule: a) O total dos descontos b) Total de acréscimo c) Salário líquido. São blocos de comandos dispostos um após o outro, sem nenhum desvio ou repetição Para resolver o problema anteriormente proposto, vamos mostrar a você o seguinte algoritmo: Algoritmo CalculoDeFolha Variáveis SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos, SalarioLiquido : Real; Dependentes : Inteiro; Início Escreva “Informe o Salário Bruto”; Leia SalarioBruto; Escreva “Informe a Quantidade de Dependentes”; Leia Dependentes; Algoritmos 45 e-Tec Brasil/CEMF/Unimontes INSS ← SalarioBruto*0.08; IR ßSalarioBruto * 0.10; FS ← (SalarioBruto – (INSS+IR)) * 0.005; TotalDeDescontos ← INSS + IR + FS; TotalDeAcrescimos ← (Dependentes * 50); SalarioLiquido ← SalarioBruto – TotalDeDescontos + TotalDeAcrescimos; Escreva “O Total de Descontos é : “, TotalDeDescontos; Escreva “O Total de Acréscimos é : “, TotalDeAcrescimos; Escreva “O Salário Líquido é : “, SalarioLiquido; Fim. Bem, vamos analisar como proceder para desenvolver o algoritmo. Devemos analisar detalhadamente o problema em questão. Bem, como fazer isso? Vamos refletir!!! Será que você consegue identificar todas as variáveis necessárias ao processamento durante a extração de requisitos do texto? Durante a resolução podem surgir alguns problemas. Quando isso ocorrer, emerge a necessidade de criar e inicializar outras variáveis Atenção a esta próxima etapa. Devemos ler e reler o enunciado para identificar quais são as variáveis de saída, quais são as de entrada e quais são as variáveis auxiliares ao processamento. Em seguida, você deve pensar nas instruções ou comandos que são necessários para transformar os dados de entrada nas saídas desejadas. Observe, a seguir, o que será fornecido ao algoritmo para que realize o processamento desejado. Sobre o salário bruto de um funcionário, são descontados 8% de INSS, 10% de IR (imposto de renda) e sobre o restante 0,5% referente à filiação sindical. Para cada dependente (filhos), o funcionário ganha R$ 50,00. Ao ser fornecido o valor do salário bruto do funcionário e a quantidade de dependentes, calcule: Observe o seguinte trecho do algoritmo, a seguir: Algoritmo CalculoDeFolha Variáveis SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos, SalarioLiquido : Real; Dependentes : Inteiro; Início Escreva “Informe o Salário Bruto”; Leia SalarioBruto; Escreva “Informe a Quantidade de Dependentes”; Leia Dependentes; ... Fim Veja você!! As declarações das variáveis são relativas às variáveis de entrada de dados. e-Tec Brasil/CEMF/Unimontes 46 Informática Observe que vamos identificar a declaração do que é informado ao usuário, ou seja, aquilo que deve ser resolvido pelo algoritmo, o problema: ..., calcule: a) O Total dos Descontos b) Total de Acréscimo c) Salário Líquido Assim, observe o algoritmo: Algoritmo CalculoDeFolha Variáveis SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos, SalarioLiquido : Real; Dependentes : Inteiro; Início ... Escreva “O Total de Descontos é : “, TotalDeDescontos; Escreva “O Total de Acréscimos é : “, TotalDeAcrescimos; Escreva “O Salário Líquido é : “, SalarioLiquido; Fim. Note agora a existência de variáveis que não são nem de entrada nem de saída. Podemos caracterizá-las como variáveis auxiliares, pois elas realmente auxiliam a resolução do problema. Vejamos o seguinte exemplo: Algoritmo CalculoDeFolha Variáveis SalarioBruto, INSS, IR, FS, TotalDeDescontos, TotalDeAcrescimos, SalarioLiquido : Real; Dependentes : Inteiro; Início ... INSS ← SalarioBruto*0.08; IR ← SalarioBruto * 0.10; FS ← (SalarioBruto – (INSS+IR)) * 0.005; TotalDeDescontos ← INSS + IR + FS; TotalDeAcrescimos ← (Dependentes * 50); SalarioLiquido ← SalarioBruto – TotalDeDescontos + TotalDeAcrescimos; ... Fim As variáveis auxiliares, como o próprio nome propõe, devem ser criadas para auxiliar o armazenamento de dados. Elas podem variáveis contadoras, para troca de dados, para copia, etc. No caso específico desse problema, estas variáveis são desnecessárias, pois o resultado pode ser obtido diretamente, mediante operações matemáticas. Vejamos como poderia ficar esta resolução. Algoritmos 47 e-Tec Brasil/CEMF/Unimontes Agora, vamos analisar o próximo exemplo: Algoritmo CalculoDeFolha Variáveis SalarioBruto, TotalDeDescontos, TotalDeAcrescimos, SalarioLiquido : Real; Dependentes : Inteiro; Início ... TotalDeDescontos ← (SalarioBruto * 0.08) + (SalarioBruto * 0.10); TotalDeDescontos ← (SalarioBruto – TotalDeDescontos) * 0.005; ... Fim. ... Observe! Para a implementação, optou-se por duas linhas para o cálculo do desconto, pois a Filiação Sindical é sobre o Salário Bruto já descontado o INSS e IR. É bom deixar claro que, matematicamente, daria para incluir tudo isso em uma única linha, porém poderia ficar “poluída”, dificultando a compreensão da referida linha de operação. Além disso, é importante documentar as funcionalidades do algoritmo, para facilitar o entendimento e, principalmente, a manutenção. Podemos pensar em outra resolução para o mesmo problema?? Sim! Outra forma de resolução é sem o uso das variáveis de saída. Reflita! O uso excessivo de variáveis é benéfico auxiliando na manutenção das funcionalidades específicas. Porém, com o decorrer do aprendizado, podemos otimizar o desempenho e os recursos utilizados. Assim, veja o algoritmo: Algoritmo CalculoDeFolha Variáveis SalarioBruto : Real; Dependentes : Inteiro; Início ... Escreva “O Total de Descontos é : “, (SalarioBruto * 0.08) + (SalarioBruto * 0.10) + ((SalarioBruto – ((SalarioBruto * 0.08) + (SalarioBruto * 0.10))) * 0.05; Escreva “O Total de Acréscimos é : “, (Dependentes * 50); Escreva “O Salário Líquido é : “, SalarioBruto – ((SalarioBruto * 0.08) +(SalarioBruto * 0.10) + ((SalarioBruto – ((SalarioBruto * 0.08) + (SalarioBruto * 0.10))) * 0.05) + (Dependentes * 50); Fim ... e-Tec Brasil/CEMF/Unimontes 48 Informática Note a expressão acima. Há casos em que isso não é recomendado, tampouco deverá ser feito, pois, em uma necessidade de alteração, dificultará a compreensão. Agora é com você!! Desenvolva um programa que receba o salário-base de um funcionário, calcule e mostre o salário a receber, sabendo-se que esse funcionário tem gratificação de 5% sobre o saláriobase e paga imposto de 7% sobre o salário-base. Algoritmo CalculoDeFolha Variáveis SalarioBase, SalarioLiquido : Real; Início Escreva “Informe o Salário Base”; Leia SalarioBase; SalarioLiquido ← SalarioBase + (SalarioBase * 0.05) – (SalarioBase * 0.07); Escreva “O Salário Líquido é : “,SalarioLiquido; Fim O problema a ser solucionado nesse enunciado é relativamente simples. Será informado pelo usuário um valor qualquer (SalarioBase) e sobre esse valor deverão ser aplicados dois percentuais: um como crédito (gratificação) ao valor informado, e outro como débito (imposto). Ou seja, o primeiro valor aumentará o valor inicial, e o segundo diminuirá. Os valores a serem aplicados estão explícitos no enunciado, devendo apenas ser aplicados em uma fórmula/expressão. Perceba que, nesse pseudocódigo, foram utilizadas apenas as variáveis necessárias: a de entrada (SalarioBase) e a de saída (SalarioLiquido). Poderia optar-se por um desenvolvimento mais detalhado e fazer uso de variáveis auxiliares, mas não seria nada otimizado e muito menos útil nesse caso. Caso se opte por esse uso, a resolução seria à semelhança do mostrado a seguir. Algoritmo CalculoDeFolha Variáveis SalarioBase, SalarioLiquido, Credito, Debito : Real; Início ... Credito ← (SalarioBase * 0.05); Debito ← (SalarioBase * 0.07); SalarioLiquido SalarioBase + Credito – Debito; ... Fim. Algoritmos 49 e-Tec Brasil/CEMF/Unimontes Observe que, como foram informados os valores em percentual a serem descontados, esses puderam ser aplicados diretamente na fórmula, sem necessidade de aplicar a regra de três. Podemos observar, no exemplo trabalhado anteriormente, que todos os blocos de comandos usados foram sequenciais. Isso aconteceu por se tratar da resolução dos cálculos somente de um empregado. Além disso, a empresa não optou por nenhuma regra diferente para calcular os valores em função dos dados dos empregados. Para melhor compreensão dos comandos sequenciais, mostraremos alguns exemplos, a seguir. Exemplos 1) Faça um algoritmo para imprimir “Olá todos” Algoritmo mensagem { OBJETIVO: IMPRIMIR MENSAGEM DE SAUDACAO DATA CRIACAO: 18/10/2010 } Início Escreva(“Olá a todos!”); Fim. 2) Faça um algoritmo para mostrar a adição de dois números Algoritmo soma {OBJETIVO: IMPRIMIR A ADICAO DE DOIS NUMEROS Autor: nome DATA CRIACAO: 18/10/2010} inteiro: num1, num2; início Escreva(“Digite o primeiro número.”); leia(num1); Escreva(“Digite o segundo número.”); leia(num2); Escreva(“A adição dos números é: ”, num1 + num2); fim. 3) Faça um algoritmo para mostrar saudação Algoritmo saudação {OBJETIVO: IMPRIMIR MENSAGEM DE SAUDACAO A ALGUM NOME AUTOR: nome DATA CRIACAO: 18/10/2010} caractere: nome; Início imprima(“Digite um nome.”); leia(nome); imprima(“Olá ”, nome, “!”); Fim. e-Tec Brasil/CEMF/Unimontes 50 Informática 4) Faça um algoritmo para converter horas em minutos Algoritmo minutos {OBJETIVO: CONVERTER QTDE DE HORAS EM MINUTOS AUTOR: nome DATA CRIACAO: 18/10/2010 } inteiro: horas, minutos, total; Início Escreva (“Digite uma quantidade de horas.”); Leia(horas); Escreva(“Digite uma quantidade de minutos.”); Leia(minutos); total = horas * 60; total = total + minutos; Escreva(“A quantidade de minutos é: ”, total); Fim. 5) Faça um algoritmo para converter radianos em graus Algoritmo radianos {OBJETIVO: CONVERTER RADIANOS EM GRAUS, MINUTOS E SEGUNDOS AUTOR:nome DATA CRIACAO: 18/10/2010 } real: radianos; inteiro: graus, minutos, segundos; Início Escreva (“Digite uma quantidade de radianos.”); Leia (radianos); graus = int(radianos * 180); minutos = int((radianos * 180 - graus) * 60); segundos = int((((radianos * 180 - graus) * 60) - minutos) * 60); Escreva (“A quantidade de radianos é: ”, graus, “ graus, ”, minutos, “ minutos e ”, segundos, “ segundos.”); Fim. 6) Faça um algoritmo para converter temperatura Algoritmo temperatura {OBJETIVO: CONVERTER TEMPERATURA EM GRAUS CELSIUS PARA FAHRENHEIT AUTOR: nome DATA CRIACAO: 18/10/2010 } real: cel; Início Escreva(“Digite a temperatura em graus Celsius.”); Leia(cel); Escreva(“A temperatura em Farenheit é: ”, 32 + 1.8 * cel); Fim. Algoritmos 51 e-Tec Brasil/CEMF/Unimontes 7) Faça um algoritmo para calcular a hipotenusa de um triangulo Algoritmo hpotenusa {OBJETIVO: CALCULAR A HIPOTENUSA DE UM TRIANGULO AUTOR: nome DATA CRIACAO: 18/10/2010 } real: lado1, lado2; início Escreva(“Digite o valor do primeiro lado do triângulo.”); Leia(lado1); Escreva(“Digite o valor do segundo lado do triângulo.”); Leia(lado2); Escreva(“O valor da hipotenusa é: ”, sqrt(lado1 ^ 2 + lado2 ^ 2)) Fim. 8) Faça um algoritmo para calcular gasto de combustível Algoritmo gasto {OBJETIVO: CALCULAR OS GASTOS DE COMBUSTIVEL DE UM AUTOMOVEL AUTOR: nome DATA CRIACAO: 18/10/2010 } Crie um exemplo de algoritmo que utiliza comandos seqüenciais e utilize o AVEA para compartilhar a idéia com seus colegas. real: preco, litros, distancia; Início Escreva(“Digite o preço do litro combustível.”); Leia(preco); Escreva(“Digite a quantidade de litro(s) gasto(s).”); Leia(litros); Escreva(“Digite a distância percorrida em Km.”); Leia(distancia); Escreva(“O valor gasto em $/Km é: ”, preco * litros / distancia); Escreva(“O valor gasto em lt/100Km é: ”, litros * 100 / distancia) Fim. Resumo Na unidade estudada, você pôde perceber as sequências simples de comandos. Você deve compreender que tal disposição de comandos é de simples elaboração, uma vez que segue uma sequência de operações. As sequências simples, em geral, são mescladas com as sequências condicionais e com os comandos de repetição para solucionar problemas mais complexos. e-Tec Brasil/CEMF/Unimontes 52 Informática Atividades de aprendizagem 1) Qual a estrutura dos blocos de comandos você pode usar na sequência simples? 2) Faça um algoritmo para calcular a raiz quadrada de um número n. 3) Faça um algoritmo para calcular o seno de um número n. 4) Faça um algoritmo para calcular o resto da divisão de um número n por m. 5) Faça um algoritmo para calcular o quociente da divisão de um número n por m. 6) Faça um algoritmo para calcular a média aritmética de 2 números informados pelo usuário. 7) Faça um algoritmo para calcular a multiplicação de 3 números informados pelo usuário. 8) Faça um algoritmo para extrair e exibir a parte inteira e a parte decimal de um número. 9) Faça um algoritmo para transformar um numero negativo em positivo. 10) Faça um algoritmo para mostrar 3 números informados pelo usuário na ordem invertida da entrada. Por exemplo, se o usuário informou 1, 2 e 3, mostre 3,2,1. Algoritmos 53 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital Aula 5 - Comandos condicionais Condições são comparações realizadas entre componentes de comparação, sendo esses, variáveis, expressões matemáticas, campos de uma determinada estrutura de dados. Tais comparações possuem respostas verdadeiras ou falsas. As condições podem ser simples ou compostas. Assim, por meio do estudo desta unidade, esperamos que você seja capaz de: - Compreender a estrutura dos comandos condicionais; - Aplicar o uso do comando se simples e composto; - Aplicar o uso o comando caso. 5.1 Condição Simples e condição composta A condição simples somente trabalha com uma opção de resposta, verdadeira ou falsa, possuindo, dentro da estruturação do comando condicional, somente uma alternativa de processamento. A condição composta trabalha com as duas opções de resposta, verdadeira e falsa, tendo alternativa de processamento tanto para a saída de verdade da condição quanto da saída de falso, na estruturação do comando condicional. Assim, para estruturar as condições, simples e composta, mostram-se as possibilidades: Se condição (verdadeira) então Grupo de comandos Fim se. Vejamos o trecho do algoritmo: ... Se a = 1 então B = 0; C = A; Fim se; ... Quando o valor de a for igual a 1, B recebe zeros e C recebe 1. Quando o valor de a for diferente de 1, o controle de execução sai para a próxima instrução após o Fim se, Algoritmos 55 e-Tec Brasil/CEMF/Unimontes Se não condição (falsa) então Grupo de comandos Fim se. Vejamos o trecho do algoritmo: ... Se não a = 1 então B = 0; C = A; Fim se; Quando o valor de a for diferente de 1, B recebe zeros e C recebe 1. Quando o valor de a for igual a 1, o controle de execução sai para a próxima instrução após o Fim se, Se condição (verdadeira) então Grupo de comandos Senão (falsa) Grupo de comandos Fim se Devemos observar que pode haver aninhamentos condicionais. Quando se tem várias condições que dependem da resposta anterior, devemos estruturar uma instrução SE interna a outra. Não há numero máximo de aninhamentos de instrução SE. Vejamos o trecho do algoritmo: ... Se a = 1 então B = 0; C = A; Senão B = 2; C = B; Fim se Quando o valor de a for igual a 1, B recebe zeros e C recebe 1 e o controle de execução sai para a próxima instrução após o Fim se, Quando o valor de a for diferente de 1, B = 2 e C = B e o controle de execução sai para a próxima instrução após o Fim se, Com o uso de aninhamentos, devemos tomar cuidado para não perdermos o controle da lógica do processo. e-Tec Brasil/CEMF/Unimontes O exemplo, a seguir, mostra mais essa possibilidade: Se condição (verdadeira) então Grupo de comandos Se condição (verdadeira) então Grupo de comandos Senão Grupo de comandos Fim se Senão (falsa) Grupo de comandos Fim se 56 Informática 5.2 Condição simples: conectivo condicional se... então A condição simples trabalha somente com uma saída definida no comando, conforme vimos anteriormente. Por exemplo: Se saia é clara então coloque avental; .... Então é resultado de uma condição verdadeira. No caso do exemplo acima, se a condição for falsa, segue a sequência do algoritmo. Para elucidar o comando condicional, no exemplo, a seguir, você vai conhecer um algoritmo que busca o menor valor existente em um conjunto. Algoritmo menorvalor variaveis Inteiro: valor, menor; início valor = 0; menor = 0; LEIA (valor); menor = valor; ENQUANTO valor <> -1 FAÇA SE valor < menor ENTÃO menor = valor LER (VALOR); FIM ENQUANTO; Escreva (MENOR); Fim Você deve observar que no algoritmo anterior há uma condição com uma só saída: Se Valor < menor então menor:=valor Assim, a variável “Menor” recebe o conteúdo de “valor” se a condição “valor < menor” for verdadeira. Caso esta condição seja falsa, o algoritmo passa para a próxima instrução. Vamos pensar mais um pouco... Até agora trabalhamos com a lógica direta. Vamos ver um exemplo de lógica reversa. Seja o trecho do algoritmo: Algoritmos 57 e-Tec Brasil/CEMF/Unimontes .... Se A > B senão A:= B; Fim se; Há estudantes e profissionais que se identificam com esse tipo de lógica. Teste a sua habilidade. Se para você, for mais complicado, então use a lógica direta. Quando A for maior que B, o algoritmo executa a instrução que se encontra após o fim se, e caso contrário, quando A não for maior que B, ou seja, A é igual ou menor que B, o algoritmo executa a instrução que se encontra dentro do bloco associado ao senão, estruturado no comando condicional. 5.3 Condição composta: conectivo condicional se... então senão Como estudado anteriormente, a condição composta apresenta tanto a saída de verdadeiro quanto a de falso. Utilizando-se a condição simples ou a composta, você pode usar o aninhamento de condições. Veja um algoritmo que trata condição composta e de aninhamento de condições: Algoritmo faixa Variaveis Inteiro: numero; Início Leia numero; Se numero < =15 e numero > 10 então Escreva (“Número entre 11 e 15”); Senão Se numero <= 10 e número > 5 então Escreva(“Número entre 5 e 10); Senão Se numero < = 5 então Escreva (”numero menor ou igual a 5”) Fim se Fim se Senão Escreva (“Número maior que 15”) Fim se; Agora é com você! Faça um algoritmo que leia dois valores numéricos e inteiros e efetue a soma destes valores. Caso o valor encontrado na soma: - seja maior ou igual a 10, este valor deverá ser somado de 5; - não seja maior ou igual a 10, este valor deverá ser subtraído de 5. - exiba o valor final. e-Tec Brasil/CEMF/Unimontes 58 Informática Algoritmo Soma Variáveis A, B, Soma : Inteiro; Início Escreva “Informe o primeiro valor”; Leia A; Escreva “Informe o segundo valor”; Leia B; Soma (A + B); Se (Soma >= 10) então Soma = Soma + 5; Senão Soma = Soma – 5; Fim Se Escreva “O resultado de toda a operação é “, Soma; Fim Para você treinar mais um pouco, vamos desenvolver outra atividade. Dados três números inteiros distintos (assume-se que o serão), faça um algoritmo que escreva o maior número digitado. Algoritmo MaiorNumero Variáveis A, B, C : Inteiro; Início Escreva “Informe o primeiro número”; Leia A; Escreva “Informe o segundo número”; Leia B; Escreva “Informe o terceiro número”; Leia C; Se (A > B) então Se (A > C) então Escreva “O maior número é “, A; Senão Escreva “O maior número é “, C; Fim Se Senão Se (B > C) então Escreva “O maior número é “, B; Senão Escreva “O maior número é “, C; Fim Se; Fim Se; Fim. Algoritmos 59 e-Tec Brasil/CEMF/Unimontes Vamos supor alguns valores para as variáveis A, B e C para realizarmos testes no algoritmo anterior. A=3B=2eC=4 O quadro 10 mostra as instruções executadas com os dados atribuídos. QUADRO 10 Execução do algoritmo maior instrução Resultado condição A é maior que B? verdade A é maior que C? Falso Resultado usuário Maior numero é C FIm Fonte: Própria. A=1B=3eC=0 O quadro 11 mostra as instruções executadas com os dados atribuídos. QUADRO 11 Execução do algoritmo maior instrução Resultado condição A é maior que B? Falso B é maior que C? verdade Resultado usuário Maior úmero é B Fonte: Própria. A = 10 B = 3 e C = 0 O quadro 12 mostra as instruções executadas com os dados atribuídos. Quadro 12 Execução do algoritmo maior Lembre-se de que a sequência de comandos depende de valores variáveis. instrução Resultado condição A é maior que B? verdade A é maior que C? verdade Resultado usuário Maior úmero é A Fonte: Própria. Sempre que temos um problema em que a solução depende de comparação ou avaliação, quer sejam fornecidas diretamente pelo usuário, quer seja ela o resultado de uma operação, devemos aplicar instrução condicional para a sua solução. e-Tec Brasil/CEMF/Unimontes 60 Informática Como pode ser constatado no enunciado acima, serão fornecidos três números, que não se sabe quais são. A cada vez, podem ser números diferentes e talvez, em uma destas execuções, o primeiro número fornecido possa ser o maior, mas em outra não. Em outra situação, o terceiro número poderá ser o maior. A solução deve trabalhar todas as hipóteses. Temos então as situações seguintes que devem ser avaliadas a cada execução. 1. Quando o valor em A for maior que B, garante que também é maior que C? Lógico que não, pois ainda não nos cabe uma dedução. Porém, se C for maior que A, está claro que C é maior que B também. Então A é o maior número. 2. Caso ocorra de A ser menor que B, existe garantia de que B é maior que C? Também não. Porém, se C for maior que B, seguramente C é o maior número, senão B o será. Veja este trecho do algoritmo, a seguir: ... Se (A > B) então Se (A > C) então Escreva “O maior número é “, A; Senão Escreva “O maior número é “, C; Fim Se Senão Se (B > C) então Escreva “O maior número é “, B; Senão Escreva “O maior número é “, C; Fim Se; Fim Se; Fim. Outra situação é que há casos em que várias contradições podem ocorrer e, além disso, mais de uma condição pode ser avaliada ao mesmo tempo. Veja o trecho do algoritmo. ... Se (A > B) E (A > C) então Escreva “O maior número é “, A; Senão Se (A < B) E (B > C) então Escreva “O maior número é “, B; Senão Escreva “O maior número é “, C; Fim Se; Fim se; Fim ... ... Algoritmos 61 e-Tec Brasil/CEMF/Unimontes Observe agora que a expressão que é operada por E, só será verdadeira se todas retornarem verdadeiro. 5.4 Estrutura condicional - Caso Importante! Esta estrutura não foi tratada ainda. Muita atenção às explicações que seguem sobre sua estrutura básica, assim como sobre o detalhamento de suas especificidades. Nos exemplos anteriores sobre estrutura condicional, tratou-se da estrutura Se... então ...Senão Se...Fim Se. Porém, esta não é a única. Existe outra estrutura que trabalha com múltiplas escolhas, que veremos a seguir. Veja os componentes da estrutura condicional – caso Escolha (expressão) Caso <rótulo 1>: <Bloco de comandos> Caso <rótulo 2>: <Bloco de comandos> Caso <rótulo n>: <Bloco de comandos> Senão <Bloco de comandos> Fim Escolha Algumas considerações para essa nova estrutura devem ser vistas: • A expressão é avaliada, e o valor será comparado com um dos rótulos. • A opção senão é opcional. • O rótulo será aqui definido como uma constante caractere ou uma • constante numérica inteira, embora em algumas linguagens possam • ser usadas constantes literais. • A estrutura é muito usada em algoritmos com menus, tornandoos mais claros do que quando usamos a condição Se aninhada. Vamos fazer a seguinte atividade: Escrever um algoritmo que leia um peso na Terra e o número de um planeta, e exiba o valor de seu peso nesse planeta. A relação de planetas é dada, conforme o quadro 13, a seguir, juntamente com o valor das gravidades relativas à Terra: QUADRO 13 Gravidade dos planetas Gravidade dos planetas Gravidade relativa Planeta 1 0.37 Mercúrio 2 0.88 Vênus 3 0.38 Marte 4 2.64 Júpiter 5 1.15 Saturno 6 1.17 Urano Fonte: Própria. e-Tec Brasil/CEMF/Unimontes 62 Informática Para calcular o peso no planeta utilize a fórmula: PesoNoPlaneta = pesonaterra/100*Gravidade Veja o algoritmo Algoritmo PesoPlaneta Variáveis Opcao : Inteiro; Peso : Real; Início Escreva “Planetas que podem ser analisados”; Escreva “1-Mercúrio”; Escreva “2-Vênus”; Escreva “3-Marte”; Escreva “4-Júpiter”; Escreva “5-Saturno”; Escreva “6-Urano”; Leia Opcao; Escreva “Informe seu peso atual”; Leia Peso; Escolha (Opcao); Caso 1 : Escreva “Seu peso no planeta Mercúrio é : “, (Peso/10)*0.37; Caso 2 : Escreva “Seu peso no planeta Vênus é : “, (Peso/10)*0.88; Caso 3 : Escreva “Seu peso no planeta Marte é : “, (Peso/10)*0.38; Caso 4 : Escreva “Seu peso no planeta Júpiter é : “, (Peso/10)*2.64; Caso 5 : Escreva “Seu peso no planeta Saturno é : “, (Peso/10)*1.15; Caso 6 : Escreva “Seu peso no planeta Urano é : “, (Peso/10)*1.17; Senão Escreva “A opção “, Opcao, “ não pode ser avaliada”; Fim Escolha Fim. Será exibido ao usuário um menu com as opções que ele pode escolher e que serão processadas pelo pseudocódigo. Nesse caso, as opções se referem a nomes de planetas associados a um número, como se fosse um cardápio de um restaurante, pois, na realidade, a ideia de um menu é realmente essa. Veja no quadro, a seguir, essa situação. Algoritmos 63 e-Tec Brasil/CEMF/Unimontes ... Escreva “Planetas que podem ser analisados”; Escreva “1-Mercúrio”; Escreva “2-Vênus”; Escreva “3-Marte”; Escreva “4-Júpiter”; Escreva “5-Saturno”; Escreva “6-Urano”; Leia Opcao; É preciso, após a escolha do usuário, verificar qual foi esta escolha. Poderíamos, sem problema algum, fazer uso da estrutura Se, mas para esse tipo de situação a estrutura Escolha é a mais indicada. Quando fazemos uso dessa estrutura, temos que informar a qual variável serão feitos os testes e, a cada caso, informarmos o valor que está sendo comparado (que deve existir na variável da Escolha). Veja o trecho do algoritmo, a seguir: Escolha (Opcao); Caso 1 : Escreva “Seu peso no planeta Mercúrio é : “, (Peso/10)*0.37; Caso 2 : Escreva “Seu peso no planeta Vênus é : “, (Peso/10)*0.88; Caso 3 : Escreva “Seu peso no planeta Marte é : “, (Peso/10)*0.38; Caso 4 : Escreva “Seu peso no planeta Júpiter é : “, (Peso/10)*2.64; Caso 5 : Escreva “Seu peso no planeta Saturno é : “, (Peso/10)*1.15; Caso 6 : Escreva “Seu peso no planeta Urano é : “, (Peso/10)*1.17; Senão Escreva “A opção “, opcao, “ não pode ser avaliada”; Fim Escolha ... ... Agora é com você! Estude alguns exemplos 1) Faça um algoritmo para converter minutos em dias, horas e minutos Algoritmo munitosemdia E MINUTOS e-Tec Brasil/CEMF/Unimontes 64 {OBJETIVO: CONVERTER QTDE DE MINUTOS EM DIAS, HORAS AUTOR: nome Informática DATA CRIACAO: 18/10/2010 } variaveis inteiro: dias, horas, minutos; Início dias = 0; horas = 0; Escreva(“Digite uma quantidade de minutos.”); leia(minutos); se minutos >= 1440 entao dias = div(minutos, 1440); minutos = mod(minutos, 1440); Fim se; se minutos >= 60 entao horas = div(minutos, 60); minutos = mod(minutos, 60); Fim se; Escreva(“A quantidade de minutos é: ”, dias, “ dias, ”, horas, “ horas e ”, minutos, “ minutos.”); Fim. 2) Faça um algoritmo para simular o lançamento de uma moeda Algoritmo moeda {OBJETIVO: SIMULAR O LANCAMENTO DE UMA MOEDA AUTOR: nome DATA CRIACAO: 18/10/2010} Variáveis real: num; Início num = random(2); Se (num) = 0 entao Escreva(“O lançamento resultou em CARA.”) senao Escreva(“O lançamento resultou em COROA.”); Fim se; Fim. A função Random(2) retorna um numero randômico entre zero e dois 3) Faça um algoritmo para simular o lançamento de um dado Algoritmo {OBJETIVO: SIMILAR O LANCAMENTO DE UM DADO AUTOR: nome DATA CRIACAO: 18/10/2010} Algoritmos 65 e-Tec Brasil/CEMF/Unimontes Variáveis real: num; Início num = random(6); se int(num) + 1 = 1 entao Escreva(“O lançamento resultou no número 1.”) senao se int(num) + 1 = 2 entao Escreva(“O lançamento resultou no número 2.”) senao se int(num) + 1 = 3 entao Escreva (“O lançamento resultou no número 3.”) senao se int(num) + 1 = 4 entao Escreva(“O lançamento resultou no número 4.”) senao se int(num) + 1 = 5 entao Escreva(“O lançamento resultou no número 5.”) senao Escreva (“O lançamento resultou no número 6.”); Fim se; Fim se; Fim se; Fim se; Fim se; Fim. 4) Faça um algoritmo que mostre o maior número entre dois. Algoritmo maior {OBJETIVO: INDICAR O MAIOR NUMERO ENTRE DOIS AUTOR: nome DATA CRIACAO: 18/10/2010 } Variaveis inteiro: num1, num2; Início Escreva (“Digite o primeiro número.”); L= Leia(num1); Escreva (“Digite o segundo número.”); Leia (num2); se num1 > num2 entao Escreva (“O maior número é: ”, num1) e-Tec Brasil/CEMF/Unimontes 66 Informática senao Escreva (“O maior número é: ”, num2); Fim se; Fim. 5) Faça um algoritmo que mostre o maior número entre três. Algoritmo maior3 {OBJETIVO: INDICAR O MAIOR NUMERO ENTRE TRES AUTOR: nome DATA CRIACAO: 18/10/2010} Variaveis inteiro: num1, num2, num3; Início Escreva(“Digite o primeiro número.”); leia(num1); Escreva(“Digite o segundo número.”); leia(num2); Escreva(“Digite o terceiro número.”); leia(num3); se (num1 > num2) e (num1 > num3) entao Escreva(“O maior número é: ”, num1) senao se num2 > num3 entao Escreva(“O maior número é: ”, num2) senao Escreva(“O maior número é: ”, num3); Fim se; Fim se; Fim. 6) Faça um algoritmo para mostrar 3 números em ordem decrescente Algoritmo decresce {OBJETIVO: APRESENTAR TRES NUMEROS EM ORDEM CRESCENTE AUTOR: nome DATA CRIACAO: 18/10/2010} Variáveis inteiro: num1, num2, num3; Início Escreva(“Digite o primeiro número.”); Leia(num1); Escreva (“Digite o segundo número.”); Algoritmos 67 e-Tec Brasil/CEMF/Unimontes Leia(num2); Escreva (“Digite o terceiro número.”); Leia(num3); Se (num1 < num2) e (num1 < num3) entao se num2 < num3 entao Escreva (“A ordem crescente é: ”, num1, “, ”, num2, “ e ”, num3) senao Escreva (“A ordem crescente é: ”, num1, “, ”, num3, “ e ”, num2); fim se; senao se num2 < num3 entao se num1 < num3 entao Escreva (“A ordem crescente é: ”, num2, “, ”, num1, “ e ”, num3) senao Escreva (“A ordem crescente é: ”, num2, “, ”, num3, “ e ”, num1); fim se; senao se num1 < num2 entao Escreva (“A ordem crescente é: ”, num3, “, ”, num1, “ e ”, num2) senao Escreva (“A ordem crescente é: ”, num3, “, ”, num2, “ e ”, num1); Fim se; Fim se; Fim se; Fim. 7) Faça um algoritmo que calcule a divisão de dois números. Algoritmo divisão {OBJETIVO: CALCULAR A DIVISAO DE DOIS NUMEROS AUTOR: nome DATA CRIACAO: 01/09/2005} Variaveis real: num1, num2; início Escreva(“Digite o numerador.”); leia(num1); Escreva (“Digite o denominador.”); leia(num2); e-Tec Brasil/CEMF/Unimontes 68 Informática se num2 <> 0 então Escreva (“O resultado da divisão é: ”, num1 / num2) senão Escreva (“Não foi possível calcular porque o denominador informado foi zero.”); Fim se; Fim. 8) Faça um algoritmo para calcular o valor da potencia de um número. Algoritmo potencia {OBJETIVO: CALCULAR O VALOR DE UMA POTENCIA AUTOR: nome DATA CRIACAO: 18/10/2010} Variáveis real: base, expoente; Início Escreva(“Digite o valor da base.”); leia(base); Escreva (“Digite o valor do expoente.”); leia(expoente); se base <> 0 entao Escreva (“O resultado da potência é: ”, exp(expoente * ln(base))) senao Escreva (“Não foi possível calcular porque a base informada foi zero.”); Fim se; Fim. 9) Faça um algoritmo para classificar a nota de um aluno. Algoritmo classifica {OBJETIVO: CLASSIFICAR A NOTA DE UM ALUNO AUTOR: nome DATA CRIACAO: 18/10/2010} Variaveis real: nota; Início Escreva(“Digite a nota do aluno entre 0 e 20.”); leia(nota); se (nota >= 0) e (nota <= 5) entao Escreva(“O aluno foi classificado como MAU.”) senao se (nota > 5) e (nota <= 10) entao Algoritmos 69 e-Tec Brasil/CEMF/Unimontes Escreva(“O aluno foi classificado como MEDÍOCRE.”) senao se (nota > 10) e (nota <= 14) entao Escreva (“O aluno foi classificado como SUFICIENTE.”) senao se (nota > 14) e (nota <= 18) entao Escreva(“O aluno foi classificado como BOM.”) senao se (nota > 18) e (nota <= 20) entao Escreva(“O aluno foi classificado como MUITO BOM.”) senao Escreva (“A nota está fora dos padrões estabelecidos.”); Fim se; Fim se; Fim se; Fim se; Fim se; Fim. 10) Faça um algoritmo para efetuar operações matemáticas. Algoritmo operações {OBJETIVO: EFETUAR AS OPERACOES MATEMATICAS AUTOR: nome DATA CRIACAO: 18/10/2010} Variáveis real: num1, num2; caracter: operacao; Início Escreva(“Digite o primeiro número.”); leia(num1); Escreva(“Digite o segundo número.”); leia(num2); Escreva(“Digite a operação (+)adicao ou (-)subtração ou (*) multiplicação ou (/)divisão que deseja realizar.”); leia(operacao); se operacao = “+” entao Escreva(“O resultado da adição é: ”, num1 + num2) senao e-Tec Brasil/CEMF/Unimontes 70 Informática se operacao = “-” entao Escreva(“O resultado da subtração é: ”, num1 - num2) senao se operacao = “*” entao Escreva(“O resultado da multiplicação ` é: ”, num1 * num2) senao se operacao = “/” entao se num2 <> 0 entao Escreva(“O resultado da divisão é: ”, num1 / num2) senao Escreva(“Não foi possível calcular porque o denominador informado foi zero.”); Fim se; Fim se; Fim se; Fim se; Fim se; Fim. Crie um exemplo de algoritmo que utiliza comandos condicionais simples e compostos pensando nas suas atividades do seu dia-adia. Além disso, tente elaborar um problema que utiliza o recurso condicional Caso. Utilize o AVEA para compartilhar a idéia com seus colegas. Resumo Na unidade estudada, você verificou a aplicação das sequências condicionais simples e compostas, além do aninhamento de condições. Você pode perceber, internos aos comandos condicionais, blocos de comandos sequenciais para formar o procedimento lógico de solução do problema. Além disso, foi apresentada a estrutura condicional do tipo Caso, que mostra outra forma de lidar com condições no pseudocódigo. Atividades de aprendizagem 1)Elabore um Algoritmo que, dadas três temperaturas obtidas de uma cidade ao longo do dia, indique qual a máxima e qual a mínima. 2)Numa empresa, os funcionários são pagos a R$25,00/hora. Pretende-se um algoritmo que, a partir da leitura do número de horas de trabalho de um empregado em cada um dos 5 dias da semana, e tendo em conta os descontos de 11% INSS e 10% de IRPF, calcule os vencimentos bruto e líquido do funcionário, bem como os respectivos descontos. Algoritmos 71 e-Tec Brasil/CEMF/Unimontes 3)Dada uma sequência de 4 números, elabore um Algoritmo que calcule a média dos valores positivos (ou nulos), ou seja, ignorando os valores negativos. 4) Elabore um Algoritmo que, dado um número, indique se ele é divisível por 3 ou não. 5)Elabore um Algoritmo que dados dois números, indique se algum deles é múltiplo do outro. 6)Elabore um Algoritmo que calcule o vencimento de um funcionário, sabendo que este é calculado, adicionando-se ao vencimento base informado, as seguintes parcelas: • 1% por cada ano de idade superior a 25 anos. • 3% por cada ano de casa. • 5% por cada filho ou outro dependente. 7)Elabore um algoritmo que, dado um valor em real, indique quantas moedas de 100, 50, 10, 5 e 1, serão necessárias para perfazer essa quantia (com o mínimo de moedas possível). 8)Elabore um Algoritmo que dada a nota de um aluno, entre 0.0 e 20.0, indique se está Aprovado (nota ³ 9.5), Reprovado (nota < 7.5), ou Exame (7.5 ³ nota > 9.5); valide os casos fora de limites. 9)Elabore um Algoritmo que receba quatro números e que os apresente por ordem decrescente. 10) Faça um algoritmo que leia 3 notas de um aluno e calcule a sua média final. Considerar que a média é ponderada e que o peso das notas é: 2,3 e 5, respectivamente. e-Tec Brasil/CEMF/Unimontes 72 Informática AULA 1 Alfabetização Digital Aula 6 - Estruturas de repetição Nesta unidade, vamos passar com maior intensidade às especificidades dos pseudocódigos com estruturas de repetição. A estrutura de repetição é caracterizada pela necessidade de executar um conjunto de instruções mais de uma vez. Quando se necessita de várias entradas de dados, pode-se inserir uma instrução Leia interna à estrutura de repetição. Esperamos, assim, que ao final desta unidade você seja capaz de: - Conhecer as estruturas de repetição existentes; - Identificar a correta estrutura de repetição para ser usada em um problema. 6.1 Iteração Para você entender a estrutura de repetição, vamos agora introduzir o conceito de iteração. Ícone glossário A iteração é a execução repetida de um bloco de comandos ou instruções, possuindo esse bloco de comandos, uma condição para o seu abandono. São também conhecidas por Repetições, Laços de comandos, Loops ou Ciclos. Vamos pensar no caso de descascas batatas. Se tivéssemos 13 batatas para descascar: Traz cestas com batatas Traz panela do armário Descasca uma batata ...13 vezes descasca uma batata devolve cesta à dispensa Você sabe o que é Flag? Flag, sinal, bandeira é um sinal que o programador define quando o comando de repetição for interrompido. No caso do algoritmo acima, o flag é quando n for igual a zero. Assim, se o primeiro número lido for igual a zero, nenhum número será elevado ao quadrado. Se tivéssemos 24 batatas: Traz cestas com batatas Traz panela do armário Descasca uma batata ...24 vezes descasca uma batata devolve cesta à dispensa Algoritmos 73 e-Tec Brasil/CEMF/Unimontes A estrutura de repetição também garante que um processo repetitivo será feito sempre da mesma forma, não importando se ele ocorrerá uma, dez, cem ou mil vezes. A construção de algoritmos para atender as duas necessidades tem que ter um mesmo padrão de comportamento. Pode-se, aqui, usar mecanismos para gerar iterações no algoritmo. Assim, uma estrutura de repetição permite ao programador especificar que uma ação será repetida enquanto alguma condição permanecer verdadeira. Existe uma subdivisão para a estrutura de repetição: - Condicional, com teste no início; - Condicional, com teste no final; - Contada. Vejamos cada uma dessas estruturas. 6.2 Estrutura de repetição condicional com teste no início A repetição condicional em pseudocódigos ocorrerá de duas formas: o teste condicional (pergunta) feito antes (início) de a estrutura de comandos ocorrer ou ao final (após) da estrutura de comandos. A estrutura de repetição “Enquanto” testa a condição no início do bloco de comandos repetitivos. Enquanto <condição> faça ... ... Bloco de Comandos ... Fim Enquanto O bloco de comandos será executado se a condição definida no início do Enquanto for verdadeira. O bloco de comandos é executado n vezes, enquanto a condição for verdadeira. Cada vez que o bloco de comandos é executado, diz-se que houve uma iteração. Quando a condição for falsa, é executada a instrução que se encontra posicionada depois do Fim Enquanto, saindo, portanto, da execução repetida do bloco de comandos, encontrados dentro do Enquanto. Como a condição é testada no início do bloco de comandos, este pode não ser executado nem uma vez. Vejamos novamente o trabalho de descascar batatas. Traga cestas com batatas; Traga panela do armário; Se saia é clara então coloque avental; Descascar batatas; Enquanto batatas com cascas faça Descascar batatas; Fim enquanto; Devolva a cesta de batatas; e-Tec Brasil/CEMF/Unimontes 74 Informática Vamos analisar outro exemplo que trata da estrutura de repetição condicional com teste no início. O procedimento eleva um conjunto de números ao quadrado. Tal conjunto pode ser vazio, unitário, ou com muitos elementos. Algoritmo elevaquadrado Variáveis Inteiro: N,A; Início Leia(N); ENQUANTO N <> 0 FAÇA A = N ** 2; Escreva(A); Leia(N); Fim enquanto; FIM. O algoritmo receberá novos valores de n enquanto n for diferente de zero. Quando n for igual a zero, as iterações são encerradas e finaliza o algoritmo. Você sabe o que é Flag? Flag, sinal, bandeira é um sinal que o programador define para que o comando de repetição seja interrompido. No caso do algoritmo acima, o flag é n igual a zero. Agora é com você! Analise o exemplo a seguir descrito. Calcule o imposto de renda de um grupo de contribuintes, considerando que os dados de cada contribuinte são: número de CPF, número de dependentes e renda mensal. Para cada contribuinte, será feito um desconto de 5% de salário mínimo por dependente. Os valores da alíquota para cálculo do imposto são: - Até 2 salários Mínimos : Isento; - 2,1 até 3 salários Mínimos : 10%; - 3,1 até 5 salários Mínimos : 15%; - 5,1 até 7 salários Mínimos : 20%; - Acima de 7,1 salários Mínimos: 25%. Quando o primeiro número lido for igual a zero, nenhum número será elevado ao quadrado. O último valor que não será considerado terá o CPF igual a zero. Deve ser fornecido o valor atual do salário mínimo. Algoritmo DescontoIR Variáveis CPF, QtdeDependentes, Aliquota : Inteiro; Salario, SalarioMinimo, SalarioBase, ValorIR, QtdeSalarioMinimo : Real; Início Escreva “Informe o Salário Mínimo”; Leia SalarioMinimo; Escreva “Informe o CPF”; Leia CPF; Enquanto (CPF <> 0) Faça Escreva “Informe o salário do funcionário”; Leia Salario; Algoritmos 75 e-Tec Brasil/CEMF/Unimontes Escreva “Informe a quantidade de; dependentes” Leia QtdeDependentes; SalarioBase = (Salário – (QtdeDependentes * (Salario Minimo*0.05)); QtdeSalarioMinimo = (SalarioBase / SalarioMinimo); Se (QtdeSalarioMinimo <= 2) Então Aliquota = 0 Senão Se (QtdeSalarioMinimo <= 3) Então Aliquota = 10 Senão Se (QtdeSalarioMinimo <= 5) Então Aliquota = 15 Senão Se (QtdeSalarioMinimo <= 7) Então Aliquota = 20 Senão Aliquota = 25; Fim Se; ValorIR = (SalarioBase * Aliquota) / 100; Fim se; Fim se; Fim se; Escreva “O desconto do IR para o CPF “, CPF, “ é de “, ValorIR; Escreva “Informe o CPF”; Leia CPF; Fim Enquanto; Fim Este exercício traz uma situação em que não sabemos quantas vezes, as instruções de um conjunto devem ser executadas. Porém sabemos quando elas deixam de se repetir. O primeiro passo é descobrir qual conjunto de instruções deve ser repetido no algoritmo. Identificamos a solicitação do CPF (inclusive devido ao fato de ele ser nosso flag). Para cada CPF, deve ser solicitada também a quantidade de dependentes que o contribuinte tem e seu salário-base. É importante lembrar, também, a necessidade do salário mínimo, porém este não se repete, pois tem o mesmo valor para todo o algoritmo. Outro ponto a ser destacado é que, a cada grupo de informações recebidas, a identificação da alíquota de imposto em que se enquadra cada contribuinte deve ser feita. Algoritmo DescontoIR ... Início Escreva “Informe o Salário Mínimo”; Leia SalarioMinimo; Escreva “Informe o CPF”; Leia CPF; Enquanto (CPF <> 0) Faça e-Tec Brasil/CEMF/Unimontes 76 Informática ... FimEnquanto Fim ... Vamos Observar! Note, no trecho de algoritmo anterior, que o Salário Mínimo está sendo informado antes da estrutura de repetição (Enquanto). Isso garante que o valor informado pode ser válido para toda a estrutura, mas não quer dizer que não possa ser solicitado dentro dela, como é o caso do CPF, que é solicitado também antes de a estrutura começar, porém é solicitado novamente dentro da estrutura, pois ele é nosso flag. Ainda analisando o algoritmo anterior, você deve pensar! Se o usuário digitar o CPF 0 (zero) antes mesmo de a estrutura de repetição começar. O que acontece? Isso faria com que a estrutura de repetição não ocorresse nenhuma vez. Será que você desenvolveria o pseudocódigo abaixo? Algoritmo Estoque Variáveis Nome : Caractere ValorUnitario, Quantidade, SubTotal, TotalGeral, Estoque : Real; QtdeTipos : Inteiro; Início Estoque = 0; QtdeTipos = 0; TotalGeral = 0; Escreva “Informe o nome do produto”; Leia Nome; Enquanto (Nome <> “FIM”) Faça QtdeTipos = QtdeTipos + 1; Escreva “Informe o valor Unitário”; Leia ValorUnitario; Escreva “Informe a quantidade em estoque”; Leia Quantidade; SubTotal = (Quantidade * ValorUnitario) Estoque = Estoque + Quantidade TotalGeral = TotalGeral + SubTotal; Escreva “O valor total do produto “, Nome, “ é “, SubTotal; Escreva “Informe o nome do produto”; Leia Nome; FimEnquanto Escreva “Existem “, QtdeTipos, “ tipos de produtos”; Escreva “O estoque em volumes é “, Estoque; Escreva “O valor comercial do estoque é “, TotalGeral; Fim Algoritmos 77 Vamos reforçar aqui o conceito de Flag. FLAG é uma condição predefinida que determina o fim de uma estrutura de repetição, seja ela contada ou não contada. Na contada, o FLAG é implícito na quantidade de vezes que a estrutura se repete. Na não contada, ela depende de uma interação do usuário ou um comportamento específico do algoritmo. Agora é com você !!! Uma empresa deseja fazer um levantamento de seu estoque. Para isso, possui, para cada tipo de produto, seu nome, valor unitário e sua quantidade em estoque. A empresa deseja saber o Valor Contábil em estoque de cada produto, quantos tipos de produtos existem em estoque, o saldo de todos os produtos e Total Contábil Geral. A digitação terminará quando o nome do produto for igual a “FIM”. e-Tec Brasil/CEMF/Unimontes Algoritmo Estoque Variáveis ... Início Estoque = 0; QtdeTipos = 0; TotalGeral = 0; ... Enquanto (Nome <> “FIM”) Faça ... FimEnquanto ... Fim De modo idêntico ao exercício anterior, percebe-se que não se sabe quantas vezes ocorrerá a repetição, ou seja, quantos itens existem na suposta empresa. Assim, utilizase o flag nome <> fim. Igualmente ao exercício anterior, temos aqui o flag, que é solicitado antes da estrutura começar. Novamente, é solicitado dentro da estrutura, antes que termine. Caso o primeiro nome informado seja igual a “fim”, não haverá nenhuma iteração. Observe a inicialização das variáveis. São elas que exibirão ao usuário aquilo que ele pede, sendo todas acumuladoras. Dessa forma, precisam inicializar com zero. A variável Estoque terá a quantidade de volumes, QtdeTipos se refere a quantidade itens, e a TotalGeral trará o Estoque Contábil, ou seja, o valor financeiro do estoque da empresa. Essas três varíaveis sofrerão alterações a cada produto informado pelo usuário. Algoritmo Estoque Variáveis ... Início ... Escreva “Informe o nome do produto”; Leia Nome; Enquanto (Nome <> “FIM”) Faça ... ... FimEnquanto ... Fim Crie um exemplo de algoritmo que utiliza comandos repetitivos com teste no início mostrando uma massa de testes para o mesmo. Utilize o AVEA para compartilhar a idéia com seus colegas. A diferença entre o teste de início e o de fim nos comandos repetitivos é que, nos comandos com testes no início, os comandos internos podem não ser executados nem uma vez em função do valor do flag. No caso dos comandos com teste no final, pelo menor uma vez o grupo de comandos internos será executado. 6.3 Comandos repetitivos condicionais com teste no final Quando um grupo de comandos necessita ser executado ao menos uma vez, e tem a possibilidade de se repetir sua execução, você deve usar a estrutura de comandos repetitivos com teste no final do bloco. e-Tec Brasil/CEMF/Unimontes Veja a estrutura: 78 Informática Repita ... ... Bloco de Comandos .. Até <condição> Veja o seguinte trecho do algoritmo. Execute seus passos para obter o resultado. ... cont :=0; repita cont := cont + 1; até cont > 20 Vamos pensar no seguinte problema: Um comerciante deseja pagar todas as suas contas do dia. Faça um algoritmo que solicite o valor a ser pago e a Taxa de Juros, caso a conta esteja em atraso. Calcule o Total dos valores de multa e o valor total a ser pago. O algoritmo deverá também solicitar quantas contas serão pagas no dia. Informe também o total de contas em atraso e o total de contas pagas em dia. Atenção que não há possibilidade de não haver contas a pagar, ou seja, haverá no mínimo uma conta a ser paga no dia. Veja o algoritmo abaixo: Algoritmo Contas Variáveis QtdeContasAPagar, QtdeContasPagas, tdeContasEmAtraso : Inteiro; ValorConta, TaxaDeJuros, TotalVlrJuros, TotalAPagar : Real; PagoEmAtraso : String; Início QtdeContasPagas = 0; QtdeContasEmAtraso = 0; TotalVlrJuros = 0; TotalAPagar = 0; Escreva “Informe quantas contas serão pagas”; Leia QtdeContasAPagar; Repita Escreva “Informe o valor da conta”; Leia ValorConta; Escreva “Esta conta está sendo paga em atraso (S/N) ?”; Leia PagoEmAtraso; Algoritmos 79 e-Tec Brasil/CEMF/Unimontes Se (PagoEmAtraso = “S”) Então Escreva “Informe o índice da taxa de juros (0-100)”; Leia TaxaDeJuros; QtdeContasEmAtraso = QtdeContasEmAtraso + 1 Senão TaxaDeJuros = 0; FimSe TotalVlrJuros = TotalVlrJuros + (ValorConta * TaxaDeJuros / 100); TotalAPagar = TotalAPagar + ValorConta QtdeContasPagas = QtdeContasPagas + 1; Até (QtdeContasPagas = QtdeContasAPagar); Escreva “O Valor total pago por multa é “, TotalVlrJuros; Escreva “O Valor total pago é “, (TotalAPagar + TotalVlrJuros); Escreva “Contas em atraso : “, QtdeContasEmAtraso; Escreva “Contas em dia : “, (QtdeContasAPagarQtdeContasEmAtraso); Fim A diferença entre o teste de início e o de fim nos comandos repetitivos é que, nos comandos com testes no início, os comandos internos podem não ser executados nem uma vez em função do valor do flag. No caso dos comandos com teste no final, pelo menor uma vez o grupo de comandos internos será executado. Essa situação traz um levantamento financeiro para previsão de pagamento. Não sabemos quantas contas serão pagas, mas o usuário as informará. O enunciado ainda diz que haverá sempre o mínimo de uma conta. Isso caracteriza que a repetição ocorrerá no mínimo uma vez. Releia o parágrafo anterior! Está na última frase a dica para fazer o teste no fim. Vamos a outro exemplo. Faça um algoritmo que solicite números inteiros até que um número ímpar seja digitado. O algoritmo deverá informar, ao final, quantos números pares foram informados. Esse exercício é simples, talvez sinta uma dificuldade apenas em saber como identificar quando um número é ímpar ou par, mas para resolver isso podemos abstrair a existência de uma função chamada Mod () ou Resto( ). e-Tec Brasil/CEMF/Unimontes Algoritmo NumeroPares Variáveis Numero, QtdeNumerosPares : Inteiro; Início QtdeNumerosPares = 0; Repita Escreva “Informe um número”; Leia Numero; QtdeNumerosPares = QtdeNumerosPares + 1; Até (Mod(Numero, 2) <> 0) QtdeNumerosPares = QtdeNumerosPares – 1; Escreva “Números pares informados “, QtdeNumerosPares; Fim Vamos relembrar! 80 Informática O procedimento anterior trabalha com dois argumentos: o número a ser dividido e o número pelo qual este número será dividido (numerador e denominador). 6.4 Comandos repetitivos condicionais com contadores A repetição contada é aquela em que o programador sabe, antes de ela ocorrer, quantas vezes deverá ser executada. Deve ficar claro, que a quantidade de vezes que o bloco de comandos será executado pode ser um valor atribuído a uma variável ou tal valor pode ser informado pelo usuário. Veja a estrutura do comando: Para I:= valor inicial até valor final passo incremento faça ... ... Bloco de Comandos .. Fim Para A condição que é avaliada para a execução do bloco de comandos é se I é maior ou igual ao valor inicial e se I menor ou igual ao valor final, para incrementos crescentes. Para incrementos decrescentes, a condição avaliada para a execução do bloco de comandos é se I menor ou igual ao valor inicial e se I maior ou igual ao valor final. Até significa inclusive. Quando o passo definido para o incremento for igual a 1, este pode não ser explicitado na linha do comando Para. Vejamos os seguintes trechos de algoritmos: Para i := 1 até 5 faça Imprima(i); Fim Para O quadro 13 mostra os passos de execução do trecho acima. Agora é com você!! Criando-se uma lista de 3 números (10, 20, 45, por exemplo) faça os testes no algoritmo para obter o resultado do mesmo. Crie um exemplo de algoritmo que utiliza comandos repetitivos com teste no fim mostrando uma massa de testes para o mesmo. Utilize o AVEA para compartilhar a idéia com seus colegas. O comando Para provê iterações do bloco de comandos, controladas pelo valor da variável do tipo inteiro (qualquer), nesse caso, I que recebe um valor inicial e é incrementada (ou decrementada) pelo passo, até atingir o valor final. Ao executar o fim para, o valor de I sofre o incremento definido no passo, que pode ser positivo ou negativo. QUADRO 13 Execução que conta de 1 a 5. I condição resultado 1 I > 5? 1 2 I > 5? 2 3 I > 5? 3 4 I > 5? 4 5 I > 5? 5 6 I > 5? Sai do loop Fonte: Própria. Para i := 1 até 10 faça Passo 3 Algoritmos 81 e-Tec Brasil/CEMF/Unimontes Imprima(i); Fim Para O quadro 14 mostra os passos de execução do trecho acima. QUADRO 14 Execução que conta de 1 a 10 I condição resultado 1 I > 10? 1 4 I > 10? 4 10 I > 10? 10 13 I > 10? Sai do loop Fonte: Própria. Para i := 100 até 0 faça Passo -10 Imprima(i); Fim Para O quadro 15 mostra os passos de execução do trecho acima. Quadro 15 Execução que conta de 100 a 0 I condição resultado 100 I > 0? 100 90 I > 0? 90 80 I > 0? 80 70 I > 0? 70 60 I > 0? 60 50 I > 0? 50 40 I > 0? 40 30 I > 0? 30 20 I > 0? 20 10 I > 0? 10 0 I > 0? 0 -10 I > 0? Sai do loop Fonte: Própria. Vamos analisar o seguinte problema: Dado um número, faça um algoritmo que escreva todos os números ímpares menores que esse número. Dica: Comece pelo um. Algoritmo NumerosImpares e-Tec Brasil/CEMF/Unimontes 82 Informática Variáveis Numero, I : Inteiro; Início Escreva “Informe um número”; Leia Numero; Para I = 1 Até Numero Faça Se (Resto(I, 2) <> 0) Então; Escreva I, “ é ímpar”; Fim Se; Fim Para; Fim Reflita !!! O problema proposto nesse enunciado é que deverá ser solicitado ao usuário um número, o algoritmo deverá fazer uma contagem de 1 até o valor informado, e, a cada número contado, identificar se o mesmo é ímpar. Se for, deve ser mostrado seu valor ao usuário. Bem, vamos lá!! Agora é com você! Faça um algoritmo que leia 10 números e obtenha: a) A soma dos números; b) A média dos números; c) O maior número da lista; d) O menos numero da lista. Tudo o que estiver entre o faça e o fimpara será caracterizado como o que deve ser feito para cada ocorrência, nesse caso verificar se a variável I é ímpar e, em caso positivo, informála ao usuário. Mas o que é e o que faz essa variável I ? Algoritmo MenuNumeros Variáveis Numero, Soma, Maior, Menor, I : Inteiro; Media : Real; Início Soma = 0; Maior = 0; Menor = 0; Para I = 1 Até 10 Faça Escreva “Informe um número ”, I, “ de 10.”; Leia Numero; Se i = 1 então Maior = numero; Menor = numero; Fim se; Soma = Soma + Numero; Se Numero > Maior Então Maior = Numero Fim Se Se Numero < Menor Então Algoritmos 83 e-Tec Brasil/CEMF/Unimontes Menor = Numero Fim Se Fim Para Media = (Soma / 10); Escreva “A soma dos 10 números digitados é : “, Soma; Escreva “A média aritmética entre os 10 números; digitados é : “, Media; Escreva “O maior número dentre os 10 digitados é “, Maior; Escreva “O menor número dentre os 10 digitados é : “, Menor; Fim Agora é com você!!! Crie uma lista de números (1, 100, 2 , 300, 20, 4, 5, 2, 8 , 90), teste o algoritmo e produza a saída conforme solicitado no enunciado. Para melhorar o entendimento das estruturas, você agora vai analisar alguns exemplos de algoritmos que tratam de repetições. 1) Algoritmo para calcular os múltiplos de 3 de 6 até n Algoritmo calculamultiplos { OBJETIVO: CALCULAR OS MULTIPLOS 3 NO INTERVALOR DE 6 ATE N AUTOR: nome DATA CRIACAO: 18/10/2010 } Variaveis inteiro: num, cont; Início Escreva (“Digite o número limite.”); leia(num); para cont de 6 ate num faca se mod (cont, 3) = 0 entao Escreva(“O número ”, cont, “ é multiplo de 3.”); Fim se; Fim para; Fim. 2) Algoritmo para imprimir a série de Fibonacci (0,1,1,2,3,5,8, 13,21....) Algoritmo { OBJETIVO: IMPRIMIR UMA DETERMINADA QTDE DE NUMEROS DE FIBONACCI AUTOR: nome DATA CRIACAO: 19/10/2010 } Variaveis inteiro: num, cont, ant1, ant2, fib; Início fib = 0; ant2 = 0; ant1 = 1; e-Tec Brasil/CEMF/Unimontes 84 Informática Escreva(“Digite a quantidade de números que deseja imprimir.”); leia(num); Escreva(fib); fib = 1; para cont de 2 ate num faca Escreva(fib); fib = ant1 + ant2; ant2 = ant1; ant1 = fib; Fim para; Fim. 3) Algoritmo para calcular o valor da expressão E = 1 + 1/1! + ½! + .... + 1/n! Algoritmo { OBJETIVO: CALCULAR O VALOR DA EXPRESSAO E = 1 + 1/1! + 1/2!...1/N! AUTOR: nome DATA CRIACAO: 19/10/2010 Variaveis inteiro: num, cont1, cont2, fat; real: exp; Início exp = 1; imprima(“Digite o número limite da sequência.”); leia(num); para cont1 de 1 ate num faca fat = 1; para cont2 de 2 ate cont1 faca fat = fat * cont2; fim para; exp = exp + 1 / fat; fim para; fim. Escreva (“O valor da expressão é: ”, exp); 4) Algoritmo para calcular salário e qtde de filhos de uma cidade Algoritmo { OBJETIVO: CALCULAR SALARIO E QTDE DE FILHOS DE UMA CIDADE AUTOR: ANDRE nome DATA CRIACAO: 19/10/2010 } variaveis Algoritmos 85 e-Tec Brasil/CEMF/Unimontes Início inteiro: numfilhos, cont, salarios100, somafilhos; real: salario, somasalarios, maiorsalario; cont = 0; somasalarios = 0; maiorsalario = 0; cont = 0; salarios100 = 0; somafilhos = 0; Escreva(“Entre com o salário.”); leia(salario); Escreva(“Entre com o número de filhos.”); leia(numfilhos); enquanto salario >= 0 faca cont = cont + 1; somasalarios = somasalarios + salario; somafilhos = somafilhos + numfilhos; se salario <= 100 entao salarios100 = salarios100 + 1; Fim se; se salario > maiorsalario entao maiorsalario = salario; Fim se; Escreva(“Entre com o salário.”); leia(salario); Escreva (“Entre com o número de filhos.”); leia(numfilhos); Fim enquanto; Escreva(“A média dos salários é: ”, somasalarios / cont); Escreva (“A média do número de filhos é: ”, somafilhos / cont); Escreva (“O percentual de pessoas com salário até 100 é: ”, salarios100 * 100 / cont); Fim. Resumo Você estudou nesta unidade as estruturas de repetição que tratam de processar quantidades de dados que, em muitos casos, o programador e em outros, o programador não tem ideia. Assim, a informação do usuário é papel fundamental para o sucesso dos resultados. Assim, você pode conhecer os recursos da repetição com teste no e-Tec Brasil/CEMF/Unimontes 86 Informática início, repetição com teste no fim, além da repetição contada. Esperamos que os exemplos tenham auxiliado na compreensão de mais esses conceitos! Vamos em frente! Chegamos ao final da leitura desta unidade e não poderíamos deixar de parabenizá-lo por estar conosco até aqui e cheio de vontade para continuar o estudo da próxima unidade. Atividades de aprendizagem 1) Elabore um Algoritmo que depois de ler uma sequência de N números (N informado pelo usuário), apresente os seguintes resultados: máximo, mínimo, somatório, a quantidade de números superiores a 10, a percentagem de valores superiores a 10, a média, a média dos valores superiores a 10. 2) Construir um algoritmo que calcule a média aritmética de vários valores inteiros positivos. O final da leitura acontecerá quando for lido um valor negativo. 3) Em uma eleição presidencial existem quatro candidatos. Os votos são informados através de códigos. Os dados utilizados para a contagem dos votos obedecem à seguinte codificação: - 1,2,3,4 = voto para os respectivos candidatos; - 5 = voto nulo; - 6 = voto em branco; Elabore um algoritmo que leia o código do candidato em um voto. Calcule e escreva: - total de votos para cada candidato; - total de votos nulos; - total de votos em branco. Como finalizador do conjunto de votos, tem-se o valor 0. 4) Escreva um algoritmo que calcule a média dos números digitados pelo usuário, se eles forem pares. Termine a leitura se o usuário digitar zero (0). 5) Escreva um algoritmo que leia o código de n alunos e suas três notas. Algoritmos 87 e-Tec Brasil/CEMF/Unimontes Calcule a média ponderada do aluno, considerando que o peso para a maior nota seja 4 e para as duas restantes, 3. Mostre o código do aluno, suas três notas, a média calculada e uma mensagem “APROVADO” se a média for maior ou igual a 5 e “REPROVADO” se a média for menor que 5. Repita a operação até que o código lido seja negativo. 6)Escrever um algoritmo receba um numero x. Após, calcule a sua tabuada de 1 até n, de um. Mostre a tabuada na forma: 1xn=n 2 x n = 2n 3 x n = 3n ....... n x n = n2 7) Escrever um algoritmo que leia um número n que indica quantos valores devem ser lidos a seguir. Para cada número lido, mostre uma tabela contendo o valor lido e o fatorial desse valor. 8)Escrever um algoritmo que leia um número não determinado de valores e calcule a média aritmética dos valores lidos, a quantidade de valores positivos, a quantidade de valores negativos e o percentual de valores negativos e positivos. Mostre os resultados. 9)Escrever um algoritmo que leia uma quantidade desconhecida de números e conte quantos deles estão nos seguintes intervalos: [0,25], [26,50], [51,75] e [76,100]. A entrada de dados deve terminar quando for lido um número negativo. 10) Faça um algoritmo que leia vários números inteiros e calcule o somatório dos números negativos. O fim da leitura será indicado pelo número 0. Para Todos os algoritmos que você criou nessa unidade, elabore uma massa de testes. Ao terminar,utilize o AVEA para compartilhar a idéia com seus colegas. e-Tec Brasil/CEMF/Unimontes 88 Informática AULA 1 Alfabetização Digital Aula 7 - Variáveis homogêneas – Vetores e Matrizes Você deve lembrar que definimos variável como uma entidade criada para permitir o acesso a uma posição de memória, onde se armazena uma informação de um determinado tipo de dado pela simples referência a um nome simbólico. Nem sempre os tipos básicos inteiro, real, caractere e lógico são suficientes para exprimir estruturas de dados em algoritmos. Dessa forma, surge a necessidade da criação da definição de novos tipos. Aparecem então as variáveis indexadas. Ao final desta unidade, esperamos que você seja capaz de: - Conhecer e aplicar o uso de índices; - Definir variáveis homogêneas do tipo vetores e matrizes; - Aplicar o uso de vetores e matrizes para as mais distintas aplicações. 7.1 Vetores Vetor é uma variável dividida em n partes, sendo esse número n, a sua dimensão. Por exemplo, se um professor quiser armazenar notas de 80 alunos, ele pode definir uma variável nota e dividi-la em 80 partes e, cada parte recebe o valor da nota de cada aluno. Essa nota é referenciada por um índice delimitado de 1 até 80, usado para o manuseio às partes da variável nota, como a seguir. Variáveis indexadas é um conjunto de variáveis do mesmo tipo, referenciáveis pelo mesmo nome e individualizadas entre si, em função de sua posição, referenciada pelo índice. Quando a variável é indexada por um índice, trata-se de um vetor. Por sua vez, quando a mesma é referenciada por, no mínimo dois índices, trata-se de matriz. Para acessar cada parte do vetor, faz-se necessária a presença de uma variável que armazena o número de cada parte do vetor, de 1 até n, sendo essa variável denominada de índice. Nota 5.0 30. 80. 1 2 3 ............... 9.5 80 A criação do tipo vetor pode ser feita segundo a seguinte especificação: Tipo v = vetor [li :ls] <tipo básico>; Onde li = limite inferior Ls = limite superior Tipo básico = um dos quatro tipos primitivos Algoritmos 89 A utilização do vetor viabiliza a implementação de procedimentos mais elaborados como, por exemplo, métodos de ordenação de dados, procedimentos de pesquisa aos dados, como veremos mais adiante. e-Tec Brasil/CEMF/Unimontes Para representar a variável nota, faz-se a definição: Tipo v = vetor [1:80] real; v: nota; O número de elementos do vetor é dado por (ls - li +1). Então, se substituirmos os dados do vetor acima defina, temos: 80 -1 + 1= 80 Agora é com você!! Seja a variável vetor definida abaixo. Qual o número de elementos do vetor? Tipo v = vetor [5:9] caracter; V:nome Solução: O vetor tem 9-5+1= 5 elementos e pode ser visto como: 5 6 7 8 9 Os índices do vetor são os números de 5 a 9. Assim, podemos indexar o vetor com intervalos de valores, os mais distintos, não tendo que ser, necessariamente, os índices somente do tipo inteiro. Eles podem ser também do tipo caractere, lógico, dependendo da forma de elaboração do procedimento lógico. A situação mais comum é quando se define um vetor com índices inteiros. Cada elemento do vetor é tratado como se fosse uma variável simples. Para a referência a um elemento, usa-se o nome do vetor e a identificação do elemento (índice) entre colchetes ou parênteses. Por exemplo, se necessitarmos definir o valor “João” ao elemento identificado pelo índice 6 do vetor anterior teríamos: Nome[6]:=”joão” joão 5 6 7 8 9 Agora é com você!!! Faça um algoritmo que leia no máximo 10 números e, após a sua leitura, mostre ao usuário em ordem inversa à digitada por ele. Algoritmo OrdemInversa e-Tec Brasil/CEMF/Unimontes 90 Informática Variáveis I, N : Inteiro Tipo v = Vetor [1:10]:inteiro; V: entrada; Início Repita Escreva “Informe a quantidade de números que digitará”; Leia N; Até ((N > 0) E (N <= 10)) Para I = 1 Até N Faça Escreva “Informe o número “, I, “ de “, N; Leia Entrada[I]; FimPara I = N; Enquanto ( I > 0) Faça Escreva “Número “, I, “ de “, N, “ é “, Entrada[I] I = I – 1; FimEnquanto; Fim No desenvolvimento desse pseudocódigo, são trabalhados alguns novos conceitos. Quando definimos uma variável de conjunto (vetor ou matriz), devemos definir também a capacidade máxima de armazenamento que ela aceita, ou seja, a quantidade de elementos (valores) que ela suportará. A esse tamanho máximo, damos o nome de Tamanho Físico. Ao que realmente foi utilizado do conjunto, ou seja, a essa quantidade de elementos utilizados é dado o nome de Tamanho Lógico. Para que isso aconteça, devemos ter um controle para saber o tamanho físico e, de tal espaço, quantas posições serão utilizadas. Esse controle deve ser feito em variáveis distintas. Observe com atenção que a reserva do tamanho do vetor não implica sua real utilização: podemos optar (necessitar) usar menos (nunca mais). Vamos a mais um exemplo! Faça um algoritmo capaz de verificar se um dado caractere existe ou não na cadeia lida, como a seguir: A K J L P H B I R E T X Z Q N B N M O P Algoritmo pesquisacaractere Variaveis Tipo v = vetor [1:20]:caractere; V : letra; Info : caractere; I : inteiro; Algoritmos 91 e-Tec Brasil/CEMF/Unimontes O comando Abandone executa a ação de abandonar o loop ou iteração no momento em que o conteúdo procurado for encontrado em alguma posição do vetor. Início Para I de 1 até 20 faça Leia Letra[i]; Fim para Leia info; Para I de 1 até 20 faça Se Letra[i] = info então Escreva Info, está na posição “, i, “ do vetor”; Abandone; Fim se; Fim Para Fim Vamos falar agora do comando abandone... Como o vetor tem 20 posições, o pior caso que vai acontecer é percorrer as 20 posições e não encontrar o conteúdo procurado. Pode também haver o caso de se percorrer o vetor e somente na posição 20m encontrar o conteúdo. Tanto no melhor caso, que é encontrar o conteúdo na primeira posição do vetor e no caso médio, encontrar nas demais posições com exceção da última, o processamento abandona a iteração, pois já cumpriu seu objetivo. Esse recurso diminui o tempo de processamento do algoritmo, fazendo-o um pouco mais otimizado. Vamos refletir: Se a informação introduzida pelo usuário na variável info estiver em alguma posição do vetor, então o algoritmo irá emitir a seguinte mensagem: O conteúdo de info está na posição I do vetor. Caso não seja encontrado o conteúdo, o algoritmo finaliza sem mostrar nada. Mas como fazer para que o algoritmo mostre quando encontrou e quando não encontrou o conteúdo procurado? Dessa forma, vamos usar uma variável do tipo lógico para auxiliar na resolução do problema. Algoritmo pesquisacaractere Variaveis Tipo v = vetor [1:20]:caractere; V : letra; Info : caractere; Achou: lógico; I : inteiro; e-Tec Brasil/CEMF/Unimontes 92 Informática início Para I de 1 até 20 faça Leia Letra[i]; Fim para; Leia info; Achou = falso; Para I de 1 até 20 faça Se Letra[i] = info então Achou = verdadeiro; Abandone; Fim se; Fim Para; Se achou então Escreva Info “ está na posição “, i, “ do vetor”; Senão Escreva (“A informação procurada não se encontra no vetor”); Fim SE; Fim A variável achou, como é do tipo lógico, pode receber os valores falso ou verdadeiro. Para inserir a variável do tipo lógico em comandos condicionais, basta descrever a sintaxe: Se achou então A semântica é: Se achou é verdadeiro..... Para prover ainda mais recursos de desenvolver o seu algoritmo, vamos agora mostrar as variáveis indexadas, composta de dois índices: as matrizes. 7.2 Matrizes Uma vez que as variáveis têm o mesmo nome, o que as distingue são índices que referenciam sua localização dentro da estrutura. Uma variável do tipo matriz é composta por linhas e colunas. A matriz é uma variável indexada, com, no mínimo, duas dimensões. Cada dimensão da matriz deve receber um índice distinto. A criação do tipo matriz pode ser feita segundo a seguinte especificação: Tipo v = matriz [li :ls, li1:ls1] <tipo básico>; Uma matriz é uma variável composta, homogênea, no mínimo bidimensional, formada por uma sequência de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome) e alocadas sequencialmente na memória. Onde li = limite inferior da linha Ls = limite superior da linha Algoritmos Li1 = limite inferior da coluna Ls1 = limite superior da coluna Tipo básico = um dos quatro tipos primitivos 93 e-Tec Brasil/CEMF/Unimontes Para representar a variável nota, faz-se a definição: Tipo v = vetor [1:10, 1:10] real; v: nota; Assim, cria-se uma variável de 10 x 10, do tipo real, como se mostra, a seguir: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 Para preencher as posições da matriz, podemos usar o seguinte procedimento: Algoritmo Boletim Variáveis Tipo m = matriz [1:10, 1:10] inteiro; M = aluno I , J: Inteiro Início Para I = 1 Até 10 Faça Para J = 1 até 10 faça Escreva “Informe o conteúdo da posição”; Leia Aluno[I, J]; Fim Para Fim Para Fim Quando você necessitar mostrar o conteúdo da matriz, proceda da mesma forma, inserindo a instrução escreva: Escreva aluno [I, J] Você pode observar que no exemplo anterior usamos dois índices (I e J), além de comandos de repetição aninhados. Agora é com você!!! e-Tec Brasil/CEMF/Unimontes 94 Informática Execute passo a passo e mostre os resultados obtidos. Vamos analisar o seguinte problema: Faça um algoritmo que solicite quatro notas e seus respectivos pesos. Esses valores deverão estar armazenados em uma única matriz. Ao final, exiba média ponderada dessas notas. Assuma que as notas são de zero a cem (0 a 100). Algoritmo Boletim Variáveis Tipo m = matriz [1:4, 1:2] inteiro; M = Numerador, Denominador, aluno I : Inteiro; Media : Real; Início Numerador = 0; Denominador = 0; Para I = 1 Até 4 Faça Escreva “Informe a nota “, I, “ do aluno”; Leia Aluno[I, 1]; Escreva “Informe o peso da nota “, I; Leia Aluno [I, 2]; Numerador = Numerador + (Aluno[I, 1] * Aluno[I, 2]); Denominador = Denominador + Aluno[I, 2]; FimPara; Media = (Numerador / Denominador); Escreva “A média do aluno é “, Media; Fim Vamos supor que são 4 notas, uma por bimestre. A própria estrutura criada para a matriz, através do índice de linha, pode controlar a nota de cada bimestre. Vamos analisar mais um exemplo de uso de matrizes. Outro ponto para reflexão!!! No algoritmo anterior, trabalhamos com uma matriz e usamos somente uma estrutura de repetição. Nesse problema foi possível trabalhar com o índice I e manter constante o conteúdo do segundo índice da matriz. Um comerciante deseja pagar todas as suas contas do dia. Faça um algoritmo que solicite o valor a ser pago e a taxa de juros para a conta. Lembre-se de que, caso a conta seja paga em dia, a taxa de juros é zero. Calcule o total dos valores de multa e o valor total a ser pago. O algoritmo deverá também solicitar quantas contas serão pagas no dia. Algoritmo Pagamento Variáveis I, QtdeContas : Inteiro; Tipo m = matriz[1:2, 1:5] Real; M = Contas; TotalMultas, TotalContas: Real; Algoritmos 95 e-Tec Brasil/CEMF/Unimontes Proponha uma discussão no AVEA que trata da utilização dos vetores e matrizes. Insira seus algoritmos e compareos com os aqueles criados pelos colegas. Início Repita Escreva “Informe quantas contas serão pagas”; Leia QtdeContas; Até (QtdeContas > 0 E QtdeContas <= 5) TotalMultas = 0; TotalContas = 0; Para I = 1 Até QtdeContas Faça Escreva “Informe o valor da conta ”, I, “ de “, QtdeContas; Leia Contas[1, I]; Escreva “Informe a taxa de juros da conta “, I, “ de “, QtdeContas; Leia Contas[2, I]; TotalMultas = TotalMultas + (Contas[1, I] * Contas[2, I] / 100); TotalContas = TotalContas + Contas[1, I]; FimPara; Escreva “O total a ser pago em multa é “, TotalMultas; Escreva “O valor total a ser pago é “, TotalContas + TotalMultas; Fim Resumo Chegamos ao final de mais uma unidade. Tenho certeza de que você está observando que, quanto mais avançamos no conteúdo, mais conhecemos recursos interessantes para aplicar na lógica de programação. Esperamos que agora seu entendimento torne-se cada vez mais claro sobre o armazenamento de dado em variáveis indexadas, assim como o manuseio com as mesmas. Esta unidade tratou de temas importantes, um pouco mais complexos que os abordados nas unidades anteriores, exigindo leitura mais aprofundada e uma análise mais detalhada dos exemplos mostrados. Por isso, voltamos a convidá-lo a expandir seus conhecimentos a respeito desses assuntos por meio da pesquisa. Relembramos que a inquietação e a busca por novas informações é um grande passo para o sucesso em qualquer área da vida. Mãos à obra! Atividades de aprendizagem 1)Elabore um Algoritmo que leia uma sequência de n números, e os mostre por ordem inversa. e-Tec Brasil/CEMF/Unimontes 96 Informática 2) Elabore um Algoritmo que dada uma sequência de números, indique qual a percentagem que cada um representa em relação ao total. 3) Elabore um Algoritmo que, dado um conjunto de temperaturas de cidades portuguesas, identificadas por um n.º de ordem, indique quais as que têm temperatura superior à média do país. Mostre uma lista de temperaturas ordenadas por ordem decrescente. 4) Elabore um Algoritmo que, dadas as notas de um conjunto de alunos, apresente o n.º de ocorrências de cada uma das notas que se situem entre a nota mínima e a nota máxima. No fim, apresente os seguintes valores estatísticos: nota máxima; nota mínima; n.º de zeros; média das notas; n.º de notas superiores à média. 5).Elabore um algoritmo que dada uma sequência de nomes, os apresente por ordem alfabética. 6) Dada uma sequência de números, determine a percentagem daqueles que são: superiores à média dos elementos que a constituem; inferiores ao antepenúltimo elemento da sequência. 7)Elabore um algoritmo que, baseando-se nos valores de produção mensal de uma fábrica de automóveis num dado ano, calcule e apresente: os valores mensais acumulados de produção ao longo do ano; o mês em que foi atingida metade da produção anual. Algoritmos 97 e-Tec Brasil/CEMF/Unimontes 8) Elabore um algoritmo que permita registrar as notas dos alunos de Sistemas de Informação à disciplina de Algoritmos e Programação I. O programa deve ter informação sobre o número, nome e notas dos 3 exames. Deve permitir ao usuário introduzir, consultar e alterar as notas de um aluno, ter uma opção para alterar as notas de todos os alunos existentes, e ainda tirar listagens por ordem de número de aluno e por ordem alfabética, conforme pedido do usuário; para cada aluno, as listagens deverão indicar se está aprovado ou não, sabendo-se que para isso deverá ter uma das três notas > 10. 9) Elaborar um algoritmo que leia um conjunto de 30 valores e os coloque em 2 vetores conforme forem pares ou ímpares. O tamanho do vetor é de 5 posições. Se algum vetor estiver cheio, escrevê-lo. Terminada a leitura escrever o conteúdo dos dois vetores. Cada vetor pode ser preenchido tantas vezes quantas forem necessárias. 10) Escreva um algoritmo que leia dois vetores de 10 posições e faça a multiplicação dos elementos de mesmo índice, colocando o resultado em um terceiro vetor. Mostre o vetor resultante. 11) Escreva um algoritmo que leia um vetor de 100 posições e mostre-o ordenado em ordem decrescente. 12) Escreva um algoritmo que leia um vetor de 13 elementos inteiros, que é o Gabarito de um teste da loteria esportiva, contendo os valores 1(coluna 1), 2 (coluna 2) e 3 (coluna do meio). Leia, a seguir, para cada apostador, o número do seu cartão e um vetor de Respostas de 13 posições. Verifique para cada apostador o número de acertos, comparando o vetor de Gabarito com o vetor de Respostas. Escreva o número do apostador e o número de acertos. Se o apostador tiver 13 acertos, mostrar a mensagem “Ganhador”. e-Tec Brasil/CEMF/Unimontes 98 Informática 13) Escreva um algoritmo que leia um vetor de 20 posições e mostre-o. Em seguida, troque o primeiro elemento com o último, o segundo com o penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. Mostre o novo vetor depois da troca. 14) Escrever um algoritmo que gera os 10 primeiros números primos acima de 100 e os armazena em um vetor de X(10) escrevendo, no final, o vetor X. 15) Escrever um algoritmo que leia 2 vetores de tamanho 10 e os escreva. Crie, a seguir, um vetor de 20 posições que contenha os elementos dos outros 2 vetores em ordem crescente. 16) Escrever um algoritmo que leia 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um vetor Z que seja: a) a união de X com Y; b) a diferença entre X e Y; c) a soma entre X e Y; d) o produto entre X e Y; e) a intersecção entre X e Y. Escreva o vetor Z a cada cálculo. Algoritmos 99 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital Aula 8 - Ordenação e pesquisa de dados Depois de aprender a utilizar os tipos primitivos de dados (inteiro, real, caractere e lógico) e as variáveis indexadas (vetores e matrizes) podemos estudar alguns procedimentos de ordenação e pesquisa de dados. Tais procedimentos são de extrema importância para o processamento de dados uma vez que são recursos que podem otimizar a recuperação dos dados tanto os da memória quanto os armazenados em disco. Quando se mantém um procedimento adequado de ordenação, fica mais fácil e rápido para que os dados sejam encontrados, na ordem desejada. Tal ordem pode ser ascendente ou descendente. Depende do problema em questão. Dessa forma, a ordenação auxilia não só no armazenamento, mas principalmente na pesquisa dos dados. Para ordenação e pesquisa, em geral utilizam-se as variáveis indexadas, como os vetores e as matrizes. 8.1 Ordenação de Dados Vários métodos de classificação são trabalhados para o desenvolvimento desta tarefa, tais como Ordenação por Inserção, ShellSort, Bubblesort, QuickSort e Heapsort. Este texto cuidará apenas do método Bubblesort para ordenação. dente; A classificação consiste em ordenar os elementos de um vetor ou matriz em uma determinada classificação, seguindo o critério necessário para cada problema. Ao final desta unidade, você será capaz de: - classificar um conjunto de dados de forma ascendente ou descen- aplicar pesquisa para busca seqüencial ou binária. Esse critério pode ser alfabético, para dados literais; crescente ou decrescente para dados numéricos. 8.1.1 Método da bolha – Bubblesort A filosofia básica desse método consiste em ler todo o vetor, comparando os elementos vizinhos entre si. Caso estejam fora de ordem, eles trocam de posição entre si. Procede-se assim até o final do vetor. Na primeira leitura, verifica-se que o último elemento do vetor já está em seu devido lugar (no caso de ordenação crescente, ele é o maior de todos). A segunda leitura é análoga à primeira e vai até o penúltimo elemento. Esse processo é repetido até que seja feito um número de leituras igual ao número de elementos a serem ordenados, menos um. Ao final desse processo, o vetor estará classificado segundo o critério escolhido. Algoritmos 101 e-Tec Brasil/CEMF/Unimontes Vamos analisar uma ordenação de 5 elementos pelo método da bolha. Algoritmo Bubble_Sort Variáveis Tipo v = vetor [1:5]: real; V = Numeros; I, J : Inteiro; Aux : Real; Início Para I = 1 Até 5 Faça Escreva “Informe o número “, I, “ de 5”; Leia Numeros[I]; Fimpara Aux = Numeros[I]; Numeros[I] = Numeros[I+1]; Numeros[I+1] = Aux; J = 5; Enquanto (J > 1) Faça Para I = 1 até (J-1) Faça Se (Numeros[I] > Numeros[I+1]) então Aux = Numeros[I]; Numeros[I] = Numeros[I+1]; Numeros[I+1] = Aux; Fim Se Fim para J = J –1 Fim Enquanto Escreva “Vetor Ordenado”; Para I = 1 Até 5 Faça Escreva Numeros[I]; Fim para; Fim Não é o mais eficiente dos métodos existentes, entretanto é considerado o mais popular, devido à sua simplicidade. Agora é com você! Desenhe um vetor vazio, faça os procedimentos de entrada de dados e de classificação. Veja o resultado final. Podemos pensar numa outra forma de trabalhar o mesmo processo de ordenação. Vejamos o algoritmo, a seguir: Algoritmo Bubble_Sort Variáveis Tipo v = vetor [1:5]: real; V = Numeros ; I, J : Inteiro; Aux : Real; Início Para I = 1 Até 10 Faça Escreva “Informe o número “, I, “ de 10”; Leia Numeros[I]; Fimpara; e-Tec Brasil/CEMF/Unimontes 102 Informática Para I = 1 até 9 Faça Para J = I até (10-I) Faça Se (Numeros[J] > Numeros[J+1]) então Aux = Numeros[J]; Numeros[J] = Numeros[J+1]; Numeros[J+1] = Aux; Fim Se; Fim para Fim Para Escreva “Vetor Ordenado”; Para I = 1 Até 10 Faça Escreva Numeros[I]; Fim para Fim Faça o mesmo procedimento de teste do pseudocódigo anterior. Desenhe um vetor vazio, faça os procedimentos de entrada de dados e de classificação. Veja o resultado final. 8.2 Pesquisa de Dados Vários métodos de pesquisas existem. Alguns bem interessantes e otimizados. Nosso conteúdo abordará dois métodos bem difundidos para pesquisa, que são a pesquisa sequencial e a pesquisa binária. Como vimos no estudo de vetores, a pesquisa consiste na verificação da existência de um valor dentro de um conjunto de dados. 8.2.1 Método de pesquisa sequencial Em um dos exemplos do conteúdo de vetores, foi estudado um algoritmo de pesquisa sequencial ou linear. É o método mais objetivo para encontrar um elemento particular num conjunto não classificado, isto é, cujos elementos não estão ordenados segundo algum critério. Envolve a simples verificação de cada componente do conjunto, sequencialmente, até que o elemento desejado seja encontrado (nesse caso, diz-se que a pesquisa foi bem-sucedida) ou que todos os elementos do conjunto tenham sido verificados sem que o elemento procurado tenha sido encontrado (pesquisa mal-sucedida). Para ilustrar o método de pesquisa sequencial, vamos apresentar o seguinte algoritmo: Algoritmo PesquisaSequencial Variáveis Tipo m = vetor [1,10] caractere; Valor: caractere; m = nomes; I : Inteiro; Achou : Lógico; Algoritmos 103 e-Tec Brasil/CEMF/Unimontes Início Para I = 1 Até 10 Faça Escreva “Informe o nome “, I, “ de 10”; Leia Nomes[I]; Fim para Escreva “Informe o nome que deseja procurar”; Leia Valor; I=1 Achou = .Falso. Enquanto (I <= 10) E (NÃO Achou) Faça Se (Nomes[I] = Valor) então Achou = .Verdadeiro Senão I = I + 1; Fim Se Fim Enquanto Se (Achou) então Escreva Valor, “ foi encontrado.” Senão Escreva Valor, “ não foi encontrado.” Fim se Fim Agora é com você!!! Faça uma analogia entre o algoritmo de busca apresentado no estudo de vetores e o algoritmo visto na pesquisa sequencial: Insira sua analogia no AVEA e compare com a dos seus colegas. 8.2.2 Método de pesquisa binária Quando os elementos de um vetor estão classificados (ordenados), a pesquisa binária é um dos tipos de pesquisa mais eficazes para estes casos. Ela tem a capacidade de eliminar metade dos elementos da matriz que está sendo pesquisada, a cada comparação. O método de pesquisa binária faz uso de três variáveis auxiliares: • Uma que aponte para o primeiro elemento da pesquisa; no caso de ser a primeira comparação é o primeiro elemento (valor 1); • Outra que aponte para o último elemento do vetor de pesquisa, no caso de um vetor de dez elementos, seria o valor 10; • A terceira variável, que aponte para o elemento do meio do vetor. no exemplo de 10 elementos, seria o quinto elemento. O elemento que é apontado pela variável meio é localizado e comparado com o valor procurado. Se ele for igual ao valor procurado, a pesquisa é dita bem sucedida e é interrompida. No caso de ser ele maior que o valor procurado, repetimos o processo na primeira metade do vetor. No caso de o elemento central ser menor que o valor procurado, repetimos o processo na segunda metade da matriz. A pesquisa binária só pode ser utilizada com um conjunto ordenado de valores. e-Tec Brasil/CEMF/Unimontes Vamos analisar a seguinte situação: 104 Informática Algoritmo PesquisaBinaria Variáveis I, Valor, Meio, Alto, Baixo, : Inteiro; Tipo v ; vetor [1:15] inteiro; V = Numeros; Achou : Lógico; Início Para I = 1 Até 15 Faça Escreva “Informe o número “, I, “ de 15”; Leia Numeros[I]; Fim para; Escreva “Informe o número que deseja procurar”; Leia Valor; Baixo = 1; Alto = 15; Achou = .Falso; Enquanto (Baixo <= Alto) E (NÃO Achou) Faça Médio = (Baixo + Alto) / 2; Se (Valor < Numeros[Médio]) então Alto = Médio - 1 Senão se (Valor > Numeros[Médio]) então Baixo = Médio + 1 Senão Se (Valor = Números[Médio]) então Achou = .Verdadeiro. Fim Se Fim Enquanto Se (Achou) então Escreva Valor, “ foi encontrado.”; Senão Escreva Valor, “ não foi encontrado.”; Fim se Fim Para elucidar tal processo, vamos mostrar as seguintes figuras que mostram um exemplo com uma matriz de quinze (15) elementos e a pesquisa de alguns valores. O elemento sombreado mostra que é o elemento do meio, e cada linha representa a porção da matriz que será utilizada para a pesquisa. Valor a pesquisar : 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 16 18 20 22 24 26 28 24 26 28 24 Algoritmos 105 e-Tec Brasil/CEMF/Unimontes Ou seja, o valor pesquisado não foi encontrado nos valores iniciais do vetor cujo resultado necessitou apenas de 4 iterações em um conjunto de 15 valores. Valor a pesquisar : 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 0 2 4 6 8 10 12 8 10 12 8 Este exemplo já traz uma situação de êxito na pesquisa: o valor foi encontrado. Resumo Na unidade estudada você pode ver a aplicabilidade dos vetores e matrizes em processos tão relevantes para a organização e recuperação da informação. Faz-se importante observar que, quanto mais você conhece os recursos oferecidos pela computação para o desenvolvimento dos algoritmos, percebe-se que os mesmos se Acumulam e podem ser utilizados de forma conjunta. O uso de vetores e matrizes para armazenamento de valores homogêneos teve, dentro dos textos vistos, mais um benefício identificado: a possibilidade de classificação e de pesquisa de valores. Dessa forma, a classificação pode ser feita em forma crescente ou decrescente para números, e alfabética para literais (o que não deixa de ser uma ordenação crescente). Atividades de aprendizagem 1) Elabore um Algoritmo que leia uma sequência de n números, e os ordene de forma descendente. 2) Elabore um Algoritmo que leia uma sequência de n números, e os ordene de forma ascendente. e-Tec Brasil/CEMF/Unimontes 106 Informática 3) Elabore um Algoritmo que leia uma sequência de n nomes e os coloque em ordem alfabética. 4) Elabore um Algoritmo para descobrir se existe um nome informado pelo usuári0 em uma lista de nomes ordenados. 5) Elabore um algoritmo para ordenar os valores de uma matriz 10 x 10. 6) Elabora um algoritmo para encontrar valor em uma matriz de 10x10. 7) faça um algoritmo que verifica quantos nomes se iniciam pela letra “m”. 8) Faça um algoritmo que verifica quantos nomes terminam com a letra “a”. 9) Faça um algoritmo que verifica se existe a letra P em qualquer parte do nome informado. 10) Faça um algoritmo que faz uma pesquisa binária em um conjunto de 100 nomes. Algoritmos 107 e-Tec Brasil/CEMF/Unimontes AULA 1 Alfabetização Digital Aula 9 - Variáveis heterogêneas – Registros O estudo de registros vem propiciar mais recursos para que você desenvolva seus algoritmos cada vez mais elaborados. Com os registros podemos trabalhar os dados de forma persistente. Assim, quando necessário, buscam-se os dados e se processam funcionalidades específicas. 9.1 Registros São estruturas que podem agregar diferentes informações. Dessa maneira, podem ser feitas diferentes combinações, gerando outros tipos de dados. Um registro consiste em um certo número de itens de dados, chamados membros da estrutura, que não necessitam ser do mesmo tipo, agrupados juntos, como mostra a figura a seguir. Dados de Funcionário Código: 4401 Importante! Um registro é uma coleção de campos, em que cada campo pode ser de um tipo de dado diferente. Por isso, os registros são conhecidos como variáveis compostas heterogêneas. Nome: Orozimbo da Silva Sexo: M Endereço: Rua das pazes 565 Bairro: Tranquilidade Cidade: Luá Cargo: chefe de divisão de tecnologia de informação Salário: R$ 7.879,90 Para definir um registro no pseudocódigo, proceda da seguinte forma: Tipo r = registro Campo1: tipo Campo1: tipo Campo n: tipo Fim registro R = nome variável Veja o seguinte exemplo: Tipo r = registro Nome, endereço, cidade, estado: caractere; Salário: real; Código: inteiro; Fim registro; R = func; Algoritmos 109 e-Tec Brasil/CEMF/Unimontes Para fazer leitura aos campos do registro, você pode usar a instrução: Leia registro.campo Para melhor compreender a sintaxe, veja o exemplo: Leia func.nome; Leia func.codigo; Leia func.salario; Para escrever os dados constantes nos campos dos registros, você pode usar a instrução: Escreva func.nome; Escreva func.codigo; Escreva func.salário; Para realizar qualquer processamento nos campos dos registros, pode-se utilizar o nome das variáveis do registro. Veja o exemplo: Func.salário = func.salário * 1,15; Essa instrução faz com que o salário do funcionário sofra um reajuste de 15 por cento. Segue agora apresentação de algoritmos que trabalharão estrutura heterogênea de dados em suas resoluções e, seguindo a estrutura já trabalhada nas unidades anteriores, os conceitos de código e regras de implementação serão explicados. Faça um algoritmo que solicite ao usuário o preço de compra e o preço de venda de um único produto e informe ao usuário: • O valor do lucro obtido, caso exista; • Caso o lucro seja negativo, deverá ser informado ao usuário que ele obteve prejuízo na venda. Algoritmo VerLucro Variáveis Tipo r = registro Custo, venda, lucro: real; Fim registro; r = produto; Início Escreva “Informe o preço de compra do produto”; Leia Produto.Custo; Escreva “Informe o preço de venda do produto”; Leia Produto.Venda; Produto.Lucro = (Produto.Venda – Produto.Custo); Se (Produto.Lucro > 0) então e-Tec Brasil/CEMF/Unimontes 110 Informática Escreva “A venda obteve um lucro de “, Produto.Lucro; Senão Se (Produto.Lucro < 0) então Escreva “A venda obteve um prejuízo de “, Produto.Lucro; Senão Escreva “Não houve lucro nem prejuízo na venda”; Fim Se Fim se Fim Vamos verificar outro exemplo de utilização de registros. Para cada aluno de uma turma de N alunos se têm dados como o seu número de registro, seu nome e sua média final, faça um algoritmo que: • Imprima a média da turma; • Calcule a percentagem de alunos, cujos nomes comecem pela letra A; • Determine quantos alunos têm a média superior a 7,0. Algoritmo Boletim Variáveis Tipo r = registro Numero: inteiro; Nome: string; Media: real; Fim registro Tipo v = vetor [´1:100] r; V = Alunos, nomeaux; QtdeAlunos, QtdeNomesA, QtdeAlunos7 : Inteiro; MediaTurma, PercentualNomesA : Real; Início Repita Escreva “Informe a quantidade de alunos”; Leia QtdeAlunos; Até (QtdeAlunos > 0 E QtdeAlunos <= 100); MediaTurma = 0; QtdeNomesA = 0; QtdeAlunos7 = 0; Para I = 1 Até QtdeAlunos Faça Escreva “Informe os dados do aluno “, I, “ de “, Qt deAlunos; Escreva “Número : ”; Leia Alunos[I].Numero; Escreva “Nome : “; Leia Alunos[I].Nome; Nomeaux = Alunos[i].nome; Escreva “Média Final : “; Algoritmos 111 e-Tec Brasil/CEMF/Unimontes Leia Alunos[I].Media; MediaTurma = (MediaTurma + Alunos[I].Media); Se (Alunos[I].Nome[1] = ‘A’) então QtdeNomesA = (QtdeNomesA + 1); Fim Se Se (Alunos[I].Media > 7.0) então QtdeAlunos7 = (QtdeAlunos7 + 1); Fim Se Fim Para MediaTurma = (MediaTurma / QtdeAlunos); MediaNomesA = (QtdeNomesA * 100) / QtdeAlunos; Escreva “A média da turma é : “, MediaTurma; Escreva “O percentual de alunos com nomes; começando por A é “, PercentualNomesA; Escreva “Existem “, QtdeAlunos, “ com média acima de 7.0”; Fim Crie um algoritmo que trabalhe com registro de dados e compartilhe com seus colegas no AVEA. O enunciado desse problema contempla uma situação um pouco mais complexa, pois envolve, além de registros, estruturas de repetição, estrutura de condição, bem como de um pequeno processamento sobre os dados de entrada. Foi utilizado um vetor do tipo registro para receber os dados. Além disso, para verificar quais nomes começam com a letra A, cada nome foi armazenado no vetor nomeaux, pois cada letra do nome fica armazenada em uma posição do vetor, começando do seu início. Resumo Como pôde ser visto, o uso de registros permite que dados comuns a um objeto, pessoa ou acontecimento, podem ser agrupados em uma única variável, sendo de tipos diferentes. O uso dos registros viabilizam o trabalho com dados de diferentes tipos, mas que tem interrelação entre si. As instruções de leitura e escrita tem uma nova forma de redação: elas devem identificar o nome das variáveis e muitas vezes o nome do registro que está sendo lido. Porém, o conceito e o manuseio de variáveis são aplicados como já visto ateriormente. Também nos registros se aplica a mácima de que os dados são organizados para viabilizar um eficiente processo de busca e recuperação. e-Tec Brasil/CEMF/Unimontes 112 Informática Atividades de aprendizagem 1) Defina campo, registros. 2) Com a utilização de registros, os dados se encontram persistente ou temporariamente armazenados? 3) Como é feito o manuseio das variáveis dos registros? 4) Mostre a necessidade de sua utilização dos registros. 5) Como a construção dos registros influenciam na busca de dados 6) Crie um registro que contém os seguintes dados: Código, nome, endereço, sexo, telefone, data nascimento, nome do pai, nome da mãe, identidade, CPF 7) Crie um exemplo de comando de leitura dos dados do registro da questão 6. Algoritmos 113 e-Tec Brasil/CEMF/Unimontes 8) Crie um exemplo de comando de escrita dos dados do registro da questão 6. 9) Crie um procedimento que faça a leitura de n registros cuja estrutura foi apresentada na questão 6, mostrando se o nome informado pelo usuário existe ou nos dados. 10) Crie um procedimento que faça a leitura de n registros cuja estrutura foi apresentada na questão 6, mostrando se o CPF informado pelo usuário existe ou nos dados e-Tec Brasil/CEMF/Unimontes 114 Informática AULA 1 Alfabetização Digital Aula 10 - Arquivos Os arquivos são formados pelo conjunto de registros armazenados em um dispositivo de memória secundária. Para relembrar!! Ao final desta unidade, você será capaz de: - entender a forma de organização e acesso dos arquivos; - mesclar o uso de registros juntamente com arquivos. 10.1 Operações Básicas As operações que se podem realizar nos arquivos são Inclusão, Exclusão, Alteração. Parar realizar a exclusão e a alteração, necessariamente deve realizar a Obtenção de registro em um processo de busca do mesmo. 10.2 Organização de arquivos Cada arquivo pode ser organizado de forma sequencial ou indexada. No caso da organização sequencial, um registro é gravado após o outro, em uma sequência. Para buscar qualquer registro armazenado de forma sequencial, deve-se percorrer o arquivo, registro por registro, até encontrar o conteúdo procurado ou detectar que o mesmo não existe. No caso da organização indexada, cada registro necessita de um índice para facilitar o processo de armazenamento e de busca. Para declarar um registro, usamos a seguinte notação: Tipo lista de identificadores arquivo organização de nome de registro Registro é um conjunto de informações logicamente relacionadas, no qual cada unidade de informação constitui um campo de registro Um arquivo só pode ser utilizado desde que se defina um registro para o armazenamento e processamento dos seus dados Vamos verificar o exemplo de declaração de arquivo sequencial: Tipo AGENDA arquivo sequencial de ENDEREÇO Tipo ENDEREÇO = REGISTRO (NOME, RUA caracter, NUMERO inteiro, CIDADE literal ou caractere) Tipo COMPRA.PEDIDOS arquivo sequencial de PAPELETA Tipo PAPELETA registro (quantidade inteiro, ESPECIFICAÇÃO caracterel) Algoritmos 115 e-Tec Brasil/CEMF/Unimontes Para manipular qualquer arquivo, ele precisa de uma operação de abertura. A notação abaixo mostra a abertura de arquivos: Abra lista de identificadores de arquivo tipo utilização Veja os exemplos: Abra AGENDA leitura; Abra AGENDA escrita; Abra AGENDA; Para encerrar o trabalho com os arquivos, os mesmos devem ser fechados. A notação a seguir mostra o fechamento de arquivo. Feche lista de arquivos Veja o exemplo, a seguir: início tipo NOTAS arquivo sequencial de DADOS; tipo DADOS REGISTRO (MATRICULA numerico, NOME ALUNO literal, NOTA TOTAL NUMERICO); fim registro; Abra NOTAS; -------Feche NOTAS; Fim. Você vai verificar no próximo exemplo um algoritmo que trata de leitura e escrita em um arquivo com organização sequencial. início Tipo A,B arquivo sequencial de T; Tipo T =registro (nome literal, salario numerico); Fim registro; Abra A leitura; Abra B Escrita; Repita leia (A.T); Se A.FDA então abandone; Fim se; Escreva (B.T); Fim repita; Feche A, B; Fim. e-Tec Brasil/CEMF/Unimontes 116 Informática Quando há um processo de leitura em arquivo sequencial, necessitamos saber se o arquivo chegou ao fim ou ainda tem registros a serem lidos. Para verificar se o arquivo chegou ao fim, usa-se a expressão FDA que quer dizer Fim de Arquivo, ou EOF, que quer dizer End of File (fim de arquivo em inglês). Para tratar da organização indexada, vamos passar a você um algoritmo que mostra a definição do arquivo, os campos e a forma de manuseio, como a seguir. Organização indexada início Tipo ALUNOS arquivo indexado de DADOS; Tipo DADOS =registro (matricula numerico, outros dados literal); Fim registro; Abra ALUNOS leitura; leia item [83008] ALUNOS.DADOS; se ALUNOS.INV senão ESCREVA.ITEM [83008] ALUNOS.DADOS; Fim se; Feche ALUNOS; Fim. Observe que, para que haja a leitura de registros no arquivo com organização indexada, necessitamos de um campo chave, chamado de índice. O fato é que, conhecendo o valor do índice, o acesso se torna direto àquele registro, não realizando verificação em nenhum outro. Se não conhecemos o conteúdo do índice, não há como fazer a leitura do registro que corresponde ao índice. Além disso, aparece uma instrução se alunos.inv senão. Essa instrução quando verdadeira quer dizer que não foi feita a leitura do registro procurado com o uso do índice. Assim, as soluções se tornam bem mais interessantes quando usamos estruturas que melhor se ajustem às soluções dos problemas computacionais. É bom lembrar que, quando se estuda todos esses recursos, você pode usar: - Tipos primitivos de dados, Vetores, Matrizes, Registros, Arquivos, Vetores com matrizes em cada posição, Matrizes com vetores em cada posição Vetores ou matrizes com registros em cada posição. Registro com campos distintos, um do tipo primitivo, um do tipo vetor, outro do tipo matriz, outro do tipo registro.... Etc.. Crie um algoritmo que trabalhe com arquivos nas formas seqüencial e indexada e compartilhe com seus colegas no AVEA. Algoritmos 117 e-Tec Brasil/CEMF/Unimontes Resumo Como pôde ser visto, o uso de registros permite que dados comuns a um objeto, pessoa ou acontecimento, podem ser agrupados em uma única variável, sendo de tipos diferentes. Mas, para que haja o armazenamento persistente de dados, o arquivo deve ser utilizado. Grandes massas de dados são armazenadas nos arquivos. Por isso, eles devem ter uma adequada organização. A organização dos arquivos facilita o processo de busca dos dados armazenados. Assim, para se definir a forma de organização, você deve pensar qual a necessidade de busca de dados, qual o tempo adequado. Assim, a organização indexada vem resolver, de certa forma essas demandas. Atividades de aprendizagem 1) Defina e arquivos. 2) Com a utilização de arquivos, os dados se encontram persistente ou temporariamente armazenados? 3) Qual o conceito de arquivos? Mostre a necessidade de sua utilização. 4) Diferencie organização sequencial de indexada 5) O que indica o sinal FDA? 6) O que indica o sinal INV? 7) Crie um problema em que os dados sejam armazenados em registros de um arquivo sequencial. 8) Crie um problema em que os dados sejam armazenados em registros de um arquivo indexado. 9) Crie um problema para que possa mesclar as formas de trabalho com arquivos: sequencial e indexado. 10) Crie um arquivo para o armazenamento indexado de dados dos alunos da turma de Algoritmos do programa E-tec Brasil. e-Tec Brasil/CEMF/Unimontes 118 Informática AULA 1 Alfabetização Digital Aula 11 - Modularização: procedimentos e funções Na última unidade do nosso estudo, abordaremos o processo de modularização, enfatizando os procedimentos e funções. Tais recursos resultam na construção de subalgoritmos que são noções importantes para o particionamento de um problema complexo em pequenos problemas simples. Portanto, no término desta etapa de estudo é fundamental que você seja capaz de: - Dividir um algoritmo resolvido em pequenos subalgoritmos; - Diferenciar procedimentos de funções. 11.1 Modularização A complexidade dos algoritmos está intimamente ligada à da aplicação a que se destinam. Em geral, problemas complicados exigem algoritmos extensos para sua solução. É sempre possível dividir grandes algoritmos que resolvem grandes e complexos problemas em partes menores em que a solução e os problemas são particionados. Uma vez dividido um grande problema em pequenos problemas, é possível a resolução de cada um desses problemas individualmente, para que, ao final, o problema, em seu todo, tenha sido resolvido. De um modo geral, as questões levantadas sobre um algoritmo qualquer, são as seguintes: 1. Quanto tempo levará para ser desenvolvido o seu procedimento lógico? 2. Sua elaboração não poderia ter sido mais rápida? Se fosse, quanto tempo poderia ter sido economizado? 3. Qual o grau de dificuldade para implementar uma modificação qualquer no algoritmo? 4. Como se traduz essas dificuldades em relação ao tempo gasto? 5. Qual será o comportamento do algoritmo em relação ao comportamento do sistema? 6. Se o algoritmo for lento, poderá se tornar mais rápido? 7. Se for possível tornar o algoritmo mais rápido, qual é o custo? Vale à pena? Com os módulos definidos, devem ser criados os Subalgoritmos, subrotinas ou subprogramas que são blocos de instruções que realizam tarefas específicas. Algoritmos 119 A Modularização é a técnica que faz o particionamento de um algoritmo extenso em algoritmos menores, dentro da premissa “Dividir para conquistar”. Uma aplicação qualquer, antes de ser programada, deve ser analisada. A atribuição do programador é desenvolver uma solução viável para a aplicação. Isso dá uma ideia da complexidade da solução e, consequentemente, é um bom meio para avaliar o tempo gasto na elaboração do algoritmo. O programador deve procurar encontrar relações entre atividades elementares definidas, as quais devem compor um único módulo. Os módulos são também combinados para formar novos módulos. O processo se repete até que a solução para a aplicação esteja completa. A essa técnica, dá-se o nome de Algoritmos Modulares que se inserem no processo de Modularização. e-Tec Brasil/CEMF/Unimontes Um subalgoritmo é um nome dado a um trecho de um algoritmo mais complexo e que, em geral, encerra em si próprio um pedaço da solução de um problema maior – o algoritmo a que ele está subordinado. O código de um subalgoritmo é digitado uma vez e pode ser executado quantas vezes forem necessárias. Dessa maneira, os programas tendem a ficar menores e mais organizados, dado que o problema pode ser dividido em pequenas tarefas. Os programas (em programação estruturada), em geral, são executados linearmente, uma linha após a outra, até o fim. Entretanto, quando são utilizados subalgoritmos, é possível a realização de desvios na execução natural dos programas. Esses desvios são realizados quando uma função é chamada pelo programa principal. Os subalgoritmos são importantes na: • Subdivisão de algoritmos complexos, facilitando seu entendimento; • Estruturação de algoritmos, facilitando principalmente a detecção de erros e a documentação de sistemas; • Modularização de sistemas, que facilita a manutenção de programas e a reutilização de subalgoritmos já implementados. O algoritmo principal chama a execução do subalgoritmo que executa a sua funcionalidade e retorna ao algoritmo chamador, o principal. O subalgoritmo deve ser desenvolvido na forma de procedimento ou uma função. Para que você possa usar corretamente os procedimentos e funções, devemos entender o conceito de variáveis locais e globais. 11.2 Variaveis locais e Globais As variáveis locais ao bloco são declaradas internamente no bloco e ativadas quando inicia o seu processamento. Assim, a variável local só existe dentro do procedimento ou da função. A variável local só passa a ser ativada no escopo do programa quando o procedimento ou função é chamado pelo programa chamador e instalado na memória. Após o término da execução, o subalgoritmo é desalocado da memória e as variáveis locais desaparecem. No caso das variáveis globais, as variáveis dos blocos externos são conhecidas nos blocos internos. Para você entender o escopo das variáveis, mostra-se o exemplo a seguir: Algoritmo entrada inteiro: N,I; início leia (N); início tipo v= vetor [1:n] real; V: VET; para I de 1 até N faça e-Tec Brasil/CEMF/Unimontes 120 Informática VET[I] = I; fim para; imprime VET; fim; fim; Vamos refletir! A variável n foi definida no bloco externo e foi usada no bloco interno, pois é uma variável global. Já, o vetor VET somente é declarado no bloco interno e sendo assim, somente reconhecido quando inicia o seu processamento, portanto, é uma variável interna. Ao terminar a execução do bloco interno, também o vetor VET desaparece. Vamos verificar outro exemplo: Algoritmo inteiro: I,J; Início leia (I); J = I**2; início Real: x; x = J + 1; imprime (x); fim; leia (j); I=I*J Fim. Agora é com você! Aponte as variáveis locais e globais que aparecem no algoritmo anterior. I e J = globais X = local Agora que você já entendeu como funciona a abrangência das variáveis nos blocos do algoritmo, vamos continuar verificar o que são parâmetros e como se pode utilizar nos procedimentos e funções 11.3 Parâmetros Para haver uma comunicação entre o algoritmo chamador e o procedimento ou função, utilizam-se os parâmetros, podendo os dados trefegarem de um algoritmo para outro. Algoritmos 121 e-Tec Brasil/CEMF/Unimontes A passagem de parâmetros pode ser dada de duas formas: por valor ou por referência. Observe a definição de cada uma delas. Na passagem de parâmetros por valor, ocorre uma cópia do conteúdo enviado para uma variável do mesmo tipo daquela que remeteu. Na passagem de parâmetros por referência não existe a cópia do conteúdo enviado para uma variável do procedimento/função. O que ocorre é o envio da referência na qual a variável do algoritmo chamador se encontra. Dessa forma, qualquer alteração feita na variável no subalgoritmo refletirá diretamente na variável do algoritmo chamador. Agora que você sabe o que são parâmetros e como acontece a passagem dos valores do algoritmo chamador para o algoritmo chamado, vamos estudar os procedimentos. 11.4 Procedimentos Procedimento é um subalgoritmo que retorna nenhum ou mais valores ao algoritmo chamador. É um bloco que consiste em um conjunto de declarações e comandos delimitados pelas palavras início e fim. Como você já assimilou os fundamentos teóricos necessários ao entendimento dos procedimentos, vamos analisar o seguinte algoritmo: Algoritmo Variáveis inteiro: A,B; PROCEDIMENTO TROCA INTEIRO :X,Y; início INTEIRO: AUX; AUX = X; X = Y; Y = AUX; FIM {TROCA}; Início LEIA (A,B) IMPRIMA (A.B) TROCA (A.B) IMPRIMA (A,B); Fim Vamos destacar alguns pontos: As variáveis A e B são globais. Quando o procedimento TROCA é acionado, o conteúdo das variáveis A e B são copiados para as variáveis X e Y, que são locais ao procedimento. e-Tec Brasil/CEMF/Unimontes 122 Informática Ao finalizar o procedimento, A recebe o conteúdo de X e B recebe o conteúdo de Y. Agora é com você!! Insira dados nas variáveis e mostre o resultado produzido pelo algoritmo. Vamos analisar outro exemplo. Algoritmo abs REAL: A,B; PROCEDIMENTO ABS(X,Y); REAL :X,Y; início SE x > 0 ENTÃO Y =X; SENÃO Y = -X; FM SE; FIM {ABS} Início A = 5, B = -3; ABS(A,B); FIM Vamos destacar alguns pontos: As variáveis A e B são globais O procedimento ABS recebe parâmetros X e Y que são alimentados pelo conteúdo de A e B. Ao finalizar o procedimento, A recebe o conteúdo de X e B recebe o conteúdo de Y. O procedimento trabalha com dados de entrada e de saída Agora é com você!! Insira dados nas variáveis e mostre o resultado produzido pelo algoritmo. Dado o algoritmo abaixo, crie uma massa de testes, mostre as saídas produzidas e destaque os pontos em relação à elaboração do mesmo. Algoritmo fatorial INTEIRO: N, FAT; CARACTER: TITULO; PROCEDIMENTO FATORIAL(NF,FATF); INTEIRO : NF,FATF; Algoritmos 123 e-Tec Brasil/CEMF/Unimontes início; I; FATF = 1; PARA I DE 1 ATE NF FAÇA FATF = FATF * I; FIM PARA; IMPRIMA (TITULO,NF, “E”, FATF); FIM {FATORIAL}; Início TITULO = ”FATORIAL DE”; N = 5; FATORIAL (N, FAT); IMPRIMA (FAT, ‘E’, TITULO, N); Fim. Bem!! Entendido o funcionamento dos procedimentos, vamos agora estudar as funções. 11.5 Função A função tem seu conceito trazido da ideia de função matemática, na qual um valor é calculado a partir de outro(s) fornecido(s) à função. Dentro de um algoritmo, a chamada a uma função sempre ocorre dentro de uma expressão do mesmo tipo que tem o valor retornado por ela. Sua chamada é feita pelo seu nome, seguido de seus respectivos parâmetros entre parênteses, dentro de uma expressão. A função é executada e, ao seu término, o trecho do comando que a invocou é substituído pelo valor retornado por ela dentro da expressão em que se encontra, e a avaliação da expressão prossegue normalmente. Vejamos o seguinte exemplo: Algoritmo REAL: A,B,C,D,E; FUNÇÃO ABS(X) REAL; REAL :X; início SE x > 0 ENTÃO ABS =X; SENÃO ABS = -X; FM SE; FIM {ABS}; Início A = 5, B = -3, C = -10; D = ABS (C); Imprima D; IMPRIMA (ABS(A)); e-Tec Brasil/CEMF/Unimontes 124 Informática Fim IMPRIMA ABS(C**3) * A+B IMPRIMA ABS (ABS(A)) * ABS(A); Vamos destacar alguns pontos: A função deve estar em uma expressão ou retornando em uma variável. A função pode receber n valores, porém retorna somente um valor. Agora é com você!! Insira dados nas variáveis e mostre o resultado produzido pelo algoritmo. 11.5.1 Função recursiva O código gerado por uma função recursiva exige utilização de mais memória, o que torna a execução mais lenta. Não é difícil criar funções recursivas, o difícil é reconhecer as situações nas quais a recursão é apropriada. Uma função é dita recursiva se é definida em termos de si mesma. Isto é, uma função é recursiva quando dentro dela está presente uma instrução de chamada a ela própria. Vamos tecer as seguintes considerações em relações às funções recursivas: a. pensar em criar uma função recursiva é escrever o problema em termos de recursão. Por exemplo, o fatorial de um número n qualquer pode ser definido por meio da seguinte expressão: n! = n * (n-1)! b. Toda função recursiva deve ter uma condição de término chamada condição básica. A função fatorial(), quando chamada, verifica se n é zero. Se essa condição for satisfeita, interrompe a execução. c. Cada vez que a função é chamada recursivamente, deve estar mais próxima de satisfazer a condição básica. Isso garante que o programa não executará numa sequência infindável de chamadas. Em nosso exemplo, a cada chamada da função, o valor de n estará mais próximo de zero. Vamos mostrar a você um exemplo interessante de função recursiva: Eu me casei com uma viúva que tinha uma filha crescida. Meu pai, que nos visitava frequentemente, se apaixonou por minha enteada e casou-se com ela. Assim, meu pai se tornou meu genro e minha enteada, minha mãe. Alguns meses mais tarde, minha esposa deu a luz a um filho, que se tornou cunhado do meu pai e, ao mesmo tempo, meu tio. A esposa do meu pai, que é minha enteada, também deu a luz a um filho. Dessa maneira, eu ganhei um irmão e, ao mesmo tempo um neto. Minha esposa tornou-se agora Algoritmos 125 e-Tec Brasil/CEMF/Unimontes a minha avó, já que ela é mãe da minha mãe. Assim sendo, eu sou o marido da minha esposa e, ao mesmo tempo, o seu enteado-neto. Em outras palavras, eu me tornei meu próprio avô. Vamos praticar um pouco mais. Dados o nome e as médias de uma turma com 47 alunos, faça um algoritmo que escreva o nome dos alunos que tiveram a média menor que a média da turma. Para desenvolver esse problema você deverá: • Criar um procedimento para a leitura dos dados e armazenamento em uma matriz declarada como variável global. Nesse mesmo procedimento, efetue o cálculo da média aritmética da turma, que também deverá estar armazenada em uma variável global. • Criar um procedimento para identificação e exibição dos alunos que tenham a média menor que a média da turma. Algoritmo Alunos Variáveis Tipo m=matriz [1:47, 1:15] caractere; M = nomes; Tipo v = vetor [1:47] real; V = media; MediaTurma : Real; Procedimento EntradaDeDados Variáveis I : Inteiro; Início Escreva “Informe o nome e média dos 47 alunos da turma”; MediaTurma = 0; Para I = 1 Até 47 Faça Escreva “Informe o nome do aluno “, I, “ de 47” Leia Nomes[I]; Escreva “Informe a média do aluno “, Nomes[I]; Leia Medias[I]; MediaTurma = MediaTurma + Medias[I]; Fim Para MediaTurma = MediaTurma / 47; Fim Procedimento SaidaDeDados Variáveis I : Inteiro; Início Escreva “Alunos com média abaixo da média da turma”; Para I = 1 Até 47 Faça Se (Medias[I] < MediaTurma) Então e-Tec Brasil/CEMF/Unimontes 126 Informática Escreva “Aluno “, Nomes[I], “ média “, Notas[I]; FimSe; FimPara; Fim; Início EntradaDeDados; SaidaDeDados; Fim Resumo Nesta unidade, estudamos um pouco sobre os subalgoritmos, variáveis locais e globais, parâmetros, procedimentos e funções. Foi bastante destacado que o uso de subalgoritmos, para resolução de problemas, é altamente recomendado, pois, mediante esse recurso, podemos particionar um grande problema em problemas menores e tratá-los individualmente, como partes completas. Isso permite, além da modularização de código, uma reutilização deste. O envio e o recebimento de argumentos e retorno de valores processados devem ser sempre utilizados, lembrando que os argumentos de entrada de procedimentos e funções são os dados necessários para que resolvam o problema que se propõem, e o retorno é aquele que se espera obter com o processamento dos argumentos de entrada. As linguagens atuais estão voltando seu uso mais para funções (que em linguagens orientadas a objetos são tratadas como métodos), pois o que diferencia um procedimento de uma função é o retorno de valores. Encerramos por aqui, sempre acreditando que o que foi estudado tenha sido de grande utilidade pra você nesta jornada de aprendizado, que deve ser constante. Como foi falado no início deste caderno, estude várias vezes os exemplos apresentados e faça várias vezes os exercícios. Se possível, associe o estudo de algoritmo à alguma atividade artística como cantar, pintar, tocar algum instrumento. Qualquer atividade que desenvolve a abstração auxilia no processo de refinamento do pensamento lógico que deve ser sempre aplicado na lógica de programação, para o desenvolvimento de resolução de problemas computacionais. Parabéns por chegar até aqui!!! Mas, não se esqueça!!! Continue estudando. Nós só começamos!!! Atividades de aprendizagem 1. Faça uma função que receba, por parâmetro, o raio de uma esfera e calcule o seu volume (v = 4/3.← .R3). Algoritmos 127 e-Tec Brasil/CEMF/Unimontes 2. Escreva um procedimento que receba as 3 notas de um aluno por parâmetro e uma letra. Se a letra for A o procedimento calcula a média aritmética das notas do aluno, se for P, a sua média ponderada (pesos: 5, 3 e 2). A média calculada também deve retornar por parâmetro. 3. Faça uma função que receba por parâmetro um valor inteiro e positivo e retorna o valor lógico Verdadeiro quando o valor seja primo e Falso, em caso contrário. 4. Faça um procedimento que receba por parâmetro os valores necessários para o cálculo da fórmula de Baskara e retorna, também por parâmetro, as suas raízes, caso seja possível calcular. 5. Faça uma sub-rotina que receba por parâmetro o tempo de duração de uma fábrica expressa em segundos e retorna também por parâmetro esse tempo em horas, minutos e segundos. 6. Faça uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias. 7. Faça uma função que verifique se um valor é perfeito ou não. Um valor é dito perfeito quando ele é igual à soma dos seus divisores excetuando ele próprio. (Ex: 6 é perfeito, 6 = 1 + 2 + 3, que são seus divisores). A função deve retornar um valor booleano. e-Tec Brasil/CEMF/Unimontes 128 Informática 8. Faça um procedimento que receba a idade de um nadador por parâmetro e retorne também por parâmetro, a categoria desse nadador de acordo com a tabela abaixo: Idade Categoria 5 a 7 anos Infantil A 8 a 10 anos Infantil B 11-13 anos Juvenil A 14-17 anos Juvenil B Maiores de 18 anos (inclusive) Adulto 9. Faça uma função que receba um valor inteiro e verifique se o valor é positivo ou negativo. A função deve retornar um valor booleano. 10. Faça uma função que receba um valor inteiro e verifique se o valor é par ou ímpar. A função deve retornar um valor booleano. 11. Faça uma função que receba a média final de um aluno por parâmetro e retorna o seu conceito, conforme a tabela abaixo: Algoritmos Nota Conceito de 0,0 a 4,9 D de 5,0 a 6,9 C de 7,0 a 8,9 B de 9,0 a 10,0 A 129 e-Tec Brasil/CEMF/Unimontes 12. Faça um procedimento que receba, por parâmetro, a hora de início e a hora de término de um jogo, ambas subdivididas em 2 valores distintos: horas e minutos. O procedimento deve retornar, também por parâmetro, a duração do jogo em horas e minutos, considerando que o tempo máximo de duração de um jogo é de 24 horas e que o jogo pode começar em um dia e terminar no outro. 13. Escreva um procedimento que receba 3 valores reais X, Y e Z. O procedimento deve verificar se esses valores podem ser os comprimentos dos lados de um triângulo e, neste caso, retornar qual o tipo de triângulo formado. Para que X, Y e Z formem um triângulo é necessário que a seguinte propriedade seja satisfeita: o comprimento de cada lado de um triângulo é menor do que a soma do comprimento dos outros dois lados. O procedimento deve identificar o tipo de triângulo formado observando as seguintes definições: Triângulo Equilátero: os comprimentos dos 3 lados são iguais. Triângulo Isósceles: os comprimentos de 2 lados são iguais. Triângulo Escaleno: os comprimentos dos 3 lados são diferentes. e-Tec Brasil/CEMF/Unimontes 130 Informática Referências ASCENCIO, Ana Fernanda Gomes, CAMPOS, Edilene Aparecida Veneruch de. Fundamentos da Programação de Computadores: Algoritmos, Pascal e C/ C++. São Paulo: Perason. 2006. CAPRON,H.L, JONSON, J.A. Introdução à Informática. 8 ed. São Paulo: Pearson. 2004. 350 p. COLLINS, Willian J. Programação Estruturada com Estudos de Casos em Pascal. São Paulo: McGraw-Hill. 515 p. DAGHIAN, Jacob. Lógica e álgebra de boole. 4 ed. São Paulo: Atlas. 1995.167 p. FARRER, Harry, ET AL. Pascal Estruturados. 3 ed. Rio de Janeiro: JC. 1999. 279 p. FARRER, Harry, ET AL. Algoritmos Estruturados. 3 ed. Rio de Janeiro: JC. 1999. 284 p. FORBELLONE, André Luiz Villar, EBERSPACHER, Henri Frederico. Lógica de programação: a construção de algoritmos e estrutura de dados. 3ª ed. São Paulo: Pearson, 2005.218 p. LAGES, Newton Alberto de Castilho & GUIMARÃES, Ângelo de Moura. Algoritmos e estruturas de dados.1ª ed. Rio de Janeiro: LTC. 1985. 216 p. LOPES, Anita & GARCIA, Guto. Introdução à programação: 500 algoritmos resolvidos. Rio de Janeiro: Campus, 2002. MEIRELLES, Fernando de Souza. Informática: novas aplicaçõs com microcomputadores. 2 ed. São Paulo: Pearson. 1994. 615 p. MIZRDHI, Victorine Viviane. Treibamento em Linguaem C++: modulo 2. 2 ed. São Paulo: Makron Books.318 p. SALIBA, Walter Luiz Caram. Técnicas de programação: uma abordagem estruturada. São Paulo: Makron Books, 1993. 141p. SALVETTI, Dirceu Douglas et al. Algoritmos estruturados. 3ª ed. Rio de Janeiro: LTC, 1999. SANTOS, Marcos Augusto dos et al. Programação estruturada de computadores: algoritmos estruturados. 2ª ed. Rio de Janeiro: LTC,1989. WIRTH, N. Algoritmo e estrutura de dados. 3 ed. Rio de Janeiro: Campus. 1985. 197 p. ZIVIANE, Nívio. Projeto de algoritmos com implementação em Pascal e C. 3ª ed. São Paulo: Pioneira, 1996. 267 p. Algoritmos 131 e-Tec Brasil/CEMF/Unimontes Currículo do professor conteudista Profª Msc Marilée Patta Mestre em Ciência da Informação, especialista em Tecnologias da Computação e especialista em Engenharia de Informação. Graduada em Tecnologia em Processamento de dados. Atua como professora das disciplinas de Sistemas de Informação, Gestão de Informação, Engenharia de Software, Algoritmos e Estruturas de Dados, Monografia, Estágio em Cursos de Graduação de Sistemas de Informação da Unimontes e das Faculdades Santo Agostinho. Atua como professora de pós-graduação lato-sensu na Unimontes nos cursos de Engenharia de Sistemas, na disciplina de algoritmos e estruturas de dados, administração hospitalar, informática jurídica, tecnologias da educação. Atua também como professora da pós-graduação lato-sensu nas Faculdades Santo Agostinho nos cursos de Tecnologias e Gestão da Informação, Administração Pública, Gestão empresarial. Ainda nas Faculdades Santo Agostinho: Coordena o curso de pós-graduação em Tecnologia e Gestão da Informação. Participa do colegiado de curso de sistemas de informação, participa do Núcleo Docente Estruturante do mesmo curso. Atua como analista de sistemas. Na Unimontes: Participa e coordena projetos de pesquisa. Atuou como coordenadora de curso de sistemas de informação, chefe de departamento de ciência da computação, membro de colegiado de curso, conselho departamental. Em outras instituições de ensino: Atuou como docente de disciplinas relacionadas à Tecnologia de Informação e à Educação. Daniel Carli Colares e Silva Mestrando em Engenharia Elétrica e Graduado em Sistemas de Informação. Atua como professor das disciplinas de Redes de Computadores, Algoritmos, Planejamento e Administração de Redes, Redes de Telecomunicações e Segurança em Redes de Computadores das Faculdades Santo Agostinho. Atuou como analista de sistemas na área de desenvolvimento de sistemas e de infraestrutura de redes de computadores nas Faculdades Santo Agostinho – Montes Claros – MG e atualmente é Analista de Sistemas do IFNMG (Instituto Federal do Norte de Minas Gerais – Campus Montes Claros) e-Tec Brasil/CEMF/Unimontes 132 Informática e-Tec Brasil/CEMF/Unimontes Escola Técnica Aberta do Brasil