ALGORITMOS RESOLVIDOS NA PRÁTICA

ALGORITMOS RESOLVIDOS NA PRÁTICA

  1. 5. ntrodução O aprendizado de Algoritmos nos cursos de graduação de Informática, Engenharia e Matemática, de acordo com da nossa experiência, é um pro- cesso extremamente difícil, tendo em vista o grande número de informa- ções que os alunos precisam absorver em pouco tempo. Desta forma, te- mos observado uma desistência significativa da disciplina logo após a pri- meira avaliação. As opiniões quanto ao ensino de algoritmos divergem muito, pois al- guns professores defendem a tese de abstração, isto é, o aluno desenvolve no papel e não tem nenhum contacto com a máquina. Acreditamos que o aprendizado só se torna possível após a passagem do concreto para o abstrato; em outras palavras, o aluno precisa visualizar o que está fazendo e para isso o uso de um interpretador em português irá ajudá-lo nessa etapa inicial. Nosso livro é resultado de um trabalho que vem sendo elaborado há algum tempo com nossos alunos. Nesses últimos anos, co~eçamos a fazer todas as soluções dos exercícios passados para eles e percebemos que o aprendizado melhorou significativamente, uma vez que se torna inviável a resolução de um grande número de exercícios durante as aulas. Além dis- so, os alunos ficam muito inseguros nesse primeiro contato com a progra- mação, pois é um processo muito solitário. Este livro é voltado para o ensino inicial de algoritmos e procuramos fazer isso de uma maneira bem simples: o livro possui conceitos teóricos sobre algoritmos de uma forma bem rápida e resumida e 500 exercícios re- solvidos, uma vez que acreditamos que o iniciante em programação preci- sa praticar muito para poder depois abstrair. 1xv

 

  1. 6. A sintaxe que usamos está mais parecida com a linguagem C e sugeri- mos o uso de um interpretador que roda sob ambiente Linux e cujas infor- mações encontram-se no Apêndice I deste livro. Muitas perguntas feitas por nossos alunos foram incorporadas a este livro porque podem ser também as suas dúvidas. Além disso, para expli- car melhor o acompanhamento da execução do algoritmo, apresentare- mos a saída no vídeo e a alocação da Memória Principal em relação às va- riáveis usadas para que você possa ir conhecendo um pouco mais sobre esse processo. Os 500 algoritmos resolvidos estão divididos por assunto e organiza- dos em 6 grandes blocos: o primeiro abrange algoritmos do cotidiano; no segundo, utilizamos somente algoritmos que usam funções, comandos de atribuição, de entrada e saída; no terceiro bloco, veremos o comando de seleção; no quarto bloco, os comandos de repetição; no quinto, utiliza- mos os algoritmos que manipulam vetores e matrizes, e no sexto, agrupa- mos algoritmos utilizando funções. Nos apêndices, falamos sobre uma ferramenta para testar os algoritmos no computador, código ASCII e apresentamos problemas de raciocínio lógico. Não pule etapas. Procure fazer todos os exercícios de um capítulo an- tes de passar para outro. Estaremos com você em cada página, em cada co- mentário e temos certeza de que você aproveitará muito. O aprendizado de algoritmos é algo apaixonante desde que você acre- dite e invista.

 

  1. 7. Capítulo I Conceitos iniciais • Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo. O aprendizado desta técnica é necessário, para quem deseja trabalhar com desenvolvimento de sistemas e programas. • Algoritmo é uma seqüência de passos finitos com o objetivo de so- lucionar um problema. Quando nós temos um problema, nosso objetivo é solucioná-lo. Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um conjunto de passos (ações) que levam à solução de um determinado problema, ou então, é um caminho para a solução de um problemà e, em geral, os caminhos que le- vam a uma solução são muitos. SOLUÇÃO O aprendizado de algoritmos não é uma tarefa muito fácil, só se conse- gue através de muitos exercícios. Este é o objetivo principal deste POST: possibilitar que você, a partir das soluções apresentadas, venha construir sua própria lógica de programação.

 

  1. 8. Todos nós, no dia-a-dia, nos deparamos com vários problemas. Quan- tas vezes já vimos um algoritmo e não sabíamos que aquela seqüência de passos chamava-se algoritmo. Um exemplo bem freqüente é quando que- remos falar em algum telefone público. Aquilo que está escrito no telefone é um algoritmo. Veja a seguir um exemplo de um algoritmo do cotidiano. 1- Retirar o telefone do gancho 2 – Esperar o sinal 3 – Colocar o cartão 4- Discar o número 5- Falar no telefone 6 – Colocar o telefone no gancho O algoritmo é exatamente esse conjunto de passos que resolveu o pro- blema de uma pessoa falar no telefone. É como se fôssemos ensinar uma máquina a fazer alguma tarefa específica. Outro exemplo clássico é um algoritmo para resolver o problema de fritar um ovo que poderia estar escrito em forma de uma receita. A receita é um algoritmo, pois é formada de ações que devem ser tomadas para fri- tar o ovo. Como fritar um ovo é muito fácil, esta deve ser a primeira recei- ta de fritar um ovo que vocês já leram. algoritmo 1 1 – pegar frigideira, ovo, óleo e sal 2- colocar óleo na frigideira 3 – acender o fogo 4- colocar a frigideira no fogo 5 – esperar o óleo esquentar 6 – colocar o ovo 7 – retirar quando pronto Cada linha do algoritmo podemos chamar de uma instr1;1ção, logo, po- demos dizer que um algoritmo é um conjunto de instruções. • Instrução indica a um computador uma ação elementar a ser executada. Até as coisas mais simples podem ser descritas por um algoritmo. Por exemplo: “Mascar um chiclete”. algoritmo 2 1 -pegar o chiclete 2 – retirar o papel 21 3 – mastigar 4- jogar o papel no lixo

 

  1. 9. Outros exemplos: algoritmo 3 Algoritmo para trocar lâmpadas 1- se (lâmpada estiver fora de alcance) pegar a escada; 2 – pegar a lâmpada; 3- se (lâmpada estiver quente) pegar pano; 4 – Tirar lâmpada queimada; 5- Colocar lâmpada boa; algoritmo 4 Algoritmo para o fim de semana 1 – vejo a previsão do tempo; 2 – se (fizer sol) vou à praia; senão vou estudar; 3 – almoçar 4- ver televisão 5 – dormir algoritmo 5 Algoritmo para fazer um bolo simples 1 -pegar os ingredientes; 2 – se (roupa branca) colocar avental; 3 – se (tiver batedeira) bater os ingredientes na batedeira; senão bater os ingredientes à mão; 4 – colocar a massa na forma; 5 – colocar a forma no forno; 6 – aguardar o tempo necessário; 7 – retirar o bolo; algoritmo 6 Algoritmo para descascar batatas 1 – pegar faca, bacia e batatas; 2 – colocar água na bacia; 3 – enquanto (houver batatas) descascar batatas;
  2. 10. algoritmo 7 Algoritmo para fazer uma prova 1 – ler a prova; 2 – pegar a caneta; 3- enquanto ((houver questão em branco) e (tempo não terminou))faça se (souber a questão) resolvê-la; senão pular para outra; 4 – entregar a prova; algoritmo 8 Algoritmo para jogar o jogo da forca: 1- escolher a palavra; 2 -montar o diagrama do jogo; 3 – enquanto ((houver lacunas vazias) e (corpo incompleto))faça se (acertar uma letra) escrever na lacuna correspondente; senão desenhar uma parte do corpo na forca; algoritmo 9 Algoritmo para jogar o jogo da velha: enquanto ((exi stir um quadrado livre ) e (ninguém perdeu(ganhou) o jogo)) espere a jogada do adversário, continue depois se (existir um quadrado livre) se (centro livre) jogue no centro senão se (adversário tem 2 quadrados em linha com o terc~iro desocupado) jogue neste quadrado desocupado senão se (há algum canto livre) jogue neste canto algoritmo 1O Algoritmo para levar um leão, uma cabra e um pedaço de grama de um lado para outro de um rio, atravessando com um bote. Sabe-se que nunca o leão pode ficar sozinho com a cabra e nem a cabra sozinha com a grama. 1 – Levar a grama e o leão 41 2- Voltar com o leão

 

  1. 11. 3 – Deixar o leão 4 – Levar a cabra 5 – Deixar a cabra 6- Voltar com a grama 7 – Levar o leão e a grama DESAFIO 1) Fazer um algoritmo para levar 3 missionários e 3 canibais de um lado para outro de um rio, atravessando com um bote. Sabe-se que nunca pode ter mais missionários do que canibais porque senão os missionários catequizam os canibais. O que fazer para levar os 6 de uma margem para outra? C. Ao formularmos um algoritmo,temos de ter clareza arespeito do aspecto estático dessa seqüência de ações escritas num pedaço de papel. Oaspecto dinâmico só se evidencia ao executarmos essa seqüência no computadoredaí, poderemos ter certe- za se conseguimos ou não resolver oproblema. Programa de Computador nada mais é do que um algoritmo escrito numa linguagem de computador (C, Pascal, Fortran, Delphi, Cobol e ou- tras). É a tradução para o inglês do algoritmo feito em português. O mais importante de um programa é a sua lógica, o raciocínio utilizado parare- solver o problema, que é exatamente o algoritmo.

 

  1. 12. Capítulo 2 Variável, expressões, funções, atribuição, entrada e saída VARIÁVEL Conceitos iniciais Uma variável é um local na memória principal, isto é, um endereço que ar- mazena um conteúdo. Em linguagens de alto nível, nos é permitido dar nome a esse endereço para facilitar a programação, O conteúdo de uma variável pode ser de vários tipos: inteiro, real, ca- ractere, lógico, entre outros. Normalmente, quando se ensina algoritmo, trabalha-se com os quatro tipos citados. Uma vez definidos o nome e o tipo de uma variável, não podemos alte- rá-los no decorrer de um algoritmo. Por outro lado, o conteúdo da variá- vel é um objeto de constante modificação no decorrer do programa, de acordo com o fluxo de execução do mesmo. Em algoritmos, as variáveis serão definidas no início, por meio do co- mando definido: tipo da variável nome da variável Os tipos que usaremos serão:

 

  1. 13. OBSERVAÇÃO int a; real b; string nome; logico r; Quando formos dar nome às variáveis, se faz necessário seguirmos algumas regras. É bom ressaltar que estas regras irão variar de acordo com a linguagem. As seguintes regras: 1. O primeiro caractere é uma letra. 2. Se houver mais de um caractere, só poderemos usar: letra ou algarismo. 3. Nomes de variáveis escritas com letras maiúsculas serão diferentes de letras minúsculas. Lembre-se: media é diferente de MEDIA. 4. Nenhuma palavra reservada poderá ser nome de uma variável. Nomes Válidos Nomes Não-Válidos media, alt, a2, PESO 2w -> começa por algarismo media_aluno -> o caractere sublinha não é permitido peso do aluno – > o caractere espaço não é permitido Um dos objetivos de se declarar uma variável no início do algoritmo é para que seja alocada (reservada) uma área na memória (endereço de memória) para a variável. Outro objetivo da declaração de variáveis é que, após a declaração, o algoritmo sabe os tipos de operações que cada variável pode realizar; explicando: algumas operações só podem ser realizadas com variáveis do tipo inteiro, outras só podem ser realizadas com variáveis dos tipos inteiro ou real, outras só com variáveis de caractere etc. Tipos de variáveis Numérica Variáveis numéricas são aquelas que armazenam dados numéricos, po- dendo ser divididas em duas classes: int Os números inteiros são aqueles que não possuem componentes decimais ou fracionários, podendo ser positivos ou negativos. As variáveis compostas com esses números são chamadas de VARIÁVEIS INTEIRAS. Os elementos pertencentes aos conjuntos N e Z, apesar de serem 1 7

 

  1. 14. representáveis na classe dos números reais, são classificados como variá- veis numéricas inteiras por não possuírem parte fracionária. Como exemplo de números inteiros temos: 12 número inteiro positivo -12 número inteiro negativo C. Normalmente, uma variável do tipo inteira poderá ocupar 1, 2 ou 4 bytes na MP. real Os números reais são aqueles que podem possuir componentes decimais ou fracionários, podendo também ser positivos ou negativos. As variáveis compostas com estes números pertencentes aos conjuntos dos números reais são chamadas de VARIÁVEIS REAIS. Como exemplos de números reais temos: 24.01 144. -13.3 0.0 número real positivo com duas casas decimais número real positivo com zero casa decimal número real negativo com uma casa decimal número real com uma casa decimal C. Normalmente, uma variável do tipo real poderá ocupar 4 ou 8 bytes na MP. string Também conhecida como caractere, alfanumérica ou literal. Esse tipo de variável armazena dados que contêm letras, dígitos e/ou símbolos especiais. Como exemplos de constantes string temos: “Maria” “123” “O” “A” string de comprimento 5 string de comprimento 3 string de comprimento 1 string de comprimento 1 O número de bytes possíveis para armazenamento de uma variável string dependerá da linguagem, mas o mais importante é entender que uma variável string é armazenada na MP como sendo uma matriz linha. Observe o trecho de algoritmo a seguir e suponha que na entrada de dados 81 foi digitado: ALGORITMOS.

 

  1. 15. string palavra; leia palavra; Memória Principal (MP) palavra o 1 2 3 4 5 6 7 8 9 10 11 Posições dos caracteres dentro da variável Armazenamento de uma variável caractere no UAL Em algumas linguagens, a numeração poderá começar com 1. OBSERVAÇÃO Não confundir: caractere que se encontra na posição 3 com 3º- caractere: No exemplo acima, temos: • caractere que se encontra na posição 3 O · ~~~mre G logico Também conhecido como booleano. É representado no algoritmo pelo dois únicos valores lógicos possíveis: verdadeiro ou falso. Porém, é co- mum encontrar em outras referências outros tipos de pares de valores ló- gicos como: sim/nao, 1/0, true/false, verdadeiro/falso. Como exemplos de constantes lógicas temos: verdadeiro falso Valor lógico verdadeiro Valor lógico falso OBSERVAÇÃO As variáveis quando são declaradas, dependendo da linguagem, não têm ne- nhum valor atribuído; portanto, no início, atribua valores a todas as variáveis. EXPRESSÕES O conceito de expressão em termos computacionais está intimamente li- gado ao conceito de expressão (ou fórmula) matemática, onde um conjun- to de variáveis e constantes numéricas relaciona-se por meio de operado- res compondo uma fórmula que, uma vez avaliada, resulta num valor. As expressões dividem-se em:

 

  1. 16. 101 Aritméticas Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, seja ele inteiro ou real. Somente o uso de operadores aritméti- cos e variáveis numéricas é permitido em expressões deste tipo. Como exemplo de operadores e expressões aritméticas temos: Soma Na matemática, representada pelo sinal + e, em expressões em termos computacionais, pelo mesmo sinal. A + B Expressão que simboliza a soma do valor de duas variáveis. 2 + 3 Nessa expressão, o valor retornado é a soma dos valores dados, isto é, 5. Subtração Na matemática, representada pelo sinal- e, em expressões em termos computacionais, pelo mesmo sinal. A – B Expressão que simboliza a subtração do valor de duas variáveis. 3 – 2 Nessa expressão, o valor retornado é o resto, isto é, 1. Multiplicação Na matemática, representada pelos sinais x ou. e, em expressões em termos computacionais, pelo sinal *. B ::- D Expressão que simboliza a multiplicação do valor de duas variáveis. 3*2 Nessa expressão, o valor retornado é o produto dos valores dados, isto é, 6. Divisão Na matemática, representada pelo sinal -;- e, em expressões computacionais, pelo sinal/. A / B 6 I 2 5 / 2 Expressão que simboliza a divisão do valor de duas variáveis. Nessa expressão, o valor retornado é a divisão dos valores dados, que, no caso, será equivalente a 3. Nessa expressão, o valor retornado é a divisão dos valores dados, que, no caso, será equivalente a 2.5. OBSERVAÇÃO • Normalmente, as linguagens de programação assumem que a divisão é uma operação que retoma um valor REAL. Atenção especial, portanto, para variáveis que receberão o resultado de uma divisão. • Em algumas linguagens, quando se divide dois números inteiros, o resultado será um inteiro.

 

  1. 17. Exponenciação Na matemática, representada pela base e por um ex- poente e em expressões em termos computacionais pelo sinal c·>:· ou “‘) mais o número que se quer elevar. A::-::- 2 3 “‘ 2 2 ,,,, 3 Expressão que simboliza o valor da variável ao quadrado. Nessa expressão, o valor retornado é o resultado da exponenciação do valor 3 ao quadrado (2) que, no caso, . será equivalente a 9. Nessa expressão, o valor retornado é o resultado da exponenciação do valor 2 ao cubo (3), que no caso será equivalente a 8.00. OBSERVAÇÃO Normalmente, as linguagens oferecem um dos operadores citados, mas usaremos os dois e a diferença será explicada a seguir: • ** -exponenciação com resultado Real • “‘ – exponenciação com resultado Inteiro, fazendo arredondamento. 8 ::-::- 3 8 “‘ 3 8.5 ::-:’ 3 8.5 “‘ 3 A resposta seria 512.00 A resposta seria 512 A resposta seria 614.125 A resposta seria 614 C. Radiciação pela potência rndrc~radicando = radicando11indice Exemplo: V512 =512113 -> 512**(1 I 3) % – resto Em outras linguagens, conhecido como mod. É usado em expressões em termos computacionais quando se deseja encontrar o resto da divisão de dois números inteiros. K O/oY 5O/o 2 Expressão que simboliza a intenção de achar o resto da divisão do valor da variável K pelo valor da variável Y. Nessa expressão, o valor retornado é o resto da divisão do primeiro pelo segundo número, que, no caso, será equivalente a 1.

 

  1. 18. 7 Ofo 4 Nessa expressão, o valor retornado é o resto da divisão do primeiro pelo segundo número, que, no caso, será equivalente a 3. div- divisão inteira É usada em expressões em termos computacionais quando se deseja encontrar o quociente da divisão de dois númerosinteiros. A div B Expressão que simboliza a intenção de achar o valor do divisor na divisão do valor da variável A pelo valor da variável B. 5 div 2 Nessa expressão, o valor retornado é o coeficiente da divisão do primeiro pelo segundo número, que, no caso, será equivalente a 2. C. Ooperadordivnecessita que, antes edepois dele, pressionemos abarra de espaço. RelacionaI Uma expressão relaciona!, ou simplesmente relação, é uma comparação rea- lizada entre dois valores de mesmo tipo básico. Estes valores são represen- tados na relação através de constantes, variáveis ou expressões aritméticas. Como exemplos de operadores relacionais matematicamente conhe- cidos temos: Operador Matemática Igual = Diferente 7:- Maior > Menor que < Maior ou Igual a 2 Menor ou Igual a :$ Como exemplos de expressões relacionais temos: A diferente de B X igual a 1 7 maior que 6 8 menor que 9 Usaremos —- <> > ._ < > = <= A<>B X == l 7>6 8<9 l< = Y 4> = W 1 menor ou igual ao valor da variável Y 4 maior ou igual ao valor da variável W

 

  1. 19. Lógica ou booleana Denomina-se expressão lógica a expressão cujos operadores são lógicos e cujos operandos são relações, constantes e/ou variáveis do tipo lógico. Como exemplo de operadores lógicos, matematicamente conhecidos temos: Operador Matemática Usaremos conjunção e && disjunção ou li negação nao ! Tabela verdade do operador && Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candida- to for falsa, deverá falar O, caso contrário, falará 1. Suponha também que só será chamado para entrevista o candidato que!ominar as duas linguagens. Você conhece a Você conhece a Saída linguagem C? linguagem PASCAL? o o o o 1 o 1 o o 1 1 1 Nesse exemplo, somente o quarto candidato seria chamado para a en- trevista, pois o operador && (e) só considera a expressão ~orno verdadei- ra se todas as expressões testadas forem verdadeiras. Tabela verdade do operador li Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candida- to for falsa, deverá falar O, caso contrário, falará 1. Suponha também que será chamado para entrevista o candidato que dominar pelo menos uma linguagem.

 

  1. 20. Você conhece a Você conhece a Saída linguagem C+ + ? linguagem JAVA? o o o o 1 1 1 o 1 1 1 1 Nesse exemplo, somente o primeiro candidato não seria chamado para a entrevista, pois o operador li (ou) considera a expressão como ver- dadeira se pelo menos uma expressão testada for verdadeira. OBSERVAÇÃO 1. A seguir, relacionamos os critérios de precedência dos operadores. Lembre-se de que algumas linguagens não obedecem a estes critérios. 2. Se precisarmos alterar esta hierarquia, usaremos os parênteses. ~ Hierarquia primeiro parênteses e funções segundo potência e resto terceiro multiplicação e divisão quarto adição e subtração quinto operadores relacionais sexto operadores lógicos Tabela verdade do operador ! Observe a tabela a seguir e as afirmativas: • A cor da camisa A não é azul. • A cor da camisa B não é amarela. Camisa Cor SAÍDA A Azul falso B Verde verdadeiro O operador ! (não) inverte a saída.

 

  1. 21. Considere a, b e c variáveis numéricas, e cor uma variável string. Como exemplos de expressões lógicas temos: a + b = = O && c < > 1 Essa expressão verifica se o resultado da soma dos valores das variáveis a e b é igual a Oe(&&) se o valor da variável c é diferente de 1. O resultado será considerado verdadeiro se as duas expressões relacionais foram verdadeiras. Cor == “azul” li a * b > c Essa expressão verifica se o conteúdo armazenado na variável cor é azul ou (li) se o resultado do produto dos valores variáveis a e b é maior do que o valor armazenado na variável c. O resultado será considerado verdadeiro se, pelo menos uma das expressões relacionais for verdadeira. O resultado obtido de uma avaliação de uma expressão lógica é sem- pre um valor lógico, isto é, falso ou verdadeiro. Por esse motivo, pode-se considerar uma única relação como sendo uma expressão lógica. FUNÇÕES O conceito de função em termos computacionais está intimamente ligado ao conceito de função (ou fórmula) matemática, onde um conjunto deva- riáveis e constantes numéricas relaciona-se por meio de operadores, com- pondo uma fórmula que, uma vez avaliada, resulta num valor. As expres- sões se dividem em: Numéricas Funções numéricas são aquelas cujo resultado da avaliação é do tipo nu- mérico, seja ele inteiro ou real. Somente podem ser efetuadas entre núme- ros propriamente apresentados ou variáveis numéricas. Como exemplos de funções numéricas temos: pi Função que resulta no valor 3.14159265. Sem argumentos. sen(x) Função que resulta no valor do seno de um ângulo qualquer em radianos.

 

  1. 22. C. Antes de aplicarafunção sen(ang), deve-se transformar oÂngulo em Graus para Ângulo Radiano com aseguinte fórmula matemática: ang *3. 14159265I 180 (ângulo multiplicado por 3. 14159265 eoresultado dividido por 180). Elogo depois se pode aplicar afunção. A constante 3.14159265 será predefinida: pi. Logo, teremos: angrad <- ang ” pi I 180; imprima sen(angrad); Dessa forma, podemos observar que somente usamos a função sen(x) depois de transformar o ângulo, dado em graus, em ângulo radiano. C. Normalmente, as linguagens de programação assumem que afunção sen() é uma função que retoma um valor REAL. Atenção especial, portanto, para variáveis que re- ceberão como conteúdo expressões que envolvam essa função. cos(x) Função que resulta no valor do co-seno de um de um ângulo qual- quer em radianos. Logo, teremos: angrad <- ang ::- pi I 180; imprima cos(angrad); C. Antes de aplicar a função cos(ang), deve-se transformar o Ângulo em Graus para Ângulo Radiano com aseguinte formula matemática: ang * 3.141592651180 (ângulo multiplicado por3.14159265 eoresultado dividido por 180). Elogo depois sepode apli- carafunção. Dessa forma, podemos observar que somente usamos..a função cos(x) depois de transformar o ângulo, dado em graus, em ângulo radiano. C. Normalmente, as linguagens de programação assumem que afunção cos() é uma função que retoma um valor REAL. Atenção especial, portanto, para variáveis quere- ceberão como conteúdo expressões que envolvam essa função. tan(x) Função que resulta no valor da tangente de um ângulo qualquer em radianos. Logo, teremos: angrad <- ang ::· pi I 180; imprima tan(angrad);

 

  1. 23. C. Antes de aplicar afunção tan(ang), deve-se transformar o Ângulo em Graus para Ângulo Radiano com aseguinte fórmula matemática: ang * 3.14159265/180 (ângulo multiplicado por 3.14159265 eoresultado dividido por 180). Elogo depois se pode aplicara função. Dessa forma, podemos observar que somente usamos a função tan(x) depois de transformar o ângulo, dado em graus, em ângulo radiano. C. Normalmente, as linguagens de programação assumem que afunção tan() é uma função que retoma um valor REAL. Atenção especial, portanto, para variáveis quere- ceberão como conteúdo expressões que envolvam essa função. abs(x) Função que resulta no valor absoluto de um número qualquer. abs(7) abs (-7) Neste caso, a resposta fornecida seria 7 Neste caso, a resposta fornecida seria 7 exp(x) Função que resulta no valor do número e (base do logaritmo ne- periano) elevado a um número qualquer. ./’ exp (3) exp (2) Nesse caso, seria o mesmo que e3 -> 2.71828182846 ‘:-x- 3 Nesse caso, seria o mesmo que e2 -> 2.71828182846 ‘:-x- 2 Dessa forma, podemos observar que a função exp(x) se refere à base e (base do logaritmo neperiano: 2.71828182846) elevada ao número cita- do entre os parênteses da função exp(x). C. Normalmente,as linguagens de programação assumem que afunção exp() é uma função que retoma um valor REAL. Atenção especial, portanto, para~ variáveis quere- ceberão como conteúdo expressões que envolvam essa função. log(x) Função que resulta no valor do logaritmo neperiano de um núme- ro qualquer. log(3 ) Nesse caso, seria: 1.09861 Dessa forma, podemos observar que o logaritmo ao qual a função log(x) se refere é sempre denominado pela base e.

 

  1. 24. C. Na prática, poderá ser necessário calcular o logaritmo em outra base e, para isso, você deverá fazer a conversão entre bases logarítmicas, usando aseguinte propriedade: I A log: ogs =- log~ Se considerarmos que abase dos logaritmos naturais (e) será usada, teremos: log(A) I log(B) C. Normalmente, as linguagens de programação assumem que afunção log() éuma função que retoma um valor REAL. Atenção especial, portanto, para variáveis que re- ceberão como conteúdo expressões que envolvam essa função. raiz(x} Função que resulta no valor da raiz quadrada de um número po- sitivo. raiz(4) raiz(9) Nesse caso, seria o mesmo que .f4 = 2 Nesse caso, seria o mesmo que .J9 = 3 Dessa forma, podemos observar que a função raiz(x) sempre fornece a raiz quadrada do argumento que sempre será positivo. C. Normalmente, as linguagens de programação assumem que afunção raiz() éuma função que retoma um valor REAL. Atenção especial, portanto, para variáveis que re- ceberão como conteúdo expressões que envolvam essa função. Funções de Conversão de Tipos 1) realint(número real} Função que converte um número r~al em inteiro. realint(11.5) realint(12.51) Nesse caso, retornaria 12. Nesse caso, retornaria 13. C. Veja considerações sobre afunção realint no Apêndice.

 

  1. 25. 2) intreal(número inteiro) Função que converte umnúmero inteiro em real. intreal(ll) intreal(12) Nesse caso, retornaria 11.0 . Nesse caso, retornaria 12.0 . Caracter Funções caracter são aquelas cujo resultado da avaliação é do tipo caracter. Somente podem ser efetuadas entre caracteres propriamente apresenta- dos ou variáveis literais do tipo caracter. Como exemplo de funções caracter temos: strtam(string) Função que retoma número de caracteres de uma string. strtam(“rio”) O resultado seria 3. strtam(nome) Nesse caso o resultado será o tamanho do conteúdo da variável nome. Dessa forma, podemos observar que a função strtam(x) sempre retor- na o número de caracteres de uma string ou variável string. C. Se otamanho de uma variável string forarmazenado em uma variável, otipo dessa variável deverá ser int. strelem(string, pos) Função que retoma o elemento da string que se encontra na posição indicada na função como pos. Suponha a variável palavra strelem(palavra,2) strelem(palavra,O) strelem(palavra,5) strelem(palavra,1O) palavra o 1 2 3 4 5 6 7 8 9 10 Posições dos caracteres dentro da variável O resultado seria a letra G. O resultado seria a letra A. O resultado seria a letra I. O resultado seria uma mensagem de erro indicando argumento inválido. C. Avariável ou constante pos, presente na função, representa aposição do caracte- re dentro da variável, porém não se esquecendo que aprimeira posição é O(zero). /
  2. 26. strprim(string) Função que retoma o primeiro elemento da string. Suponha a variável palavra strprim(palavra) palavra o 1 2 3 4 5 6 7 8 9 10 O resultado seria a letra A, pois a função reconhece que o primeiro caractere se encontra na posição O(zero). strnprim(string, n) Função que retoma os n primeiros elementos da string, incluindo a posição O(zero). Suponha a variável palavra stmprim(palavra, 2) stmprim(palavra, 4) palavra o 1 2 3 4 5 6 7 8 9 10 O resultado seria AL, pois a função entende que os dois primeiros elementos estão nas posições O(zero) e 1 (um). O resultado seria ALGO, pois a função entende que os quatro primeiros elementos estão nas posições O(zero), 1 (um), 2 (dois) e 3 (três). strresto(string) Função que retoma todos os elementos da string, exce- to o primeiro. Suponha a variável palavra palavra o 1 2 3 4 5 6 7 8 9 10 strresto(palavra) O resultado seria LGORITMOS. Nesse caso, a função reconhece que o primeiro elemento se encontra na posição O(zero).
  3. 27. strult(string) Função que retoma o último elemento da string. Suponha a variável palavra palavra o 1 2 3 4 5 6 7 8 9 10 strult(palavra) O resultado seria a letra S. strnresto(string, n) Função que retoma os elementos da string após os n pnmeuos. Suponha a variável palavra palavra o 1 2 3 4 5 6 7 8 9 10 stmresto (palavra, 2) O resultado seria GORITMOS. C. Nesse caso, afunção reconhece que os dois primeiros elementos se encontram nas posições O(zero) e 1(um). strcopia(string) Função que copia a string. Deverá ser usada com o co- mando de atribuição. a <- “UNESA”; b <- strcopia(a); a <- “UNESA”; b <-a· ‘ OBSERVAÇÃO A string UNESA é armazenada na variável a. O conteúdo da variável a é copiado para variável b. O resultado seria idêntico ao anterior. Em algumas linguagens de programação, não é permitido usar o comando de atribuição a seguir: b <- a; Mas, em compensação, há uma outra alternativa que possibilita uma variável string receber o conteúdo de outra variável string: strcopia(string 1,string2): strcopia( b, a);
  4. 28. strcomp(string1 ,string2) Função que resulta na comparação por or- dem alfabética de duas strings (stringl e string2) retornando: “igual” se forem iguais. “menor” se string1 vier antes de string2. “maior” se string1 vier depois de string2. strcomp(“maria”, “maria”) Nesse caso, o valor retornado seria “igual” . strcomp(“aline”, “alex”) Nesse caso, o valor retornado seria “maior” . strcomp(“carina” ,”simone”) Nesse caso, o valor retornado seria “menor”. strcomp(a, b) Nesse caso, seriam comparados os conteúdos das variáveis a e b. O resultado poderia ser: “maior”, “igual” ou “menor”. C. Na maioria das linguagens, os resultados das comparações serão: Oou um núme- ro negativo ou um número positivo. Explicação: Observe as figuras a seguir, cujas letras estão representadas pelos respecti- vos códigos ASCII: a n e a e x 97 1081105 1110 1101 1 197 1108 101 1119 quando se usa: … strcomp(“aline”, “alex”) … , na verdade, compara-se o 1° código de aline com o 1ºcódigo de alex; como são iguais, compara-se o 2º código de aline com o 2º código de alex; como são iguais, compara-se o 3º código de aline com o 3º código de alex mas, nessa comparação (105 -101), o resultado foi maior do que zero (0), logo entende-se que aline, na ordem alfabética, vem depois de alex. C. Normalmente, essa função será usada com estruturas de teste que serão vistas mais adiante.
  5. 29. strconcat(string1, string2) Função que resulta na cópia do valor con- tido em uma string2 para o final da string1. a <- “ANITA & “; b <- “GUTO”· ‘ A string ANITA & é armazenada na variável a. A string GUTO é armazenada na variável b. c<- strconcat(a, b); A variável c recebe o conteúdo: ANITA&GUTO. C. Os argumentos das funções strings deverão ser variáveis ou constantes.Funções não são permitidas. ATRIBUIÇÃO É a principal forma de se armazenar um dado em uma variável. Esse co- mando permite que você forneça um valor a uma variável, onde o tipo desse valor tem de ser compatível com a variável. Iidentificador <- expressão Legenda: identificador < – expressão é o nome da variável à qual está sendo atribuído um valor. é o símbolo de atribuição, formado pelo sinais < e -. pode ser uma expressão aritmética, uma expressão lógica ou literal cuja avaliação (resultado) é atribuída ao identificador (variável). finaliza o comando. Exemplo 1 : x <- 10 ; Como se lê? A variável x recebe o valor 10 ou x recebe o valor 10. “‘ O que faz o computador ? Nesse momento, na memória do computador, onde já estava alocado um espaço para a variável x (realizado na declaração de variáveis), essa variá- vel recebe o valor 10. Memória Principal (MP) X
  6. 30. Exemplo 2 : x <- a + b ; Como se lê? A variável x recebe o resultado do conteúdo da variável a somado ao conteúdo da variável bou x recebe o valor de a somado a b ou, ainda, x recebe a + b. Lembre-se de que as operações aritméticas são realizadas pela UAL. O que faz o computador? Nesse momento, na memória do computador, onde já estava sendo aloca·- do espaço para as variáveis a, b ex, o conteúdo da variável x vai receber a soma do conteúdo de a e b. C. No comando de atribuição em que ovalor é representado poruma expressão arit- mética, lógica ouliteral, estas devem seravaliadas em primeiro lugarpara que, então, oresultado obtido seja armazenado na variável. Exemplo 3: y <- 1; X<- y; sal <- 256.98; nome <- “GUTO”; chr <- “g”; str <- chr· ‘ Memória Principal (MP) X b 00a G y recebe o valor 1. x recebe o conteúdo que está em y; mas como y vale 1, x vai receber 1, que é o conteúdo de y. sal recebe o valor 256.98. .. a variável nome recebe a string “GUTO”. a variável chr recebe o caractere “g” . str recebe o conteúdo de chr que é “g”. Então, podemos resumir o exemplo acima como: x e y são duas variá- veis inteiras; sal é uma variável do tipo real; nome é uma variável do tipo caractere; ch e str são variáveis do tipo char, e chave é uma variável do tipo lógica. O mapa da memória nesse momento está assim. Podemos verificar que o tamanho do espaço na memória vai depender do tipo de variável.
  7. 31. Memória Principal (MP) x y str ch CJCJGGsal nome I256.98 liGUTO I Conclusão: O comando de atribuição é muito importante em algoritmos. O próximo exemplo nos mostra isso. Exemplo 4: Memória Principal (MP) Memória Principal (MP) Memória Principal (MP) A<-10: 1° momento B <- 20; AUX<-A; 2° momento A<- B; 3° momento B <- AUX; A B GG AUX G 1° momento Qual o objetivo do algoritmo acima? A B A B ~~ GG AUX AUX G G 2° momento 3°momento O conteúdo das variáveis A e Bé trocado, isto é, no final do algoritmo, a variável A está com o valor 20 e a variável B está com o valor 10. Tive- mos de utilizar uma variável auxiliar (AUX) que guarda o valor dava- riável A. Para ficar mais clara a importância da variável auxiliar, observe a pró- xima figura e veja o que aconteceria se não tivéssemos feito uso dela: r– – – – , Memória Principal (MP) Memória Principal (MP) Memória Principal (MP) ~:::::::: ~—:-:-::-~-;–1 I~ 11 😮 I I:o IGA<-10; ~~~ 3° momento B<-A; 1° momento 22 momento 3° momento Como pode ser visto, quando a variável A recebe o valor de B, a variável A perde o seu valor 1O, recebendo o valor 20; depois, quando B receber o valor de A, Bvai receber o valor 20 (novo valor de A). No final as variáveis A e B vão ter o mesmo valor 20.
  8. 32. Exemplo 5: Memória Principal (MP) Memória Principal (MP) Memória Principal (MP) :::::::: .—–::;~~——-,I ~li:b li cb I:b li cb l:b I 3° momenlo y- – ; 1° momento 2° momento 3°momento C. Os operadores ++ e — são operadores de incremento e decremento. Eles são usados para realizaroperações de adição esubtração esão similares àatribuiçãopara variáveis inteiras. x+ +;É equivalente a: x <- x +1; y–; Éequivalente a: y <- y -1; COMANDO DE SAÍDA É o comando responsável por enviar um resultado, uma informação ao usuário. O valor de cada variável é buscado na memória e inserido em um dispositivo de saída. Através desse comando o computador pode emitir os resultados e outras mensagens para o usuário através da tela do computa- dor ou uma impressora. 1mpnma expressão ou variável ou constantes algoritmo 11 prog impl imprima “Aprendendo Algoritmo!!!”; f;mprog Vídeo Aprendendo Algoritmo!!! Esse algoritmo faz com que seja exibida, na tela do computador, a mensagem: Aprendendo Algoritmo!!! algoritmo 12 prog imp2 ;mprima “Aprendendo Algoritmo imprima “Com Anita e Guto”; 26 j fimprog 11 I”· … ‘
  9. 33. Vídeo I Aprendendo Algoritmo!!!Com Anita e Guto Embora tenhamos duas linhas de comandos, o que nos levaria a pensar que teríamos duas linhas no vídeo, o interpretador só alimenta linha se as- sim especificarmos através do símbolo n. Esse símbolo é uma string e de- verá vir entre aspas. algoritmo 13 prog imp3 imprima “Aprendendo Algoritmo!!!”; imprima “nCom Anita e Guto”; fimprog algoritmo 14 prog imp4 Vídeo Aprendendo Algoritmo!!! Com Anita e Guto imprima “Aprendendo Algoritmo ! !!n “; imprima “Com Anita e Guto”; fimprog Vídeo Aprendendo Algoritmo!!! Com Anita e Guto Observe que o símbolo n poderá ser colocado ao final da linha ante- rior ou no início da próxima linha que produzirá o mesmo efeito mas, lembre-se, sempre entre aspas. algoritmo 15 prog imp5 imprima “Aprendendo Algoritmo n Com Anita e Gutonn E implementando no UALn Fica muito mais fácil!! “; # digite tudo na mesma 1inha fimprog C. Quando aparecercomentários do tipo:# continuacao (ou# continuacao da linha anterior, significaque você deverá digitartudo em uma só linha. Nãopressioneenter).
  10. 34. Vídeo Aprendendo Algoritmo Com Anita e Guto E implementando no UAL Fica tudo mais fácil Observe que podemos, usando um único comando imprima e fazendo uso do símbolo n, mostrar várias mensagens em várias linhas, inclusive deixando linha em branco quando colocamos nn. algoritmo 16 prog imp6 int x; X <- 10; imprima x fimprog Esse trecho é de muita importância pois x recebe o valor 10. Como já vimos, na memória do computador, existe uma variável chamada x e o va- lor 1Oseria armazenado dentro da variável. Quando o comando imprima é executado, o valor de x, que está na memória do computador, é exibido pelo comando imprima no vídeo. algoritmo 17 prog imp7 int x; X <- 10; Memória Principal (MP} imprima “Valor de x ” x; fimprog Vídeo I” Esse trecho permite a exibição de uma mensagem e do conteúdo de uma variável na tela do computador.
  11. 35. Memória Principal (MP} algoritmo 18 prog imp8 int x; X <- 10; imprima “Valor de x fimprog ” x+l; Vídeo Valor de x=10 Esse trecho é bem parecido com o anterior. O conteúdo da variável x é copiado da memória e acrescido de um, sendo impresso, após a string, sem alterar o valor de x na MP. Memória Principal (MP) Vídeo Valor de x=11 COMANDO DE ENTRADA É o comando que permite que o usuário digite dados, possibilitando um “diálogo com o computador”. O dado digitado é armazenado temporaria- mente em um registrador e, depois, copiado para a posição de memória indicada no comando. Lembre-se de que o nome de uma variável repre- senta uma posição de memória. Sintaxe: leia nome de uma variável Exemplo 1: leia nome; Como se lê? Leia um valor para a variável nome. O que faz o computador? O computador fica “esperando” o usuário digitar um dado; neste exem- plo, um nome: Maria. A variável nome, tendo sido declarada como string, recebe o valor Maria. Para facilitar, o dado digitado é sempre mostrado na tela. 129
  12. 36. Vídeo Memória Principal (MP) nome IMARIA I C. Veja considerações sobre ocomando de entrada para ointerpretador sugerido no Apêndice I. Observe o algoritmo a seguir que envolve a maioria das funções numé- ncas: algoritmo 19 prog teste imprima “raiz: “,raiz(64); imprima “nraiz com exp e log e realint: “,realint(exp(1/2*log(64))); imprima “nraiz com exp e log sem realint: “,exp(1/2*log(64)); imprima “n”, formatar(sen(45*pi/180)+0.0001,3); imprima “npotencia com exp e log e formatar: “,formatar(exp( 3*log(8))+0.001,3);#continuacao imprima “npotencia com exp e log sem formatar: “,exp(3*log(8)); imprima “npotencia com operador** e formatar: “,formatar(8**3,3); imprima “nraiz cubica: “,exp(1/3*log(8)); imprima “nabsoluto: “,abs(-8); imprima “nabsoluto: “,abs(8); imprima “nconvertendo para inteiro 5.5: “,realint(5.5); imprima “nconvertendo para inteiro 6.5: “,realint(6.5); imprima “nconvertendo para inteiro 6.5 + 0.0001: “,realint(6.5+0.0001); imprima “nconvertendo para inteiro 5.45: “,realint(5.45J; imprima “nconvertendo para inteiro 5.51: “,realint(5.51); imprima “nconvertendo para real 87: “,intreal(87); imprima “nconvertendo para int 3/4: “,realint(3/4),”n”; fimprog
  13. 37. VÍDEO raiz: 8.0 raiz com exp e log e realint: 8 raiz com exp e log sem realint: 7.999999999999998 0.707 potencia com exp e log e formatar: 512.000 potencia com exp e log sem formatar: 511.9999999999995 potencia com operador ** e formatar: 512.000 raiz cubica: 1.9999999999999998 absoluto: 8 absoluto: 8 convertendo para inteiro 5.5: 6 convertendo para inteiro 6.5: 6 convertendo para inteiro 6.5 + 0.0001: 7 convertendo para inteiro 5.45: 5 convertendo para inteiro 5.51: 6 convertendo para real 87: 87.0 convertendo para int 3/4: 1 Observe o algoritmo a seguir que envolve a maioria das funções strings: algoritmo 20 prog funcoes string c,c1,d,d1; mprima “ndigite palavra 1: “; leia c; imprima “ndigite palavra 2: “; leia c1; imprima “n”,strtam(c) ; imprima “nconcatenando: “,strconcat(c,c1) d <- strcopia(c) ; imprima “nE O CONTEUDO DE 0: “,d; d1<-strconcat(c,cl) ; imprima “nconcatenacao: “,d1; imprima “nprimeiro caractere: “,strprim(c); imprima “nultimo caractere: “,strult(c); imprima “ntodos menos o primeiro: “,strresto(c); imprima “no terceiro elemento : “,strelem(c,3}; #sairá o 4° caractere imprima “nos tres primeiros elementos: “,strnprim(c,3}; imprima “nos tres ultimas elementos: “,strnresto(c,3); imprima “n”; fimprog
  14. 38. VÍDEO digite palavra:TESTANDO digite palavra2:UAL tamanho da 1 palavra: 8 concatenando sem armazenar:TESTANDOUAL o conteudo de d(variavel que teve valor copiado de c: TESTANDO o conteudo de e(variavel que teve valor atribuido de c: TESTANDO concatenacao com armazenamento:TESTANDOUAL primeiro caractere:T ultimo caractere:L todos menos o primeiro:ESTANDOUAL o terceiro elemento:$ os tres primeiros elementos:TES os tres ultimos elementos:UAL Testando Hierarquia algoritmo 21 prog teste imprima “nTESTANDO HIERARQUIAn”; imprima “n12 + 5 12 é igual a: “, 12 + 5 I 2; imprima “nt DIFERENTE DE (12 + 5)/2 que é igual a: “, (12 + 5)12,” , logo I tem HIERARQUIA MAIOR do que + ou -“;#continuacao imprima “nn64**1/ 4 é igual a: “,64**114 ; imprima “nt DIFERENTE de 64**{ll4)que é igual a: “,64**(114),” logo** tem HIERARQUIA MAIOR do que * ou I ” ;#continuacao imprima “nn3*7 %5 é igual a: “, 3*7 % 5; imprima “nt DIFERENTE de (3 * 7) %5 que é igual a: “,(3 * 7) % 5, ” logo % tem HIERARQUIA MAIOR do que * ” ;Rcontinuacao imprima “nn3 * 7 div 5 é igual a: “, 3*7 div 5; imprima “nt IGUAL a (3 * 7) div 5 : “,(3 * 7) div 5,” logo div tem a MESMA HIERARQUIA da * ou I “;#continuacao imprima “n”; fimprog
  15. 39. VÍDEO TESTANDO HIERARQUIA 12 + 5 12 é igual a: 14.5 É DIFERENTE DE (12 + 5) 12, que é igual a: 8.5 s; logo, I tem HIERARQUIA MAIOR do que + ou – 64**114 é igual a: 16.0 É DIFERENTE de 64**(114); que é igual a: 2.8284271247461903; logo** tem HIERARQUIA MAIOR do que * ou I 3*7 % 5 é igual a: 6 É DIFERENTE de (3 * 7) % 5, que é igual a: 1; logo, % tem HIERARQUIA MAIOR do que * 3 * 7 div 5 é igual a: 4 É IGUAL a (3 * 7) div 5 : 4; logo, div tem a MESMA HIERARQUIA de * ou I Uma operação de divisão não pode ser um dos operandos de uma expressão com %, pois o operador% tem hierarquia maior do que a divisão. Logo, 6%2 é executado primeiro e, quando for feita a divisão, o divisor será zero (O). Coloque a operação de divisão entre parênteses para ser executada primeiro. Um número real pode ser usado como operando de div, porém será feito arredondamento. Isso é desaconselhável, pois acaba com a filosofia de div. algoritmo 22 prog teste imprima “nTESTANDO HIERARQUIA”; imprima “nn18l 6 % 2 é igual a: “, 18 I 6 % 2; imprima “nUma operação de divisão fora de parênteses não pode ser um dos operandos de uma expressao com %.”;#continuacao imprima “nn20 I 4 div 2 é igual a: “, 20 I 4 div 2; imprima “nÉ IGUAL a (20 I 4) div 2 : “,(20 I 4) div 2,” logo div tem a MESMA HIERARQUIA “;#continuacao imprima ” da 1. “; imprima “nn30 I 4 div 2 é igual a: “, 3014 div 2; imprima “nÉ IGUAL a (30 I 4} div 2 : “,(30 I 4) div 2,” logo div tem a MESMA HIERARQUIA “;#continuacao imprima ” da I “;
  16. 40. 341 imprima 11 nn7. div 4: 11 •7. di v 4; imprima 11 n7 div 4: 11 ,7 div 4; imprima 11 n6. di v 4: 11 ,6. div 4; imprima 11 n6 di v 4: 11 ,6 div 4; imprima ..n.. ; fimprog VÍDEO TESTANDO HIERARQUIA 1816 %2 é igual a: Infinity Uma operação de divisão fora de parênteses não pode ser um dos operandos de uma expressão com %. 20 4 div 2 é igual a: 2 É IGUAL a (20 I 4) div 2 : 2; logo, div tem a MESMA HIERARQUIA da I· 30 4 div 2 é igual a: 4 É IGUAL a (30 I 4) div 2 : 4; logo, div tem a MESMA HIERARQUIA da I 7. di v 4: 2 7 div 4: 1 6. div 4: 2 6 div 4: 1 Muita atenção para o uso dos operadores % e div numa expressão. Se% vier antes, não tem problema. algoritmo 23 Entrar com um número inteiro de 3 casas e imprimir o algarismo da casa das deze- nas. prog teste int a,d; imprima “nDigite numero de tres casas: “; leia a; d<-a % 100 div 10; imprima “nalgarismo da casa das dezenas: “,d; imprima “n”; fimprog
  17. 41. VÍDEO Digite numero de tres casas:l35 algarismo da casa das dezenas: 3 Se a idéia é efetuar a operação com div antes, teremos problema, pois o operador% tem hierarquia maior que div; logo, primeiro será operado 10%1 O, cujo o resultado é zero (O). Isso impossibilita a operação com div, uma vez que não se pode dividir por O. algoritmo 24 prog teste int a,d; imprima “nDigite numero de tres casas: “; leia a; d<-a div 10 % 10; imprima “nalgarismo da casa das dezenas: ” imprima “n”; fimprog VÍDEO Digite numero de tres casas:135 Floating point exception (core dumped) d· ‘ Lembre-se sempre disto: quando você montar uma expressão com div e%, se div vier antes de %, coloque parênteses para priorizar uma operação de hierarquia menor. algoritmo 24 Sem problema prog teste int a,d; imprima “nDigite numero de tres casas: “; leia a; d<-(a div 10) % 10; imprima “nalgarismo da casa das dezenas: “,d; imprima “n”; fimprog 4
  18. 42. 361 VÍDEO Digite numero de tres casas:l35 algarismo da casa das dezenas: 3 Algumas aplicações com% e div algoritmo 25 Entrar com uma data no formato ddmmaa e imprimir: dia, mês e ano separados. prog teste int data,dia,mes,ano; imprima “nDigite data no formato ddmmaa: “; leia data; dia<-data div 10000; mes<-data %10000 div 100; ano<-data %100; imprima “nDIA: “,dia; imprima “nMES: “,mes; imprima “nANO: “,ano; imprima “n”; fimprog VÍDEO Digite data no formato DDMMAA:230389 DIA:23 MES:3 AN0:89 algoritmo 26 Entrar com uma data no formato ddmmaa e imprimir no formato mmddaa. prog teste int data,dia,mes,ano,ndata; imprima “nDigite data no formato DDMMAA: “; leia data; dia<-data div 10000; mes<-data %10000 div 100;
  19. 43. ano<-data %100; ndata<-mes *10000 +dia*100+ano; imprima “nDIA: “,dia; imprima “nMES: “,mes; imprima “nANO: “,ano; imprima “nnDATA NO FORMATO MMDDAA: “,ndata; imprima “n”; fimprog VÍDEO Digite data no formato DDMMAA:251201 DIA:25 MES:12 AN0:1 DATA NO FORMATO MMDDAA:122501 Os operadores ++ e — algoritmo 27 prog xx int x,y; x<-2; y<-5; imprima “nx ~ “,x; x++; imprima “nny ~ “,y; y–; imprima “nnnovo valor de x “,x; imprima “nnnovo valor de y “,y; imprima “nn”; fimprog VÍDEO X =2 y 5 novo valor de x = 3 novo valor de y = 4
  20. 44. Só reforçando • Todas as palavras reservadas são escritas com letras minúsculas. • O operador de atribuição deverá ser formado pelo sinal < seguido do sinal-, ficando: <- . • Os identificadores (nome do algoritmo e das variáveis deverão co- meçar por uma letra, e os demais caracteres por letra ou algarismo). • Os comandos: imprima, leia, atribuição e as declarações de variáveis terminam com ; . • Os comandos prog e fimprog não têm ; . EXERCÍCIOS- LISTA 1 LEIA, IMPRIMA, ATRIBUIÇÃO E FUNÇÕES algoritmo 28 Imprimir a mensagem: “É PRECISO FAZER TODOS OS ALGORITMOS PARA APRENDER”. ~ prog leal imprima “nE PRECISO FAZER TODOS OS ALGORITMOS PARA APRENDER “; imprima “n”; fimprog C. imprima “n”;será sempre colocada para que opromptnão tique na mesma linha da última impressão, uma vez que o cursor não desce automaticamente. algoritmo 29 Imprimir seu nome. prog lea2 imprima “n <seu nome>”; imprima “n”; fimprog algoritmo 30 Criar um algoritmo que imprima o produto entre 28 e 43. prog lea3 int produto; produto <- 28 * 43; imprima “nO produto entre os dois e: “, produto; imprima “n”; 38J fimprog
  21. 45. algoritmo 31 Criar um algoritmo que imprima a média aritmética entre os números 8, 9 e 7. prog lea4 real ma; ma <- ( 8 + 9 + 7 ) I 3; imprima “nA media aritmetica e: “,ma; imprima “n”; fimprog algoritmo 32 Ler um número inteiro e imprimi-/o. prog lea5 int num; imprima “n entre com um numero: “; leia num; imprima “nnumero “, num; imprima “n”; fimprog algoritmo 33 Ler dois números inteiros e imprimi-los. prog lea6 int num1, num2; imprima “n entre com um numero: “; leia numl; imprima “n entre com outro numero: “; leia num2; imprima “nnumero 1 imprima “nnumero 2 imprima “n”; fimprog algoritmo 34 “, num1; 11 num2; Ler um número inteiro e imprimir seu sucessor e seu antecessor. prog lea7 int numero, sue, ant; imprima “n entre com um numero : “; leia numero; ant <- numero -1; sue <- numero +1; imprima “no sucessor e h”, suc,”h o antecessor e h”, ant; imprima “n”; fimprog
  22. 46. algoritmo 35 Ler nome, endereço e telefone e imprimi-los. prog lea8 string nome, enderece, telefone; imprima “nentre com nome: “; leia nome; imprima “nentre com enderece: “; leia enderece; imprima “nentre com telefone: “; leia telefone; imprima “nnn”; imprima “nNome imprima “nEndereco: imprima “nTelefone: imprima “n”; fimprog algoritmo 36 “,nome; “,enderece; “,telefone; Ler dois números inteiros e imprimira soma. Antes do resultado, deverá aparecer a mensagem: Soma. prog lea9 int numl, num2, soma; imprima “n entre com um numero: “; leia numl; imprima “n entre comoutro numero: “; leia num2; soma <- numl + num2; imprima “nSoma: “, soma; imprima “n”; fimprog algoritmo 37 Ler dois números inteiros e imprimir o produto. prog lealO int numl, num2, prod; imprima “n entre com um numero : “; leia numl; imprima “n entre com outro numero: “; leia num2; prod <- numl * num2; imprima “nproduto: ” prod; imprima “n”; I fimprog 40
  23. 47. algoritmo 38 Ler um número real e imprimir a terça parte deste número. prog 1eall real num; imprima “nentre com um numero com ponto: “; leia num; imprima “na terça parte e: ” num/3; imprima “n”; fimprog algoritmo 39 Entrar com dois números reais e imprimir a média aritmética com a mensagem “média” antes do resultado. prog 1eal2 real natal, nota2, media; imprima “ndigite la nota: “; leia natal; imprima “ndigite 2a nota: “; leia nota2; media <- ( natal + nota2)/2; imprima “nmedia: “, media; imprima “n”; fimprog algoritmo 40 Entrar com dois números inteiros e imprimir a seguinte saída: dividendo: divisor: quociente: resto: prog 1eal3 int quoc, rest, va11, va12; imprima “nentre com o dividendo: “; leia va11; imprima “nentre com divisor: “; leia va12; quoc <- va11 div va12; rest <- va11% va12; imprima “nnn”; imprima “ndividendo va11; imprima “ndivisor va12; imprima “nquociente quoc; imprima “nresto rest; imprima “nu; fimprog 141
  24. 48. algoritmo 41 Entrar com quatro números e imprimir a média ponderada, sabendo-se que os pesos são respectivamente: 1, 2, 3 e 4. prog lea14 real a, b, c,d, mp; imprima “nentre com 1 numero: “; 1ei a a; imprima “nentre com 2 numero: “; leia b; imprima “nentre com 3 numero: “; leia c; imprima “nentre com 4 numero: “; leia d; mp <- (a*l + b*2 + c*3 + d*4)/10; imprima “nmedia ponderada: “, mp; imprima “n”; fimprog algoritmo 42 Entrar com um ângulo em graus e imprimir: seno, co-seno, tangente, secante, co-secante e co-tangente deste ângulo. prog leaiS real angulo, rang; imprima “ndigite um angulo em graus: “; leia angulo; rang <- angulo*pi /180; imprima “nseno: “, sen(rang); imprima “nco-seno: “, cos(rang); imprima “ntangente: “, tan(rang); imprima “nco-secante: “,1/ sen(rang); imprima “nsecante: “, 1/cos(rang); imprima “ncotangente: “, 1/ tan(rang); imprima “n”; fimprog C. Alguns ângulos que você digitar poderão não ter resposta em algumas funções, mas este problema será resolvido quando você aprender a estrutura de teste. algoritmo 43 Entrar com um número e imprimir o logaritmo desse número na base 1O. prog lea16 42J real num, 1ogari tmo;
  25. 49. imprima “nentre com o logaritmando: “; leia num; logaritmo<- log(num) I log(lO); imprima “nlogaritmo: “, logaritmo; imprima “n”; fimprog algoritmo 44 Entrar com o número e a base em que se deseja calcular o logaritmo desse núme- ro e imprimi-lo. prog leal? real num, base, logaritmo; imprima “nentre com o logaritmando: “; leia num; imprima “nentre com a base: “; leia base; logaritmo <- log(num) I log(base); imprima “no logaritmo deb”, num, “bna baseb”,base, “be:b”, logaritmo; imprima “n”; fimprog algoritmo 45 Entrar com um número e imprimir a seguinte saída: numero : quadrado : raiz quadrada: prog leal8 real num, quad, raizquad; imprima “ndigite numero: “; leia num; quad <-num ** 2; raizquad <- raiz(num); imprima “nnumero: “, num; imprima “nquadrado: “, quad; imprima “nrai z quadrada: “, raizquad; imprima “n”; fimprog algoritmo 46 Fazer um algoritmo que possa entrar com o saldo de uma aplicação e imprima o novo saldo, considerando o reajuste de 1%. prog leal9 real saldo, nsaldo; imprima “ndigite saldo: “;
  26. 50. 441 leh saldo; nsaldo <-saldo * 1.01; imprima “nnovo saldo: “,nsaldo; imprima “n”; fimprog algoritmo 47 Entrar com um número no formato CDU e imprimir invertido: UDC. (Exemplo: 123, sairá 321.) O número deverá ser armazenado em outra variável antes de ser impresso. prog lea20 int num, c, d, u, num1; imprima “nentre com um número de 3 digitas: “; leia num; c <- num div 100; d <- num % 100 div 10; u <- num % 10; num1 <- u*100 + d*10 + c; imprima “nnúmero: “, num; imprima “ninvertido: “, num1; imprima “n”; fimprog algoritmo 48 Antes de o racionamento de energia ser decretado, quase ninguém falava em quilowatts; mas, agora, todos incorporaram essa palavra em seu vocabulário. Sa- bendo-se que 100 quilowatts de energia custa um sétimo do salário mínimo, fazer um algoritmo que receba o valor do salário mínimo e a quantidade de quilo- watts gasta por uma residência e calcule. Imprima: • o valor em reais de cada quilowatt • o valor em reais a ser pago • o novo valor a ser pago por essa residência com um desconto de 10%. prog lea21 real sm, qtdade, preco, vp, vd; imprima “nentre com o salário mínimo: “; leia sm; imprima “nentre com a quantidade em quilowatt: “; leia qtdade; # divide por 7 para achar o preço de 100 Kw e por 100 para achar de 1 Kw preco <- sm /700; vp <- preco * qtdade; vd <- vp * 0.9; imprima “npreço do quilowatt: ” preco, “n valor a ser pago: “, vp,
  27. 51. “n valor com desconto: ” vd; imprima “n”; fimprog algoritmo 49 Entrar com um nome e imprimir: todo nome: primeiro caractere: ultimo caractere: do primeiro ate o terceiro: quarto caractere: todos menos o primeiro: os dois ultimas: prog lea22 string nome; int n; imprima “nentre com nome: “; leia nome; imprima “ntodo nome: ” , nome; imprima “nprimeiro caractere: “, strprim(nome); imprima “nultimo caractere: “, strult(nome); imprima “nprimeiro ao terceiro caractere: “, strnprim(nome,3); imprima “nquarto caractere: “, strelem(nome,3); imprima “ntodos menos o primeiro: “, strresto ( nome); n <-strtam(nome) -2 ; imprima “nos dois ultimas : ” , strnresto(nome,n); imprima “n”; fimprog algoritmo 50 Entrar com a base e a altura de um retângulo e imprimir a seguinte saída: perímetro: area: diagonal : prog lea23 real perímetro, area, diagonal, base, altura; imprima “ndigite base: “; leia base; imprima “ndigite altura: “; leia altura; perimetro <- 2*{base +altura); area <-base * altura; diagonal <- raiz(base**2 + altura**2); imprima “nperimetro = ” ,perímetro; imprima “narea = “, area ;
  28. 52. imprima “ndiagonal imprima “n”; fimprog algoritmo 51 11 diagonal Entrar com o raio de um círculo e imprimir a seguinte saída: perimetro: area: prog lea24 real raio, perimetro, area; imprima “ndigite raio: “; leia raio; perimetro <- 2* pi * raio; area <-pi *raio ** 2; imprima “nperimetro : ” , perimetro; imprima “narea “, area imprima “n”; fimprog algoritmo 52 Entrar com o lado de um quadrado e imprimir: perimetro: area: diagonal: prog lea25 real lado, perimetro, area, diagonal; imprima “ndigite o lado do quadrado: “; leia lado ; perimetro <- 4 * lado; area<- lado ** 2; diagonal <- lado * raiz(2); imprima “nperimetro: “, perimetro; imprima “narea: “, area; imprima “ndiagonal: “, diagonal ; imprima “n”; fimprog algoritmo 53 Entrarcom os lados a, b, cde um paralelepípedo. Calculare imprimira diagonal. prog lea26 real a, b, c, diagonal; imprima “nentre com a base : “; leia a; imprima “nentre com a altura: “; 461 leia b;
  29. 53. imprima “nentre com a profundidade: “; 1ei a c; diagonal <-raiz( a**2 + b**2 + c**2 ); imprima “ndiagonal “.diagonal; imprima “n”; fimprog algoritmo 54 Criar um algoritmo que calcule e imprima a área de um triângulo. prog lea27 real a. b; imprima “nEntre com a base: “; leia a; imprima “nEntre a altura do um triângulo: “; leia b; imprima “nArea = “. (a * b)/2; imprima “n”; fimprog algoritmo 55 Criar um algoritmo que calcule e imprima a área de um losango. prog lea28 real diagmaior. diagmenor. area; imprima “nmedida da diagonal maior: “; leia diagmaior; imprima “nmedida da diagonal menor: “; leia diagmenor; area <- (diagmaior * diagmenor)/2; imprima “narea =”, area; imprima “n”; fimprog algoritmo 56 Entrar com nome e idade. Imprimir a seguinte saída: nome: idade: prog lea29 string nome; i nt idade; imprima “ndigite nome: “; leia nome; imprima “ndigite idade: “; 1eia idade; # a linha abaixo é para dar uma separação entre a entrada e a saída
  30. 54. imprima “nn”; imprima “nnome = “, nome; imprima “nidade = “, idade; imprima “n”; fimprog algoritmo 57 Entrar com as notas da PR1 e PR2 e imprimir a média final: • truncada: • arredondada: prog lea30 real prl, pr2, mf; imprima “ndigite prl: “; leia prl; imprima “ndigite pr2: “; leia pr2; mf <- ( prl + pr2 ) I 2; imprima “nmedia truncada= ” realint((mf- 0.5)+0.001); imprima “nmedia arredondada= “, realint( mf+O.OOl); imprima ..,n..; fimprog VÍDEO digite prl:2.3 digi t e prl:7.9 digite pr2:3.7 digite pr2:8.1 media truncada = 3 media truncada = 8 media arredondada 3 media arredondada digite prl:2.8 digite prl:6.9 < digite pr2:2.7 digite pr2:8.1 media truncada = 2 media truncada = 7 media arredondada = 3 media arredondada = algoritmo 58 8 8 Entrar com valores para xnum 1, xnum2 e xnum3 e imprimir o valor de x, saben- do-se que: xnum2 64 X = xnuml + + 2(xnuml – xnum2) + 1og2 xnum3 + xnuml
  31. 55. prog lea31 real xnuml, xnum2, xnum3, x; imprima “nEntrar com 1 valor: “; leia xnuml; imprima “nEntrar com 2 valor: “; leia xnum2; imprima “nEntrar com 3 valor: “; leia xnum3; x <- xnuml + xnum2 I (xnum3 + xnuml) + 2 *(xnuml – xnum2) + log(64.)/ log(2.); imprima “nX imprima “n”; fimprog algoritmo 59 “‘ x; Entrarcom os valores dos catetos de um triângulo retângulo e imprimira hipotenusa. prog lea32 real a,b,c; imprima “nEntrar com 1 cateto: “; 1ei a b; imprima “nEntrar com 2 cateto: “; 1ei a c; a<- raiz (b**2 + c**2); imprima “nA hipotenusa e: “, a; imprima “n”; fimprog algoritmo 60 Entrar com a razão de uma PA e o valor do J2.termo. Calculare imprimir o 102. ter- mo da série. prog lea33 int dec, razao, termo; imprima “nEntrar com o lo termo: “; leia termo; imprima “nEntrar com a razao: “; leia razao; dec <- termo + 9* razao; imprima “nO 10 termo desta P.A. e: ” dec; imprima “n”; fimprog
  32. 56. algoritmo 61 Entrar com a razão de uma PG e o valor do 1Q. termo. Calculare imprimir o 5Q. ter- mo da série. prog lea34 int quinto, razao, termo; imprima “nEntre com o lo t ermo: “; leia termo; imprima “nEntre com a razao: “; leia razao; quinto <- termo * razao A4; imprima “nO 5o termo desta P.G. e: ” quinto; imprima “n”; fimprog algoritmo 62 Em épocas de pouco dinheiro, os comerciantes estão procurando aumentar suas vendas oferecendo desconto. Faça um algoritmo que possa entrar com o valor de um produto e imprima o novo valor tendo em vista que o desconto foi de 9%. prog lea35 real preco, npreco; imprima “ndigite valor do produto: “; l eia preco; npreco <-preco * 0.91; imprima “npreco com desconto : “,npreco; imprima “n” ; fimprog algoritmo 63 Criarum algoritmo que efetue o cálculo do salário líquido de um professor. Os da- dos fornecidos serão: valor da hora aula, número de aulas dadas no mês e per- centual de desconto do INSS. prog lea36 int na; real vha, pd, td, sb, sl; imprima “nhoras trabalhadas: “; leia na ; imprima “nvalor da hora-aula: “; leia vha ; imprima “npercentual de desconto: “; leia pd ; sb <- na * vha; td <- ( pd I 100) * sb ; I sl <- sb – td; 50
  33. 57. imprima “nsalario liquido: “,sl; imprima “n”; fimprog algoritmo 64 Ler uma temperatura em graus centígrados e apresentá-la convertida em graus Fahrenheit. A fórmula de conversão é:F = 9 ·c + 160 onde F é a temperatura em 5 Fahrenheit e C é a temperatura em centígrados. prog lea37 real f, c; imprima “ndigite o valor da temperatura em graus centigrados: “; leia c; f <- ( 9 * c + 160}/5; imprima “no valor da temperatura em graus fahrenheit e =”, f; imprima “n”; fimprog algoritmo 65 Calcular e apresentar o valor do volume de uma lata de óleo, utilizando a fórmu- la:volume = 3.14159 * R2 *altura. prog lea38 real volume, altura, raio; imprima “ndigite a altura da lata: “; leia altura; imprima “ndigite o raio da lata: “; leia raio; volume<- pi *raio** 2 *altura; imprima “no volume da lata e = ” vol ume; imprima “n”; fimprog algoritmo 66 Efetuar o cálculo da quantidade de litros de combustível gastos em uma viagem, sabendo-se que o carro faz 12 km com um litro. Deverão ser fornecidos o tempo gasto na viagem e a velocidade média. Utilizar as seguintes fórmulas: distância = tempo x velocidade. litros usados = distância I 12. O algoritmo deverá apresentar os valores da velocidade média, tempo gasto na viagem, distância percorrida e a quantidade de litros utilizados na viagem.
  34. 58. prog lea39 real tempo, vel, dist, litros; imprima “ndigite o tempo gasto: “; leia tempo; imprima “ndigite a velocidade media: “; leiavel; dist <- tempo* vel; litros <- dist I 12; imprima “nvelocidade =” vel, “ntempo dist, “nlitros = “, litros; imprima “n”; fimprog algoritmo 67 “” tempo, “ndistancia 11 Efetuar o cálculo do valor de uma prestação em atraso, utilizando a fórmula: prestação =valor+ (valor*(taxa/100)*tempo). prog lea40 real prest, valor, taxa; int tempo; imprima “ndigite o valor da prestaç~o: “; leia valor; imprima “ndigite a taxa : “; leia taxa; imprima “ndigite o tempo(numero de meses): “; leia tempo; prest <- valor+(valor*(taxa/100)*tempo); imprima “no valor da prestacao em atraso e =” prest; imprima “n”; fimprog algoritmo 68 Ler dois valores para as variáveis A e 8, efetuar a troca dos vatores de forma que a variável A passe a tero valor da variável 8 e que a variável 8 passe a ter o valor da va- riável A. Apresentar os valores trocados. prog lea41 real a, b, aux; imprima “ndigite 1 numero com ponto: “; leia a; imprima “ndigite 2 numero com ponto: “; 1ei a b; aux <- a; a <- b; b <-aux; 521 imprima “na 11 a, “nb 11 b;
  35. 59. imprima “n”; fimprog algoritmo 69 Criar um algoritmo que leia o numeradore o denominadorde uma fração e trans- formá-lo em um número decimal. prog lea42 int num, denom; imprima “ndigite numerador: “; leia num; imprima “ndigite denominador: “; leia denom; imprima “ndecimal: “,num I denom; imprima “n”; fimprog algoritmo 70 Todo restaurante, embora por lei não possa obrigar o cliente a pagar, cobra 10% para o garçom. Fazer um algoritmo que leia o valor gasto com despesas realiza- das em um restaurante e imprima o valor total com a gorjeta. prog lea43 real cres, cgorj; imprima “nEntre com o valor da conta: “; leia cres; cgorj <- cres *1.1; imprima “nO valor da conta com a gorjeta sera: ” formatar(cgorj,Z); imprima “n”; fimprog algoritmo 71 Criar um algoritmo que leia um valor de hora e informe quantos minutos se pas- saram desde o início do dia. prog lea44 int hora, tminuto, minuto; imprima “nentre com hora atual: “; leia hora; imprima “nentre com minutos: “; leia minuto; tminuto <- hora * 60 + minuto; imprima “nAte agora se passaram: ” tminuto, ” minutos”; imprima “n”; fimprog
  36. 60. algoritmo 72 Criar um algoritmo que leia o valor de um depósito e o valor da taxa de ju- ros. Calcular e imprimir o valor do rendimento e o valor total depois do ren- dimento. prog lea45 real deposito, taxa, valor, total; imprima “nentre com depósito: “; leia deposito; imprima “nentre coma taxa de juros: “; leia taxa; valor<- deposito*taxa/ 100; total <- deposito + valor; imprima “nRendimentos: “, valor, “nTotal: ” total; imprima “n”; fimprog algoritmo 73 Criar um algoritmo que receba um número real, calcular e imprimir: • a parte inteira do número • a parte fracionária do número • o número arredondado prog lea46 real num, numfrac; int numi ,numa; imprima “nentre com um numero com parte fracionaria: “; leia num; numi <- realint((num – 0.5)); numfrac <-num- numi; numa<- realint(num + 0.00001); imp~ima “nparte inteira: “,numi; imprima “nparte fracionaria: “,formatar((numfrac + 0.00001),3); imprima “nnumero arredondado: “, numa; imprima “n”; fimprog C. Qualquer dúvida, consulte oApêndice I.
  37. 61. entre com um numero com parte fracionaria:7.1 parte inteira:? parte fracionária:O . lOO numero arredondado:? entre com um numero com parte fracionaria:8.5 parte inteira:8 parte fracionária:0.500 numero arredondado:9 entre com um numero com parte fracionaria:7 .49 parte inteira:? parte fracionária:0.490 numero arredondado:? algoritmo 74 VÍDEO entre com um numero com parte fracionaria:8.4999 parte inteira:8 parte fracionária:0.499 numero arredondado:8 entre com um numero com parte fracionaria:7.4999 parte inteira:? parte fracionária:0.499 numero arredondado:? entre com um numero com parte fracionária:8 .0 parte inteira:8 parte fracionária:l.OOO numero arredondado :8 —————————————————– Para vários tributos, a base de cálculo é osalário mínimo. Fazerum algoritmo que leia o valor do salário mínimo e o valor do salário de uma pessoa. Calcular e impri- mir quantos salários mínimos ela ganha. prog lea47 real salmin, salpe, num; imprima “nentre com o salario minimo: “; leia salmin; imprima “nentre com o salario da pessoa: “; leia salpe; · num<- salpe I salmin; imprima “na pessoa ganha “, num, ” salarios minimos”; imprima “n”; fimprog algoritmo 75 Criar um algoritmo que leia o peso de uma pessoa, só a parte inteira, calcular e imprimir: • o peso da pessoa em gramas • novo peso, em gramas, se a pessoa engordar 12% 155 ….
  38. 62. 561 prog lea48 int peso, pesogramas, novopeso; imprima “nentre com seu peso, sõ a parte inteira: “; leia peso; pesogramas <- peso * 1000; novopeso <- pesogramas * 1.12; imprima “npeso em gramas: “, pesogramas; imprima “nnovo peso: “, novopeso; imprima “n”; fimprog algoritmo 76 Criar um algoritmo que leia um número entre Oe 60 e imprimir o seu sucessor, sa- bendo que o sucessor de 60 é O. Não podeserutilizado nenhum comando de sele- ção e nem de repetição. prog leia49 int num; imprima “ndigite numero : “; leia num; imprima “nsucessor: “, (num+ 1) %61; imprima “n”; fimprog algoritmo 77 Ler dois números reais e imprimir o quadrado da diferença do primeiro valorpelo segundo e a diferença dos quadrados. prog lea50 real a, b, d, q; imprima “ndi gite 1 numero : “· ‘ leia a; imprima “ndigite 2 numero : “·’leia b; d <- (a – b)**2; q <-a**2 – b**2; imprima “no quadrado da diferenca =”,d , “ndiferenca dos quadrados=”, q; imprima “n”; fimprog algoritmo 78 Dado um polfgono convexo de n lados, podemos calcular o número de diagonais diferentes (nd) desse polfgono pela fórmula : nd =n (n – 3) I 2. Fazer um algorit- mo que leia quantos lados tem o po/fgono, calcule e escreva o número de diago- nais diferentes (nd) do mesmo.
  39. 63. prog lea51 real nd; int n; imprima “ndigite o numero de lados do poligono: “; leia n; nd <- n * ( n – 3) I 2; imprima “nnumero de diagonais: ” nd; imprima “n”; fimprog algoritmo 79 Uma pessoa resolveu fazer uma aplicação em uma poupança programada. Para cal- cularseu rendimento, ela deverá fornecer o valor constante da aplicação mensal, a taxa e o número de meses. Sabendo-se que a fórmula usada para este cálculo é: valor acumulado = P * (1+i)” – l i= taxa P = aplicação mensal n = número de meses prog lea52 rea1 va, i , p; int n; imprima “ndigite 1ei a p; imprima “ndigite leia i; o a valor da aplicacao: taxa( o – 1) : “., imprima “ndigite o numero de meses: “; leia n; va <-p*(((l+ i )** n)-1) I i; imprima “nO valor acumulado: “, va; imprima “n”; fimprog algoritmo 80 “., Criar um algoritmo que leia a quantidade de fitas que uma locadora de vídeo pos- sui e o valor que ela cobra porcada aluguel, mostrando as informações pedidas a seguir: • Sabendo que um terço das fitas são alugadas por mês, exiba o faturamento anual da locadora; • Quando o cliente atrasa a entrega, é cobrada uma multa de 10% sobre o valor do aluguel. Sabendo que um décimo das fitas alugadas no mês são devolvidas com atraso, calcule o valor ganho com multas por mês; • Sabendo ainda que 2% de fitas se estragam ao longo do ano, e um décimo do total é comprado para reposição, exiba a quantidade de fitas que a locadora terá no final do ano.
  40. 64. saj prog lea53 int quant; real valAluguel, fatAnual, multas, quantFinal; imprima “n Digite a quantidade de fitas: “; leia quant; imprima “n Digite o valor do aluguel: “; leia valAluguel; fatAnual <- quant/3 * valAluguel * 12; imprima “n Faturamento anual: “, fatAnual; multas <- valAluguel * 0.1 * (quant/3)/10; imprima “n Multas mensais : “, multas; quantFinal <- quant – quant * 0.02 + quant/10; /* quant * 1.08 */ imprima “n Quantidade de fitas no final do ano : “, quantFinal; imprima “n”; fimprog algoritmo 81 Criar um algoritmo que, dado um número de conta corrente com três dígitos, re- torne o seu dígito verificador, o qual é calculado da seguinte maneira: Exemplo: número da conta: 235 • Somar o número da conta com o seu inverso: 235+ 532 = 767 • multiplicar cada dígito pela sua ordem posicional e somar estes resultados: 7 6 7 7 6 7 X1 X2 X3 7 + 12 + 21 =40 • o último dígito desse resultado é o dígito verificador da conta (40 —+ O). prog lea54 int conta, inv , digito, d1, d2, d3,soma; imprima “nDigite conta de tres digitas: “; leia conta; d1 <- conta div 100; d2 <- conta % 100 div 10; d3 <- conta % 100 % 10; inv <- d3 *100 + d2 *10 +d1; soma <- conta + inv; d1 <- (soma div 100) * 1; d2 <- (soma % 100 div 10) * 2; d3 <- (soma % 100 % 10) *3; digito <- (d1 +d2 +d3) % 10; imprima “ndigito verificador: ” digito; imprima “n”; fimprog
  41. 65. ATENÇÃO Refazer esta lista colocando todos os testes, usando o comando se, quando você aprender, nos exercícios necessários: 1. testar se o divisor é diferente de O. 2. testar se o radicando é maior ou igual a O. 3. testar se o logaritmando é maior do que O e a base, maior do que O e a base diferente de 1. 4. testar se o seno é diferente de zero quando se deseja calcular co-tangente e co-secante. 5. testar se o co-seno é diferente de zero quando se deseja calcular tangente e secante. 6. testar se os valores para lados de figuras são maiores do que zero. 7. e outros mais.
  42. 66. Capítulo 3 Estruturas de seleção CONCEITOS Nossos algoritmos até agora seguiram um mesmo padrão: entrava-se com dados, estes eram processados e alguma informação era mostrada na tela. Dessa forma, o computador mais parecia uma máquina de calcular. O aprendizado de novos conceitos, como a estrutura de seleção, nos dará uma visão maior da complexidade de tarefas que ele poderá executar. Vamos refletir sobre a importância dessa estrutura, lendo com atenção as afirmativas a seguir: 1. Distribuição gratuita de cestas básicas. 2. Distribuição gratuita de cestas básicas para famílias com 4 ou mais componentes. 3. Distribuição gratuita de ingressos para o teatro, sendo dois para pes- soas do sexo feminino e um para pessoas do sexo masc ulino. Se observarmos essas afirmativas podemos concluir que: • Na primeira, todas as pessoas recebem a cesta básica, o que equivale- ria a um comando seqüencial. • Na segunda, só recebem as cestas básicas as famílias com pelo menos quatro integrantes. • Na terceira, dependendo do sexo, recebe-se um ou dois ingressos. Assim, podemos avaliar a importância do teste nas duas últimas afir- soj mativas, pois ações diferentes são executadas de acordo com o resultado.
  43. 67. Um exemplo do nosso dia-a-dia: imagine-se diante de um caixa eletrô- nico e suponha que sua senha seja 1234: Na tela aparece a mensagem: Digite sua senha: •O cursor ( • ou I) fica piscando: Você digita os algarismos da sua senha 1234 1233 Neste momento, a Unidade Aritmética e Lógica VÁLIDA INVÁLIDA (um dos componentes da CPU) verifica se os números que você digitou são iguais a 1234. Caso tenham sido, aparece na tela a mensagem: VÁLIDA; mas se você digitou algo diferente, aparece na tela a mensagem: INVÁLIDA. Conceito é uma estrutura de controle de fluxo, executando um ou vários comandos se a condição testada for verdadeira e, em alguns casos, execu- tando um ou vários comandos se for falsa. SINTAXES Seleção Simples se ( condição } { comando ; ou < seqüência de comandos separados por ; > } A sintaxe acima representa a afirmativa 2, pois se a família tiver, no mí- nimo, quatro componentes, recebe a cesta básica; mas se a família tiver menos que quatro componentes, não recebe nada. Seleção Composta se ( condição } { comando ; ou < seqüência de comandos separados por ; > } senao { comando ou < seqüência de comandos separados por ; > } ~———————————————————-~161
  44. 68. A sintaxe acima representa a afirmativa 3 onde, dependendo do sexo, recebe-se um ou dois convites. OBSERVAÇÕES 1. Podemos constatar que esta estrutura faz parte do nosso cotidiano: • Se eu não tiver prova, vou à praia; senão vou estudar. • Se eu tiver aumento, troco de carro; senão espero o 13º salário. • Se minha média for maior ou igual a sete, passo direto; senão vou à prova final. 2. A única coisa diferente é a forma como iremos escrevê-/a, pois as chaves { e } são obrigatórias uma vez que delimitam os comandos que pertencem a cada bloco, assim como os parênteses (e) que delimitam a condição. 3. Essa é uma estrutura muito importante em algoritmos porque nos dá a possibilidade de verificar o que foi digitado pelo usuário ou qual o conteúdo de uma variável após um processamento etc. Vamos analisar cada linha da segunda sintaxe que é a mais completa, pois um ou vários comandos serão executados caso a condição testada seja verdadeira e outros comandos serão executados caso a condição seja falsa. 12 linha: se (condição) Condição • A condição é uma expressão lógica testada pela Unidade Aritmética e Lógica, devolvendo como resposta: verdadeiro ou falso. Convém aqui recordar os operadores relacionais e os operadores lógicos: Operadores Usaremos Relacionais igual — diferente <> ma10r > menor que < maior ou igual a >= menor ou igual a <= Operadores lógicos conjunção (e) disjunção (ou) negação (não) Usaremos && li
  45. 69. a. A condição pode ser uma simples expressão relaciona! formada de dois operandos do mesmo tipo e de um operador relaciona! (>, <, > =, <=,==e< >). A>B A< 12 resp < > “S” lê-se: o conteúdo da variável A é maior do que o conteúdo da variável B? lê-se: o conteúdo da variável A é menor do que 12? lê-se: o conteúdo da variável resp é diferente da letraS? resp = = “BRASIL” lê-se: o conteúdo da variável resp é igual a BRASIL? b. A condição pode ser uma expressão lógica formada de pelo menos duas expressões relacionais que precisarão ser unidas por um dos operado- res lógicos (&&ou 11). A>= 1 && A < 9 lê-se: o conteúdo da variável A é maior ou igual a 1 e menor que 9? resp = = “S” li resp = = “s” lê-se: o conteúdo da variável resp é igual a S ou igual a s? Você deve estar perguntando: e os parênteses, não são necessários ? Não, porque as operações aritméticas têm maior prioridade, depois as relacionais e por último as lógicas; mas, cuidado, nem todas as linguagens agem dessa maneira. Você deverá ter uma atenção especial quando unir vários operadores lógicos para fazer seus testes. Veremos isso mais adiante. 2a.linha: { Indica o início do bloco caso a condição testada seja verdadeira. 3a. linha: comando; ou < seqüência de comandos separados por; > Nesta parte, são relacionados os comandos que serão executados caso a condição seja verdadeira. 4a.linha: } Indica o fim do bloco caso a condição testada seja verdadeira. sa. linha: senao Este comando faz parte da estrutura do se e só deverá ser usado quando pelo menos uma ação tiver de ser executada se a condição testada for falsa. 163
  46. 70. 6ª linha: { Indica o início do bloco caso a condição testada seja falsa. 7ª linha: comando; ou <seqüência de comandos separados por; > Nesta parte, são relacionados os comandos que serão executados caso a condição seja falsa. 8ª linha: } Indica o fim do bloco caso a condição testada seja falsa. A execução do comando se: 1. Primeiro, a condição é avaliada pela Unidade Aritmética e Lógica, sendo a condição uma expressão que possa retornar um valor lógico (ver- dadeiro ou falso). 2. Se o valor retornado for verdadeiro, todos os comandos que se encon- tram entre o primeiro par de chaves serão executados; após a execução dos comandos, o fluxo do algoritmo passa para o primeiro comando de- pois do fechamento do bloco do senao, representado pelo símbolo } (se existir; caso contrário, será executado o primeiro comando depois de }do próprio bloco. 3. Se o valor retornado for falso, todos os comandos que se encontram entre o primeiro par de chaves serão ignorados e, se existir o comando se- nao, serão executados os comandos que se encontram entre o segundo par de chaves; caso contrário, nada acontecerá e o fluxo do algoritmo seguirá para o próximo comando. Vejamos alguns exemplos:
  47. 71. algoritmo 82 Ler um número e se ele for maiordo que 20, então imprimira metade do número. Solução n2. 1: prog metade real numero, met; imprima “digite numero: “; 1ei a numero; se( numero > 20. ) { } met <- numero I 2; imprima “nmetade: ” met imprima “n”; fimprog Nesta solução foi criada a variável met. Solução n2. 2: prog metade real numero; imprima “digite numero: “; 1ei a numero; se( numero > 20. ) { imprima “nmetade:”,numero/2; } imprima “n”; fimprog Nesta solução não foi criada a variável met. A linha de comando imprima ”n”; evita que o prompt fique na mesma linha do resultado. A saída na tela será a mesma, mas, na MP, teremos duas variáveis. Para este tipo de exercício, a criação da variável met seria desnecessária. VÍDEO VÍDEO Digite numero:40. Digite numero:40. metade:20.0 metade:20.0 MP MP Memória Principal (MP) Memória Principal (MP) número met número BEJ 140.0 1. VÍDEO VÍDEO Digite numero:15. Digite numero:15. MP MP Memória Principal (MP) Memória Principal (MP) número met EJEJ número EJ 165
  48. 72. algoritmo 83 Ler um número e, se ele for positivo, imprimir seu inverso; caso contrário, impri- mir o valor absoluto do número. Solução n2. 1: prog inversoabsoluto real numero, inverso, absoluto; imprima “digite numero:”; leia numero; se( numero > O. ) { inverso <- 1 I numero; imprima “ninverso: ” inverso;} senao { absoluto <- numero * -1; # ou absoluto <- abs(numero); imprima “nabsoluto: ” absoluto;} imprima “n”; fimprog VÍDEO Digite numero:5. inverso:0.2 MP Memória Principal (MP) número inverso absoluto B B EJ VÍDEO Digite numero:-5 . absoluto:5.0 MP Memória Principal (MP) número inverso absoluto B EJ B Solução n2. 2: prog inversoabsoluto real numero; imprima “digite numero:”; leia numero; se( numero > O. ) {imprima “ninverso: “,1 I numero; } senao {imprima “absoluto: “, numero* (-1); #imprima “absoluto: “, abs(numero); } imprima “n”; fimprog VÍDEO Digite numero:5. inverso:0.2 MP Memória Principal (MP) número B ~ VÍDEO Digite numero:-5. absoluto:5.0 MP Memória Principal (MP) número B
  49. 73. algoritmo 84 Ler um número e imprimir se ele é par ou ímpar. prog parimpar int a; imprima “nDigite numero: “; leia a; se(a % 2 == O} {imprima “nPAR”;} senao {imprima “niMPAR”;} imprima “n”; fimprog Digite numero:24 PAR Digite numero:25 IMPAR VÍDEO Se você já entendeu tudo o que foi explicado até aqui, então será capaz de deduzir o que ficará armazenado nas variáveis do trecho do algoritmo a seguir, sabendo-se que elas tanto podem ser do tipo int, real ou string. DESAFIO · se(a > b) { aux <- a; a <- b; b <- aux; } se(a > c) { aux <- a; a <- c; c <- aux; } L
  50. 74. se(b > c) { aux <- b; b <- c; c <- aux; } Resposta: Na variável a, ficará o menor; na variável b, o do meio; e, na variável c, o maior (se forem números); ou então ficarão as três palavras em ordem alfabética, uma vez que também é uma ordem crescente. SES ANINHADOS (ENCAIXADOS) Muitas vezes, em algumas aplicações, sentiremos a necessidade de tomar outras decisões dentro de uma das alternativas da estrutura do se; a isso chamamos de ses aninhados. Vejamos um exemplo clássico de algoritmos: algoritmo 85 prog descubra real a, b, c, max; imprima “ndi gite 1 numero: “· ‘ leia a; imprima “ndigite 2 numero: “·, 1eia b; imprima “ndigite 3 numero: “; 1ei a c; se (a > b) { se (a > c) { max <- a } senao { max <- c; } } senao { } se ( b > c) { max <- b; } senao { max <- c ; } imprima “n”,max; imprima “n”; 681 fimprog
  51. 75. Você descobriu o que faz esse algoritmo? Resposta: Armazena na variável maxo maior número entre 3, imprimindo-o. Desafio: Normalmente, o uso de ses aninhados melhora a performance do algoritmo. Será que nesse caso aconteceu isso? Tente usar o trecho do desa- fio anterior e melhore esta solução. A resposta estará mais adiante. Outros exemplos: algoritmo 86 Ler um número e imprimir se ele é positivo, negativo ou nulo. prog pnn real num; imprima “nDigite numero: “; leia num; se(num > O.) {imprima “nPOSITIVO”;} senao { se(num < O.) { imprima “nNEGATIVO”;} senao { imprima “nNULO”;} } imprima “n”; fimprog Digite numero:34. POSITIVO Digite numero:-12. NEGATIVO Digite numero:O. NULO VÍDEO Você deve estar fazendo algumas perguntas: 1. Por que não se perguntou se o número era igual a zero? Resposta: Quando temos a possibilidade de três respostas, só precisamos fazer 169
  52. 76. duas perguntas, pois a segunda pergunta nos dá as duas últimas respostas. Veja bem: se descartarmos a possibilidade de o número ser maior do que O, ficamos com duas possibilidades: o número seriguala Oou menor do que O; dessa forma, uma pergunta é satisfatória. 2. Mas se eu fizer, estarei errado(a)? Resposta: Não, mas não é necessário. 3. Por que a solução não poderia ser como a a seguir? prog se real num; imprima “nDigite numero: “; leia num; se(num > O.) { imprima “nPOSITIVO”;} se(num < 0.) { imprima “nNEGATIVO”;} se(num == O.) { imprima “nNULO”;} imprima “n”; fimprog Resposta: Esta solução, embora você consiga atingir os objetivos do algoritmo, apresenta um grande inconveniente: sempre serão executados três testes, mes- mo quando já tivermos classificado o número. Entretanto, na 1~ solução, outro teste só será executado se ainda não tivermos chegado a uma conclusão sobre o número. Esta estrutura precisa de vários ciclos para ser executada; portanto, evite usá-la desnecessariamente. algoritmo 87 Criar um algoritmo que permita ao aluno responder qual a~capital do Brasil. To- das as possibilidades deverão ser pensadas. prog geo string resp; imprima “nQua1 a capi ta1 do Brasil? “; leia resp; se(resp == “BRASÍLIA” li resp == “Brasília”) {imprima “nPARAB~NS!”;} senao { se(resp==”brasília” li resp==”BRASÍLIA”II resp==”Brazília” li resp==”brazília”) { imprima “nCERTO! Mas atençâo para grafia: Brasília ou BRASÍLIA “;} senao { imprima “nERRADO! ESTUDE MAIS!”;}
  53. 77. } imprima “n”; fimprog C. Digite no ambiente Linuxpor causa da acentuação. VÍDEO Qual a capital do Brasil? brasília CERTO! Mas atenção para grafia : Brasília ou BRASÍLIA Qual a capital do Brasi l ? BRASÍLIA PARABÉNS! Qual a capital do Brasil? Brasí lia PARABÉNS! Qual a capital do Brasil? Brazília CERTO! Mas atenção para grafia: Brasília ou BRASÍLIA Qual a capital do Brasi l? BRAZÍLIA CERTO! Mas atenção para grafia: Brasília ou BRASÍLIA Qual a capital do Brasi l? brazília CERTO! Mas atenção para grafi a: Brasília ou BRASÍLIA Qual a capital do Brasil? Vi tória ERRADO! ESTUDE MAIS! algoritmo 88 Algoritmo Calculadora prog calculadora string resp; real a,b; imprima “nntttt*************n”; imprima “tttt*CALCULADORA*n”; imprima “tttt*************n”; imprima “ntttt+ para somarn”; imprima “ntttt- para subtrai rn”; imprima “ntttt* para multi pli carn”; imprima “ntttt/ para dividirn”; imprima “nnttttDigite opcao: “; leia resp;
  54. 78. se(resp==”+”) { } imprima “nDigite 1 numero com ponto: “; leia a; imprima “nDigite 2 numero com ponto: “; 1ei a b; imprima “nSOMA: ” ,a + b; senao { } se(resp==”-“) { imprima “nDigite 1 numero com ponto: “; leia a; imprima “nDigite 2 numero com ponto: “; 1ei a b; imprima “nSUBTRACAO: “,a- b; } senao { se(resp==”*”) { imprima “nDigite 1 numero com ponto: “; 1ei a a; imprima “nDigite 2 numero com ponto : “; leia b; imprima “nMULTIPLICACAO: “,a * b; } senao } { se(resp==”/ “) } { } imprima “nDigite 1 numero com ponto: “; leia a; imprima “nDigite 2 numero com ponto: “; 1ei a b; imprima “nDIVISAO: “,a I b; senao { imprima “nOPÇAO NAO DISPONIVEL!”; } imprima “n”; fimprog
  55. 79. VÍDEO ************* *CALCULADORA* ************* + para somar – para subtrair * para multiplicar I para dividir Digite opção:* Digite 1 numero com ponto:23. Digite 2 numero com ponto:12. OPCAO NAO DISPONIVEL! ************* *CALCULADORA* ************* + para somar – para subtrair * para multiplicar I para dividir Digite opção:& UM POUCO MAIS SOBRE VARIÁVEL STRING Já vimos que a variável simples string é armazenada na memória como se fosse um vetor onde cada caractere é armazenado em uma posição confor- me o esquema a segmr: byte byte byte byte byte o 1 2 3 4 variável string I I I byte byte 5 6 byte byte 7 8 byte 9 byte n Analisando sob esse prisma, podemos dizer que a variável simples string é umconjunto de n variáveis de umúnico caractere e todas com o mesmo nome. Quando se comparam duas variáveis strings, na verdade, estamos comparando os códigos dos caracteres de cada string, baseado em seus va-1 73
  56. 80. 741 lores no código ASCII (Apêndice li). Dessa forma, não é difícil entender o uso dos sinais de >, < ou de = . Usar o sinal de > significa perguntar se vem depois na ordem alfabética (ou < vem antes), urna vez que o código ASCII está em ordem alfabética, isto é, a letra A tem um código menor do que a letra B e assim sucessiva- mente. Veja o trecho da tabela a seguir: CARACTERE Código ASCII em decimal A 65 B 66 c 67 … … L 76 … … z 90 … … a 97 b 98 c 99 … … 1 208 … … z 122 Observando o trecho da tabela acima, você poderá compreender por que urna palavra escrita em letras maiúsculas (ALGO.R..ITMOS) não é con- siderada igual a uma palavra escrita em letras minúsculas (algoritmos): NOMEl 65 76 71 79 82 73 1 84 77 79 83 0 ? o 1 2 3 4 5 6 7 8 9 NOME2 97 t 1o8 t 1o3 t 111 t 114 t 1o5 1116 l1o9 t 111 t 115 1 o 1 o 1 2 3 4 5 6 7 8 9

 

Deixe um comentário