Ferramentas de Usuário

Ferramentas de Site


algoritmo:tutorial

Diferenças

Esta página mostra as diferenças entre as duas revisões da página.

Links para esta vista de comparação

Ambos os lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
algoritmo:tutorial [2011/07/06 17:42]
thoga31
algoritmo:tutorial [2021/05/13 10:42] (Atual)
Linha 1: Linha 1:
-<note importante>**O presente tutorial está em construção, por favor não o edites enquanto não estiver concluído.**\\ 
-Obrigado.</note> 
- 
 ====== Tutorial de Introdução à Lógica e Algoritmia ====== ====== Tutorial de Introdução à Lógica e Algoritmia ======
  
-Este tutorial tem o objectivo de dar algumas bases nestas duas disciplinas para iniciantes à programação.\\+Este tutorial tem o objectivo de dar algumas bases nestas duas disciplinas para iniciantes à programação.
 Sendo que a programação está assente na algoritmia, e a algoritmia está assente na lógica, como se verá ao longo deste pequeno tutorial, este torna-se de extrema importância para se entender muitos "porquês" da programação que os //beginners// muitas vezes colocam. Sendo que a programação está assente na algoritmia, e a algoritmia está assente na lógica, como se verá ao longo deste pequeno tutorial, este torna-se de extrema importância para se entender muitos "porquês" da programação que os //beginners// muitas vezes colocam.
-\\+
 ====== Lógica ====== ====== Lógica ======
-De forma resumida, a lógica é o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um instrumento do pensar.((//in// [[http://pt.wikipedia.org/wiki/L%C3%B3gica|Wikipédia]].))\\+De forma resumida, a lógica é o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um instrumento do pensar.((//in// [[http://pt.wikipedia.org/wiki/L%C3%B3gica|Wikipédia]].)) 
 + 
 +Nesta parte vamos entender os operadores lógicos básicos - **E**, **OU** e **OU... OU...** - recorrendo às **Tabelas de Verdade**.
  
-Nesta parte vamos entender os operadores lógicos básicos - **E**, **OU** e **OU... OU...** - recorrendo às **Tabelas de Verdade**.\\ 
-\\ 
 ===== Proposições e condições ===== ===== Proposições e condições =====
 De forma muito resumida, seguem-se três exemplos simples e perceptíveis: De forma muito resumida, seguem-se três exemplos simples e perceptíveis:
Linha 17: Linha 14:
   * **Proposição:** O João gosta de ir à praia e ao campo.   * **Proposição:** O João gosta de ir à praia e ao campo.
   * **Condição:** O João gosta de ir à praia se estiver bom tempo.   * **Condição:** O João gosta de ir à praia se estiver bom tempo.
-\\+
 ===== Tabela de Verdade ===== ===== Tabela de Verdade =====
-Numa Tabela de Verdade são analisadas todas as hipóteses de resposta a um problema lógico, desde o mais simples ao mais complexo, sendo mesmo a base das bases da investigação criminal forense.\\ +Numa Tabela de Verdade são analisadas todas as hipóteses de resposta a um problema lógico, desde o mais simples ao mais complexo, sendo mesmo a base das bases da investigação criminal forense. 
-São lançadas as hipóteses de forma lógica, unindo as **sentenças** em **proposições** e relacionando estas últimas em **condições**. Um exemplo simples e __sem fundamentação forense__:\\ +São lançadas as hipóteses de forma lógica, unindo as **sentenças** em **proposições** e relacionando estas últimas em **condições**. Um exemplo simples e __sem fundamentação forense__: 
-//O João é culpado se a arma do crime tiver as impressões digitais dele. Ou a arma é uma faca se as impressões digitais forem as dextras, ou então é uma pistola se ele praticar carreira de tiro.//\\ +//O João é culpado se a arma do crime tiver as impressões digitais dele. Ou a arma é uma faca se as impressões digitais forem as dextras, ou então é uma pistola se ele praticar carreira de tiro.// 
-A Tabela de Verdade tem a seguinte estrutura básica:\\+A Tabela de Verdade tem a seguinte estrutura básica:
 ^  proposição 1 (p)  ^  proposição 2 (q)  ^  Resultado com o operador lógico X (p X q)  ^ ^  proposição 1 (p)  ^  proposição 2 (q)  ^  Resultado com o operador lógico X (p X q)  ^
 |  V  |  V  |  V X V  | |  V  |  V  |  V X V  |
Linha 28: Linha 25:
 |  F  |  V  |  F X V  | |  F  |  V  |  F X V  |
 |  F  |  F  |  F X F  | |  F  |  F  |  F X F  |
-Havendo duas proposições, há quatro hipóteses de conjugação conforme os valores lógicos da proposição.\\+Havendo duas proposições, há quatro hipóteses de conjugação conforme os valores lógicos da proposição.
 Havendo N proposições num enunciado lógico como o anterior, vão existir <m>2^N</m> combinações. Neste caso, havendo 2 proposições, existem <m>2^2=4</m> combinações. Havendo N proposições num enunciado lógico como o anterior, vão existir <m>2^N</m> combinações. Neste caso, havendo 2 proposições, existem <m>2^2=4</m> combinações.
-<note normal>**Valor lógico:** Verdadeiro, Falso.\\+<note normal>**Valor lógico:** Verdadeiro, Falso.
 Uma proposição só pode tomar um valor lógico - não pode ser V e F ao mesmo tempo!</note> Uma proposição só pode tomar um valor lógico - não pode ser V e F ao mesmo tempo!</note>
-\\+
 ===== Operadores lógicos ===== ===== Operadores lógicos =====
-==== E ==== +==== E - Conjunção ==== 
-//O João gosta de praia **e** do campo.//\\ +//O João gosta de praia **e** do campo.// 
-Ou seja, o João gosta de **ambas** as coisas, a praia e o campo.\\ +Ou seja, o João gosta de **ambas** as coisas, a praia e o campo. 
-\\+
 ^  p  ^  q  ^  <m>p~wedge~q</m>  ^ ^  p  ^  q  ^  <m>p~wedge~q</m>  ^
 |  V  |  V  |  V  | |  V  |  V  |  V  |
Linha 43: Linha 40:
 |  F  |  V  |  F  | |  F  |  V  |  F  |
 |  F  |  F  |  F  | |  F  |  F  |  F  |
-Só é verdadeiro quando ambas as proposições são verdadeiras.\\ +Só é verdadeiro quando ambas as proposições são verdadeiras. 
-\\ + 
-==== OU ==== +==== OU - Disjunção ==== 
-//O João gosta de praia **ou** do campo//\\ +Também denominada de **Disjunção inclusiva**. 
-Isto é, o João gosta ou da praia, ou do campo ou de __ambos__.\\ + 
-^  p  ^  q  ^  p OU q  ^+//O João gosta de praia **ou** do campo// 
 +Isto é, o João gosta ou da praia, ou do campo ou de __ambos__. 
 +^  p  ^  q  ^  p q  ^
 |  V  |  V  |  V  | |  V  |  V  |  V  |
 |  V  |  F  |  V  | |  V  |  F  |  V  |
 |  F  |  V  |  V  | |  F  |  V  |  V  |
 |  F  |  F  |  F  | |  F  |  F  |  F  |
-Só é falso quando ambas as proposições são falsas.\\ +Só é falso quando ambas as proposições são falsas. 
-\\ + 
-==== OU... OU... ==== +==== OU... OU... - Disjunção exclusiva ==== 
-//O João ou gosta de praia ou gosta de campo.//\\ +//O João ou gosta de praia ou gosta de campo.// 
-Ou seja, O João gosta de um só destes ambientes, e não dos dois ao mesmo tempo: __ou um ou outro__.\\ +Ou seja, O João gosta de um só destes ambientes, e não dos dois ao mesmo tempo: __ou um ou outro__. 
-^  p  ^  q  ^  OU OU q  ^+^  p  ^  q  ^  p ⊕ q  ^
 |  V  |  V  |  F  | |  V  |  V  |  F  |
 |  V  |  F  |  V  | |  V  |  F  |  V  |
 |  F  |  V  |  V  | |  F  |  V  |  V  |
 |  F  |  F  |  F  | |  F  |  F  |  F  |
-É falso quando as proposições têm o mesmo valor lógico.\\ +É falso quando as proposições têm o mesmo valor lógico. 
-\\+
 ===== Condições ===== ===== Condições =====
 ==== Implicação ==== ==== Implicação ====
-//**Se** o João gosta de ir à praia, **então** gosta do mar.//\\+//**Se** o João gosta de ir à praia, **então** gosta do mar.//
 ^  p  ^  q  ^  <m>p~doubleright~q</m>  ^ ^  p  ^  q  ^  <m>p~doubleright~q</m>  ^
 |  V  |  V  |  V  | |  V  |  V  |  V  |
Linha 73: Linha 72:
 |  F  |  V  |  V  | |  F  |  V  |  V  |
 |  F  |  F  |  V  | |  F  |  F  |  V  |
-<note normal>**NOTA:** "Verdadeiro implica falso" é falso.\\+<note normal>**NOTA:** "Verdadeiro implica falso" é falso.
 Mas "Falso implica verdadeiro" é uma condição verdadeira.</note> Mas "Falso implica verdadeiro" é uma condição verdadeira.</note>
-\\+
 ==== Equivalência ==== ==== Equivalência ====
-//O João gosta de praia **se e só se** gosta de mar.//\\+Também chamada de **Implicação dupla** ou **bi-implicação**. 
 + 
 +//O João gosta de praia **se e só se** gosta de mar.//
 ^  p  ^  q  ^  <m>p~doubleleftright~q</m>  ^ ^  p  ^  q  ^  <m>p~doubleleftright~q</m>  ^
 |  V  |  V  |  V  | |  V  |  V  |  V  |
Linha 84: Linha 85:
 |  F  |  F  |  V  | |  F  |  F  |  V  |
 Ou seja, só é verdade quando ambas as proposições tiverem o mesmo valor lógico - só assim as proposições **equivalem** uma à outra. Ou seja, só é verdade quando ambas as proposições tiverem o mesmo valor lógico - só assim as proposições **equivalem** uma à outra.
-\\+
 ===== Outras operações lógicas ===== ===== Outras operações lógicas =====
 ==== Negação ==== ==== Negação ====
-Esta é uma operação muito básica que, simplesmente, **nega** o resultado lógico de uma proposição ou condição.\\+Esta é uma operação muito básica que, simplesmente, **nega** o resultado lógico de uma proposição ou condição.
 ^  p  ^  ~<m>p</m>  ^ ^  p  ^  ~<m>p</m>  ^
 |  V  |  F  | |  V  |  F  |
Linha 93: Linha 94:
 //O João **não** gosta de ir à praia __e__ gosta de de mar.// - ~<m>p~wedge~q</m> //O João **não** gosta de ir à praia __e__ gosta de de mar.// - ~<m>p~wedge~q</m>
 <note normal>**Dupla negação:** ~~<m>p~doubleleftright~p</m></note> <note normal>**Dupla negação:** ~~<m>p~doubleleftright~p</m></note>
-\\+
 ==== Igualdade e diferença ==== ==== Igualdade e diferença ====
 Sem negação: Sem negação:
   * <m>2+2~=~4</m> - verdadeiro   * <m>2+2~=~4</m> - verdadeiro
   * <m>2-5~<>~-3</m> - falso   * <m>2-5~<>~-3</m> - falso
-\\+
 Com negação: Com negação:
   * ~<m>(5+6~=~11)</m> - falso   * ~<m>(5+6~=~11)</m> - falso
   * ~<m>(3-1~<>~2)</m> - verdadeiro   * ~<m>(3-1~<>~2)</m> - verdadeiro
  
-\\+
 ==== Maior do que, menor do que, maior ou igual que, menor ou igual que ==== ==== Maior do que, menor do que, maior ou igual que, menor ou igual que ====
   * <m>5~>~9</m> - falso   * <m>5~>~9</m> - falso
Linha 109: Linha 110:
   * ~<m>((3+pi)~>=~6)</m> - falso   * ~<m>((3+pi)~>=~6)</m> - falso
   * ~<m>((1/e)~<=~(1/pi))</m> - verdadeiro   * ~<m>((1/e)~<=~(1/pi))</m> - verdadeiro
-\\ + 
-===== Principais Leis de Morgan ===== +===== Principais Leis De Morgan ===== 
-  * ~<m>(p~wedge~q)~doubleleftright~</m>~<m>p~</m>OU ~<m>q</m> +  * ~<m>(p~wedge~q)~doubleleftright~</m>~<m>p~v~</m>~<m>q</m> 
-  * ~<m>(p~</m>OU<m>~q)~doubleleftright~</m>~<m>p~wedge~</m>~<m>q</m> +  * ~<m>(p~v~q)~doubleleftright~</m>~<m>p~wedge~</m>~<m>q</m> 
-\\+
 ====== Algoritmia ====== ====== Algoritmia ======
 +Um **algoritmo** é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita.((//in// [[http://pt.wikipedia.org/wiki/Algoritmo|Wikipédia]]))
 +Ou seja, um algoritmo é um caminho bem definido para se resolver um determinado problema. Por exemplo:
 +^  Problema  ^  Algoritmo Geral  ^
 +|  Multiplicar 36 por 2  |  Alg. da Multiplicação: <m>matrix{2}{2}{~ 36 ~*~ 2} / matrix{1}{2}{~ 72}</m>  |
 +|  Ordenar lista de forma crescente: <m>{7,~3,~6}</m>  |  Alg. de Ordenação (Crescente): <m>{3,~6,~7}</m>  |
  
-\\ 
 ===== Representação de Algoritmos ===== ===== Representação de Algoritmos =====
 +Um algoritmo tem uma representação para que possa ser facilmente interpretado. Antes de se programar, os problemas devem ser estudados para se chegar a um algoritmo-solução. Este será representado num esquema, chamada **Fluxograma**, ou então escrito na linguagem-mãe (no nosso caso, Português) ou numa mistura desta com a linguagem de programação a que nos propomos resolver o dito problema.
 +Vamos então analisar um algoritmo muito simples que resolve o seguinte problema:
 +//Dados dois números, inteiros, inseridos pelo utilizador, dizer qual é o maior, ou então se são iguais.//
  
-\\ 
 ==== Fluxograma ==== ==== Fluxograma ====
 +Vamos resolver o problema anterior segundo o algoritmo tradicional: análise caso-a-caso, que com este problema é totalmente viáveis pois basta analisar duas situações, segundo esta ordem:
 +  * Se num1 é maior que num2, mostra num1...
 +  * Caso contrário, se num2 é que é maior que num1, então mostra num2...
 +  * Por fim, se num1 não é o maior e num2 também o não é, conclui-se que só podem ser iguais.
 +
 +Um fluxograma respeita uma norma geral que pode ser adaptada por cada pessoa. A imagem seguinte mostra o algoritmo de resolução do problema proposto seguindo a norma geral dos fluxogramas. No canto superior direito da imagem está uma pequena legenda, que inclui símbolos não incluídos no esquema.
 +
 +
 +{{ :algoritmo:fluxograma.jpg?nolink& |Fluxograma}}
 +
 +De notar que cada "caminho" é chamado de **fluxo**, e no final do programa reconhecem-se três fluxos que são unidos antes de se dar o fim do programa: o símbolo é um círculo e denomina-se **conector de fluxos**.
 +Na prática, na programação não se nota esta conexão de fluxos, mas na teoria, havendo a um determinado ponto vários caminhos possíveis, eles unem-se sempre, pelo menos no fim do programa. Esta união pode ocorrer noutro ponto e pode reunir apenas alguns dos N fluxos que existam - vários conectores podem existir.
 +Pontos em que um fluxo se divide são quase sempre Condições, excepto nos Ciclos que, em si, têm dois fluxos: o fluxo das acções a processar dentro do ciclo e um fluxo de retoma do ciclo no caso de a condição de paragem não for satisfeita. Esta é a teoria básica de fluxos nas Estruturas de Repetição.
  
-\\ 
 ==== Pseudo-código ==== ==== Pseudo-código ====
 +   Início Programa
 +      Ler num1
 +      Ler num2
 +      Se (num1>num2) Então
 +         Escrever "O maior é: " & num1
 +      SeNão
 +         Se (num1<num2) Então
 +            Escrever "O maior é: " & num2
 +         SeNão
 +            Escrever "São iguais."
 +         Fim Se   
 +      Fim Se
 +   Fim Programa
  
-\\ 
 ===== Alguns algoritmos ===== ===== Alguns algoritmos =====
 ==== Algoritmo de ordenação ==== ==== Algoritmo de ordenação ====
-Ver o Capítulo 5 da Parte II do nosso Tutorial de Pascal: [[dev_geral:pascal:tutorial_2010:parte_2#ordenacao_crescente_de_uma_lista_uso_do_ciclo_for_to_do|Ordenação crescente de uma lista]].\\+Ver o Capítulo 5 da Parte II do nosso Tutorial de Pascal: [[dev_geral:pascal:tutorial:parte_2#ordenacao_crescente_de_uma_lista_uso_do_ciclo_for_to_do|Ordenação crescente de uma lista]].
 Aproveita e vê como pode ser programado recorrendo a Pascal. ;-) Aproveita e vê como pode ser programado recorrendo a Pascal. ;-)
-\\+
 ==== Grafos ==== ==== Grafos ====
-Ver o artigo da **Revista PROGRAMAR**: Parte 1((indisponível - faça o download da [[http://www.revista-programar.info/?action=editions&type=viewmagazine&n=10|edição nº10]] da Revista.)) e [[revistaprogramar_arquivo:12_edicao:grafos_2|Parte 2]]. +Ver o artigo da **Revista PROGRAMAR**: [[https://www.revista-programar.info/artigos/grafos-1a-parte/|Parte 1]] e [[https://www.revista-programar.info/artigos/grafos-2a-parte/|Parte 2]]. 
-\\+
 ==== Algoritmos de pesquisa ==== ==== Algoritmos de pesquisa ====
-Vê o documento completo [[algoritmo:pesquisa_binaria|Algoritmos de pesquisa]]. +Ver o documento completo [[algoritmo:pesquisa_binaria|Algoritmos de pesquisa]]. 
-\\ + 
-====== Autor ====== +{{tag>algoritmo}} 
-O autor original, [[http://www.portugal-a-programar.org/forum/index.php?action=profile;u=16107|thoga31]].+
algoritmo/tutorial.1309974131.txt.gz · Última modificação em: 2018/05/14 21:37 (edição externa)