L ÓGICA S ERVIÇO N ACIONAL DE A PRENDIZAGEM C OMERCIAL DE P ROGRAMAÇÃO 1ª Edição SENAC - R IO G RANDE DO S UL Elaboração e Edição SENAC - Rio Grande do Sul Documento produzido para uso interno do SENAC - Rio Grande do Sul L ÓGICA DE P ROGRAMAÇÃO SENAC.RS - Departamento Regional no Rio Grande do Sul Lógica de Programação 1ª edição Porto Alegre: SENAC-RS, 2003. 68 pp. Porto Alegre, 2003. C ONTEÚDO PROGRAMÁTICO S UMÁRIO Esta apostila foi desenvolvida pelo SENAC/RS, para apoio ao aluno durante o desenvolvimento do curso de Lógica de Programação. Este material é composto de bases teóricas que abrangem o conteúdo programático do curso e exercícios para sua fixação. Conteúdo programático ................................................................................................... 3 S u m á r i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4 Conceitos Iniciais ........................................................................................................... 6 Além do conteúdo programático, abaixo descrito, este material poderá conter tópicos adicionais que se destinam a complementar o aprendizado do aluno. O conteúdo programático deste curso foi projetado para uma carga horária de 60 horas, com o propósito de, ao final do curso, tornar o aluno apto ao uso do software e de suas ferramentas para a realização dos seus trabalhos. O conteúdo abrange os seguintes itens: Diferenças entre os Ambientes Operacionais: Texto e Gráfico Noções de Programação Orientada ao Operandos e Operadores Tipos de Algoritmos Formas de Representação Algoritmos Naturais e Estruturados Diferença Entre Sistemas Operacionais............................................................................ 9 O q u e é u m E ve n t o ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0 Como são Desencadeados os Eventos? ......................................................................... 10 Tabela Verdade Quem Gerencia os Eventos? ......................................................................................... 11 O que é uma Classe de Objeto? .................................................................................... 11 Conceito de Programação Estruturada Algoritmos: Definição e utilização Lógica de programação .................................................................................................. 8 Paradigma da Programação Orientada a Eventos/Objetos................................................. 10 Comando de Atribuição Definir o Conceito ERES Lógica ......................................................................................................................... 7 P r o g r a m a ç ã o O r i e n t a d a a o O b j e t o ( P O O ) e p r o g r a m a ç ã o O r i e n t a d a a o E ve n t o ( P O E ) . . . . . . . . 1 0 Expressões Objeto e ao Evento e Modular S o f t wa r e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 O que é um Objeto? .................................................................................................... 11 Inicio de Estruturas Como utilizar objetos ................................................................................................... 12 Conceituação Programação estruturada .............................................................................................. 13 Estrutura Seqüencial Al g o r i t m o s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4 O que é um Algoritmo? ................................................................................................ 14 Estrutura de Seleção Simples Formas de Representação de um Algoritmo .................................................................... 14 Estrutura de Seleção Composta V a n t a g e n s e D e s va n t a g e n s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5 Algoritmos naturais ..................................................................................................... 16 Estrutura de Seleção Múltipla Algoritmo Natural Comparado com Algoritmo Estruturado ................................................. 17 Estruturas de Repetição E l e m e n t o s U s a d o s n o s Al g o r i t m o s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 8 Algoritmos Contador Fixo e Flag Constantes ................................................................................................................... 19 Constantes e Variáveis Como usar o ILA e o Editor Q (Qedit) V a r i á ve i s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0 Elementos usados na construção de Expressões .................................................................................................................. 21 Operandos e Operadores ............................................................................................... 22 Operandos ................................................................................................................. 22 Operadores ................................................................................................................ 22 Estruturas de Controle .................................................................................................. 25 Estrutura Seqüencial ................................................................................................... 25 Estrutura de Seleção ................................................................................................... 25 Estrutura de Seleção Simples ....................................................................................... 26 Estrutura de Seleção Composta .................................................................................... 27 Estrutura de Seleção Múltipla ....................................................................................... 28 LÓGICA DE PROGRAMAÇÃO 3 LÓGICA DE PROGRAMAÇÃO 4 Estrutura de Repetição ................................................................................................ 31 C ONCEITOS I NICIAIS Estrutura Faca Enquanto .............................................................................................. 31 Estrutura para proximo ................................................................................................ 33 Exemplo de repetição por contador fixo ......................................................................... 34 Exemplo de repetição por flag de resposta ..................................................................... 35 Exemplo de repetição por flag predeterminado ................................................................ 36 Procedimentos e Funções ............................................................................................. 42 Modularização ............................................................................................................ 42 Módulo ...................................................................................................................... 42 Diferença entre Procedimento e Função ......................................................................... 44 Procedimentos com Parâmetros .................................................................................... 44 Passagem de parâmetros ............................................................................................. 44 Exemplos de Procedimento e Função ............................................................................. 46 Recursividade ............................................................................................................. 47 Vetores e Matrizes ........................................................................................................ 48 Desde os primórdios, o homem vem tentando resolver seus problemas com maior rapidez e o menor esforço possíveis, procurando automatizar as tarefas rotineiras. Isso possibilitou o aparecimento de instrumentos como a roda, roldana, alavanca, carro e até o computador. No entanto as tarefas que devem ser realizadas pelo computador, de forma automática, têm de ser anteriormente pensadas e colocadas em uma seqüência de ações para, posteriormente, serem inseridas na máquina. A essa seqüência de ações denomina-se Programa e à fase de formular soluções que gerem programas denomina-se Lógica de Programação. Programar é basicamente Construir Algoritmos. A meta principal de qualquer programador é resolver problemas por meio de soluções lógicas para obter resultados eficientes (corretos) e eficazes (com qualidade). Porém, se as soluções não forem bem planejadas (passo a passo), com certeza essa meta não será atingida. Antes de iniciar o estudo de Lógica de Programação, conheça alguns conceitos básicos: O que são Vetores e Matrizes ....................................................................................... 48 Al g o r i t m o s p a r a M a n i p u l a r V e t o r e s e M a t r i z e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 0 Considerações Finais.................................................................................................... 51 Ap ê n d i c e 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Exemplo de Algoritmo para Ordenar um Vetor ................................................................. 52 Ap ê n d i c e 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 SOFTWARE Software é o conjunto dos programas que comandam o funcionamento do Hardware. Programas são feitos a partir de algoritmos (objeto de estudo deste curso), seqüências de instruções/comandos para se atingir um objetivo. Depois de pronto, o algoritmo é convertido para uma linguagem de programação. O produto dessa conversão é um programa. C o m a n d o s d o I n t e r p r e t a d o r d a L i n gu a g e m d o s A l g o r i t m o s ( i l a ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Exercícios de Raciocínio Lógico .................................................................................... 55 E x e r c í c i o s c o m Al g o r í t m o s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 5 LÓGICA DE PROGRAMAÇÃO 6 LÓGICA As pessoas utilizam a lógica no cotidiano sem perceber; chegam mesmo a citá-la, sem entender direito o seu significado. Segundo o dicionário Aurélio, a lógica é a “coerência de raciocínio, de idéias”, ou ainda a “seqüência coerente, regular e necessária de acontecimentos, de coisas”. Você pode perceber isso, nos exemplos a seguir: O número 3 é menor que o número 5. O número 7 é maior que o número 5. Logo, o número 3 é menor que os números 5 e 7. Quando chove, não é preciso regar as plantas do jardim. Hoje choveu. Você conseguiria retirar o dinheiro? Com certeza não, pois, embora as ações estejam corretas, a seqüência está errada. A primeira ação é sair do banco. Como se pode retirar dinheiro de um banco estando fora dele? Agora observe as mesmas ações na seqüência correta. 1 2 3 4 5 6 7 8 9 10 Entrar no banco. Procurar a fila do caixa. Entrar na fila do caixa. Aguardar a vez de ser atendido. Entregar o cartão eletrônico ao funcionário que atende no caixa. Informar o valor a ser retirado. Digitar a senha. Pegar o comprovante de saque, o cartão eletrônico e o dinheiro. Conferir o valor em dinheiro. Sair do banco Utiliza-se a lógica para ordenar e corrigir pensamentos ou ações voltados para a solução de problemas. Logo, hoje não é preciso regar as plantas do jardim. O Brasil fica na América do Sul. A América do sul fica no continente americano. LÓGICA DE PROGRAMAÇÃO Logo, os brasileiros são americanos. Falar em Lógica de Programação significa apenas contextualizar a lógica na programação de computadores, buscando a melhor seqüência de ações para solucionar determinado problema. Às vezes o raciocínio funciona desordenadamente. Quantas vezes você já ouviu as frases: “E se acontecer aquilo?”, ou “É, mas eu não tinha pensado nisso!” Neste exemplo, estão descritas ações de quem vai a um banco; entretanto, veja se seria possível retirar o dinheiro obedecendo à seqüência descrita. 1 2 3 4 5 6 7 8 9 10 Na programação de computadores, o nome dessa seqüência de ações é Algoritmo, que é, de maneira bem simples, a seqüência de passos ou ações para atingir um objetivo. Já ação é um fato que, a partir de um estado inicial, após um período de tempo finito, produz um estado final previsível e definido. Por exemplo, abrir uma porta é uma ação. Sair do banco. Aguardar a vez de ser atendido. Entrar na fila do caixa. Digitar a senha. Entrar no banco Informar o valor a ser retirado. Procurar a fila do caixa. Pegar o comprovante de saque, o cartão eletrônico e o dinheiro. Entregar o cartão eletrônico ao funcionário que atende no caixa. Conferir o valor em dinheiro. No exemplo acima você pode observar que, ao objeto (porta), no estado inicial (porta fechada), é aplicada a ação (abrir) por um tempo determinado (segundos), levando ao estado final (porta aberta), previsível e definido (pois é esperado que, quando se abre algo, principalmente qualquer porta, no final, ela esteja aberta). OBJETIVO ....................................................................................................... ..................................................................................................................... O objetivo deste curso é proporcionar a apropriação de conhecimentos capazes de reconhecer, utilizar e saber a finalidade e o funcionamento das técnicas, ferramentas e elementos utilizados na construção de algoritmos para que possamos ordenar, desenvolver e aprimorar o raciocínio lógico aplicado na solução de problemas do cotidiano. ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 7 LÓGICA DE PROGRAMAÇÃO 8 D IFERENÇA E NTRE S ISTEMAS O PERACIONAIS O Sistema Operacional no ambiente Texto, o DOS, entre outros, tem como lógica a trilogia C.O.D. - Comando, Origem e Destino. Exemplo: O Sistema Operacional no ambiente Gráfico, o Windows, entre outros, tem como lógica a trilogia O.E.A. - Objeto, Evento e Ação. É necessário existir um Objeto (ex. Um botão), um Evento (ex. Um clique neste botão), para executar uma Ação (ex. Abrir outra Janela). ....................................................................................................... P ROGRAMAÇÃO O RIENTADA PROGRAMAÇÃO O RIENTADA AO AO O BJETO E VENTO (POE). (POO) E PARADIGMA DA PROGRAMAÇÃO ORIENTADA A EVENTOS/OBJETOS Neste paradigma, o controle de fluxo de dados é criado a partir da elaboração da Interface, onde o sistema operacional envia mensagens ao aplicativo informando quando algum Evento ocorre e sobre qual Objeto. A partir desta mensagem é verificada a existência de Código para tratar o Evento; se houver, este é executado. Assim, a ordem através da qual o seu Código de programa é executado depende de quais Eventos ocorram. Por essa razão, costuma-se dizer que quem controla a execução do sistema é o Usuário, pois, invariavelmente, o evento será disparado por ele. A Programação Orientada ao Objeto (POO) contém a Programação Orientada ao evento (POE), porém a POE não existe sem a POO. Podemos ter um objeto e não ter nenhum evento associado a ele, porém não podemos ter um evento sem existir um objeto. ..................................................................................................................... O QUE É UM E VENTO ? ..................................................................................................................... Um evento é um acontecimento, algo que acontece ou se faz acontecer sobre um Objeto da aplicação. Um acontecimento que o objeto pode reconhecer. ..................................................................................................................... ..................................................................................................................... COMO SÃO DESENCADEADOS OS EVENTOS? ..................................................................................................................... Através de ações de Usuários interagindo com o programa, por um outro programa requisitando uma troca de dados, ou pelo próprio Windows. ..................................................................................................................... Mexer e clicar botões do mouse, pressionar teclas no teclado, são ações que desencadeiam eventos. Exemplos de eventos: Click, MouseMove, Keypress. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 9 LÓGICA DE PROGRAMAÇÃO 10 QUEM GERENCIA OS EVENTOS? Os eventos são gerenciados (ambiente) operacional gráfico. COMO UTILIZAR OBJETOS pelo próprio programa ou pelo sistema Os objetos são utilizados através da manipulação de suas Propriedades, Métodos e Eventos, definidos assim: Exemplo de fluxograma: Desta forma, para alterarmos a cor de fundo de um formulário, devemos alterar o valor da propriedade BackColor, com o valor correspondente à cor desejada. Ex: Red Se quisermos exibir (ação) um formulário (janela), temos que utilizar o Método Show. Ex: Form1.Show Por fim, se quisermos emitir um Beep toda vez que o usuário movimenta o mouse sobre o formulário, devemos escrever um código para o Evento do Objeto que reconhece este movimento, neste caso o evento MouseMove. O QUE É UMA CLASSE DE OBJETO? Vantagens na utilização de objetos Uma Classe Objeto é um modelo de como o objeto será ao ser criado, ou seja, de onde este é derivado. A classe é composta por Código e Dados formando uma unidade. Exemplos de classes: A primeira vantagem é a redução no número de linhas de código. Imagine você ter que criar uma janela que permita a configuração de Impressora, em vez de criá-la e escrever centenas de linhas de código, você pode utilizar o objeto CommonDialogControl fornecido pela linguagem. Outra vantagem é a possibilidade da utilização de objetos desenvolvidos por terceiros, ou objetos criados por você mesmo, em qualquer aplicação. ....................................................................................................... O QUE É UM OBJETO? ..................................................................................................................... Um Objeto é uma instância de uma classe. Quem utiliza um objeto não precisa saber como este foi construído, mas, como interagir com ele; nem como o objeto executa um cálculo, mas como chamar a função que o executa e definir valores aos seus parâmetros. ..................................................................................................................... Desta forma um objeto da classe CommandButton (Command1) só existirá quando desenharmos este em um formulário, neste instante cria-se uma instância desta classe, o objeto Command1. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 11 LÓGICA DE PROGRAMAÇÃO 12 P ROGRAMAÇÃO ESTRUTURADA A LGORITMOS Na programação estruturada a arquitetura e do tipo Top to Dow n. Isto é, de cima para baixo. Efetua a execução do Código do início até o fim. O QUE É UM ALGORITMO? Na programação modular o programa é feito por módulos (rotinas), sendo que o conjunto desses formam o programa num todo. Um Algoritmo é uma seqüência finita de instruções bem claras, bem definidas e bem detalhadas que, quando colocadas em uma ordem lógica, nos levam a solução de um problema. Este tipo de programação é que vai formar o Código a ser escrito para cada Evento verificado. Os conhecimentos de Programação Estruturada e Modular, que será o objeto deste curso servem para elaborarmos os algoritmos e escrevermos os códigos nos procedimentos e funções a serem implementados, e executados quando for disparado um evento na Programação Orientada ao Objeto/Evento. E T AP AS P AR A A S O L U Ç Ã O D E P R O B L E M AS . 1 2 3 4 5 6 7 Planejamento Geral (O Que deve ser feito). Planejamento Detalhado (Como deve ser feito?) Revisão (Teste de mesa). Verificar se Como decidimos fazer, tem como resultado o Que deve ser feito. Codificação. Compilação ou Interpretação. Teste do Programa. Documentação. Ao elaborar um programa, devemos em primeiro lugar deixar bem claro, o Que precisa ser feito e, logo após, definirmos as maneiras possíveis de se chegar ao resultado desejado (Como?). Não existe uma única solução para um problema, dentre as soluções encontradas devemos escolher a que mais satisfaça ao conceito E. R. E. S., ou seja: E – Eficácia, o programa deve fazer o que deve ser feito. Não confundir com eficiência que significa fazer bem feito. Um programa pode ser bem feito, mas não oferecer a solução para o problema proposto. Os Algoritmos independem da linguagem de programação a ser utilizada. O objetivo da construção de Algoritmos é que eles possam ser adaptados a qualquer linguagem de programação. Não existe apenas um Algoritmo para a solução de um problema. Um Algoritmo pode ser numérico ou não. Um Algoritmo pode ter tantas entradas e saídas de dados, quantas forem necessárias, pode até não ter entradas, mas obrigatoriamente deverá ter pelo menos uma saída de dados que é o resultado do processamento. FORMAS DE REPRESENTAÇÃO DE UM ALGORITMO Temos 3 (três) formas de representar um algoritmo: • PSEUDOCÓDIGO (OU PORTUGUÊS ESTRUTURADO, OU PORTUGOL). • FLUXOGRAMA • DIAGRAMA DE CHAPIN P S E U D O C Ó D I G O : As estruturas lógicas são escritas numa linguagem próxima ao português, na seqüência em que são executadas. F L U X O G R AM A : Nesta forma de representação as estruturas lógicas são expressas através de figuras geométricas, interligadas por setas que indicam o caminho a ser seguido. R – Rapidez, dentre as várias soluções encontradas para o mesmo problema, devemos escolher a que seja mais rápida em termos de execução. E – Economia. Também devemos escolher a solução mais econômica em termos de utilização de memória principal e memória de armazenamento. S – Segurança. O programa deve prever e tratar possíveis erros do usuário. Exemplo: se pedirmos para digitar o Sexo (M/F), o programa não deve deixar que o usuário digite qualquer outra letra que não sejam o M ou o F. Para elaborar a solução de um problema usamos os Algoritmos. ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 13 LÓGICA DE PROGRAMAÇÃO 14 D I AG R AM A D E C H AP I N : As estruturas lógicas são representadas por figuras retangulares, colocadas uma após a outra, de cima para baixo. ALGORITMOS NATURAIS Algoritmos naturais são usados para linguagens mais antigas que não são estruturadas e nem modulares, como Fortran, Basic, Cobol (antes de ter o comando Perform), etc... Esse tipo de algoritmo utiliza comandos de retorno ou avanço (instrução GO TO), do fluxo para determinada linha do algoritmo. Com o surgimento das linguagens de programação estruturadas e modulares esse tipo de algoritmo se tornou obsoleto. As linguagens estruturadas não possuem mais os comandos de retorno ou avanço (instrução GO TO), para uma determinada linha do algoritmo, a própria estrutura é que define o retorno ou avanço do fluxo. VANTAGENS E D ESVANTAGENS PSEUDOCÓDIGO: EXEMPLO DE ALGORITMO NATURAL • Fácil de compreender. • Fácil de ler e converter para programação. • Melhor para representar programas maiores. Passo 1 – Sair de casa. • É estruturado. Passo 2 – Ir até o banco. Algoritmo para retirar a devolução do Imposto de Renda. INICIO Passo 3 – dirigir-se ao balcão. F L U X O G R AM A : Passo 4 – Já chegou a devolução do Imposto de Renda? • Fácil de compreender. Passo 5 – Sim: vá para o passo 12. • Bom para construir e visualizar pequenos programas. Passo 6 – Não: Voltar para casa. • Difícil de desenhar quando o programa fica muito grande. Passo 8 – Esperar um dia. • Não é estruturado. Passo 9 – É sábado, domingo ou feriado? Passo 10 – Sim: vá para o passo 8. D I AG R AM A D E C H AP I N : Passo 11 – Não: vá para o passo 1. • Fácil de compreender, ler e converter para a programação. Passo 12 – Retirar o dinheiro. • É estruturado. Passo 13 – Voltar para casa. • Bom para visualizar pequenos programas. • Difícil de desenhar quando o programa fica muito grande. FIM Observação: Neste curso usaremos algoritmos com a forma de representação Pseudocódigo. ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 15 ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 16 ALGORITMO NATURAL COMPARADO COM ALGORITMO ESTRUTURADO E LEMENTOS U SADOS NOS A LGORITMOS Desafio: ler dez valores numéricos, mostrar os valores lidos e no final mostrar a soma dos números digitados. 1 ALGORITMO NATURAL INICIO CONSTANTES: ALGORITMO ESTRUTURADO VARIAVEIS Passo 1 – Ler N Passo 2 – Escrever N 1.1 Numérico; 1.2 Data; 1.3 Lógica; 1.4 Caracter (texto, literal, string) NUMERICO N, S, C 2 INICIO Passo 3 – S = S + N VARIÁVEIS: FACA ENQUANTO C<10 2.1 Numérico; Passo 4 – C = C + 1 LER N 2.2 Data; Passo 5 – C < 10? ESCREVER N 2.3 Lógica; Passo 6 – Sim: vá para o passo 1 S = S + N 2.4 Caracter (texto, literal, string) Passo 7 – Não: vá para o passo 8 C = C + 1 Passo 8 – Escrever “Soma =“,S FIM_ENQUANTO FIM 3 EXPRESSÕES: ESCREVER “Soma =“,S FIM Na construção de algoritmos, utilizamos diversos elementos. Entre eles podemos citar valores informados ao programa (pelo teclado ou lidos de um disco), comandos para armazenar valores, expressões, estruturas, e etc. 3.1 Operandos; 3.2 Operadores; 4 COMANDO DE ATRIBUIÇÃO: 5 ESTRUTURAS: 5.1 Veremos a seguir quais são esses elementos, quando usar, para que usar e como eles funcionam dentro de um algoritmo. 5.2 5.3 Seqüencial; Seleção; 5.2.1 Simples; 5.2.2 Composta; 5.2.3 Múltipla; Repetição; ....................................................................................................... 5.3.1 Contador fixo; ..................................................................................................................... 5.3.2 Flag; ..................................................................................................................... 5.3.2.1 De resposta; 5.3.2.2 Predeterminado; ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 17 ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 18 C ONSTANTES VARIÁVEIS C O N S T AN T E S : são valores utilizados no processamento, mas que não sofrerão alterações durante o mesmo. Exemplos: nomes, datas de nascimento, números de funcionários, nomes de cidades, etc. V AR I Á V E I S : Não são valores. Variáveis são endereços de memória (Ram) que armazenam temporariamente valores. Esses endereços recebem um rótulo, que é o nome da variável, e um conteúdo. Cada vez que mencionamos o nome da variável, é manipulado o seu conteúdo. As constantes podem ser dos seguintes tipos: N U M É R I C O : Quando começam por um número, um sinal ou um parêntese, todos os demais caracteres são apenas números, com apenas uma exceção, que é o separador decimal (dependendo da linguagem, pode ser o ponto ou a vírgula). Exemplos: 123, 34,75, (567), -512, etc. D AT A : Quando tiver um formato conhecido de data. Os mais comuns são: dd/mm/aa, dd/mmm/aa, dd/mm/aaaa, dd/mmm/aaaa, dd/mm, dd/mmm, mm/aa, mmm/aa, mm/aaaa, mmm/aaaa. Observação: Podemos imaginar uma variável como sendo uma gaveta em um armário (endereço de memória Ram), onde guardamos alguma coisa (conteúdo), prego, por exemplo. Para identificar esta gaveta colocamos uma etiqueta (rótulo), com o nome de prego (nome da variável). Quando queremos pregos temos que abrir a gaveta que tem o rótulo prego e pegar o seu conteúdo. L Ó G I C A : (Booleanas). São os valores que correspondem às quatro letras ou palavras lógicas correspondentes: T (True), F (False), Y (Yes), N (No). Os nomes das variáveis devem sempre começar por uma letra, não devem ter espaços em branco e nem caracteres especiais, no máximo o símbolo sublinhado. Exemplos: Nome_cli, Num_func, Datanasc, etc. C AR AC T E R : (Texto, Literal ou String). São reconhecidas pela exclusão, ou seja, tudo que não for reconhecido como numérico, data ou lógico, é do tipo caracter. As variáveis são declaradas no início do algoritmo. Dependendo do valor a ser armazenado, as variáveis poderão ser dos tipos: Numérico, Data, Lógico ou Caracter (texto, literal ou string). Os valores armazenados nas variáveis permanecem até que: • O computador seja desligado (normal ou por falta de energia), visto que são armazenados na memória Ram; ....................................................................................................... • Por término do programa ou rotina onde foram criadas; ..................................................................................................................... • Seja atribuído um novo valor para a mesma variável. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... Observação: Só podemos armazenar um valor de cada vez em uma variável. Ao atribuirmos um novo valor que deve ser do mesmo tipo, o valor anterior será sumariamente eliminado. Exemplo: Se escrevermos A=5, o valor cinco será o conteúdo da variável A. Se mais adiante escrevermos A=20, o valor vinte passa a ser o novo conteúdo da variável A, e o valor anterior, cinco, será eliminado. Escopo: (abrangência), as variáveis, dependendo da linguagem, podem ser Públicas (Public) ou Globais (Global) e Privadas (Private) ou Locais (Locals). ..................................................................................................................... Observação: As variáveis Públicas ou Globais são vistas por todos os ..................................................................................................................... módulos do programa, e as Locais ou Privadas somente nas rotinas onde são criadas. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 19 LÓGICA DE PROGRAMAÇÃO 20 E XPRESSÕES O PERANDOS E O PERADORES Expressão: é qualquer instrução de manipulação de dados. OPERANDOS As expressões podem ser: A R I T M É T I C AS : Nesse tipo de expressão só podemos utilizar operadores, constantes e variáveis do tipo numérico, e o resultado será sempre um valor numérico. Exemplo 3+2, A*B. R E L AC I O N AI S : Nesse tipo de expressão realizamos uma comparação entre dois ou mais operandos do mesmo tipo, utilizando operadores relacionais e o resultado será sempre um valor lógico (verdadeiro ou falso). Exemplo: 10>5, A<B. L Ó G I C AS : É a união de duas ou mais expressões relacionais utilizando operadores lógicos, e o resultado também será sempre um valor lógico (verdadeiro ou falso). Exemplo: A>B E 10>5, Cidade = “Canoas” OU Cidade = “Porto Alegre”. São os elementos que serão manipulados. Como operandos podemos utilizar: C O N S T AN T E S : Exemplo: 15+25, 345/5, 12,35*20; V AR I Á V E I S : Exemplo: A-B, X/Y, HT*SH; F U N Ç Õ E S D A L I N G U AG E M : Exemplo: PI()*Cos(x)+Raiz(256,2) Observações: Linguagens aplicativas mais específicas como as Planilhas Eletrônicas e os Gerenciadores de Bancos de Dados podem utilizar como operandos as referências a células (Exemplo: A3*B5) ou os campos do Banco de dados (Exemplo: Horas_Trab*Sal_Hora). OPERADORES ....................................................................................................... ..................................................................................................................... ..................................................................................................................... São símbolos ou palavras que indicam o tipo de manipulação e também determinam de que tipo é a expressão. Os operadores se dividem em três grupos: ARITMÉTICOS: ..................................................................................................................... • Adição: + ..................................................................................................................... • Subtração: • Multiplicação: * ..................................................................................................................... • Divisão: / • Exponenciação: ^ ..................................................................................................................... ..................................................................................................................... Observação: ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... Os operadores aritméticos mantêm a mesma prioridade matemática, ou seja: em primeiro lugar são executadas as raízes e exponenciações, logo a seguir, as multiplicações e divisões, e, por último, as somas e subtrações. Em caso de empate de prioridades, o cálculo é efetuado sempre da esquerda para a direita. Para alterar a prioridade dos operadores, usamos parênteses. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 21 ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 22 R E L AC I O N AI S Veja o exemplo da tabela verdade abaixo: • Igualdade: = • Maior do que: > • Menor do que: < • Maior ou igual a: >= • Menor ou igual a: <= • Diferente: <> Observações: Entre os operadores relacionais não existem prioridades, sempre são executados da esquerda para a direita, à medida que forem aparecendo. Comando de atribuição O comando de atribuição serve para colocar um valor (conteúdo) dentro de uma variável. L Ó G I C O S (Booleanos) O comando de atribuição, dependendo da linguagem, pode ser: • N AO • E • OU ← = := Exemplo: A = 15 ou A ←15 ou A := 15 Em qualquer dos casos estamos colocando o valor 15 como conteúdo da variável A. Neste curso utilizaremos como comando de atribuição o sinal de =. Observação: Nos operadores lógicos o E tem prioridade sobre o OU. Os operadores lógicos igualmente chamados de Booleanos utilizam a álgebra de Boole, ou álgebra Booleana, também denominada Tabela Verdade. O operador N AO é um inversor de resultados, isto é, se o resultado da expressão for verdadeiro transforma em falso e vice-versa. Exemplo: 50>30, resultado verdadeiro. N AO (50>30), resultado falso. ....................................................................................................... ..................................................................................................................... Usando o operador E , o resultado final só será verdadeiro se o resultado de todas as condições forem verdadeiras, qualquer outra hipótese, o resultado será falso. ..................................................................................................................... Usando o operador O U , o resultado final só será falso se o resultado de todas as condições forem falsas; qualquer outra hipótese, o resultado será verdadeiro. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 23 LÓGICA DE PROGRAMAÇÃO 24 ESTRUTURA DE SELEÇÃO SIMPLES E STRUTURAS DE C ONTROLE As estruturas de controle servem para direcionar o fluxo do processamento. As estruturas de controle podem ser: Na estrutura de Seleção Simples, somente teremos uma ação se o resultado da condição for Verdadeiro, caso o resultado seja falso não há ação a ser executada. As palavras chaves de uma estrutura de Seleção Simples são: ESTRUTURA SEQÜENCIAL A estrutura seqüencial, como diz o próprio nome, é uma seqüência de instruções que se sucedem uma após a outra sem desvios ou interrupções. Este tipo de estrutura não possui palavras chaves, é composta somente por linhas de comandos sucessivas e está sempre limitada pelo início e fim do algoritmo ou pelo inicio e fim de uma outra estrutura. Exemplo: Ler o nome e duas notas de um aluno, calcular a média e mostrar o nome do aluno, as duas notas e a média calculada. VARIAVEIS NUMERICO N1, N2, M CARACTER NOME INICIO N1 = 0 N2 = 0 M=0 LER NOME LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2,M FIM Exemplo: Ler o nome e duas notas de um aluno, calcular a média e mostrar o nome do aluno, as duas notas, a média calculada e as palavras Aluno Reprovado, caso a média seja menor do que sete. VARIAVEIS NUMERICO N1, N2, M CARACTER NOME INICIO N1 = 0 N2 = 0 M=0 LER NOME LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2, M SE M < 7 ENTAO ESCREVER “ALUNO REPROVADO” FIM_SE FIM ESTRUTURA DE SELEÇÃO Devemos utilizar uma estrutura de seleção. Sempre que para executar alguma ação dependa do resultado de uma condição, isto é, no que temos que fazer existe uma condicionante. Observação: Conforme o que devemos fazer, de acordo com o resultado da condição, a estrutura de seleção pode ser de três tipos diferentes: Seleção Simples, Seleção Composta ou Seleção Múltipla. ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA LÓGICA DE PROGRAMAÇÃO 25 DE PROGRAMAÇÃO 26 ESTRUTURA DE SELEÇÃO COMPOSTA ESTRUTURA DE SELEÇÃO MÚLTIPLA Na estrutura de Seleção Composta, será executado um comando ou um grupo de comandos, caso o resultado da condição seja Verdadeiro e outro comando ou outro grupo de comandos diferentes, se o resultado da condição for Falso. A Estrutura de Seleção Múltipla é utilizada quando devemos fazer vários testes em uma mesma variável ou testar o valor de uma variável dependendo do teste do valor de outra variável. Observação: A estrutura de Seleção Múltipla pode ser construída com As palavras-chave de uma estrutura de Seleção Composta são: Estruturas de Seleção Composta encadeadas (aninhadas), ou pela estrutura Faca Caso. Utilizando Estruturas de Seleção Composta encadeada, para Seleção Múltipla podemos fazer o encadeamento das seguintes formas: fazer a Encadeamento, somente se o resultado da primeira condição for verdadeiro. Observação: Se o resultado da condição for Verdadeiro será executado tudo que estiver entre as palavras E N T AO e S E N AO , sendo ignorado o que tudo que estiver após a palavra S E N AO , porem se o resultado da condição for Falso, será desprezado tudo que estiver entre as palavras E N T AO e S E N AO , sendo executado apenas o que estiver entre as palavras S E N AO e F I M _ S E . Exemplo: Ler o nome e duas notas de um aluno, calcular a média e mostrar o nome do aluno, as duas notas, a média calculada e as palavras Aluno Reprovado, caso a média seja menor do que sete e Aluno Aprovado em caso contrário. Encadeamento somente se o resultado da primeira condição for falso. VARIAVEIS NUMERICO N1, N2, M CARACTER NOME INICIO N1 = 0 N2 = 0 M=0 LER NOME LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2,M SE M < 7 ENTAO ESCREVER “ALUNO REPROVADO” SENAO ESCREVER “ALUNO APROVADO” FIM_SE FIM LÓGICA DE PROGRAMAÇÃO 27 LÓGICA DE PROGRAMAÇÃO 28 Um encadeamento se o resultado da primeira condição seja verdadeiro, e outro encadeamento, caso o resultado da primeira condição seja falso. SELEÇÃO MÚLTIPLA COM ESTRUTURA DE FACA CASO: As palavras-chave da estrutura Faca Caso são: Observação: Para a solução do próximo exemplo, usaremos uma solução com estrutura de Seleção Composta encadeada e outra solução utilizando a estrutura Faca Caso. Exemplo: Ler o estado civil de uma pessoa como valor numérico, sendo que 1 corresponde a Solteiro, 2 a Casado e 3 para Outros. Testar estes valores levando-se em conta que o usuário pode digitar errado e escrever o estado civil em caracteres. ....................................................................................................... SOLUÇÃO UTILIZANDO ESTRUTURA DE SELEÇÃO COMPOSTA ENCADEADA: VARIAVEIS NUMERICO EC INICIO EC = 0 ESCREVER “Digite o estado civil (1 – solteiro, 2 – casado, 3 – outros)” LER EC SE EC = 1 ENTAO ESCREVER “Solteiro” SENAO SE EC = 2 ENTAO ESCREVER “Casado” SENAO SE EC = 3 ENTAO ESCREVER “Outros” SENAO ESCREVER “Valor inválido” FIM_SE FIM_SE FIM_SE ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 29 LÓGICA DE PROGRAMAÇÃO 30 SOLUÇÃO UTILIZANDO ESTRUTURA DE Nesse tipo de construção a rotina só entra na estrutura caso a condição seja verdadeira, senão a estrutura é ignorada. Entrando na estrutura, o programa executa tudo que estiver contido entre as palavras Faca Enquanto e Fim_Enquanto. Quando é encontrada a palavra Fim_Enquanto, a rotina retorna ao início da estrutura e testa novamente a condição, enquanto a condição for verdadeira continua repetindo. FACA CASO: VARIAVEIS NUMERICO EC INICIO EC = 0 ESCREVER “Digite o estado civil (1 – solteiro, 2 – casado, 3 – outros)” LER EC FACA CASO CASO EC = 1: ESCREVER “Solteiro” CASO EC = 2: ESCREVER “Casado” CASO EC = 3: ESCREVER “Outros” OUTRO_CASO: ESCREVER “Valor inválido” FIM_CASO Para que possamos entender melhor o funcionamento desta estrutura, vamos observar os exemplos a seguir: ESTRUTURA DE REPETIÇÃO Uma Estrutura de Repetição deve ser usada sempre que uma rotina tenha que ser executada mais do que uma vez durante o mesmo processamento. As repetições podem ser feitas por Contador Fixo, ou seja, a rotina vai ser repetida sempre um número fixo de vezes. Por Flag de Resposta, onde a cada volta do laço perguntamos ao usuário se ele quer continuar ou não, se a resposta for sim à rotina, segue repetindo; e se for não, a rotina termina. Ainda podemos fazer a repetição por Flag Predeterminado, isto é, determinamos que quando o usuário pressionar um determinado conjunto de teclas ou um determinado valor para conteúdo de uma variável, a rotina termina. Para construir a estrutura de repetição, podemos utilizar dois tipos de estruturas: a estrutura FACA ENQUANTO ou a estrutura PARA PROXIMO, sendo que a estrutura FACA ENQUANTO serve tanto para repetições por Contador Fixo como para, repetições por Flag. A estrutura de PARA PROXIMO só serve para repetições por Contador Fixo. ESTRUTURA FACA ENQUANTO A seguir outro tipo de construção para repetições com a estrutura PARA PROXIMO. As palavras-chave da estrutura FACA ENQUANTO são: ....................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 31 LÓGICA DE PROGRAMAÇÃO 32 ESTRUTURA PARA PROXIMO EXEMPLO DE REPETIÇÃO POR CONTADOR FIXO As palavras chave da estrutura PARA PROXIMO são: Desafio: Ler o nome do aluno e duas notas para uma turma de 15 alunos, calcular a média e mostrar o nome as duas notas e a média de cada aluno. SOLUÇÃO UTILIZANDO A ESTRUTURA FACA ENQUANTO VARIAVEIS NUMERICO N1, N2, M, C CARACTER NOME INICIO N1 = 0 N2 = 0 M=0 C=0 ESCREVER “DIGITE O NOME, N1, N2” FACA ENQUANTO C < 15 LER NOME LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2, M. C=C+1 FIM_ENQUANTO FIM Neste tipo de construção a rotina sempre entra na estrutura a primeira vez, visto que no inicio da estrutura temos uma atribuição: VAR = VI (valor inicial), repete tudo que estiver dentro da estrutura até encontrar a palavra PROXIMO. Quando encontra a palavra PROXIMO, pega o valor do passo, soma na variável de controle e faz um teste com o valor final (VF), enquanto o valor da variável de controle não for maior do que o valor final (VF), continua repetindo. Observação: O PASSO é opcional, quando não colocado assume por padrão o valor 1 (um). Este tipo de Estrutura é mais utilizado para trabalhar com Vetores e Matrizes, como veremos na última parte da apostila. Vamos observar o exemplo a seguir para melhor entender o funcionamento da estrutura PARA PROXIMO. SOLUÇÃO UTILIZANDO A ESTRUTURA PARA PROXIMO VARIAVEIS NUMERICO N1, N2, M, C CARACTER NOME INICIO N1 = 0 N2 = 0 M=0 C=0 ESCREVER “DIGITE O NOME, N1, N2” PARA C = 1 ATE 15 LER NOME LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2,M PROXIMO FIM ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 33 LÓGICA DE PROGRAMAÇÃO 34 EXEMPLO DE REPETIÇÃO POR FLAG DE RESPOSTA EXEMPLO DE REPETIÇÃO POR FLAG PREDETERMINADO Desafio: Ler o nome e duas notas para os diversos alunos, calcular a média e mostrar o nome, as duas notas e a média de cada aluno. Após processar cada aluno, perguntar ao usuário se deseja continuar. Enquanto o usuário responder sim (S), o programa continua; se a resposta for não (N), o programa termina. Problema: Ler o nome e duas notas para uma turma de alunos, calcular a média e mostrar o nome, as duas notas e a média de cada aluno. O programa irá terminar quando o usuário digitar a palavra “FIM”, como conteúdo da variável Nome, em vez de um nome válido. Observação: Para repetições usando como controle o Flag, só poderemos utilizar a estrutura Observação: Predeterminamos que quando o usuário digitar a palavra FIM no lugar do nome de um aluno, o programa irá terminar. FACA ENQUANTO. Solução: Solução: VARIAVEIS NUMERICO N1, N2, M CARACTER NOME, CF INICIO N1 = 0 N2 = 0 M=0 CF = “S” ESCREVER “DIGITE O NOME, N1, N2” FACA ENQUANTO CF = “S” LER NOME LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2,M ESCREVER “DESEJA CONTINUAR (S/N)?” LER CF FIM_ENQUANTO FIM VARIAVEIS NUMERICO N1, N2, M CARACTER NOME INICIO N1 = 0 N2 = 0 M=0 ESCREVER “DIGITE O NOME (FIM PARA SAIR), N1, N2” NOME = “ “ FACA ENQUANTO NOME <> “FIM” LER NOME SE NOME <> “FIM” LER N1 LER N2 M = (N1+N2)/2 ESCREVER NOME, N1, N2,M FIM_SE FIM_ENQUANTO FIM Até aqui analisamos quais são as palavras-chave e como se representam os algoritmos em Pseudocódigo. Veremos a seguir como fazer a representação das estruturas de controle através de Fluxograma e Diagrama de Chapin. ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 35 LÓGICA DE PROGRAMAÇÃO 36 ESTRUTURA SEQÜENCIAL ESTRUTURA DE SELEÇÃO SIMPLES ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 37 LÓGICA DE PROGRAMAÇÃO 38 ESTRUTURA LÓGICA DE DE SELEÇÃO COMPOSTA PROGRAMAÇÃO ESTRUTURA 39 LÓGICA DE DE SELEÇÃO MÚLTIPLA PROGRAMAÇÃO 40 ESTRUTURA DE REPETIÇÃO P ROCEDIMENTOS E F UNÇÕES No final dos anos 60, várias empresas se depararam com o aumento crescente dos custos para a elaboração de programas de computador. Isso gerou a chamada Crise do Software. Essa crise foi também decorrente do descompasso entre a tecnologia de desenvolvimento dos Softwares. Sem metodologias avançadas para a elaboração de programas, a probabilidade de aparecimentos de bugs (falhas, erros) nos Softwares era quase inevitável. Isso tornava a manutenção dos sistemas de informações cada vez mais onerosa. Para tentar resolver esses problemas, uma série de estudos foi iniciada e surgiram vários tipos de programação. Um deles, o mais utilizado, é a Programação Estruturada. A característica dessa programação é a utilização de técnicas que decompõem a solução de um problema em “blocos” que interagem com um bloco principal. Isso é possível por meio da técnica de refinamentos sucessivos e da modularização dos algoritmos. A Programação Estruturada tem como objetivo desenvolver Programas/Algoritmos confiáveis, legíveis, de fácil entendimento, flexíveis e de fácil manutenção; para isso, ela utiliza as técnicas a seguir. 1) Desenvolvimento de algoritmos por etapas/refinamentos sucessivos. 2) Número limitado de estruturas de controle de fluxo. 3) Mudanças de etapas/refinamentos de alta complexidade ou tamanho em módulos. MODULARIZAÇÃO Técnica para desenvolver algoritmos, por meio de refinamentos sucessivos, em que podem ser utilizados módulos. MÓDULO Conjunto de comandos que constitui uma parte de um algoritmo principal e que tem uma tarefa bem definida e é independente em relação ao resto do Algoritmo. Fazendo uma analogia, imagine o coração como um módulo do corpo humano. Esse módulo desempenha um conjunto de operações específicas, tem uma tarefa bem definida e é independente em relação à boa parte dos outros órgãos (tanto assim, que pode ser transplantado para outro corpo). Veja a seguir as características da técnica da modularização. 1) A independência do módulo permite uma manutenção mais simples e evita efeitos colaterais em outros pontos do algoritmo. 2) A elaboração do módulo pode ser feita independentemente e em época diferente do restante do algoritmo. 3) Testes correções dos módulos podem ser feitas separadamente. 4) Um módulo pode ser utilizado em outros algoritmos que requerem o mesmo processamento por ele executado. LÓGICA DE PROGRAMAÇÃO 41 LÓGICA DE PROGRAMAÇÃO 42 PROCEDIMENTO E FUNÇÃO VARIÁVEL Para inserir módulos em um algoritmo existem os comandos Procedimento e Função. As ações de procedimento e função estão hierarquicamente subordinadas a um algoritmo principal, geralmente, chamado de Módulo Principal. Dentro de um procedimento ou uma função, pode haver o chamamento de outros procedimentos ou funções. Veja o diagrama a seguir. GLOBAL Variável que pode ser utilizada no módulo em que foi declarada ou em um módulo interno ao módulo do algoritmo no qual foi declarada. VARIÁVEL LOCAL Variável que só pode ser utilizada no módulo do algoritmo no qual foi declarada e que não possui qualquer significado fora desse módulo. Observação: Todo módulo (Procedimento ou Função) é criado por meio de declarações e executado por meio de um comando de chamada. DIFERENÇA ENTRE PROCEDIMENTO E FUNÇÃO Cada procedimento ou função pode utilizar os objetos (constantes e varáveis) do módulo principal, definir os seus próprios, ou ainda utilizar os dois tipos. Veja o quadro abaixo. A diferença entre Procedimento e Função é que o Procedimento executa uma tarefa e não retorna valores para o módulo que o chamou, já a Função também executa uma tarefa, mas obrigatoriamente deverá retornar um resultado para o módulo que a chamou. A chamada de um procedimento é feita como uma linha de comando normal, repassando ou não parâmetros (argumentos); já a chamada de uma função sempre deve ser por atribuição a uma variável ou por um teste condicional, também repassando ou não parâmetros (argumentos). PROCEDIMENTOS COM PARÂMETROS Parâmetros (argumentos) Na técnica de modularização podem ser utilizados pontos de comunicação entre os módulos. Esses pontos, chamados Parâmetros, classificam-se em formais e reais. PARÂMETROS FORMAIS São os parâmetros declarados com o módulo (Procedimento ou Função). São os que recebem os valores enviados pelo módulo que chamou o Procedimento ou a Função. PARÂMETROS REAIS São os parâmetros que substituem os parâmetros formais, no procedimento ou função. São os que enviam valores do módulo principal para o módulo (procedimento ou função) que foi chamado. Pelo exemplo acima, tanto as Funções 1 e 2 como o Procedimento 4 podem utilizar a variável X, porque ela é uma variável global e está no módulo principal. Porém, a variável Z não pode ser utilizada no algoritmo principal, nem na função 1 e nem no Procedimento 4, por ser uma variável local da Função 2. PASSAGEM DE PARÂMETROS PASSAGEM DE PARÂMETROS POR VALOR Quando passamos parâmetros por valor, na verdade estamos enviando uma cópia do valor original da variável. Portanto, se no Procedimento ou Função este valor for alterado, não modificará o conteúdo da variável cujo valor foi repassado. LÓGICA DE PROGRAMAÇÃO 43 LÓGICA DE PROGRAMAÇÃO 44 PASSAGEM DE PARÂMETROS POR REFERÊNCIA EXEMPLOS DE PROCEDIMENTO E FUNÇÃO Quando repassamos parâmetros por referência, na realidade estamos enviando não uma cópia do valor, mas, sim, o endereço de memória onde está armazenado o valor. Logo, qualquer alteração deste valor no Procedimento ou Função implica alterar o conteúdo da variável que repassou o parâmetro. Ler o estado civil de uma pessoa como valor numérico, sendo 1 para solteiro, 2 para casado e 3 para outros. Escrever o estado civil em caracteres. Observação: Existe diferença no padrão (Default) de repasse de parâmetros entre as Módulo Principal Procedimento Traduz(e) VARIAVEIS Numerico ec, e INICIO Ec = 0 Ler ec Traduz (ec) FIM INICIO SE e = 1 entao Escrever “Solteiro” SENAO SE e = 2 entao Escrever “casado” SENÃO SE e = 3 entao Escrever “outros” SENAO Escrever “Inválido” FIM_SE FIM_SE FIM_SE FIM linguagens. Exemplo: No Visual Basic o Padrão (Default) de repasse é por referência, já no Delphi o padrão (Default) é por valor. EXEMPLOS DE SINTAXE No Visual Basic: Na declaração do tipo: Procedimento (x), o repasse de x é por referência (Padrão). Se quisermos repassar o parâmetro por valor, a declaração tem que ser: PROCEDIMENTO Procedimento (By val x). No Delphi Na declaração do tipo: Procedimento (x), o repasse de x é por valor (Padrão). Se quisermos repassar o parâmetro por referência, a declaração tem que ser: Procedimento (Var x). FUNÇÃO Observação: Em algumas linguagens é possível elaborar um arquivo contendo diversos Procedimentos e Funções e compilar este arquivo como uma DLL, ficando, portanto todos os procedimentos e funções contidos nele disponíveis para todos os programas do sistema. ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... Ler a base e altura de um triângulo, calcular a área. Escrever a base, a altura e a área calculada. Módulo Principal Funcao Calc_Área(b, h) VARIAVEIS Numerico base, altura, área,a Inicio Base = 0 Altura = 0 Area = 0 Ler Base Ler Altura Area = Calc_Área (Base, Altura) Escrever Área FIM INICIO a=b*h retornar a FIM ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 45 LÓGICA DE PROGRAMAÇÃO 46 RECURSIVIDADE V ETORES E M ATRIZES Os Procedimentos e as Funções, na maioria das linguagens, possuem a propriedade da recursividade, isto é, a capacidade de chamar ela mesma. Podemos utilizar a recursividade para simular uma estrutura de repetição. O QUE SÃO VETORES E MATRIZES EXEMPLO DE RECURSIVIDADE VARIAVEIS Numerico Num, N Vetores e Matrizes, que nas linguagens de programação são chamados de Array, são variáveis indexadas, isto e, em uma mesma variável podemos armazenar diversos valores, e esses valores são identificados pelo nome da variável e por um número ou mais números, dependendo de quantas dimensões tem a matriz. Esse número ou esses números são os índices da matriz, pois indicam a posição do valor (elemento) dentro da Matriz ou do Vetor. Vamos fazer uma analogia para entendermos melhor esse conceito. Como vimos anteriormente, uma variável normal é um endereço de memória onde podemos guardar um valor de cada vez. Como se fosse uma gaveta onde podemos guardar apenas um objeto; se quisermos colocar outro objeto, temos que retirar o anterior. Agora vamos supor que nessa gaveta fizemos cinco divisões, então podemos guardar cinco objetos na mesma gaveta, isso é o que podemos comparar como sendo um Vetor. INICIO Num= 0 Mostra(Num) FIM A Matriz pode-se comparar como sendo um armário com, por exemplo, três gavetas. Neste caso eu posso guardar três objetos, um em cada gaveta, porém, se em cada gaveta são feitas três divisões, podemos nesse armário guardar não apenas três objetos, mas, sim, nove objetos. PROCEDIMENTO MOSTRA(N) INICIO EXEMPLO N=N+2 DE VETOR Matriz numérico V[5] Escrever N SE N < 10 entao Mostra(N) Para referenciar o valor 18, temos que indicar V[3], isto é, o valor 18 é o terceiro elemento do Vetor V, ou que o valor 18 encontra-se na terceira posição do vetor. FIM_SE FIM EXEMPLO DE MATRIZ Matriz numérico M[3,3] RESULTADO Temos como resultado desse processamento, os seguintes valores: 2 – 4 – 6 – 8 – 10. ....................................................................................................... Para referenciar o valor 76, temos que indicar M[2,3], isto é, o elemento da matriz que armazena o valor 76 está na linha 2, coluna 3. ..................................................................................................................... A indicação do índice ou índices é feita sempre entre colchetes “[ ]”, ou em algumas outras linguagens ente parênteses “( )”. ..................................................................................................................... Como o Vetor é uma matriz que possui dimensão única, temos apenas um índice, que indica a posição que o elemento ocupa dentro do Vetor. Por exemplo: V[3]. O número 3 entre os colchetes indica da Posição do Elemento (local onde o valor está armazenado). LÓGICA LÓGICA DE PROGRAMAÇÃO 47 DE PROGRAMAÇÃO 48 Como a Matriz tem mais de uma dimensão, tem uma quantidade de índices igual à quantidade de suas dimensões. No exemplo anterior, a matriz tem duas dimensões, tendo, portanto, dois índices: o primeiro, indicando a linha, e o segundo, indicando a coluna em que se encontra armazenado o valor. Exemplo: M[2,3], o número 2 indica a linha, e o numero 3 indica a coluna, Posição do Elemento (local do valor armazenado). A LGORITMOS PARA M ANIPULAR V ETORES E M ATRIZES Para construir algoritmos que manipulam Vetores e Matrizes, utilizamos a estrutura Para - Proximo, que é a mais adequada para esse tipo de construção. Algumas linguagens admitem o comando de leitura direta para armazenar um valor em um elemento do Vetor ou da Matriz; outras só aceitam o armazenamento por atribuição. Para ser genérico nos exemplos, usaremos a atribuição que todas as linguagens suportam. Exemplo de Vetor: Algoritmo para ler e escrever um Vetor de nome V com cinco posições (elementos). ....................................................................................................... ..................................................................................................................... VARIAVEIS NUMERICO AUX, I MATRIZ NUMERICO V[5] ..................................................................................................................... INICIO ..................................................................................................................... AUX = 0 PARA I = 1 ATE 5 LER AUX V[I] = AUX ESCREVER V[I] PROXIMO ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... FIM Exemplo de Matriz: Algoritmo para ler e escrever uma Matriz de nome M com nove posições (elementos), com três linhas e três colunas. ..................................................................................................................... VARIAVEIS NUMERICO AUX, L, C MATRIZ NUMERICO M[3,3] INÍCIO AUX = 0 PARA L = 1 ATE 3 PARA C = 1 ATE 3 LER AUX M[L,C] = AUX ESCREVER M[L,C] PROXIMO PROXIMO FIM ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... Podemos dentro da estrutura Para – Proximo, trabalhando com Vetores e Matrizes, fazer os mesmos tipos de processamentos que fazemos dentro da estrutura Faca – Enquanto, com a vantagem de que os valores permanecem armazenados na Memória, até que o processamento termine. ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 49 LÓGICA DE PROGRAMAÇÃO 50 C ONSIDERAÇÕES F INAIS A PÊNDICE 1 Acreditamos que ao terminar esse curso e após ter realizado os exercícios constantes nesta apostila, o aluno, com certeza, deve ter apropriado os conhecimentos necessários sobre raciocínio lógico, estruturas e construção de algoritmos, para dar prosseguimento à sua aprendizagem de uma linguagem de programação, seja ela Visual Basic, Delphi, Java, etc., e aplicar os conhecimentos adquiridos nesse curso para elaborar seus programas de maneira correta e eficiente. EXEMPLO DE ALGORITMO PARA ORDENAR UM VETOR Desafio: Classificar em ordem crescente um vetor A com dez elementos (dez posições) VARIAVEIS NUMERICO N, I, J, AUX MATRIZ NUMERICO A [10] INICIO N=0 AUX = O ....................................................................................................... PARA I = 1 ATE 10 ..................................................................................................................... LER N ..................................................................................................................... A [I] = N (Bloco para carregar e imprimir o vetor) ESCREVER A [I] ..................................................................................................................... PROXIMO ..................................................................................................................... PARA I = 1 ATE 9 PARA J = I+1 ATE 10 ..................................................................................................................... SE A [I] > A [J] ENTAO ..................................................................................................................... AUX = A [I] ..................................................................................................................... A [I] = A [J] (Bloco para ordenar o vetor) A [J] = AUX ..................................................................................................................... FIM_SE ..................................................................................................................... PROXIMO ..................................................................................................................... PROXIMO ..................................................................................................................... PARA I = 1 ATE 10 ESCREVER A [I] (Bloco para imprimir o vetor ordenado) ..................................................................................................................... ..................................................................................................................... PROXIMO FIM ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ....................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... ..................................................................................................................... LÓGICA DE PROGRAMAÇÃO 51 LÓGICA DE PROGRAMAÇÃO 52 • A PÊNDICE 2 Extrai de um número ou uma variável qualquer, somente a parte inteira. Exemplos: Inteiro(14,235) = 14. N = 234,57 – Inteiro(N) = 234. COMANDOS DO INTERPRETADOR DA LINGUAGEM DOS ALGORITMOS (ILA) Os comandos do ILA (Interpretador da Linguagem dos Algoritmos) são, em geral, os mesmos utilizados nas estruturas dos algoritmos representados em Pseudo-Código (Português Estruturado). • • • • • • • • • • INICIO FIM LER ESCREVER SE SENAO FIM_SE FACA ENQUANTO FIM_ENQUANTO PARA – PRÓXIMO, Etc... • A L E AT Ó R I O () – Função. C O M P R I M E N T O (<var>,<texto>) – Função. Somente para dados do tipo caracter (texto). O resultado é um valor numérico que indica a quantidade de caracteres que compõem texto ou o conteúdo da variável. Exemplo: x = “casa” – COMPRIMENTO(X) = 4 • E S P E R AR (<tempo>) – Comando Suspende a execução do algoritmo por um intervalo de tempo, dependendo da velocidade do processador. Exemplo: ESPERAR(200). • I M P R E S S O R A () – Função. Para ter efeito a função deve ser usada antes do comando escrever. Desvia as informações enviadas pelo comando escrever para a impressora. Para retornar a escrever no vídeo devemos usar a função Vídeo(). LÓGICA DE PROGRAMAÇÃO L I M P AR (< L I N H A >,< C O L U N A >,< L I N H A 1>,< C O L U N A 1>) – C O M A N D O . 53 P I – C O N S T AN T E . Constante numérica cujo resultado é o valor de Pi = 3,14159265359 • P O S I C I O N AR (<linha>,<coluna>) – Comando. Posiciona o cursor na tela, conforme indicado por linha e coluna. Este comando deve ser usado sempre antes dos comandos Ler e Escrever. Exemplo: POSICIONAR(12,15). Posiciona o cursor na linha 12, na coluna 15. • R AI Z (<num>,<índice>) – Função. Calcula a raiz indicada pelo índice, de um número qualquer. O parâmetro <num>, indica o número do qual se quer a raiz, e o parâmetro <índice>, indica o tipo de raiz desejado. Exemplos: Raiz(256,2), calcula a raiz quadrada de 256 = 16. RAIZ(8,3), calcula a raiz cúbica de 8 = 2. • C O R (<frente>,<fundo>) – Comando Muda o atributo de cor no vídeo, os argumentos (parâmetros) podem ser em texto ou código numérico. Ver tabela de cores no Help do ILA. Exemplo: COR(“verde”,”Amarelo”) é igual a COR(2,15), a fonte fica em verde sobre o fundo amarelo. Para ter efeito, este comando deve ser usado antes de um comando escrever, limpar ou janela. • J AN E L A (<linha>,<coluna>,<linha1>,<coluna1>) – Comando. Desenha uma moldura na tela. A primeira coordenada linha, coluna, referese ao canto superior da janela, e a segunda coordenada linha1, coluna1, determina o canto inferior direito da janela. Exemplo: Janela(2,3,20,78), desenha, na tela, uma moldura começando na linha 2, coluna 3 e terminando na linha 20, coluna 78. Semelhante ao comando janela, limpa uma área da tela desde o canto superior esquerdo, linha, coluna, até o canto inferior direito, linha1, coluna1. Caso forem omitidos os parâmetros (argumentos), será assumido 1,1,24,80, isto é, limpa a tela inteira. Exemplos: Limpar(2,30,2,70), limpa somente a linha 2 desde a coluna 30 até a coluna 70. Limpar, limpa a tela inteira. Resulta em um valor aleatório sempre maior que zero e menor do que 1. Maior número a ser gerado 0,999999, menor número 0,000001. • • • Abaixo temos uma lista de Comandos e Funções do ILA que podemos (ou devemos) usar nos algoritmos para facilitar o desempenho dos algoritmos e também obter uma melhor visualização dos resultados. • I N T E I R O (<n>,<var>) – Função. R E S T O (<valor1>,<valor2>) – Função. O resultado dessa função é o valor do resto da divisão inteira do valor1 pelo valor2. Exemplos: Resto(24/12) = 0. Resto(25,12) = 1. • R E T O R N AR – Comando. Retorna um valor (resultado), de uma função definida pelo usuário, para o módulo que chamou a função. • V AL O R (<var>,<texto>) – Função. Transforma um texto ou o conteúdo de uma variável caracter em um valor numérico, desde que o conteúdo desse texto ou dessa variável seja apenas caracteres numéricos. Exemplo: VALOR(“12”) = 12. X = “23” – VALOR(X) = 23. • V I D E O () – Função. A saída padrão (Default) do comando Escrever é para o vídeo. Porém, se desviamos essa saída para a impressora usando a função Impressora(), devemos após a impressão retornar à saída para o vídeo. Para isso usamos Video(). LÓGICA DE PROGRAMAÇÃO 54 16) Dada a seguinte divisão: E XERCÍCIOS DE R ACIOCÍNIO L ÓGICO 1) Utilizar cálculos aritméticos com oito números oito, (88888888), usando apenas os oito números oito e todos eles de forma a obter como resultado o valor 1000 (mil). 2) Utilizar cálculos aritméticos com quatro números quatro, (4444), usando apenas os quatro números quatro e sempre todos eles de forma a obter os 10 (dez) dígitos do sistema decimal. Ex: 44-44 = 0, 44/44 = 1, ... Qual o valor de P,Q,R,S,T. 3) 64, 8, 49, 7, 36. ? . 17) Numa rua tem três casas, temos que ligar Água, Luz e Telefone nas três casas individualmente. Como fazer não cruzando linhas. Veja abaixo: 4) 2, 5, 7, ?, ?, ?, ?, 20, 22, 25. 5) 82, 97, 114, 133, ? . 6) 4, 6, 10, 18, 34, ? . 7) 2,9,100,... 8) 2, 10, 12, 16, 17, 18, 19, ? . 18) Dentro de uma peça fechada com uma porta bem vedada, tem uma lâmpada incandescente. Na parte de traz da peça, por fora, tem um interruptor de energia com chave tripla. Descobrir qual a chave que liga a lâmpada, podendo abrir a porta para olhar apenas uma vez. 9) 10) Um tijolo pesa 1Kg mais meio tijolo. Qual o peso de 3 tijolos? 11) Temos dois baldes, um com capacidade para 3 litros e outro com a capacidade de 5 litros. Usando somente estes dois baldes medir no balde de 5 litros exatamente 4 litros. 12) Sobre uma mesa há quatro pacotes de presentes exatamente iguais. O conteúdo deles, porém, é diferente, não sendo igual o peso de cada um deles. Sabemos que o peso total dos 4 pacotes é 8,800 Kg; o quarto pacote pesa menos 800 gramas que o segundo. O terceiro pesa mais 400 gramas que o primeiro, e o segundo pacote pesa mais 100 gramas do que a média do peso deles. Qual o peso de cada pacote? 13) Em uma obra temos um grupo de oito tijolos. Sete destes tijolos têm o mesmo peso e um é mais pesado. Usando uma balança de dois pratos e pesando apenas duas vezes, determinar qual o tijolo é mais pesado. 14) Na cozinha tem um cesta contendo ovos. Uma pessoa veio tirar ovos desta cesta cinco vezes. Cada vez que ela vinha tirar ovos, tirava sempre a metade dos ovos que tinha na cesta mais meio ovo. Quando ela retirou ovos na quinta vez a cesta ficou vazia. Quantos ovos tinham na cesta antes de ela começar a retirar ovos? 19) Chegaram ao banco cinco sacos contendo moedas. Quatro sacos têm moedas verdadeiras e apenas um saco contém moedas falsas. O peso de cada moeda verdadeira é de 10gr, e cada moeda falsa pesa 1gr. Fazendo apenas uma pesagem, determinar com certeza qual o saco que está com moedas falsas. 20) Dois árabes se encontram em um oásis, cada um acompanhado de seus camelos. Vamos identificar um deles como X e o outro como Y. Se o Y der um camelo para X, eles ficam com quantidades iguais, porém se for X a dar um camelo para Y, Y fica com o dobro da quantidade de camelos que fica X. Quantos camelos tem cada árabe? 21) Encontramos duas portas, a porta A e a porta B, sendo uma do inferno, e a outra, do céu, não sabemos qual a porta certa. Em frente a estas portas estão dois guardas que se revezam caminhando de um lado para outro. Um destes guardas só fala a verdade, nunca diz mentiras. O outro, ao contrário, só diz mentiras, nunca fala a verdade. Também não sabemos qual fala a verdade e qual mente. Só podemos fazer uma pergunta para apenas um dos guardas, e com uma resposta única deste guarda, entramos na porta certa que é a do céu. Como formular a pergunta? 15) Um operário recebe R$ 50,00 por dia de trabalho para terminar uma obra em 10 dias e paga uma multa de R$ 20,00 por dia que atrasar a obra. No final da obra recebeu R$ 380,00. Em quantos dias terminou a obra? LÓGICA DE PROGRAMAÇÃO 55 LÓGICA DE PROGRAMAÇÃO 56 22) O quadrado mágico. A soma em qualquer direção é sempre um valor constante. Qual a lógica de preenchimento? 32) Num balcão estão enfileirados seis copos numa seqüência de 3 cheios e 3 vazios. Mover apenas um copo e deixar a seqüência alternada com um cheio e um vazio. 33) Dispor aritmeticamente nove números sete (777777777) de forma que o resultado seja igual a 790. 34) 123² – 122² = ? 538² – 537² = ? 35) Dois pais e dois filhos foram a uma confeitaria e compraram três doces diferentes. Cada um deles comeu um doce inteiro. Como isto foi possível? 23) Uma empresa possui cem (100) funcionários. Foi solicitado pelo gerente da mesma um relatório informando quantos funcionários tomavam café, quantos tomavam chá, quantos tomavam ambos e quantas pessoas não tomavam nada. Feito o relatório, apresentava o seguinte: Café – 78, Chá – 71, Café e Chá – 48 e Nada – zero. O chefe olhou relatório e notou que tinha um erro. Qual o erro que existe? 24) Qual o estranho? 36) Foi deitar às 08:00. Acertou o despertador para as 09:00 do dia seguinte. Quanto tempo dormiu? 37) Escrever os números de um até nove, menos o oito (12345679). Escolher o que menos gosta. Multiplicar os números 12345679 pelo número escolhido multiplicado por nove e observe o resultado. Exemplo: escolhendo o número 5, multiplicar (12345679)*45 = ? 38) Precisamos cozinhar um ovo em dois minutos. Só dispomos de duas ampulhetas, uma com tempo de 3 minutos e outra com tempo de 5 minutos. Como medir o tempo corretamente? (AOGIBA – BIAXACA – CELANAMI – RENOUCA – JANARAL) 25) Como chegar aos seguintes resultados? 39) Um relógio está parado. Outro atrasa uma hora por dia. Qual mostra mais freqüente a hora certa? 26) Uma bactéria dobra seu número a cada minuto. Num determinado recipiente ela leva 29 minutos para ocupar até a metade. Quanto tempo levará para encher o recipiente? 40) Sabe-se que 5 melancias valem 21 cajus, que 7 cajus valem 15 laranjas, que 18 laranjas valem 6 mangas e que 10 mangas custam R$ 10,00. Calcular o preço de uma melancia. 41) Observe as figuras abaixo e descubra qual delas completa a ultima seqüência, substituindo o X. 27) Ao medir uma vara verificou-se que ela tem 10 metros mais a terça parte do seu comprimento. Qual o tamanho da vara? 28) No fundo de um poço com 20 metros de profundidade tem um caracol. Durante o dia o caracol sobe 2 metros na parede do poço e durante a noite cai escorregando 1 metro. Em quantos dias o caracol sai do poço? 29) 30) De uma peça de tecido com 100 metros de comprimento, uma costureira corta 5 metros por dia. Quanto tempo levará para cortar a peça toda? 31) Temos três baldes, um com capacidade para 3 litros, outro com capacidade para 5 litros e o terceiro com a capacidade de 10 litros. Devemos misturar no balde de 5 litros, 4 litros de água e 1 litro de querosene. Como fazer utilizando apenas os baldes acima? LÓGICA DE PROGRAMAÇÃO 57 LÓGICA DE PROGRAMAÇÃO 58 42) Tendo por base as equações solucionadas, determine o valor de X na última equação. ÷ 4 =3 * ÷ 43. + 46. Nos valores contidos nas figuras abaixo, qual o valor de X? 47. Na figura abaixo temos 7 quadrados. Mover apenas 3 palitos e deixar apenas 5 quadrados iguais. 48. Na figura abaixo tem 17 palitos formando uma figura com 6 quadrados. Retirar 5 palitos e deixar a figura com apenas 3 quadrados. 49. A figura a seguir é composta de cinco quadrados formados por 16 palitos. Deslocar apenas dois palitos e deixar somente quatro quadrados. 50. A figura abaixo tem cinco quadrados, deslocar apenas quatro palitos deixando apenas três quadrados. =20 =32 + =X Quantos triângulos você consegue ver em cada uma das figuras abaixo? 44. As equações abaixo, formadas por barras, não estão corretas, como transformá-las verdadeiras, movendo apenas uma barra em cada equação? 45. Analisando as equações determinar o valor de X. LÓGICA DE PROGRAMAÇÃO abaixo formadas por figuras, como podemos 59 LÓGICA DE PROGRAMAÇÃO 60 51. 52. 53. Com vinte e quatro palitos formamos a figura abaixo que possui nove quadrados. Retirar seis palitos e deixar a figura com três quadrados. Com doze palitos formamos a figura abaixo que tem quatro quadrados. Retirar apenas dois palitos, deixando a figura com apenas dois quadrados. E XERCÍCIOS COM A LGORÍTMOS 1) Escreva o pseudocódigo em português estruturado que leia três valores em variáveis distintas e armazene a soma em uma outra variável e escreva o valor obtido. 2) Ler três valores em variáveis diferentes armazene, a soma das duas primeiras em uma nova variável e o produto das duas últimas em uma outra variável e mostre o produto das duas novas variáveis em uma terceira variável. 3) Escreva o pseudocódigo em português estruturado e que leia três valores em diferentes variáveis e escreva o maior valor digitado. 4) Escreva o pseudocódigo em português estruturado que leia dez valores fornecidos pelo usuário e escreva os valores e seus dobros. 5) Gerar números de zero a 200 variando de 5 em 5. Mostrar estes números digitados e, no final, a soma deles e quantos números foram gerados. 6) Fazer uma tabela de conversão de polegadas para centímetros. Esta tabela deverá começar em uma polegada e terminar em 10 polegadas variando de 0.5 em 0.5 de polegada. Mostrar a tabela 7) Ler 10 valores dois a dois, compará-los entre si. Mostrar cada par de números, e ao lado deles a mensagem, segundo cada caso. Se forem iguais, se o maior é o primeiro ou se o maior é o segundo. 8) Escreva o pseudocódigo em português estruturado que mostre somente os números pares de 0 até 100. Se este número for maior que 20, escreva também o seu quadrado. 9) Escreva o pseudocódigo em português estruturado que, para 20 números fornecidos pelo usuário, escreva a quantidade de positivos e de negativos. 10) Escreva o pseudocódigo em português estruturado que mostre a tabuada de zero até 10 para um número fornecido pelo usuário. 11) Ler oito valores positivos. Testar cada valor, se for maior do que 100, extrair a raiz quadrada, caso contrário, elevar ao quadrado. Mostrar os números lidos e ao lado a raiz ou o quadrado. No final informar quantos números pares foram digitados. 12) Uma empresa possui 15 funcionários. Ler para cada funcionário o seu nome, as horas trabalhadas e seu salário hora. Calcular o salário bruto. Mostrar o nome de cada funcionário, as horas trabalhadas, o salário hora e o salário bruto. No final mostrar o total de salários brutos. 13) Ler 20 valores dois a dois. Testar estes valores. Se o segundo for maior que o primeiro, calcular a soma deles. Se o primeiro for maior que o segundo, calcular a diferença, e, se forem iguais, multiplicá-los. 14) Fazer um algoritmo que calcule as raízes da equação do segundo grau usando a fórmula de Báscara. Testar o discriminante, caso seja negativo, informar que é impossível no campo dos números reais; caso contrário, calcular e mostrar as raízes. 15) Ler o nome, o sexo e a idade de 100 pessoas. Mostrar quantas pessoas são do sexo masculino e quantas são do sexo feminino, quantas são menores de 18 anos e quantas são maiores ou iguais a 18. Na figura abaixo temos um triângulo equilátero formado por nove palitos. Mover cinco palitos e formar cinco triângulos também equiláteros. LÓGICA DE PROGRAMAÇÃO 61 LÓGICA DE PROGRAMAÇÃO 62 16) Ler oito valores diferentes de zero, imprimir os valores lidos e no final mostrar quantos números são negativos. 17) Ler uma série de dez números, mostrar os números lidos e, no final, a soma deles e quais foram o maior e o menor número digitado. 18) Ler o nome e número de filhos de 30 pessoas, imprimindo: 24) Ler o nome e o salário bruto de 15 funcionários de uma empresa. Calcular o INSS e o IRRF conforme tabelas abaixo. Calcular o valor do Vale Transporte = 6% sobre o salário bruto. Calcular o salário líquido. Mostrar os nomes dos funcionários, o salário bruto, o valor do INSS, valor do IRRF, valor do Vale Transporte e o salário líquido. a. Quantas pessoas têm de 1 a 3 filhos. b. Quantas pessoas têm de 4 a 7 filhos. c. Quantas pessoas têm 8 filhos ou mais. d. Quantas pessoas não têm filho. 19) Observação: O valor do Vale Transporte não pode ultrapassar R$ 95,00 Ler nome, idade e sexo de 40 pessoas e após imprimir: a. Número de pessoas do sexo masculino. No final mostrar: b. Número de pessoas do sexo feminino. - A soma dos salários líquidos; c. Número de pessoas com idade até 30 anos. - A média dos salários brutos; - O maior salário; - O menor salário; d. Número de pessoas com idade igual ou superior a 60 anos. 20) O proprietário de um cinema desejou saber certo dia qual seria a sessão mais lucrativa para ele. Assim sendo, para cada um dos 100 espectadores deste dia registrou nome e sessão (tarde ou noite). Fazer um algoritmo para ler estes dados e após informar ao proprietário qual foi a sessão que teve mais espectadores ou se foram iguais. 21) Numa pesquisa populacional, entre outros dados, registrou-se para cada um dos 160000 recenseados o nome, sexo, idade e grau de escolaridade (0=analfabeto, 1=primário, 2=secundário, 3=superior, 4=pós-graduação). Como resultado da pesquisa deseja-se obter um relatório contendo as seguintes informações: 25) Fazer um algoritmo que solicite dois valores quaisquer e apresente um menu com as opções de soma, subtração, multiplicação e divisão, Conforme a opção escolhida apresentar os números digitados e o resultado. Perguntar se quer mais cálculos; caso positivo reiniciar, se não, encerrar o programa informando quantos cálculos foram efetuados. 26) Uma empresa resolveu conceder um aumento aos seus funcionários conforme tabela abaixo: Salários até Salários de Salários acima de a. Número de analfabetos. b. Número de pessoas com instrução primária. d. Número de pessoas com formação superior e. Número de homens pós-graduados. 22) 23) Número de mulheres pós-graduadas Ler as notas e os nomes de uma turma de 30 alunos, mostrar os nomes e as notas de cada aluno e a mensagem de aprovado, se a nota for maior ou igual a 7 e reprovado, se menor que 7. No final imprimir a nota mais alta, a nota mais baixa, a média aritmética da turma, quantos alunos foram aprovados e quantos foram reprovados. Ler 10 valores maiores que zero. Mostrar os valores e informar se são ímpares ou não. No final mostrar a soma deles, a média aritmética, a soma dos pares, a soma dos ímpares, o maior e o menor valor. LÓGICA DE PROGRAMAÇÃO 63 até R$ 500,00 20% 15% 10% a. Ler para cada funcionário o nome e o salário antigo. Calcular o novo salário. Mostrar o nome, o salário anterior e o novo salário. Finalizar o programa quando for digitada a palavra “FIM” em lugar do nome. Informar no final o seguinte: b. Quantos funcionários têm a empresa; c. O total dos salários antigos; d. O total dos salários novos; e. O maior salário novo; f. O menor salário novo. c. Número de pessoas com mais de 50 anos e instrução secundária. f. R$ 200,00 R$ 200,01 R$ 500,00 27) Escrever um algoritmo que lê a quantidade de cobaias utilizadas em cada uma das experiências e um código 1 ou 2. O código 1 representa coelhos e o 2 representa ratos. Quer-se saber o total de cobaias utilizadas, o total de ratos, o total de coelhos, a percentagem de coelhos e a percentagem de ratos. Escrever esses valores. Usar como Flag 999, na quantidade de cobaias. LÓGICA DE PROGRAMAÇÃO 64 28) Em um certo estabelecimento selecionaram 20 pessoas com diferentes idades e para cada uma delas foram registrados, nome, idade e mês de nascimento. Após o registro de dados, desejou-se saber: 31) A empresa X requisitou uma pesquisa em objetivo de inteirar-se de alguns dados. Para consta no cadastro nome, sexo, tempo de deverá ler estes dados e após imprimir na seguintes informações: seu cadastro de pessoal com cada um dos seus funcionários serviço e salário. O algoritmo tela, um relatório contendo as a. Idade da pessoa mais jovem; a. Nome, sexo, tempo de serviço salário e mensagem "FUNCIONÁRIO APOSENTADO", para os empregados que possuírem mais de 35 anos de serviço; · b. Nome e idade da pessoa mais idosa; c. Número de pessoas nascidas no mês de setembro e no mês de outubro. b. Nome, sexo, tempo de serviço e salário dos possuírem tempo de serviço inferior a 3 anos. 29) Um fabricante de televisores deseja inteirar-se do movimento de sua produção durante um determinado período, para cada um dos televisores fabricados, registraram-se os seguintes dados: modelo (1, 2 ou 3), tipo preto e branco (PB) ou colorido (C), preço de custo e preço de venda. funcionários que c. Nome, sexo, tempo de serviço e salário dos funcionários que possuírem tempo de serviço superior a 3 anos e salários inferiores a R$ 500,00 a. Elaborar um algoritmo para ler e imprimir estes dados, além do lucro obtido na venda de cada televisor. d. Usar como flag FIM no campo nome. 32) Uma empresa fez uma pesquisa para saber a aceitação de um produto lançado no mercado, para isso devemos ler o sexo e a resposta de cada pessoa pesquisada. b. Usar como flag 9 no modelo. c. Ao final do algoritmo deverá ser impresso um segundo relatório contendo as seguintes informações: a. Usar com flag a letra X no campo sexo. i. Número de televisores vendidos do modelo 1; b. No final informar: ii. Número de televisores vendidos do modelo 2; i. Quantas pessoas responderam SIM. iii. Número de televisores vendidos do modelo 3; ii. Quantas pessoas responderam NÃO. iv. Número de televisores preto e branco vendidos; iii. Quantas pessoas do sexo feminino disseram SIM. v. Número de televisores coloridos vendidos; iv. Quantas pessoas do sexo masculino disseram NÂO. vi. Lucro total obtido pela fábrica; v. Quantas foram as pessoas pesquisadas. vii. Maior preço de custo; viii. Maior preço de venda. 30) Uma empresa deseja realizar um levantamento no cadastro de seus funcionários. Para isso, deverá ser lido para cada funcionário: nome, idade, salário e ano de admissão; 33) Ler o nome, as horas trabalhadas e o salário hora de cada funcionário de uma empresa. O programa terminará quando forem digitadas três letras X no lugar do nome (XXX). Calcular o salário bruto. Fazer uma função para calcular o INSS, outra para calcular o IRRF, conforme tabelas abaixo e outra para calcular o vale transporte, que é de 6% sobre o salário Bruto. a. Ao final deverá ser impresso um relatório em que constarão os seguintes dados: i. Nome do funcionário mais idoso; ii. Nome do funcionário mais antigo na empresa; iii. Maior salário na empresa. iv. Usar como flag ZZZ no nome. LÓGICA DE PROGRAMAÇÃO Observação: O valor do Vale Transporte não pode ultrapassar 110,00 reais. 65 LÓGICA DE PROGRAMAÇÃO 66 a. Calcular o Salário Líquido. b. Escrever o nome, Salário Bruto, INSS. IRRF, VT e SL para cada funcionário. 34) Elaborar um algoritmo para ler números positivos. O programa terminará quando o usuário digitar o zero. Escrever os números lidos. Fazer uma função para informar se o número digitado é primo ou não. 45) Ler um vetor K de cinco posições. Escrever o vetor. Mostrar a soma do primeiro elemento com o último e a multiplicação do segundo pelo quarto e a diferença entre a multiplicação e a soma. 46) Escreva o pseudocódigo em português estruturado que leia um vetor V de 20 posições e classifique-o em ordem crescente. Escreva o vetor ordenado. 47) Ler 50 valores de 1 até 10, contar e mostrar quantas vezes foi digitado cada valor. a. No final informar: 48) Escreva o pseudocódigo em português estruturado que leia um vetor L de 15 posições e classifique-o em ordem decrescente. Escreva o vetor ordenado. i. A soma total dos números. ii. A soma dos números primos. 49) Preencher um vetor de 15 posições com valores aleatórios de 1 até 100. Escrever o vetor. Pesquisar os valores do vetor. Se forem menores que 50 substituir pelo seu triplo, caso contrário substituir pelo seu dobro. Escrever o vetor modificado. iii. O maior número. iv. O menor número. 35) Ler um número de um a sete, correspondendo ao dia da semana, fazer um procedimento para escrever o dia da semana em caracteres. 50) Escreva um algoritmo que lê uma matriz M[5,5] e calcula as somas: a. Da linha 4 de M; 36) Ler como valor numérico o dia, mês e ano em varáveis distintas, repassar estes parâmetros para uma função que vai testar se esta data está digitada corretamente. b. Da coluna 2 de M; c. De todos os elementos da matriz. 37) Ler um valor de um até 10. Consistir a entrada. Fazer uma função para calcular o fatorial do número digitado. 38) Escrever um algoritmo que lê um vetor V[16] e o escreve. Conte, a seguir, quantos valores de V são negativos, quantos são pares, quantos são impares e escreva esta informação. 39) Escreva um algoritmo que lê um vetor A [20] e escreve todos os valores maiores que 10 deste vetor e suas posições. 51) Escrever um algoritmo que lê duas matrizes N1[4,6] E N2[4,6] e cria uma matriz M1 que seja a soma de N1 com N2. Escrever as matrizes lidas e calculadas. 52) Escrever um algoritmo que lê uma matriz M[6,6] e calcula as somas das linhas e das colunas. Escrever a matriz lida e as somas calculadas 53) Escrever um algoritmo que lê uma matriz M[5,5] e calcula as somas: 40) Escrever um algoritmo que lê um vetor X[15] e o escreve. Substitua, a seguir, todos os valores zeros de X pelo valor do dobro de sua posição e escrever o novo vetor. a. Da linha 3 de M; 41) Escrever um algoritmo que lê um vetor C[20] e o escreve. Encontre, a seguir, o maior elemento de C e o escreva. c. Da diagonal da matriz. b. Da coluna 5 de M; d. Da diagonal inversa da matriz. 42) Escrever um algoritmo que lê um vetor V[18] e o escreve. Encontre, a seguir, o menor elemento e a sua posição no vetor V e escreva: "O MENOR ELEMENTO DE V É =“, M, “E A SUA POSIÇÃO É =“, P. 43) Escreva o pseudocódigo em português estruturado que leia um vetor V de 10 posições e, após, verifica se um número N, fornecido pelo usuário, existe no vetor. Se existir, indicar a posição, se não, escrever a mensagem "O número fornecido não existe no vetor!". 44) Escreva o pseudocódigo em português estruturado que leia um vetor A, de 5 posições, um vetor B de 5 posições e coloque a soma dos elementos no vetor C, também de 5 posições. LÓGICA DE PROGRAMAÇÃO 67 54) Preencher uma matriz M de quinze linhas por quinze colunas M[15,15], com números aleatórios de 1(um) até 1000(mil). Solicitar que o usuário digite um valor também de 1(um) até 1000(mil). Consistir esta entrada. Pesquisar se o número digitado foi gerado na matriz. Caso tenha sido encontrado informar ao usuário em qual posição se encontra e se não for encontrado enviar uma mensagem informando que não foi gerado. 55) Ler valores para uma matriz de cinco linhas por cinco colunas, preencher e escrever a matriz linha por linha. Transpor a matriz, isto é, passar o valor das linhas para as colunas e escrever novamente a matriz. LÓGICA DE PROGRAMAÇÃO 68