Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Curso de Algoritmos - Aulas 1 a 11, Notas de aula de Informática

Curso de Algoritmo, demonstra técnicas para resolução de problemas. Material retirado do Site www.olinux.com.br Autor: Jorge Luiz E. de Souza

Tipologia: Notas de aula

Antes de 2010
Em oferta
30 Pontos
Discount

Oferta por tempo limitado


Compartilhado em 11/08/2008

marcelo-pacifico-5
marcelo-pacifico-5 🇧🇷

5

(1)

9 documentos

1 / 33

Documentos relacionados


Pré-visualização parcial do texto

Baixe Curso de Algoritmos - Aulas 1 a 11 e outras Notas de aula em PDF para Informática, somente na Docsity! Curso de Algoritmo - Aula I Por: Jorge Luiz E. de Souza ( 22/05/2001 ) Introdução Olá, comunidade! Nossa primeira aula será sobre PORTUGOL, uma forma de escrita estruturada, cuja finalidade é: descrever em uma sequência lógica os passos para a resolução de um problema. Um detalhe importante do portugol é que todas as linhas devem conter uma única instrução iniciada por verbos no imperativo. O que é Algorítmo? É uma forma estruturada de resolver problemas numa sequência lógica, passo a passo até obter o resultado desejado. Todo tipo de problema que temos no dia a dia, resolvemos através de algoritmos naturais, que muitas vezes não são nem percebidos como tal. Um exemplo: Quando você chega em sua casa a noite. O que você faz para entrar em sua casa? Você deve estar pensando: "O que isto tem a ver com programação?". A resposta é: TUDO. Vejamos: Sob o ponto de vista atual (isto é, sem conhecer algoritmos estruturados) você diria: Pense na sua resposta! Sob o ponto de vista de algorítmo estruturado: Abrir o portão Passar para o lado de dentro do terreno Fechar o portão Dirigir-se à porta Pegar a chave da porta Abrir a porta da casa Passar para o lado de dentro da casa Fechar a porta da casa Pronto! Você está dentro de casa. Exemplo 1. Sequência entrar em casa Analisando os passos sequenciais seguidos pelo exemplo 1, vemos que em 8 passos simples podemos demonstrar através de instruções simples e bem definidas, uma SOLUÇÃO GENÉRICA para o PROBLEMA: ENTRAR EM CASA. Isto é, QUALQUER pessoa que olhar para estas Copyright (C) 1999-2000 Linux Solutions. 1 instruções e seguí-las CONSEGUIRÁ ENTRAR EM CASA. Observe que todo início de linha contém um IMPERATIVO. Não é por acaso! O computador atende a COMANDOS (instruções diretas que geram uma resposta previsível e objetiva). Então, todas as linhas de um PORTUGOL, linguagem básica para entender os algorítmos devem iniciar com IMPERATIVOS. Tente descrever EM PORTUGOL (sequência de linhas lógicas para resolver um problema, com linhas iniciadas por imperativos) os seguintes problemas (faça algorítmos contínuos, ignore os problemas mais detalhados. Por enquanto!): Trocar o pneu de um carro. Levantar demanhã em uma segunda-feira. Dançar ao som de uma música (suponha que o aparelho de som está desligado). Ligar um computador. (se você não sabe! pesquise!) Acender uma luz em um quarto escuro. (Isto pode ser divertido!) Tomar um banho de piscina em um dia muito quente. (Suponha que a piscina está em um clube e você na sua casa). Abrir um programa de computador. (Suponha que o computador já está ligado) Escovar os dentes. Colocar um CD no aparelho de som. Ler um livro. Conclusão O PORTUGOL é uma linguagem simples que não possui muitas regras para sua escrita. Por isto é elucidativa a sua utilização. De forma clara, podemos enxergar que a partir de sequências de instruções genéricas podemos criar uma solução para um problema. E esta solução (reutilizável) poderia ser usada quantas vezes quizermos, desde que as condições sejam as mesmas. Na aula que vem veremos estruturação do pensamento, desvios condicionais e refinamento de código. Até lá! Aguardo críticas e sugestões. Curso de Algoritmo - Aula II Por: Jorge Luiz E. de Souza ( 05/06/2001 ) Introdução A aula de hoje é sobre estruturação do pensamento. Em primeiro lugar, estruturação do pensamento nada mais é do que saber definir qual a ordem de precedência entre os comandos a serem executados. Noção muito importante na programação. Isto será útil quando estivermos falando em ESCOPO de variáveis e do próprio código. Boa aula! Estruturação do pensamento Até agora, não pensamos em DETALHES, como por exemplo: • Condições: para fazer algo; isto é, antes de fazer uma coisa, tenho que verificar se outra já foi feita; • Desvio: se uma coisa já foi feita, não faça isto, faça aquilo. No pensamento estruturado existem FERRAMENTAS que auxiliam a escrita lógica para tais condições, são elas: SE [CONDIÇÃO] ENTÃO [COMANDO|LISTA DE COMANDOS] Copyright (C) 1999-2000 Linux Solutions. 2 Para uma fixação do conteúdo, refaça os exercícios da primeira aula utilizando estas técnicas (onde você achar necessário). Na próxima aula faremos uma introdução à algoritmos. Sugestões e críticas são bem vindos! Curso de Algoritmo - Aula III Por: Jorge Luiz E. de Souza ( 19/06/2001 ) Introdução Preparem-se pois esta aula é bem G R A N D E! O objetivo é dar uma introdução ao algoritmo. Sendo assim, os conceitos básicos serão todos apresentados, deixando para o decorrer do curso as técnicas e explicações detalhadas sobre novos recursos assim que eles se tornarem necessários. Preparados? Então vamos lá! Algoritmo A construção de algoritmos é regida por normas chamadas de: sintaxe de comandos. De acordo com a evolução no nível de programação, serão apresentadas a sintaxe de cada comando e a forma correta de utilizá-los. Inicialmente vamos definir o que é sintaxe. A boa escrita exige conhecimentos de sintaxe e gramática por parte do escritor. Se o escritor conhece bem a língua portuguesa, irá escrever textos claros e concisos. Evitará também erros grosseiros que são facilmente percebidos pelo leitor. O computador pode "ler" o código escrito por um programador através de um compilador. Um programa especial que converte o que o programador escreve em linguagemm de alto nível para a linguagem de máquina, a qual é entendida pelo computador. Uma breve introdução ao Processamento de Dados A computação é um processo simples e consiste em três passos básicos. São eles: entrada de dados, processamento dos dados e saída de informação. É necessário entender isto, pois não há sentido em um processamento que não gere informação útil ao usuário. Então, ao se programar, deve-se ter o cuidado de trabalhar os dados a fim de obter um resultado útil. Exemplo - um programa para calcular automaticamente a potência N de um número X: Este programa receberá duas entradas: o número X, e a potência a qual será elevado. Produzindo como resultado o valor referente ao processamento da operação matemática potência. Um programa assim é utilizado em calculadoras científicas, onde define-se o número pressionando, a tecla refernete ao mesmo, a tecla YX e a tecla do número relativo à potência. Este é um bom exemplo da utilização dos passos básicos mencionados anteriormente (relembrando, entrada de dados, processamento, saída de informação). Por que entrada de dados e saída de informação? Se você ainda está se perguntando isto após a explicação anterior, aí vai a resposta. Entrada de dados: aqui a palavra dados tem o intúito de enfatizar que o que está entrando são informações dispersas, cujo conteúdo se quer processar. Saída de informação: a palavra informação, aqui, denota que após o processamento os dados foram ordenados e o processamento extraíu o que não era necessário ou simplesmente foi concluído com êxito. Copyright (C) 1999-2000 Linux Solutions. 5 Observe que no exemplo da calculadora a saída de informação se refere ao resultado da potência mostrado no visor da calculadora, como um resultado útil ao usuário que o requisitou. Bem, chega de blá blá blá! Em suma, algoritmos se propõem a resolver problemas gerando informação útil após o processamento dos dados de entrada. Convenções de escrita de algoritmos Todas as palavras reservadas são escritas sublinhadas. Não utiliza-se acentos e caracteres especiais como o ç . A escrita de literais deve ser entre apóstrofos . Tipos serão escritos em maiúsculas. O que é uma literal? O computador é regido por códigos, somente entendendo estes. Cada letra para o computador é um código. Chamaremos letras isoladas de caractere, e um conjunto de letras chamaremos de LITERAL. Obs.: Literal pode conter números, mas números não podem conter caracteres alfa, isto é, letras. Tipos: Tipo é a definição de um conjunto de valores aceitos por uma vaiável. Tipos pré definidos: caractere, texto, inteiro, real e lógico. Variáveis Uma variável é uma posição de memória que pode conter um valor qualquer em determinado ponto do programa e outro valor em outro ponto do mesmo programa. Daí, o nome, variável. As variáveis são definidas utilizando-se a palavra chave declare no início do algoritmo. À toda variável declarada é associado um tipo e esta variável somente poderá conter (receber) valores deste tipo. Assim, se uma variável é declarada do tipo texto, seu conteúdo não poderá ser utilizados para cálculos matemáticos, visto que não é um número. Exemplo: Declare Nome:TEXTO X: INTEIRO Válido: Nome "João da Silva" X 20 Não permitido: Nome 50 X "Maria José" Aqui, declaramos as variáveis Nome (do tipo texto) e X (do tipo inteiro). Como Nome é uma literal, não poderá ter seu conteúdo utilizado por uma expressão matemática. Comentários Pode-se escrever frases explicativas tentro de um algoritmo, com fins de organização e estruturação do pensamento, sem que estas façam parte do código. Isto é, não serão executadas como comandos, nem mostradas ao usuário. Servindo somente ao propósito descrito acima. Estas linhas devem começar com duas barras seguidas: //. Copyright (C) 1999-2000 Linux Solutions. 6 Exemplo: A B //Atribuição do valor da variável B à variável A Convencões para sintaxe (Forma correta de utilização de um comando) Nota: termos entre [ ] são opcionais. Palavras Reservadas: Algoritmo, Declare, Se, Então, Senão, Para, Enquanto, faça, até, Leia, Escreva, catactere, texto, inteiro, lógico. Comandos de Atribuição Atribuição de valor à variável diretamente: Leia (variável) //Requisição de entrada de valor pelo usuário Comandos de Saída Escreva (Variavel [Texto]) Como começar um algoritmo Todo algoritmo começa com a palavra reservada "Algoritmo", seguida do nome do programa que será gerado. E é finalizado com a expressão literal "Fim Algoritmo". Exemplo: Algoritmo Soma Declare Lista de variáveis (Comandos de entrada) (Procesamento da entrada) (Saída da informação) Fim Algoritmo Declaração de variáveis Variáveis são declaradas no início de um algoritmo e sua sintáxe é a seguinte: Declare Variavel : TipoDaVariavel Variavel : TipoDaVariavel... Variavel, Variavel, variavel... : TipoDaVariavel... Exemplo: Algoritmo Soma Declare A, B, Soma : INTEIRO (Comandos de entrada) (Procesamento da entrada) (Saída da informação) Fim Algoritmo Copyright (C) 1999-2000 Linux Solutions. 7 também será apresentada neste exemplo. • 4ª Observação: Deve existir um contador para contar todas as mulheres da cidade. • 5ª Observação: Existe uma condição para uma mulher entrar na segunda CONTAGEM, esta condição é: ser casada e Ter mais de 3 filhos. Isto quer dizer que teremos dois CONTADORES para Mulheres, um para toda e qualquer mulher da cidade e um para as casadas com mais de três filhos. • 6ª Observação: Existe também uma condição para que um homem entre no TERCEIRO CONTADOR. Que é, torcer para o palmeiras. Todas as condições aqui expostas serão solucionadas utilizando-se de estruturas SE, ENTÃO e SENÃO. Apresentarei com este exemplo duas estruturas de repetição: Para e Enquanto, para isto haverá duas implementações de solução para este mesmo problema. Primeira implementação do Algoritmo Pesquisa * Utilizando a estrutura de repetição PARA Uma breve introdução à estrutura de repetição PARA Sintaxe: PARA variavel Valor ATÉ ValorFinal FAÇA { AQUI VÃO OS COMANDOS A SEREM EXECUTADOS Obs: as chaves utilizadas nesta sintaxe são mais uma forma de se escrever Comentários (comentários em BLOCO), isto é, tudo o que está Entre as chaves não é interpretado como código e sim como texto. } FIMPARA Entendendo a sintaxe: O PARA é uma estrutura de repetição incondicional, isto é, uma vez iniciada será executada quantas vezes estiver estipulada no intervalo entre variável e valor final. Vejamos: PARA i 1 até 100 faça Escreva("Este laço será executado 100 vezes") FIMPARA Note que, para a utilização desta estrutura devemos utilizar uma variável inteira, que deve ser declarada como tal, na área de declaração de variáveis do Algoritmo. Assim sendo: Algoritmo Exemplo Declare i: inteiro PARA i 1 até 100 faça Escreva(?Este laço será executado 100 vezes?) FIMPARA FimAlgoritmo Veremos mais sobre a utilização desta estrutura em outros exemplos. Resolução do problema proposto com a estrutura PARA Algoritmo Pesquisa Declare Nome, EstCiv, TimeQTorce, Origem: texto Copyright (C) 1999-2000 Linux Solutions. 10 Sexo: caracter i, Idade, contMulher, contMFilhos, ContTPalmeiras: inteiro //início do algoritmo ContMulher 0 ContMFilhos 0 ContTPalmeiras 0 PARA i <-- 1 ATÉ 3000 FAÇA escreva('Digite um nome: ') leia (nome) Escreva('Digite a idade: ') leia(idade) Escreva('Digite o Sexo (F para Feminino, M para Masculino):') leia(Sexo) Escreva('Digite o Estado Civil (Solteiro(a), Casado(a): ') Leia(EstCiv) SE (sexo = 'F') or (sexo = 'f') ENTÃO ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTÃO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTÃO ContMFilhos ContMFilhos + 1 FIMSE FIMSE //fim do então SENÃO Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTÃO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do senão FIMSE Escreva('Digite a Origem (BR,US,UC...): ') leia(Origem) FIMPARA //Escrevendo os resultados Escreva("O número de Torcedores do Palmeiras é: ", ContTPalmeiras) Escreva("O número de Mulheres da Cidade é: ",ContMulher) Escreva("O número de Mulheres Casadas com mais de três filhos é: ", ContMFilhos) FIMALGORITMO Conclusão Muito bem! Este primeiro contato com um problema e estas novas técnicas deve ser bem estudada. Pois na próxima aula teremos uma análise completa deste algoritmo. Até lá! Copyright (C) 1999-2000 Linux Solutions. 11 Curso de Algoritmo - Aula V Por: Jorge Luiz E. de Souza ( 17/07/2001 ) Introdução Como prometido aqui está a análise do algoritmo da aula anterior . Vamos entender o código! Análise da estrutura PARA Primeira análise: A seção de declaração de variáveis Declare Nome, EstCiv, TimeQTorce, Origem: texto Sexo: caracter i, Idade, contMulher, contMFilhos, ContTPalmeiras: inteiro A primeira seção de um algoritmo é sempre a DECLARAÇÃO DE VARIÁVEIS. Variáveis estas, que serão utilizadas no decorrer do algoritmo. É necessária a declaração, pois se uma variável utilizada no corpo do algoritmo não estiver declarada, o algoritmo não será executado. Provavelmente ocorrerá o erro ? váriavel desconhecida ? e o programa será abortado. Segunda análise: A inicialização de variáveis Quando declaramos uma variável, simplesmente estamos reservando um espaço de memória que poderá conter qualquer valor no decorrer do algoritmo. Mas o endereço ao qual a nossa variável está apontando provavelmente contém informações deixadas por outros programas ou se tivermos sorte estará vazia. A inicialização de variáveis se faz necessária quando devemos conhecer previamente o valor de uma variável. É o caso dos contadores. Precisamos ter certeza de que o valor inicial de um contador é 0 (zero). Então iniciamos seu valor utilizando o comando de atribuição "". ContMulher 0 ContMFilhos 0 ContTPalmeiras 0 NOTA: Um detalhe muito importante que deve ser observado é o nome de uma variável. Devemos dar preferência para nomes SIGNIFICATIVOS, isto é, ao criar uma variável, escolha um nome que possibilite a vizualização de seu conteúdo simplesmente pela leitura do mesmo. Como no caso acima, onde: • ContMulher é a variável que contará todas as mulheres da pesquisa; • ContMFilhos é a variável que contará todas as mulheres casadas e com mais de três filhos; • ContTPalmeiras é a variável que contará todos os torcedores do Palmeiras da pesquisa. Terceira análise: A implementação do Para e tudo que se irá repetir em seu escopo PARA i <-- 1 ATÉ 3000 FAÇA escreva('Digite um nome: ') leia (nome) Escreva('Digite a idade: ') leia(idade) Escreva(Digite o Sexo (F para Feminino, M para Masculino): ') Copyright (C) 1999-2000 Linux Solutions. 12 E assim é para todos os SE's encadeados dentro deste último. Quinta análise: Comandos de saída (resultado do processamento) Nosso exemplo é muito simples, e sua saída não poderia ser diferente. Como utilizamos comente estruturas de contagem (CONTADORES), após a leitura ser finalizadas, simplesmente escrevemos uma frase elucidativa antes de mostrar o CONTEÚDO (somatória) das variáveis de contagem. Sexta análise: Comentário sobre as deficiencias e possíveis refinamentos Este código é um bom começo, mas apresenta algumas "falhas". Por exemplo: - Uma vez iniciada a execução, será necessário digitar contínuamente todos as 3000 fichas. Sem interrupção, isto é, sem fechar o programa. Agora, imagine se fossem 100.000 entradas! Então, o PARA é uma estrutura falha?! De maneira alguma, é uma ótima estrutura de repetição, mas devemos pensar muito bem aonde a utilizaremos dentro de um algoritmo. Em nossa próxima implementação de solução para este mesmo problema, utilizaremos uma estrutura de repetição mais flexível o ENQUANTO que nos traz mais um conceito importante em programação; as FLAGs. Conclusão O algoritmo está certo, mas a estrutura apresentada na resolução (PARA) não é adequada para esta situação (isto foi feito propositalmente, para apresentar a você a estrutura). Na próxima aula apresentaremos o mesmo algoritmo com a estrutura (ENQUANTO), mais adequada para este problema. Entenda bem a leitura (interpretação) deste código, pois na próxima somente será analisada a nova estrutura, sendo que o restante do código será o mesmo. Até a próxima! Curso de Algoritmo - Aula VI Por: Jorge Luiz E. de Souza ( 31/07/2001 ) Introdução Como prometido aqui está a nova implementação do algoritmo da aula anterior. Espero que você tenha entendido a estrutura, pois somente será analisado aqui a nova estrutura (ENQUANTO). Se você ainda tem alguma dúvida, dê uma olhada na aula anterior que possui a análise completa da estrutura. Vamos aprender mais! A estrutura ENQUANTO Algoritmo Pesquisa Declare Nome, EstCiv, TimeQTorce, Origem: texto Sexo: caracter i, Idade, contMulher, contMFilhos, ContTPalmeiras: inteiro //início do algoritmo ContMulher 0 ContMFilhos 0 ContTPalmeiras 0 escreva('Digite um nome: ') leia (nome) Copyright (C) 1999-2000 Linux Solutions. 15 ENQUANTO nome <> ?fim? FAÇA escreva('Digite um nome: ') leia (nome) Escreva('Digite a idade: ') leia(idade) Escreva(Digite o Sexo (F para Feminino, M para Masculino): ') leia(Sexo) Escreva('Digite o Estado Civil (Solteiro(a), Casado(a): ') Leia(EstCiv) SE (sexo = 'F') or (sexo = 'f') ENTÃO ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTÃO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTÃO ContMFilhos ContMFilhos + 1 FIMSE FIMSE //fim do então SENÃO Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTÃO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do senão FIMSE Escreva('Digite a Origem (BR,US,UC...): ') leia(Origem) escreva('Digite um nome: ') leia (nome) FIMENQUANTO //Escrevendo os resultados Escreva("O número de Torcedores do Palmeiras é: ", ContTPalmeiras) Escreva("O número de Mulheres da Cidade é: ",ContMulher) Escreva("O número de Mulheres Casadas com mais de três filhos é: ", ContMFilhos) FIMALGORITMO Análise do algoritmo Todas as análises são idênticas à resolução anterior, com exceção dos novos conceitos: FLAG e a estrutura enquanto. Vejamos a estrutura enquanto: Sintaxe: ENQUANTO [CONDIÇÃO] FAÇA FIMENQUANTO Copyright (C) 1999-2000 Linux Solutions. 16 A estrutura básica do ENQUANTO é a dada acima, mas uma técnica para utilização desta estrutura é a FLAG. Uma FLAG é uma condição pré-definida que determina o fim do laço ENQUANTO. Para se utilizar flags é necessário determinar qual a melhor variável deve determinar (com o seu valor no decorrer do algoritmo) a saída do laço. Isto pode variar de problema para problema, mas geralmente usamos a primeira informação, dentro de uma sequência de informações digitadas pelo usuário. Sendo assim, se esta primeira informação contiver o valor determinado como FLAG de saída, o laço é abortado e o programa continua na primeira linha do algoritmo após o final da estrutura do laço. Assim temos (no nosso exemplo): escreva('Digite um nome: ') leia (nome) ENQUANTO nome <> "fim" FAÇA // comandos a serem executados para um nome diferente de fim escreva('Digite um nome: ') leia (nome) FIMENQUANTO Notem que estamos "lendo" o nome duas vezes na estrutura. Por quê? A primeira leitura é feita FORA do laço, e serve para que o usuário possa ignorar o laço, caso ele deseje isto. Isto é, se o usuário digitar "fim" antes de entrar no laço, o laço será ignorado. Isto garante a flexibilidade do ENQUANTO. Já a segunda leitura, está dentro do laço e garante que a(s) próxima(s) interação(ções) do laço, saberá(ão) o valor da FLAG de saída. Isto é necessário, pois caso não leiamos a variável "nome" dentro do laço, ocorrerá um LOOP ETERNO, uma vez que a condição de saída NUNCA será satisfeita. Isto é, se não lemos a variável nome, não podemos atribuir a ela o valor "fim" que determina a parada do laço. É importante notar também, que a variável que está nos servindo como FLAG, dentro do laço, deve ser a última instrução a ser lida. Pois após esta leitura, se a condição de saída for satisfeita os comandos de dentro do laço não devem mais ser executados. Conclusão Com isto terminamos o nosso curso básico de algoritmos. Espero que tenham aproveitado e gostado! Futuramente, em uma segunda parte, falaremos de comandos mais avançados e resolução de problemas matemáticos através dos algoritmos. Até lá! Curso de Algoritmo - Aula VII Por: Jorge Luiz E. Souza ( 11/01/2002 ) Introdução Muito bem, como ficou acertado, veremos a resolução de exercícios matemáticos, para a escrita de algoritmos estruturados. Exemplo 1 Nosso primeiro exercício será a resolução de uma somatória de números. S = 1 + 2 + 3 + 5 + ... Copyright (C) 1999-2000 Linux Solutions. 17 Intorudção Este capítulo está direcionado para a resolução de exercícios, então, vamos à luta! OBS: O estudo detalhado e a resolução dos exercícios desta aula serão apresentados na aula seguinte. Pois o objetivo desta aula é uma avaliação de conhecimento adquirido, ou melhor, uma auto-avaliação, pois você deve tentar resolver sozinho, para poder comparar com a solução que eu darei. Boa Sorte! Exercícios Exercício 1 Fazer um algoritmo que dadas as dimensões de um retângulo, calcule a sua área e escreva na tela. Exercício 2 Fazer um algoritmo que para cada número digitado pelo usuário, calcule seu fatorial e escreva na tela. Exercício 3 Fazer um algoritimo para calcular a potência N de um numero X. Ambos serão digitados pelo usuário. E escreva na tela. Exercício 4 Dada a expressão: 2*10*2*20*2*30*2*40 1+2+3+4+5+6+7+8 Fazer um algoritmo para mostrar seu resultado. Exercício 5 Fazer um algoritmo que dados dois números, calcule a razão existente entre eles e monte uma PA de 10 termos e escreva na tela. O calculo da razão é o segundo termo menos o primeiro. Exercício 6 Tendo-se a seguinte expressão matemática: Soma = X+Y Mult= X*Y SubTotal = Mult / Soma Expressao = [(X*15)+(Y*25)+(X*35)+(Y*45)+(X*55)]/15 Total= SubTotal + Expressao Fazer um algoritmo que: 1. Leia os valores X e Y 2. Calcule a soma e a multiplicacao destes valores e armazene em SubTotal 3. Calcule expressao e armazene a última operação de soma na variável Total Ao final do programa, listar na tela os valores, da seguinte maneira: Exercício 6 Valores digitados pelo usuário "VALOR DE X"; "VALOR DE Y" Subtotal : "VALOR DO SUBTOTAL"; Expressão: "VALOR DA EXPRESSÃO"; Total:"Valor total"; Copyright (C) 1999-2000 Linux Solutions. 20 Curso de Algoritmo - Aula IX Por: Jorge Luiz E. Sousa ( 29/01/2002 ) Introdução Como prometido aqui estão as soluções dos exercícios apresentados na aula anterior . Solução dos exercícios. Confira! Exercício 1 Fazer um algoritmo que dadas as dimensões de um retângulo, calcule a sua área e escreva na tela. Algoritmo Declare //Inicio do algoritmo //Obtendo os dados do usuário Escreva('Digite o valor da base do retângulo: ') Leia(Base) Escreva('Digite o valor da altura do retângulo: ') Leia(Altura) //Calculando a área Area <- Base * altura Escreva('A área é: ',Area) FimAlgoritmo Análise do algorítmo acima: Primeira análise: Este algoritmo é muito simples, sendo necessário apenas uma fórmula para sua solução. não há o que comentar... qualquer dúvida contacte-me. Exercício 2 Fazer um algoritmo que para cada número digitado pelo usuário, calcule seu fatorial e escreva na tela. Algoritmo Declare //Inicio do algoritmo //Obtendo dados do usuário para entrar no laço ou não Escreva ('Digite um número, ou 0 para sair(o fatorial de 0 é 1.)')') Leia (Numero) //Inicializando variáveis i<- Numero Fatorial<- 1 Enquanto Numero <> 0 faça Para i<- 1 até Numero Faça Copyright (C) 1999-2000 Linux Solutions. 21 Se i<>0 então Fatorial<- Fatorial * i i<- i-1 FimPara Escreva('O fatorial de ',Numero,' é ',Fatorial) //Obtendo dados do usuário para continuar ou sair do laço Escreva('Digite um número, ou 0 para sair(o fatorial de 0 é 1.)')') Leia(Numero) FimEnquanto FimAlgoritmo Análise do algorítmo acima: Primeira análise. Para se calcular o fatorial de um número, é necessário multiplicá-lo pelos seus predessessores até se chegar ao 1. Por tanto, o fatorial de 5 é 5*4*3*2*1. Com base nisto, chega-se a conclusão de que uma estrutura PARA resolve o problema, visto que temos o valor inicial e o ponto de parada. Segunda análise. Como em algoritmo a estrutura PARA somente "anda para frente", devemos utilizar uma variável auxiliar para decrementar o número, assim poderemos chegar ao valor desejado, testando se o decremento chegou a zero por precaução. Exercício 3 Fazer um algoritimo para calcular a potência N de um numero X. Ambos serão digitados pelo usuário. E escreva na tela. Algoritmo Declare //Inicio do algoritmo //Obtendo os dados do usuário Escreva('Digite a base:') Leia(Base) Escreva('Digite o expoente:') Leia(Expoente) //Inicializando variável resultado Resultado<- Base //Calculando Se Expoente = 0 então Resultado<-1 senão Se base = 0 então Resultado <- 0 senão PARA i<- 1 até (Expoente -1) FAÇA Resultado<- Resultado * Expoente FimPARA FimSe FimSe Copyright (C) 1999-2000 Linux Solutions. 22 Total= SubTotal + Expressao Fazer um algoritmo que: 1. Leia os valores X e Y 2. Calcule a soma e a multiplicação destes valores e armazene em SubTotal 3. Calcule expressão e armazene a última operação de soma na variável Total Ao final do programa, listar na tela os valores, da seguinte maneira: Exercício 6 Valores digitados pelo usuário "VALOR DE X"; "VALOR DE Y" Subtotal : "VALOR DO SUBTOTAL"; Expressão: "VALOR DA EXPRESSÃO"; Total:"Valor total"; Algoritmo Declare //Inicio do algoritmo //Obtendo os números do usuário Escreva('Digite o primeiro número') leia(X) Escreva('Digite o Segundo número') Leia(Y) Soma <- X + Y Mult <- X * Y SubTotal <- Mult / Soma Expressao <- 0 i<-15 j<- 1 Enquanto i <= 55 faça Par<- J mod 2 Se (par = 0) Então Expressao <- Expressao + (X*i) Senão Expressao <- Expressao + (Y*i) FimSe i<- i + 10 Fim Enquanto Expressao<-Expressao/15 Total <- SubTotal + Expressao Escreva('Exercicio1') Escreva('') //isto escreve uma linha vazia Escreva('') //isto escreve uma linha vazia Escreva('Os valores digitados pelo usuário são:X=',X,' Y= ',Y) Escreva('SubTotal= ',SubTotal) Escreva('Expressão= ',Expressao) Escreva('O valor total dos calculos é:', Total) FimAlgoritmo Análise do algoritmo acima: Primeira análise O problema apresentado neste exercício e no anterior, devem ser resolvidos em partes, assim, na sequência temos a solução da primeira expressão, da segunda, do subtotal e o calculo da expressão. Segunda análise Copyright (C) 1999-2000 Linux Solutions. 25 Sobre o calculo da expressão: Expressao <- 0 i<-15 j<- 1 Enquanto i <= 55 faça Par<- J mod 2 Se (par = 0) Então Expressao <- Expressao + (X*i) Senão Expressao <- Expressao + (Y*i) FimSe i<- i + 10 Fim Enquanto Expressao<-Expressao / 15 Vejamos: 1. a inicialização da variável "Expressao" com zero é para que ele esteja "limpa" quando receber o primeiro valor. 2. a variável "i" recebendo 15 servirá para o incremento dos valores 15,25,35... 3. a variável "Par" receberá o valor do resto da divisão de j por 2, e definirá se o número é par ou impar. Portanto, quando for inpar multiplicaremos "i" por "X" e quando for par, multiplicaremos por "Y". 4. quando sairmos do laço, a expressão estará pronta para ser dividida por 15. Conclusão Com estes exercícios, terminamos este módulo. No próximo, veremos mais estruturas, ainda não apresentadas, como vetores e matrizes. Até mais! Se você conseguiu fazer todos os exercícios, Parabéns! Se não, não fique triste, você pode revisar as aulas e tentar de novo. Curso de Algoritmo - Aula X Por: Jorge Luiz E. Sousa ( 15/02/2002 ) Introdução Olá, comunidade! Hoje começa uma nova faze do curso, onde veremos algumas estruturas novas e muito importantes para programação. São chamadas VETORES. Definição São estruturas unidimensionais e homogêneas capazes de armazenar um número determinado de variáveis e referenciálas utilizando uma estrutura de índice. De acordo com esta descrição, vejamos um exemplo: Exemplo de um vetor de 8 (oito) posições 5 15 25 100 0 21 35 50 Exemplo de um vetor de 8 (oito) posições 'JLes' 'Exemplo' 'de' 'VETORES' '' '' '' '' Observe nas estruturas acima, que: Copyright (C) 1999-2000 Linux Solutions. 26 • No primeiro exemplo temos um vetor numérico • No segundo temos um vetor literal • Os dois exemplos estão totalmente preenchidos • O primeiro vetor foi inicializado com zeros • O segundo vetor foi inicializado com '' (espaços/vazio) • Ambos são homogêneos, isto é, seu conteúdo é do mesmo tipo • Ambos são unidimencionais, um índice basta para referenciar as posições do vetor. Com a explicação acima, concluimos que vetores são variáveis com múltiplas posições. Sintaxe A sintaxe de declaração de variáveis para vetores é: Declare <NomeDaVariável> : Vetor [INI .. FIM] TipoDoVetor Onde: • Declare é a palavra reservada para declaração de variáveis (sempre no início do Algoritmo) • <NomeDaVariável> : é o nome dado pelo usuário para a variável • Vetor é a palavra reservada para definir que uma variável é do tipo VETOR • [INI .. FIM] define a quantidade de ítens de um vetor • TipoDoVetor define o tipo de variável que o vetor vai armazenar. Exemplo: Declare vetNome : vetor [1..50] literal Declare vetSalario : vetor [1..50] numérico inteiro Características • Unidimensionais, • Homogêneos, • Um mesmo indice pode acessar valores em vários vetores distintos, desde que haja uma relação entre eles e sejam "do mesmo tamanho". • Ao tentar acessar uma posição inexistente, ocorrerá um erro no programa. • Vetores só existem na memória do computador e durante a execução de um programa ou "PROCEDIMENTO", não sendo estruturas para armazenamento permanente. Obs.: PROCEDIMENTOS e FUNÇÕES serão matéria de aulas futuras Referência Para acessar uma determinada posição do vetor, será necessário informar o nome do vetor e a posição desejada. Exemplo: NomeAtual <- vetNome[40] SalarioAtual <- vetSalario[40] Aplicação Copyright (C) 1999-2000 Linux Solutions. 27 'JLes' 'Exemplo' 'de' 'MATRIZES' '' '' '' '' 'JLes' 'Exemplo' 'de' 'MATRIZES' '' '' '' '' Observe nas estruturas acima, que: • No primeiro exemplo temos uma matriz numérica • No segundo temos uma matriz literal • Os dois exemplos estão totalmente preenchidos • O primeiro vetor foi inicializado com zeros • O segundo vetor foi inicializado com '' (espaços/vazio) • Ambos são homogêneos, isto é, seu conteúdo é do mesmo tipo (numérico e literal respectivamente) • Ambos são bidimencionais, dois índice serão necessários para referenciar as posições da matriz. Com a explicação acima, concluimos que matrizes são "variáveis com multiplas posições e duas dimensões (plano carteziano x e y)". Sintáxe A sintáxe de declaração de variáveis para vetores é: Declare <NomeDaVariável> : Vetor [INI .. FIM, INI .. FIM] TipoDoVetor Onde: • Declare é a palavra reservada para declaração de variáveis (sempre no início do Algoritmo) • <NomeDaVariável> : é o nome dado pelo usuário para a variável • Vetor é a palavra reservada para definir que uma variável é do tipo VETOR • [INI .. FIM, INI .. FIM] define a quantidade de linhas e colunas de um vetor bidimensional (matriz) • TipoDoVetor define o tipo de variável que o vetor vai armazenar. Exemplo: Declare vetPessoa : vetor [1..50, 1..2] literal (matriz quadarada 50x50) Características Bidimensionais, homogêneos, um mesmo indice pode acessar valores em vários vetores distintos, desde que haja uma relação entre eles e sejam "do mesmo tamanho". Ao tentar acessar uma posição inexistente, ocorrerá um erro no programa. Vetores (uni, bi e multi*) só existem na memória do computador e durante a execução de um programa ou "PROCEDIMENTO", não sendo estruturas para armazenamento permanente. multi* existem linguagens de programação que permitem a criação de vetores multidimensionais. Vetores com 3 indices que seriam referênciados como matrizes sobrepostas, mas não é usual. Obs.: PROCEDIMENTOS e FUNÇÕES serão matéria de aulas futuras Referência Para acessar uma determinada posição do vetor, será necessário informar o nome do vetor e a posição desejada. Exemplo: Copyright (C) 1999-2000 Linux Solutions. 30 NomeAtual <- vetPessoa[40,1]T TelefoneAtual <- vetPessoa[40,2] Aplicação Estas estruturas são utilizadas para armazenar temporáriamente vários valores relacionados. Estamos utilizando o mesmo exemplo anterior, somente mostrando a diferença de acesso entre vetores e matrizes (vetores bidimensionais), "SIMULANDO EM MEMÓRIA", o armazenamento de informações, para referência futura. Exemplo Como exemplo, vamos criar uma agenda virtual, que durante sua execução, armazenará: Nome, Telefone, endereço e e-mail de 100 pessoas. Algoritmo Declare Pessoa:vetor[1..100, 1..4]literal Indice1, Indice2: numérico inteiro //Início do algoritmo //Inicializando indice Indice<-1 //Inicializando vetores Para i <-1 até 100 Faça Para j <-1 até 4 Faça Pessoa[i,j]<-'' FimPara //Obtendo dados do usuário FimPara //Obtendo dados do usuário j=1; Para i <-1 até 100 Faça Escreva('Digite o nome:') Leia(Pessoa[i,j]) Escreva('Digite o Endereco') Leia(Pessoa[i,j+1]) Escreva('Digite o Telefone') Leia(Pessoa[i,j+2]) Escreva('Digite o e-mail') Leia(Pessoa[i,j+3]) FimPara //Listando todos os registros em sequência Para i <-1 até 100 Faça Para j <-1 até 4 Faça Escreva(Pessoa[i,j]) Copyright (C) 1999-2000 Linux Solutions. 31 Escreva(Pessoa[i,j]) Escreva(Pessoa[i,j]) Escreva(Pessoa[i,j]) FimPara FimPara FimAlgoritmo Análise do algoritmo exemplo Primeira Análise Já está melhorando, observe que na aula anterior sobre vetores unidimensionais, precisamos criar uma estrutura para cada informação a respeito de uma pessoa, a saber: nome, endereço, e-mail e telefone. Com uma matriz, podemos simular um arquivo em memória. Sendo necessária somente uma matriz, para armazenar todos estes dados. Análogamente à um arquivo, as linhas da matriz seriam os registros, e as células da matriz seriam os campos. Observe que com este novo conceito a programação se torna mais abstrata, pois você como programador deve saber em sua mente, que coluna armazeana a informação de que você precisa. Segunda Análise Note que a mesma estrutura "PARA" foi utilizada para todos os processos, com uma diferença quando da leitura dos "registros" (linhas da matriz). No "PARA " de leitura, a variável "j" foi inicializada antes de entrar no laço e utilizada para referenciar as colunas da linha que armazenarão cada informação. NOTE QUE, o j não é incrementado em valor, dentro da estrutura, isto é seu valor não aumenta, é sempre 1. O que fizemos foi "incrementálo" como índice, sem que ele recebece seu próprio valor incrementado, assim, para cada linha ele continuará sendo "1", mas em cada leitura referenciará uma coluna diferente. Este conceito foi implementado aqui, para lhe dar uma noção de como utilizar os indices, existem várias outras formas de se fazer isto. Terceira análise O algoritmo, por utilizar a estrutura para, quando estiver no segundo laço (obtenção dos dados), não vai parar antes de ler todos os 100 registros, que agora equivalem a 100 x 4, isto é 400 leituras. Isto pode ser muito cansativo e é desagradável pensar que estes dados serão perdidos assim que se chegar ao fim do algoritmo. Quarta análise Vetores são estruturas interessantes e úteis, mas não para uma agenda. sendo que a melhor utilização desta estrutura seria, como forma, por exemplo, de guardar os últimos 100 registros lidos de um banco de dados na memória para acesso imediato. Desta maneira, o acesso a disco (que é lento), seria feito "uma vez somente", e os dados seriam acessados a partir da memória, que é muito mais eficiente e rápido. Conclusão Com o decorrer do curso, utilizaremos este mesmo algoritmo, melhorando-o a cada novo recurso aprendido. Ao final, teremos um algoritmo de agenda completo, com arquivamento em disco e tudo o que mais for de direito de uma agenda, inclusive o Programa codificado em pascal para DOS, utilizando a interface do Delphi para implementação. Copyright (C) 1999-2000 Linux Solutions. 32
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved