centro federal de educação tecnológica · pdf fileapostila 1 de...

38
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA CELSO SUCKOW DA FONSECA CAMPUS PETRÓPOLIS CURSO TÉCNICO EM TELECOMUNICAÇÕES INTEGRADO AO ENSINO MÉDIO Apostila 1 de Introdução à Programação Eixo Temático: Computação Objetivos: Conceituar algoritmos e estruturas de dados Introduzir as estruturas básicas de controle Apresentar a programação estruturada como metodologia para desenvolvimento de algoritmos Introduzir uma linguagem de expressão de algoritmos e uma alternativa gráfica equivalente (fluxograma) Despertar a capacidade de descrever um padrão de comportamento através de algoritmos Capacitar o aluno na implementação de programas estruturados Programa: Conceitos de algoritmos e estruturas de dados Estruturas básicas de controle de fluxo Técnicas de Programação estruturada Portugol e Fluxograma Petrópolis, 1ª Edição - 2016.

Upload: truongkhanh

Post on 01-Feb-2018

216 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA CELSO SUCKOW DA FONSECA

CAMPUS PETRÓPOLIS

CURSO TÉCNICO EM TELECOMUNICAÇÕESINTEGRADO AO ENSINO MÉDIO

Apostila 1 de

Introdução à Programação

Eixo Temático: Computação

Objetivos: • Conceituar algoritmos e estruturas de

dados• Introduzir as estruturas básicas de

controle• Apresentar a programação estruturada

como metodologia para desenvolvimentode algoritmos

• Introduzir uma linguagem de expressãode algoritmos e uma alternativa gráficaequivalente (fluxograma)

• Despertar a capacidade de descrever umpadrão de comportamento através dealgoritmos

• Capacitar o aluno na implementação deprogramas estruturados

Programa: • Conceitos de algoritmos e estruturas de

dados• Estruturas básicas de controle de fluxo• Técnicas de Programação estruturada• Portugol e Fluxograma

Petrópolis, 1ª Edição - 2016.

Page 2: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Este material trata de forma resumida os principais tópicos da disciplina. Osassuntos contidos neste guia não são abordados de forma exaustiva. Este guia de estudostem o objetivo de orientar o aluno nos tópicos da disciplina.

O aprofundamento da matéria se dará através das notas de aula e dasatividades sugeridas em classe pelo professor. Além disso, através da bibliografia indicada,o aluno poderá encontrar material suficiente para um estudo mais abrangente e umapesquisa mais dirigida.

O conteúdo deste material será útil exclusivamente para os alunos do 1º ano doCurso Técnico em Telecomunicações Integrado ao Ensino Médio, para utilização em sala deaula.

Este trabalho foi licenciado com uma Licença Creative Commons – Atribuição-Não Comercial – Sem Derivados 3.0 Brasil.

Maiores informações sobre este material e download visite:http://www.telpet.com.br/retondaro

e sobre a licença, visite:creativecommons.org.br.

Page 3: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

1. Fundamentos Data: / /

“Na ciência e em todo trabalho de criaçãonós falhamos repetidas vezes.

Normalmente para cada ideia bem sucedidahá dúzias de outras que não funcionaram .”

John Backus, criador do Fortran e da programação funcional,em seu discurso ao receber o prêmio Charles Stark Draper, 1994.

“A história não é exclusivamente caos ou acaso:existe no comportamento humano

um certo grau de ordem e padrão observáveisde uma regularidade parcialmente previsível. ”The Social Sciences in Historical Study (vários autores)

Definições

1.1 O que é uma Informação? A palavra informação carrega em si diversos conceitos. De maneira geral, a

informação representa a qualidade ou valor de um conjunto de dados agregados, manipuladosou processados. Sempre associamos informação com algo que possa promover ou modificar oconhecimento. Para melhor entendimento deste conceito vamos fazer uma comparação:

Dado x Informação

Por exemplo: 25/12 - É um dado. Apenas pode-se atribuir um valor matemático. Uma fração talvez. Isoladamente, sem um contexto,não se pode arbitrar nada sobre esse valor.25/12, Natal - É uma informação.Aqui já se obtém uma qualificação dos números, fazendo-nos identificá-los como sendo uma data específica do nosso calendário.

A informação gera uma identidade, uma qualidade, uma quantificação, ou ainda,uma especificação de determinado dado, promovendo um conhecimento. Pode ser coerente,verdadeira, influente, ou incoerente, falsa, de pouco valor. Ainda assim, se denota a essênciade algo, é informação.

Para debate:- Como é possível melhorar a informação?

1.2 O que é algoritmo?

Um procedimento metódico, passo a passo e descrito em termos de instruçõestotalmente isentas de ambiguidade, que começa numa condição inicial especificada e terminacom o fornecimento do resultado desejado.

3

Notas Iniciais:

____________________________

____________________________

____________________________

____________________________

____________________________

____________________________

Page 4: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

O termo algoritmo tem origem na Matemática. A palavra "algoritmo" vem datranscrição europeia do nome do astrônomo e matemático do século IX Al Khwarizmi, deBagdá, que catalogou e aperfeiçoou esses métodos, sendo o inventor de muitos deles.

Sua compilação de algoritmos, Hisab al-jabr w'al-muqabala, é considerada oprimeiro tratado de Álgebra da história. O termo "álgebra", inclusive, vem da expressão al-jabrcontida em seu título.

Um exemplo de algoritmo matemático simples é aquele que aprendemos na escolaprimária para somar dois números inteiros: "escreva os dois números um embaixo do outrocom os últimos dígitos alinhados à direita; some os últimos dígitos; se o resultado for menorque 10, escreva esse número debaixo dos outros dois; se o resultado for maior que 10, escrevao segundo dígito debaixo dos outros dois e inclua o primeiro dígito na soma dos dígitosimediatamente à esquerda...", e assim por diante. O primeiro algoritmo ocidental sofisticado éprovavelmente aquele presente em "Os Elementos", de Euclides, cuja finalidade é encontrar omáximo divisor comum de dois números não negativos.

Nos dias atuais os algoritmos costumam aparecer codificados em notaçõescomplexas chamadas linguagens de programação, e são os elementos constitutivos dosprogramas.

Exemplo:

Algoritmo SOMA_VALORES;inteiro VALOR, SOMA;inícioSOMA   0;←leia (VALOR);enquanto VALOR ≠ ­1 faça

SOMA   SOMA + VALOR;←leia (VALOR);

fim enquanto;imprima (“O VALOR DA SOMA É: ”, SOMA);

fim.

1.3 O programa

Programar é basicamente construir algoritmos de forma sistemática. O aspecto fundamental nos programas é que eles são formulações concretas de

algoritmos abstratos. Estas formulações são baseadas em representações e estruturasespecíficas de dados.

Tais estruturas são representações das informações do problema a ser resolvido.Formular algoritmo e definir estruturas de dados apropriadas são tarefas intimamente ligadas.

Num algoritmo/programa devemos distinguir claramente dois aspectos: estático edinâmico.

• O aspecto estático de um algoritmo consiste no texto contendo as instruções a seremexecutadas. Esse texto representa concretamente o algoritmo e tem um caráteratemporal, estático.

• O aspecto dinâmico de um algoritmo está além do texto. Está nos efeitos da execuçãode cada instrução no tempo, dado um conjunto de valores iniciais.

De fato, a grande dificuldade na criação e no entendimento de algoritmos está noproblema do relacionamento desses aspectos, ou seja, como entender e visualizar asestruturas dinâmicas das possíveis execuções do algoritmo a partir da estrutura estática do seu

4

Page 5: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

texto.Para facilitar, limitamos a quantidade de estruturas de controle em um algoritmo em

poucas sequências simples, alternativas e repetições. Uma ação é um evento que ocorre numperíodo de tempo finito, estabelecendo um efeito intencionado e bem definido.

Exemplos:“caminhar até a próxima esquina”“descascar batatas”

Outra coisa importante a considerar é que o efeito de uma ação não pode serimprevisível. O estado de um objeto no tempo são as propriedades que são relevantes paranós na situação considerada. Por exemplo: batatas com casca ou descascadas. No caso deum programa, podemos considerar um determinado valor num certo instante da execução.

Quando consideramos um evento como uma sequência de ações, cujo efeitoacumulado é igual ao efeito do evento total, falamos de um processo sequencial, ousimplesmente de um processo.

Para descrever um evento, inicialmente, usamos a forma de relato de umobservador.

Por exemplo, para o evento “a cozinheira descasca as batatas para o jantar”, asações podem ser separadas por “;” e descritas na seguinte sequência:

“traz a cesta com batatas para a cozinha” ;EV1 “pega a panela no armário” ; “descasca as batatas”.

Suponhamos que EV1 seja um relato de um observador em um certo dia.No outro dia, a cozinheira novamente descasca as batatas para o jantar, e o

observador descreve o evento com um relato idêntico.Podemos dizer que os dois relatos descrevem o mesmo evento? - Não, pois trata-

se de eventos distintos, ocorridos em dias diferentes, com batatas diferentes de cada vez.Por outro lado, os dois eventos são muito similares, a tal ponto que os dois podem

ser descritos com o mesmo relato e que concordamos em dar aos dois eventos o mesmonome: “a cozinheira descasca as batatas para o jantar”. Que é que os dois eventos tem emcomum? - Neles reconhecemos o mesmo padrão de comportamento.

Então dizemos que, em todo evento podemos reconhecer um padrão decomportamento, fazendo abstração dos possivelmente diferentes estados iniciais e efeitos.Inversamente, cada vez que o padrão de comportamento é “seguido” o evento ocorre. O efeitode um evento está totalmente determinado pelo padrão de comportamento e eventualmentepelo estado inicial.

Por exemplo:Nas diferentes execuções da operação n2 , para diferentes valores de n, podemos

reconhecer um mesmo padrão de comportamento, e o nome que damos a todos os eventos é“elevar um número ao quadrado”. Neste caso, o estado inicial é dado pelo valor de n, e o efeito,pelo valor obtido multiplicando-se esse valor por si mesmo.

Exercício:Qual o padrão de comportamento utilizado para gerar a sequência: 1, 5, 9, 13, 17, 21, 25 ?

Resposta:A partir do valor inicial 1, cada termo seguinte é obtido somando-se 4 ao termo anterior.

5

Page 6: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

1.4 A lógica formal

A lógica é uma ciência antiga, intimamente ligada à filosofia e à matemática. Otermo lógica se origina da palavra grega logos que significa “verbo”, “palavra”, “pensamento”,“razão”. Aristóteles entendia que a lógica é a ciência da demonstração. De forma resumida,podemos dizer que a lógica se preocupa com a formatação de um raciocínio, ou com a maneiraque uma ideia pode ser expressa, a fim de possibilitar uma conclusão sobre determinadopensamento em busca da verdade.

Simplificadamente, a lógica pode ser dividida em lógica formal e lógica material.A lógica formal não depende das verdades de cada premissa, mas da relação

destas com a conclusão, afim de determinar se elas podem sustentar a conclusão. Nesse caso,para a lógica formal, todas as premissas são verdadeiras.

Os dois tipos de argumentação usados na lógica formal são: a dedução e aindução. O método lógico dedutivo parte de fatos ou eventos universais ou mais genéricos,para concluir os mais particulares. O método indutivo analisa os fatos ou eventos particularesou específicos para concluir uma hipótese mais geral, abrangente, universal, genérica.

Exemplos:

a) Dedução“Todos os humanos são mortais.”“Todos os petropolitanos são humanos.”“Todos os petropolitanos são mortais.”

b) Indução“A macieira é uma fruteira.”“O limoeiro é uma fruteira.”“A laranjeira é uma fruteira.”“A macieira, o limoeiro e a laranjeira são árvores.”“As árvores são fruteiras.”

Note que, apesar da indução ser um processo natural, suas conclusões podem serperigosas, pois generalizar premissas verdadeiras podem levar a uma falsa conclusão. Nessecaso, não se pode dizer que a conclusão do argumento é uma verdade.

Já que os argumentos dedutivos são considerados válidos pela forma lógica e nãopelo conteúdo dos seus enunciados, é neste método que se baseia a lógica de construção dealgoritmos.

1.5 O Fluxo de Controle

O conceito que relaciona o aspecto estático de um algoritmo com o seu aspectodinâmico, é o de fluxo de controle. Ele determina em cada passo da execução qual é opróximo comando a ser executado. A ordem de execução dos comandos, geralmente não é amesma ordem descrita no texto estático.

Compreender a lógica de um algoritmo significa visualizar os processos (sequênciade comandos) que serão executados, dependendo do fluxo de controle.

Vejamos a seguir, um exemplo que utiliza apenas as estruturas básicas de controle:sequência e alternativa:

6

Page 7: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

se a > 15 { a > 15  }então

x   x * 4;←y   y + 3;←

senão se a > 10 { 10 < a ⩽ 15  }então

x   x * 3;←y   y + 2;←

senãox   0;←y   0;←

fim se;fim se;

Neste exemplo, as sequências simples são comandos de atribuição de valorrepresentados pelo símbolo “←”. Portanto, x ← x * 4, equivale a ação de multiplicar x por 4 eatribuir o novo resultado a x.

As alternativas são representadas por estruturas condicionais “se”, onde: “se a >15” , indica que as instruções seguintes serão executadas se esta condição for verdadeira.

Os símbolos “{}” apenas representam comentários que facilitam o entendimento daação ou explicam o efeito esperado. Comentários não fazem parte do aspecto dinâmico doalgoritmo.

E, por último, a identação é o recuo à esquerda, antes de cada instrução, paraindicar que se uma instrução está “identada”, ou seja, mais à direita que a anterior, ela édependente de sua execução. Dizemos que esta última instrução está “aninhada”. Noexemplo, a instrução “x ← x * 3” só será executada, se a > 10 e a ⩽ 15, pois está aninhada nasegunda instrução alternativa “se”.

1.6 A Linguagem de Programação

Uma linguagem de programação é uma notação técnica que permite a construçãodos programas expressando o seu raciocínio algorítmico, bem como a sua execução por umcomputador.

Existem algumas metodologias de programação: estruturada, orientada a objetos,orientada a eventos, e outras menos populares.

Para o facilitar o aprendizado, introduziremos a programação estruturada, com umalinguagem de programação de alto nível. A linguagem de alto nível recebe esta denominação,por ser baseada em uma notação sintática bem próxima da linguagem natural do programador,fazendo-se uso da lógica formal.

A metodologia de programação estruturada é fundamentada na busca pela reduçãoda complexidade da escrita dos programas e a sua devida modularização, permitindo umaverificação mais fácil dos processos a serem executados, bem como a sua ideal manutenção.

Para a programação estruturada deve-se estabelecer a metodologia derefinamentos sucessivos, ou seja, um desenvolvimento de cima para baixo (top-down).

O desenvolvimento top-down é conhecido como “dividir para conquistar” pois éimplementado da seguinte forma:

1. Descreve-se o processo de raciocínio geral (algoritmo);2. Utiliza-se estruturas genéricas abstratas para a representação de dados;3. Divide-se o programa em categorias relevantes do problema;4. Refina-se cada fase anterior, obtendo uma codificação mais detalhada;5. Após o detalhamento de cada nível do programa, este pode ser implementado

diretamente em uma linguagem de programação.

7

Page 8: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

2. Expressão sintática e semântica Data: / /

“Ciência da computação tem tanto a ver com o computador

como a Astronomia com o telescópio, a Biologia com o microscópio, ou

a Química com os tubos de ensaio. A Ciência não estuda ferramentas,

mas o que fazemos e o que descobrimos com elas."”

Edsger Dijkstra.

Dijkstra foi o principal contribuidor no final dos anos 1950 para o desenvolvimento do ALGOL,

uma linguagem de programação de alto nível, modelo de clareza e rigor matemático.

Ele é um dos maiores expoentes na arte e ciência das linguagens de programação, e contribuiu enormemente para a compreensão de sua estrutura, representação, e implementação.

Seus quinze anos de publicações vão de artigos teóricos na teoria dos grafos até manuais, textos expositores, e filosofia contemplativa no campo das linguagens de programação.

Estruturas básicas de controle de fluxo

2.1 Sintaxe e semântica

Em toda linguagem, as sentenças construídas envolvem dois aspectos: a sintaxe ea semântica. A sintaxe tem a ver com a forma e a semântica com o conteúdo.

Para a elaboração de algoritmos consideramos aqui uma pseudo-linguagem deprogramação, parecida com a linguagem natural (português) e com expressões sintáticasbaseadas no Algol e Pascal. Esta pseudo-linguagem é conhecida como “Portugol”.

Considerando a pseudo-linguagem Portugol, cada estrutura de controle pode terum significado específico ao representar um evento.

Para atingir o objetivo de construir um bom algoritmo, cada estrutura em Portugoldeve ser aceita e respeitada como padrão, sob o risco do evento não poder ser executado, ouexecutar com erro de semântica.

A seguir, seguem-se as sintaxes das principais estruturas em portugol:

IDENTIFICADOR – é o elemento básico da linguagem, ele representa o nome deuma estrutura, principalmente, uma variável.

Sintaxe: Qualquer nome ou palavra, iniciadas por letras sem a separação porespaços.

Exemplos válidos: A15, IDADE, MENOR, XTOTAL, X2, PRIMEIRO_NOME.Exemplos inválidos: 20X, MAIOR PESO, %3K

VARIÁVEL – representa a identidade de um espaço de armazenamento deconteúdo/valor específico. Se precisamos armazenar um determinado valor X, podemos alocarum espaço denominado X. Como o conteúdo de X pode ser modificado ao longo do programa,dizemos que X é a variável.

Exemplo: x   4;  { o valor 4 é armazenado em X }←

COMENTÁRIOS – O texto do programa é chamado de código-fonte.Simplificadamente, chamamos apenas de código. Como já mencionado anteriormente, oscomentários são elementos da pseudo-linguagem que não serão interpretados comocomandos, portanto não fazem parte do aspecto dinâmico do algoritmo. Só servem para ajudarna leitura e na manutenção futura do código.

Geralmente, em Portugol, os comentários são identificados por estarem entre

8

Notas Iniciais:

____________________________

____________________________

____________________________

____________________________

____________________________

____________________________

Page 9: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

chaves { }. Porém, a pseudo-linguagem nos dá a liberdade de expressamos de outras formas.Exclusivamente para este material, usa-se a notação // <comentário> ou /* <comentário>*/ , por ser a forma exclusiva da linguagem C que será usada no segundo ano.

Exemplos:notação geralmente utilizada (observe para futura consulta na bibliografia):x   4;     {   x é atualizado com valor 4... }←notação exclusiva, utilizada a partir daqui:x   4;     //  x é atualizado com valor 4... ←notação exclusiva, utilizada com comentários que ocupam mais de uma linha:x   4;     /*  x é atualizado←               com valor 4... */ 

TIPOS DE DADOS – basicamente, em Portugol, podemos declarar as variáveis em4 tipos: Inteiro, Real, Caracter e Lógico. A declaração das variáveis é uma terefa de extremaimportância, pois trata-se de reservar um espaço na “memória do computador” (neste caso acomputação ainda é feita no papel) para armazenar os dados.

Os dados precisam ser armazenados de forma a permitir o fácil acesso ao seuconteúdo/valor. Estas estruturas de armazenamento e de acesso, devem ser pensadas eestabelecidas para permitir esta ação com segurança, rapidez e integridade. Estas estruturassão chamadas de estruturas de dados. São estruturas abstratas que permitem uma alocaçãode dados ideal para determinada situação.

Os tipos de dados em Portugol são as estruturas de dados mais simples queexistem. Adiante outras estruturas mais complexas serão abordadas.

INTEIRO: qualquer número inteiro, negativo, nulo ou positivo. Ex.: -4, 0, 46REAL: qualquer número real, negativo, nulo ou positivo. Ex.: -4, 0, 46, 2.3, -1.57CARACTER: qualquer conjunto de caracteres alfanuméricos, também conhecidos

como strings. Ex.: “AB”, “ “, “LARANJA”LÓGICO: assume os valores FALSO ou VERDADEIRO como resultados de

expressões lógicas.As declarações de variáveis são escritas antes de qualquer comando e são

separadas por tipos de dados e suas respectivas variáveis. Exemplo: para um algoritmo quenecessite tratar dois dados inteiros, dois dados lógicos e um dado caracter, 5 variáveis devemser declaradas e associadas a eles com a seguinte sintaxe:

inteiro: X, Y; lógico: CADASTRADO, TERMINADO;caracter: NOME;

COMANDO DE ATRIBUIÇÂO – vide exemplo de variável acima. É o comando maisbásico. Com este comando, pode-se atribuir um valor/conteúdo à uma variável.

Exemplo: a   5;←

OPERADORES ARITMÉTICOS – são símbolos usados para representar operaçõesaritméticas. São eles: + (soma), - (subtração), * (multiplicação), / (divisão), mod (resto de umadivisão), raiz (raiz quadrada), ** (exponenciação);

Exemplo: a   (5 ** 3) + 4;   //cinco elevado ao cubo mais 4←

OPERADORES LÓGICOS – são símbolos usados para representar conectivos emoperações lógicas. São eles: e (para conjunção), ou (para disjunção), não (para negação);

Exemplo: a   não(TERMINADO ou CADASTRADO);←

OPERADORES RELACIONAIS – são símbolos usados para representarconectivos relacionais. São eles: = (igual), <> (diferente), >=, <=, >, e < .

Exemplo: x   (a <= 10) ou (b <> 5);←

9

Page 10: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

PROCESSAMENTO DE ENTRADA E SAÍDA – são comandos básicos utilizadosno algoritmo para receber valores de entrada, geralmente fornecidos pelo usuário, e armazená-lo em diretamente em uma variável e também para gerar uma saída que geralmente é umaimpressão de um resultado na tela.

Exemplo de entrada: leia(A);/* o usuário fornece um valor via    teclado e este é armazenado   na variável A.    */

Exemplo de saída: escreva(“TESTE ”,A); // será “impresso” na tela a palavra TESTE // seguida do conteúdo da variável A.

ALTERNATIVA OU DESVIO CONDICIONAL – são blocos de código queselecionam a sequência de comandos a serem executados, dependendo do resultado daexpressão lógica que é utilizada como condição para a avaliação.

Exemplo: se a > 10então

x   x * 3;←senão

x   0;←fim se;

REPETIÇÃO COM TESTE NO INÍCIO – são blocos de código que permitem aexecução repetitiva de determinada sequência de comandos, dependendo do resultado doteste condicional da expressão lógica.

Exemplo: a   0;←enquanto (a < 2) faça

escreva (“Contando...”,a);a   a + 1;←

fim enquanto;

Neste caso será “impresso” na tela: Contando...  0Contando...  1

Observação: caso o teste inicial seja FALSO, nenhum comando dentro do enquantoserá executado.

2.2 Metodologia de Desenvolvimento

Iniciar o desenvolvimento de um algoritmo para resolver um determinado problemapode ser algo difícil. Para auxiliar nesta tarefa podemos seguir os seguintes passos:

1) Leia cuidadosamente a especificação do problema até o final quantas vezes

10

Page 11: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

for necessário e faça anotações;2) Determinar as saídas exigidas na especificação do problema;3) Determinar as entradas citadas na especificação do problema;4) Verificar se é necessário gerar valores internamente ao algoritmo e verificar

se os valores de entrada precisam ser inicializados com algum valor;5) Determinar todas as transformações necessárias nos dados a fim de obter

os resultados para o problema;6) Testar cada passo do algoritmo, verificando as transformações ocorridas

com os dados e fazer anotações. Esta é a fase de depuração e análise. Nesta faze pode-sealterar comandos ou adaptar estruturas;

7) Reavaliar tudo.

Analise o método acima a partir do exemplo a seguir.

2.3 Fluxogramas

Fluxograma é um tipo de diagrama esquemático que representa bem o aspectodinâmico de um algoritmo. O fluxo de execução, bem como as estruturas de controle sãoevidenciadas e é possível compreender a semântica da solução.

As notações usadas em um fluxograma são:

Marca o início e o fim do algoritmo

Denota um processo/comando

Representa um desvio condicional

Usado como conector. Geralmente, marca o fim de um bloco

Representa um bloco de repetição, com condição inicial.

Entrada e Saída

11

Page 12: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Em toda linguagem, as sentenças construídas envolvem dois aspectos: a sintaxe ea semântica. A sintaxe tem a ver com a forma e a semântica com o conteúdo.

Vejamos uma comparação, entre as duas expressões (texto e gráfico) utilizando asestruturas já conhecidas até então:

Problema: “Achar o maior e o menor número de uma série de númerospositivos fornecidos pelo usuário” (nota: existe pelo menos 1 número)

PORTUGOL:

Algoritmo MAIOR_E_MENOR;

inteiro:  MAIOR, // conterá o maior valorMENOR, // conterá o menor valorVALOR;   // será o valor lido

início

leia (VALOR);

MAIOR   VALOR;←

MENOR   VALOR;←

enquanto VALOR   0 ≠ faça // admitindo que 0 é o// último valor

se VALOR > MAIORentão

MAIOR   VALOR;←senão se VALOR < MENOR

entãoMENOR   VALOR;←

fim se;fim se;

leia (VALOR);

fim enquanto;

escreva (MAIOR, MENOR);

fim.

12

Page 13: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

FLUXOGRAMA TRADICIONAL:

13

início

leiaVALOR

MAIOR   VALOR←

VALOR ≠ 0

VALOR >MAIOR

MENOR   VALOR←

VALOR <MENOR

MENOR   VALOR←MAIOR   VALOR←

leiaVALOR

escrevaVALOR

fim

Page 14: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Exercícios

1) Construir um algoritmo para gerar e imprimir N termos da série deFibonacci: 1, 1, 2, 3, 5, 8, 13, 21, … N deve ser informado pelo usuário e N >= 2

2) Construir um algoritmo para calcular a média de um conjunto devalores inteiros e positivos fornecidos pelo usuário. Como flag, pode-se assumir o valor-1. Expressar o algoritmo em Portugol e em Fluxograma.

3) Escrever um algoritmo para calcular o fatorial de um número Nfornecido pelo usuário. Expressar o algoritmo em Portugol e em Fluxograma.

4) Escrever em Portugol o trecho de algoritmo equivalente ao fluxogramaa seguir:

a)

14

X ← 3

Y < 30

Y  ← Y + 3

X  ← X + 1

Escreva (y)

Page 15: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

3. Técnica de Refinamentos Sucessivos Data: / /

“A correta especificação do problema,a análise dos requisitos de entrada e saída,

o reconhecimento de padrões ea documentação detalhada

são as principais ferramentas do programador. ”

Luis Retondaro

3.1 Refinamentos em Fluxogramas

A expressão gráfica dos algoritmos em Fluxogramas torna mais claro ocontrole de fluxo. Entretanto, o uso inadequado dos fluxogramas tradicionais, pode“desestruturar” a solução se determinados cuidados não foram tomados.

Vamos analisar o caso a seguir:Trata-se do exemplo de um algoritmo e seu correspondente fluxograma. As

possíveis instruções/ações/comandos são representados por instruções numeradasiniciadas pela letra “C”; Já as expressões lógicas necessárias para satisfazerdeterminadas condições (alternativas) são iniciadas pela letra “L”. Repare que nãoimporta saber quais condições ou que tipo de comandos serão executados, apenasinteressa refletir sobre a estrutura do algoritmo.

Algoritmo EXEMPLO_ESTRUTURADO;// declaração de variáveis;

inícioC1;se L1;então

C2;enquanto L2 faça

C3;C4;

fim enquanto;senão

enquanto L3 façaC5;se L4então

se L5então

enquanto L6 façaC6;C7;

fim enquanto;fim se;

senãoC8;

15

Page 16: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

C9;fim se;C10;

fim enquanto;C11;

fim se;C12;

fim.

16

Page 17: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Para verificar se o fluxograma tradicional está estruturado, substitui-se osconjuntos de comando que contêm uma única entrada e uma única saída, por “caixas-pretas”.

17

Page 18: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Observe o último estágio de análise: com um algoritmo não estruturado nãoteria sido possível fazer a decomposição. Este é um método para testar se um dadofluxograma é estruturado ou não.

18

Page 19: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Exercício:Analisar o fluxograma a seguir. Verificar se ele é um fluxograma estruturado

ou não. Se não for, mostrar como é possível torná-lo estruturado.

19

Page 20: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

4. Estruturas de dados homogêneos Data: / /

Vetores

4.1 Uso

Para dados enumerados em grande quantidade sendo o meso tipo deconteúdo para cada valor, pode-se ao invés de criar inúmeras variáveis daquele tipo,criar uma única estrutura que possa indexar os valores e permitir o fácil acesso a cadaum. Esta estrutura é denominada vetor e é um tipo abstrato de dados criado peloprogramador.

Por exemplo, quando se deseja calcular a média das notas dos 80 alunos deuma classe, pode-se criar um novo tipo vetor de 80 posições numéricas, assim:

tipo tipo_vet = vetor [1..80] inteiro;tipo_vet : MEU_VETOR ;

“MEU_VETOR” é uma variável do tipo que criei (tipo_vet), que é um vetor.

1 2 3 4 80

Introduzindo outra estrutura de controle de fluxo – Repetição indexada.

REPETIÇÃO COM VARIÁVEL DE CONTROLE INDEXADA – são blocos de códigoque permitem a execução repetitiva de determinada sequência de comandos, baseada nasvariáveis de controle. A variável deve ser inicializada e será incrementada a cada loop (blocode repetição) até atingir o valor limite. Após isso o fluxo de controle abandona o loop.

Exemplo: para i de 1 até 5 passo 2 faça

escreva (“Contando...”,i);fim para;

Neste caso será “impresso” na tela: Contando...  1Contando...  3Contando...  5

Na maioria dos casos não será necessário especificar o passo, pois oincremento será de uma unidade. Neste caso, a sintaxe ficaria assim:

para i de 1 até 5 faça

Repare que não há necessidade de incrementar a variável através de umcomando de atribuição (comumente: i = i + 1), pois na estrutura para isto é implícito.

20

5,0 6,5 8,0 7,2 . . . . . . . . . 6,0

Page 21: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Exemplo de manipulação de vetores:

– O que será impresso no algoritmo abaixo? (qual será a saída?)

Algoritmo EXEMPLO_VETORES;i : inteiro;tipo v = vetor [1..6] inteiro;tipo c = vetor [1..6] caracter;v : VE;c : CA;

inícioVE [1] ← 1;VE [2] ← 1;VE [3] ← 2;VE [4] ← 2;VE [5] ← 5;VE [6] ← 6;CA [1] ← “SEG”;CA [2] ← “TER”;CA [3] ← “QUA”;CA [5] ← “SEX”;CA [6] ← “SAB”;para i de 1 até 6 passo 3 faça

escreva (CA [VE [i] ] );fim para;escreva (CA [ VE [ VE [3] ] ]);

fim.

4.2 Ordenação de vetores - Método da Bolha

O método da bolha é um algoritmo clássico de classificação/ordenação, queilustra muito bem o uso de vetores. Esta ilustração facilita o entendimento da estruturade dados e ajuda a implementar outras possibilidades de solução usando vetores.

A ideia é comparar os elementos dois a dois e ir colocando os elementosmaiores nas últimas posições do vetor até obter o vetor classificado. Uma vez que oelemento atinge a mais alta posição do vetor, o tamanho dele é reduzido para continuara classificação na parte restante.

Exemplo:

3 2 4 1

2 3 4 1

2 3 1 4

2 1 3 4

1 2 3 4

21

Page 22: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Algoritmo BOLHA;tipo v = vetor [1..30] inteiro;v : VET;inteiro : AUX, // auxiliar para troca de elementos

BOLHA, // indicador de mais alto elemento fora de ordem LSUP, /* indicador do tamanho do vetor a ser pesquisado,

sendo o valor inicial igual a 30 */ J; // indicador do elemento do vetor

inícioleia (VET);LSUP ← 30;enquanto LSUP > 1 faça

BOLHA ← 0;para J de 1 até LSUP - 1 faça

se VET [J] > VET [J+1]então // troca elemento J com J + 1

AUX ← VET [J];VET [J] ← VET [J+1];VET [J+1] ← AUX;BOLHA ← J;

fim se;fim para;LSUP ← BOLHA;

fim enquanto;escreva (VET);

fim.

4.3 Acesso a índices e uso de flags em vetores

É comum uso de variáveis de controle (flags) para limitar o acesso adeterminado índice do vetor, ou até mesmo para permitir o acesso ordenado a taisíndices.

Imagine por exemplo, que se deseja fazer uma busca em um vetor de 128posições. Esta busca deve escrever se existe o elemento procurado no vetor e indicarem qual posição ele está. Uma forma bem eficiente de fazer esta busca é a pesquisabinária, desde que o vetor já esteja ordenado. Nesta pesquisa procuramos o elementoK dividindo o vetor em duas partes e testando em qual das duas ele deveria estar.Procedendo sucessivamente, da mesma forma para a parte provável.

No exemplo da página seguinte pode-se observar as variáveis de controleno acesso aos índices adequados. Observe também que há a introdução de uma outraestrutura de repetição, o repita. Esta estrutura é utilizada da mesma maneira que oenquanto, com a diferença que o teste condicional é realizado somente no final. Istogarante que o bloco mais interno ao repita seja executado pelo menos uma vez, e casoo teste seja verdadeiro ele abandonará o repita. Um exemplo de uso do repita é:

i ← 0repita

escreva (“Programa”,i);i = i + 1;

até  (i = 10);Neste exemplo o loop será interrompido quando i = 10.

22

Page 23: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Algoritmo PESQUISA_BINARIA;tipo v = vetor [1..128] inteiro;v : A;inteiro : COMEÇO, // 1º elemento da parte do vetor a considerar

FIM, // último elemento da parte considerada MEIO, // elemento do meio da parte considerada K; // elemento procurado

inícioleia (A, K);COMEÇO ← 1;FIM ← 128;repita

MEIO ← (COMEÇO + FIM) / 2;se K < A [MEIO]então

FIM ← MEIO – 1;senão

COMEÇO ← MEIO + 1;fim se;

até A [MEIO] = K ou COMEÇO > FIM;se A [MEIO] <> Kentão

escreva (“NÃO EXISTE O ELEMENTO “,K);senão

escreva (K, “ ESTÁ NA POSIÇÃO “, MEIO);fim se;

fim.

23

Page 24: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Exercício extra – Matriz

Dado um tabuleiro de xadrez TAB onde, para facilitar a indicação daspedras, vamos convencionar:

1 – PEÕES 2 – CAVALOS 3 – TORRES4 – BISPOS 5 – REIS 6 – RAINHAS0 – AUSÊNCIA DE PEDRAS,

Contar a quantidade de cada tipo de peça no tabuleiro:

6 0 0 5 0 0 1 0

0 1 0 2 0 3 0 2

0 1 1 1 0 1 0 0

0 0 2 0 3 4 4 3

1 0 1 1 0 1 0 0

0 0 1 3 0 4 0 1

1 0 0 0 2 2 2 1

1 5 0 6 0 1 1 0

A saída deve ser:

PEÕES COM 17 PEÇASCAVALOS COM 6 PEÇASTORRES COM 4 PEÇAS… … …… … …

Para este problema, vamos utilizar um vetor OC para contar as ocorrênciasde pedras usando a própria convenção da pedra como indicador para o vetor:

TORRE = 3

+1

OC = 0 1 2 3 4 5 6

Usaremos também um vetor de caracteres com o nome das peças para finsde impressão.

NOMES = 1 2 …

24

PEÕES CAVALOS ...

Page 25: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Exercícios de ProgramaçãoUtilize o Portugol

Estrutura sequencial

1) Faça um Programa que peça um número e então mostre a mensagem O númeroinformado foi [número].

2) Faça um Programa que pergunte quanto você ganha por hora e o número de horastrabalhadas no mês. Calcule e mostre o total do seu salário no referido mês.

3) Faça um Programa que peça a temperatura em graus Farenheit, transforme e mostre atemperatura em graus Celsius.

• C = (5 * (F-32) / 9).

4) Faça um Programa para uma loja de tintas. O programa deverá pedir o tamanho emmetros quadrados da área a ser pintada. Considere que a cobertura da tinta é de 1 litro paracada 6 metros quadrados e que a tinta é vendida em latas de 18 litros, que custam R$ 80,00 ouem galões de 3,6 litros, que custam R$ 25,00.

➢ Informe ao usuário as quantidades de tinta a serem compradas e os respectivos preços em 3 situações:

➢ comprar apenas latas de 18 litros; ➢ comprar apenas galões de 3,6 litros; ➢ misturar latas e galões, de forma que o preço seja o menor. Acrescente 10% de folga e

sempre arredonde os valores para cima, isto é, considere latas cheias.

Estrutura de decisão5) Faça um Programa que leia três números e mostre-os em ordem decrescente.

6) Faça um Programa que pergunte em que turno você estuda. Peça para digitarM-matutino ou V-Vespertino ou N- Noturno. Imprima a mensagem "Bom Dia!","Boa Tarde!" ou "Boa Noite!" ou "Valor Inválido!", conforme o caso.

7) As Organizações Tabajara resolveram dar um aumento de salário aos seuscolaboradores e lhe contraram para desenvolver o programa que calculará osreajustes. Faça um programa que recebe o salário de um colaborador e oreajuste segundo o seguinte critério, baseado no salário atual:

• salários até R$ 280,00 (incluindo) : aumento de 15% • salários entre R$ 280,00 e R$ 700,00 : aumento de 10% • salários de R$ 700,00 em diante : aumento de 5%

Após o aumento ser realizado, informe na tela: • o salário antes do reajuste; • o percentual de aumento aplicado; • o valor do aumento; • o novo salário, após o aumento.

Estrutura de repetição

8) Faça um programa que, dado um conjunto de N números, determine o menor valor, o maior valor e a soma dos valores.

9) Numa eleição existem três candidatos. Faça um programa que peça o número total de eleitores. Peça para cada eleitor votar e ao final mostrar o número de votos de cada candidato.

25

Page 26: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

5. Montando uma solução eficiente Data: / /

Simplificação

5.1 Escrevendo comandos simples e observando padrões

Quando vamos escrever um algoritmo, frequentemente temos a dificuldadede esboçar o raciocínio lógico diretamente na linguagem de blocos ou textos emPortugol. Mas o fato é que não precisamos fazer isso de imediato. Depois de pronto,um algoritmo de 300 linhas pode parecer assustador mas quando ainda era umrascunho certamente traduzia apenas ideias encadeadas.

Agora vamos ver um jeito simples de construir um algoritmo a partir doreconhecimento de padrões seguindo os métodos já descritos anteriormente. Namaioria dos casos a solução nasce das próprias declarações do enunciado doproblema. Se você está com muita dificuldade, releia os primeiros capítulos da apostila,observando onde se aplicam as técnicas ali descritas sobre cada evento do algoritmo.

Lembre-se que: Em todo evento podemos reconhecer um padrão decomportamento, fazendo abstração dos possivelmente diferentes estados iniciais e efeitos.Inversamente, cada vez que o padrão de comportamento é “seguido” o evento ocorre. O efeitode um evento está totalmente determinado pelo padrão de comportamento e eventualmentepelo estado inicial.

Para simplificar, cada bloco de eventos semelhantes, cujo objetivo único pode serisolado do restante do algoritmo sem prejudicar o funcionamento, escrevemos funções.

Vamos começar! Siga os passos para atingir a solução.

Exemplo 1Enunciado do problema: Faça uma algoritmo para preencher uma matriz

quadrada de tamanho 4x4 e depois exibir a sua transposta.

1) Preciso entender o enunciado. a) Primeira dificuldade: o que é uma matriz transposta? Resposta:

Dada   uma   matriz   A   de   ordem   m   x   n,   a   matriztransposta dela será  representada por At  de ordem“invertida” n x m.Essa   ordem   invertida   significa   que   paratransformarmos   uma   matriz   em   matriz   transposta,basta   trocar   os   elementos   das   linhas   pelo   dascolunas e vice­versa. Por exemplo: 

      2 3 4          2 5 8A =   5 6 7    At =   3 6 9      8 9 1          4 7 1

b) Outras perguntas: Como preencher uma matriz? Como obter a sua transposta? Resposta:

Para   preencher   uma   matriz   qualquer,   precisamosalocar valores a cada elemento dela. Mas não bastaescolher   os   valores   destes   elementos,   precisamos

26

Page 27: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

saber   em   qual   posição   (linha   e   coluna)   ele   seráalocado. Em nosso enunciado a matriz 4 x 4 terá 16elementos dispostos em 4 linhas e 4 colunas.

2) Preciso anotar quais são as entradas e seus estados iniciais. O enunciado diz que precisamos preencher uma matriz 4 x 4, então como entradado algoritmo precisaremos de 16 números inteiros (assumimos que é uma matriz deinteiros, pois o enunciado não especifica). Neste caso, os 16 números serão alocadosem cada posição da matriz.

3) Preciso saber de antemão quais serão as saídas e seu estado final. O enunciado diz que precisamos obter uma matriz transposta da original. Istosignifica que teremos como saída uma outra matriz 4 x 4, com 16 números inteirosalocados nas posições correspondentes à transposição da matriz original.

4) Preciso associar eventos/ações que serão aplicadas às entradas a fim de obteràs saídas. Neste momento, precisamos observar os dados de entrada e ir produzindomanualmente a solução esperada a fim de tentar reconhecer um padrão decomportamento. Fazemos isso para qualquer complexidade de algoritmo. Para assoluções mais complexas, ou que exijam muitas variáveis, podemos seguir o mesmoraciocínio com a ajuda também de uma teste de mesa.

Uma forma simples de fazer isso poderia ser o descrito abaixo. Suponha que eucomece a descrever a minha solução assim:

Vou chamar a minha matriz original de A, e vou alocar 16 elementos nela.Quero que ela tenha esta configuração:

1 2 3 4 6 7 8 9 1 1 1 2 3 4 5 5

então penso em fazer isso: A[1,1] 1; A[1,2] 2; A[1,3] 3; A[1,4] 4;← ← ← ← A[2,1] 6; A[2,2] 7; A[2,3] 8; A[2,4] 9;← ← ← ← A[3,1] 1; A[3,2] 1; A[3,3] 1; A[3,4] 2;← ← ← ← A[4,1] 3; A[4,2] 4; A[4,3] 5; A[4,4] 5;← ← ← ←

Pronto! Primeira parte do algoritmo já está pronta.Mas tem como otimizar mais o código? Dá para deixá-lo mais genérico esimples?Sim, mas precisamos observar padrões e anotar primeiro:Na escrita acima observei que o primeiro número entre colchete refere-se aoíndice da linha e o segundo número o índice da coluna. Observo também que acada comando, as linhas aumentam mais lentamente que as colunas, ou seja, aslinhas se mantém iguais a cada comando enquanto as colunas vão de 1 a 4.Sendo assim, ao invés de preencher a matriz com um número específico, possosolicitar ao usuário do programa que forneça estes números, de preferência na

27

Page 28: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

ordem acima.

Então um provável rascunho da minha solução seria:

“Para cada linha da matriz, forneça 4 números, sendo 1 para cada coluna.”

Esta frase traduz a solução proposta e generaliza de maneira a simplificá-la.Agora vamos traduzir esta frase em comandos do Portugol. No primeiromomento, posso ter dificuldades em selecionar os comando adequados, masposso escrever os mais básicos primeiro e aos poucos ir reescrevendo melhor.

Por exemplo: Qual o comando que solicita ao usuário o fornecimento de umdeterminado valor? Resposta: o comando LEIA.Se eu quiser ler um número e alocá-lo em uma matriz denominada A, deveriaentão escrever assim: leia (A [i, j]); , onde i e j representam a linha e acoluna da matriz A quereceberá o número fornecido.Como são 16 elementos meu primeiro rascunho ficaria assim:

leia(A[1,1]);leia(A[1,2]);leia(A[1,3]);leia(A[1,4]);leia(A[2,1]);leia(A[2,2]);leia(A[2,3]);leia(A[2,4]);leia(A[3,1]);leia(A[3,2]);leia(A[3,3]);leia(A[3,4]);leia(A[4,1]);leia(A[4,2]);leia(A[4,3]);leia(A[4,4]);

Depois que eu escrevo estas linhas em meu rascunho, percebo que os comandosão muito repetitivos, onde somente variam as linhas e as colunas da matriz.Neste momento é que eu busco otimizar o código usando uma estrutura derepetição. Se você não está familiarizado com as estruturas do Portugol, nãotente usar estruturas de repetição sem antes ter a certeza de quais são as

28

Page 29: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

partes que serão variadas e quais se manterão intactas durante o loop.

A estrutura que melhor representa a variação de 4 colunas a cada linha, sendoum total de 4 linhas é:

para i de 1 até 4 façapara j de 1 até 4 faça

(*) “ler um elemento e associar a um índice da matriz”fimpara;

fimpara;

O comando que entrará no lugar de (*) é que será repetido. Então a escritafinal será:

para i de 1 até 4 façapara j de 1 até 4 faça

leia (A[i,j]); - Note que para cada 4 j temos 1 i→fimpara;

fimpara;

Pronto! Assim ficou bem melhor!Agora preciso obter a transposta de A.Bem, por definição, basta trocar as linhas e as colunas mas antes devoobservar padrões e anotar. Para isso seria bom desenhar a matriz final jápreenchida e olhar para ela tentando achar algo que me conduza na solução: 1 6 1 3A transposta de A deverá ficar assim: 2 7 1 4 3 8 1 5 4 9 2 5

Colocando as matrizes lado a lado, posso observar o seguinte:

29

Page 30: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

1) A diagonal principal da matriz não muda. A transposta de A tem os mesmosvalores de A na sua diagonal principal.2) cada elemento da diagonal principal tem índice de linha igual ao índice decoluna, ou seja, i = j. A[1,1], A[2,2], A[3,3] e A[4,4].3) Os elementos que serão alterados estão destacados na figura pelas setas.Observe que estes elementos tem algo em comum. As comparações são sempreentre A[i,j] e A[j,i], veja só:

A[3,1] é igual a 1 e será trocado por A[1,3] que é igual a 3.A[4,2] é igual a 4 e será trocado por A[2,4] que é igual a 8.

Percebeu o padrão? - Cada elemento i,j será trocado pelo seu correspondente j,i.

Desta forma posso escrever o restante do algoritmo realizando estas trocas.Desta vez não vou escrever os comandos um a um. Vou usar o mesmo conceitovisto anteriormente. Então meu rascunho ficaria assim:

para i de 1 até 4 façapara j de 1 até 4 faça

“trocar elementos se eles não forem da diagonal principal”fimpara;

fimpara;

Agora é só substituir o comando interno ao loop pelos seus correspondentesem Portugol. Mas como eu posso dizer em Portugol que o elemento pertence ounão à diagonal principal?- Que tal assim: se (i ? j) então … não está na diagonal principal!→

Então vamos tentar:

para i de 1 até 4 façapara j de 1 até 4 faça

se (i ? j) então “trocar o elemento i,j com o elemento j,i”

fimse;fimpara;

fimpara;

Agora é só substituir o comando interno ao “se” pelo seu correspondenteem Portugol. Teoricamente, o conteúdo de A[i,j] irá ocupar o lugar de A[j,i].

Porém, sabemos que ao alocar um conteúdo em uma variável o conteúdoanterior será perdido, porque aquele o sobrescreverá.

30

Page 31: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Então preciso tem em mente que antes de sobrescrever um conteúdo em A[j,i],preciso salvar o conteúdo lá existente em uma variável auxiliar.Daí, então meu rascunho fica assim:para i de 1 até 4 faça

para j de 1 até 4 façase (i ? j) então

aux A[j,i];←A[j,i] A[i,j];←

A[i,j] aux;←fimse;

fimpara;fimpara;

Perfeito!Vamos fazer um teste de mesa para verificar.O primeiro elemento avaliado é A[1,1]. Ele será ignorado porque faz parte da matriz principal.O segundo elemento (i = 1 e j = 2) será A[1,2] e será feita a trocaadequadamente com o elemento A[2,1].Ops! Aqui observo um problema… Se A[1,2] será trocado por A[2,1], quandochegar o momento de trocar A[2,1] por A[1,2] a matriz voltará ao conteúdooriginal. Isto significa que haverá uma troca que será destrocada.

Precisamos corrigir este problema. Como fazer?Vamos ao rascunho:

para i de 1 até 4 façapara j de 1 até 4 faça

se (i ? j) então“Verificar antes de trocar se a troca já foi realizada”

aux A[j,i];←A[j,i] A[i,j];←

A[i,j] aux;←fimse;

fimpara;fimpara;

Humm. Para saber se a troca já foi realizada posso usar a seguinte estratégia:1) Se as trocas só são realizadas com i ? j, significa que i > j ou i < j.2) Se eu trocar sempre quando i > j não precisarei trocar quando j > i, pois istofaria o conteúdo voltar ao original.

31

Page 32: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Legal! Então meu rascunho seria modificado para:

para i de 1 até 4 façapara j de 1 até 4 faça

se (i ? j) entãose (i < j) então

aux A[j,i];←A[j,i] A[i,j];←

A[i,j] aux;←fimse;

fimse;fimpara;

fimpara;

Muito bem! O teste de mesa agora passa perfeitamente.Mas observe que o segundo “se” (i < j) só será executado se a condição doprimeiro “se” for verdadeira (i ?j).É sabido e notório que sempre que i < j será verdade que i ? j. Desta forma, podemos otimizar o código eliminando o primeiro “se” egarantindo ainda o funcionamento. Veja como ficou o rascunho com estamodificação:

para i de 1 até 4 façapara j de 1 até 4 faça

se (i < j) entãoaux A[j,i];←A[j,i] A[i,j];←A[i,j] aux;←

fimse;fimpara;

fimpara;

Chegamos ao final! Só agora é que vamos escrever o algoritmo completamente e declarar asvariáveis necessárias para ele funcionar.Copiamos tudo, acrescentando as variáveis que usamos nos rascunhos.

Veja a seguir, a solução final para este exercício:

32

Page 33: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Algoritmo TRANSPOSTA;tipo MAT = matriz [1..4][1..4] inteiro;MAT: A;inteiro: i, j, aux;

início//preenche a matriz quadrada 4x4, conforme o enunciado do problema.para i de 1 até 4 faça

para j de 1 até 4 façaleia (A[i,j]);

fimpara;fimpara;//realiza a troca dos elementos obtendo a matriz transposta.para i de 1 até 4 faça

para j de 1 até 4 façase (i < j) então

aux A[j,i];←A[j,i] A[i,j];←

A[i,j] aux;←fimse;

fimpara;fimpara;

fim.

Seguindo estas dicas você conseguirá resolver qualquer problema eescrever o seu algoritmo. Não se preocupe em escrever todo o algoritmo de uma sóvez e nem se importe em declarar as variáveis de início. Vá construindo sua soluçãoaos poucos. Faça vários rascunhos e vá analisando os padrões e os efeitos de cadabloco de comandos. Não escreva os comandos diretamente. Escreva frases quemanifestam a ação e descrevem cada evento. Não se esqueça do teste de mesa.Releia tudo sempre. Simplifique!

5.2 Usando a técnica com algumas questões de prova

Parabéns por chegar até esta parte. Agora vamos exercitar o queaprendemos.

Considere a questão de prova abaixo e acompanhe mais uma vez a técnicade desenvolvimento do algoritmo:

Numa eleição existem três candidatos. Faça um programa que peça o número total deeleitores. Peça para cada eleitor votar e ao final mostrar o número de votos de cadacandidato.

33

Page 34: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

Vou começar listando as entradas e as saídas:Entradas Saída

3 candidatosNúmero de votos de cada candidatoNúmero total de eleitores

Voto de cada eleitor

Observações:a) O comando que receberá o voto de cada eleitor será igual em todos os casos.b) Este comando será repetido N vezes, sendo N o número total de eleitores.

Com estas observações posso arriscar um palpite e rascunhar o seguinte:

para i de 1 até N façaleia (VOTO);

fimpara;

Agora podem surgir algumas dúvidas:Quanto vale N?-R.: Será fornecido pelo usuário através de um comando leia.VOTO tem qual tipo de conteúdo? Será um número? Será uma string?-R.: Como o enunciado não deixa claro, posso sugerir que seja um nº sequencial. Assim:VOTO = 1, para o 1º candidato; VOTO = 2, para o 2º candidato, VOTO = 3, para o 3ºcandidato.

Daí eu posso modificar meu rascunho:

leia(N);para i de 1 até N faça

leia (VOTO); “Depois de ler o VOTO devo acumulá-lo ao total do candidato correspondente”fimpara;

Acumular um valor não é simplesmente fazer um comando de atribuição do tipo A 1;←Para manter o valor já existente na variável e acrescentar uma unidade devo fazer:A A + 1;←Seguindo este raciocínio, posso substituir a ação descrita na frase que está internaao loop, pelo comando de atribuição. Mas devo me lembrar que são 3 candidatos,portanto são 3 atribuições distintas.

Sugiro então o seguinte comando:Total_Candidato1 Total_Candidato1 + 1;←Total_Candidato2 Total_Candidato2 + 1;←Total_Candidato3 Total_Candidato3 + 1;←

34

Page 35: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Então meu rascunho será escrito assim:leia(N);para i de 1 até N faça

leia (VOTO);Total_Candidato1 Total_Candidato1 + 1;←Total_Candidato2 Total_Candidato2 + 1;←Total_Candidato3 Total_Candidato3 + 1;←

fimpara;

Isto não parece correto, pois foi lido apenas um voto e acrescenta +1 para 3 variáveisdiferentes.Cabe então um desvio condicional para testar se o VOTO está vinculado ao candidato1, 2 ou 3.Como somente 1 candidato receberá o voto de cada vez, então o desvio “se” seráaninhado, para evitar que todas as opções tenham que ser testadas. Este aninhamentoé feito através do uso de se..então..senão..se.. etc.

leia(N);para i de 1 até N faça

leia (VOTO);se (VOTO = 1) então

Total_Candidato1 Total_Candidato1 + 1;← senão se (VOTO = 2) então

Total_Candidato2 Total_Candidato2 + 1;← senão se (VOTO = 3) então Total_Candidato3 Total_Candidato3 + 1;← fimse; fimse; fimse;fimpara;

Isto parece funcionar bem, desde que as variáveis que totalizam os votos sejaminicializadas com 0.Total_Candidato1 0;←Total_Candidato2 0;←Total_Candidato3 0;←

Apesar da solução ser eficaz, antes de reescrever o rascunho com a inclusão doscomandos acima, devo observar que:- Quando há muitas variáveis parecidas que armazenam conteúdos idênticos o melhora fazer é substituí-las por um vetor.O vetor também pode ser mais interessante porque se eu quiser ampliar meuprograma para mais de 3 candidatos a alteração é simples: basta aumentar o tamanhodo vetor! Sem o vetor, para aumentar o nº de candidatos eu teria de criar tantas

35

Page 36: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

variáveis quanto for o nº de candidatos.A ilustração explica melhor:

Vetor TOT que armazena a quantidade de votos de cada candidato:? ? ?1 2 3

Repare que com o vetor temos a facilidade de identificar o voto:Se (VOTO = 1) então

TOT[1] TOT[1] + 1;←

Meu rascunho ficaria então:

leia(N);para i de 1 até N faça

leia (VOTO);se (VOTO = 1) então

TOT[1] TOT[1] + 1;← senão se (VOTO = 2) então

TOT[2] TOT[2] + 1;← senão se (VOTO = 3) então TOT[3] TOT[3] + 1;← fimse; fimse; fimse;fimpara;

Lembre-se de simplificar sempre!Vamos simplificar este código observando um padrão.Repare que quando VOTO = 1, TOT[1] será acumulado; quando VOTO = 2, TOT[2] seráacumulado, e assim sucessivamente…Seria correto então escrever o seguinte:“Para qualquer VOTO, o vetor TOT será acumulado com o índice igual a este VOTO.”Esta frase pode ser escrita também assim:

TOT[VOTO] deverá ser acumulado!Veja como simplificou o código:

leia(N);para i de 1 até N faça

leia (VOTO); TOT[VOTO] TOT[VOTO] + 1;←fimpara;

Porque retiramos os comandos “se”?-R.: porque qualquer que seja o VOTO (1, 2 ou 3) o vetor será acumulado naqueleíndice correspondente. Isso é muito mais simples, concorda?

36

Page 37: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

Guia de Estudos - 2016 Introdução à Programação

Agora chegou a hora de escrever a versão final do algoritmo, declarando as variáveisinclusive. Não podemos esquecer de inicializar o vetor TOT com 0...

Algoritmo VOTOS;tipo V = vetor[1..3] inteiro;

V: TOT;inteiro: i, VOTO;

inicio//conta até 3 que é o número de candidatos, inicializando o vetor TOTpara i de 1 até 3 faça

TOT[i] 0;←fimpara;//Lê o nº de eleitores/votosleia(N);//acumula os votos de cada eleitor para cada candidatopara i de 1 até N faça

leia (VOTO); TOT[VOTO] TOT[VOTO] + 1;←

fimpara;

//agora vamos escrever o resultado obtidopara i de 1 até 3 faça

escreva (“Candidato “+ i + “ recebeu “+ TOT[i] + “ votos. “)fimpara;

fim.

Muito bem! Agora treine bastante. E seja criativo!

37

Page 38: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA · PDF fileApostila 1 de Introdução à ... CEFET/RJ – Campus ... primeiro tratado de Álgebra da história. O termo "álgebra", inclusive,

CEFET/RJ – Campus Petrópolis Curso Técnico em Telecomunicações

TAREFAS DESTA SEMANA

Alunos dos Grupos A, B e C: (aprox. 30minutos)- Elaborar algoritmos para os problemas relacionados abaixo nas letras (a, b e c).

Alunos do Grupo A: (aprox. 20minutos)- Elaborar o algoritmo para a letra d.

Alunos do Grupo B e C: (aprox. 30minutos)- Refazer a prova 3º bimestre e apresentar ao professor. O aluno poderá ser convidado a explicar como chegou às soluções das questões.

Alunos do Grupo C: (aprox. 12minutos)- Para cada algoritmo feito, você deve apresentar pelo menos 1 teste de mesa.- Entrevista agendada com o professor.

a) Elaborar um programa que leia duas matrizes A e B, cada uma de duas dimensõescom 5 linhas e 3 colunas para valores inteiros. Construir uma matriz C de mesmadimensão, que seja formada pela soma dos elementos da matriz A com os elementosda matriz B. Apresentar os elementos da matriz C.

b) Elaborar um programa que leia uma matriz A de duas dimensões com 5 linhas e 4colunas. Construir uma matriz B de mesma dimensão, em que cada elemento seja ofatorial de cada elemento correspondente armazenado na matriz A. Apresentar aofinal as matrizes A e B.

c) Elaborar um programa que leia uma matriz A do tipo real de duas dimensões com 8linhas e 6 colunas. Construir um vetor B que seja formado pela soma de cada linha damatriz A. Ao final apresentar o somatório dos elementos da matriz B.

d) Elabore um algoritmo de forma otimizada usando funções para executar o jogo davelha entre dois usuários.

TAREFA PARA O FIM DO ANO

Alunos dos Grupos A, B e C: (aprox. 20horas)- Elabore um algoritmo de forma otimizada para executar o jogo Tetris.

Alunos do Grupo B: (aprox. 4horas)- Projetar as funções que movimentam as peças e apresentar um seminário para osalunos do Grupo C (toda turma vai poder assistir e ajudar).

Alunos do Grupo C: (aprox. 40minutos)- Apresentar o código à toda turma explicando cada função, comando ou declaraçãode variável.

38