sexta-feira, 11 de outubro de 2024

O que é e qual o objetivo da inteligência artificial

Inteligência artificial (IA) é um campo de estudo da TI que desenvolve sistemas capazes de simular a inteligência humana a partir de máquinas e outras ferramentas tecnológicas. O objetivo é desenvolver softwares capazes de aprender, raciocinar e tomar decisões, de maneira similar à que ocorre com a mente humana.

Pode parecer coisa de ficção científica, mas fato é que atualmente já convivemos com a inteligência artificial no nosso dia a dia, mesmo sem nos dar conta disso.

Quem tem dispositivos Apple como o Iphone pode interagir com a Siri. A Amazon desenvolveu a Alexa. O Bradesco oferece apoio da assistente virtual Bia. 

Esses são apenas alguns exemplos da inteligência artificial no nosso dia a dia, mas existem muitos outros.

terça-feira, 14 de fevereiro de 2023

Estrutura de Dados - Listas Lineares

 

Lista linear é uma estrutura de dados na qual elementos de um mesmo tipo de dado estão organizados de maneira sequencial. Não necessariamente, estes elementos estão fisicamente em sequência, mas a ideia é que exista uma ordem lógica entre eles. 

Um exemplo disto seria um consultório médico: as pessoas na sala de espera estão sentadas em qualquer lugar, porém sabe-se quem é o próximo a ser atendido, e o seguinte, e assim por diante. Assim, é importante ressaltar que uma lista linear permite representar um conjunto de dados afins (de um mesmo tipo) de forma a preservar a relação de ordem entre seus elementos.

quarta-feira, 17 de agosto de 2022

Algoritmos de Ordenação

 

Os problemas de ordenação são comuns tanto em aplicações comerciais quanto científicas. Entretanto, raro são os problemas que se resumem à pura ordenação de sequências de elementos. Normalmente, os problemas de ordenação são inseridos em problemas de pesquisa, intercalação e atualização. Isto torna ainda mais importante o projeto e a construção de algoritmos eficientes e confiáveis para tratar o problema.

O nosso objetivo é analisar os seguintes tipos de ordenação :

a. Selection Sort

b. Bubble Sort

c. Insertion Sort

d. Selection Sort

Algoritmos de Pesquisa Sequencial e Binária

A capacidade de armazenar informações foi um passo decisivo na evolução da ciência da computação e para o nível generalizado de utilização do computador. Com isso, a capacidade de recuperar informações, para posterior processamento, assume papel de suma importância na utilização cotidiana do computador, existindo para isto inúmeros exemplos, como: recuperação de dados de dados de transações bancárias de um cliente através de um número de conta, no cadastro de cliente/operações de um banco. Portanto, algoritmos de pesquisa devem ser projetados de forma a garantir a confiabilidade e eficiência exigidas pela importância das aplicações existentes.

A pesquisa de dados pode ser efetuada tanto em unidades de memória secundárias (disco rígido, disquetes, fita), quanto na memória principal do computador. 

ALGORÍTMO ESTRUTURADO - MODULARIZAÇÃO

 

A modularização consiste num método para facilitar a construção de grandes programas, através de sua divisão em pequenas etapas, que são : módulos, rotinas, sub-rotinas ou sub-programas. Permitindo o reaproveitamento de código, já que podemos utilizar um módulo quantas vezes for necessário, eliminando assim a necessidade de escrever o mesmo código em situações repetitivas.

Procedimentos - Um procedimento é um bloco de código precedido de um cabeçalho que contém o Nome do procedimento e seus parâmetros. Com isto, podemos fazer referência ao bloco de código de qualquer ponto do algoritmo através do seu nome e passando os seus parâmetros. 

Declaração :

Procedimento NomeDoProcedimento [(parâmetros)] 

Variáveis 

Inicio

Comandos;

Fim;

Onde, parâmetros representam as variáveis que devem ser passadas ao procedimento. Os parâmetros podem ser de : ENTRADA (passado por valor) ou de ENTRADA/SAÍDA (passado por referência). Os parâmetros de ENTRADA não podem ser alterados pelo procedimento, para que isso seja possível o parâmetro deve ser de ENTRADA/SAÍDA Para indicar que um parâmetro é de ENTRADA/SAÍDA devemos colocar a palavra VAR antes da sua declaração.

Algoritmo estruturado - Tipos de Dados

 Estruturas formadas por um conjunto de variáveis, permitindo modelar de forma mais natural os dados.

VETOR: estrutura formada por um conjunto unidimensional de dados de mesmo tipo (homogêneo) e possuindo número fixo de elementos (Estático). 

Na declaração dos vetores devemos informar o seu nome, seu tipo (inteiro, real, caracter, ...), e seu tamanho (número de elementos). 

Cada elemento do vetor é identificado por um índice (unidimensional), o qual indica a sua posição no vetor. 

Declaração :

NomeDoVetor : vetor[nº de elementos] de Tipo do Vetor 

Referência : 

NomeDoVetor[índice]

 

ALGORÍTMO ESTRUTURADO - Comandos de Entrada e Saída

 No algoritmo é preciso representar a troca de informações que ocorrerá entre o mundo da máquina e o nosso mundo, para isso, devemos utilizar comandos de entrada e saída, sendo que, a nível de algoritmo esses comandos representam apenas a entrada e a saída da informação, independe do dispositivo utilizado (teclado, discos, impressora, monitor,...), mas, sabemos que nas linguagens de programação essa independência não existe, ou seja, nas linguagens de programação temos comandos específicos para cada tipo de unidade de Entrada/Saída.

Comando de Entrada de Dados

Leia(variável_1, variável_2,...)

Comando de Saída de Dados

Imprima(expressão_1, expressão_2,...)

COMANDOS DE CONTROLE DE FLUXO:

Para representar a solução de um problema devemos escrever o conjunto de passos a serem seguidos, sendo que, a maioria dos problemas exigem uma dinâmica na sua solução, impondo assim que os algoritmos executem conjunto de instruções de acordo com as possíveis situações encontradas no problema original.

Linguagem de Descrição de Algoritmo (LDA) - Estrutura


Para escrevermos algoritmos é preciso uma linguagem clara e que não deixe margem a ambiguidades, para isto, devemos definir uma sintaxe e uma semântica, de forma a permitir uma única interpretação das instruções num algoritmo.

Estruturar um Algoritmo

Algoritmo Nome do Algoritmo

Variáveis

Declaração das variáveis

Procedimentos

Declaração dos procedimentos

Funções

Declaração das funções

Início

Corpo do Algoritmo

Fim

Identificadores

Representam os nomes escolhidos para rotular as variáveis, procedimentos e funções, normalmente, obedecem as seguintes regras:

O primeiro caracter deve ser uma letra

Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto: {a,b,c,..z,A,B,C,...Z,0,1,2,...,9,_}

Os nomes escolhidos devem explicitar seu conteúdo.

Variáveis: 

Unidades básicas de armazenamento das informações a nível de linguagens de programação. Os tipos de dados e variáveis utilizados dependem da finalidade dos algoritmos, mas, podemos definir alguns, pelo fato de serem largamente utilizados e implementados na maioria das linguagens, sendo estes:

INTEIRO: qualquer número inteiro, negativo, nulo ou positivo.

REAL: qualquer número real, negativo, nulo ou positivo.

CARACTER: qualquer conjunto de caracteres alfanuméricos.

LÓGICO: tipo especial de variável que armazena apenas os valores V e F, onde V representa VERDADE e F FALSO

Declaração de variáveis

Para que os programas manipulem valores, estes devem ser armazenados em variáveis e para isso, devemos declará-las de acordo com a sintaxe:

NomeVariável,... : tipo

Operações Básicas:

Na solução da grande maioria dos problemas é necessário que as variáveis tenham seus valores consultados ou alterados e, para isto, devemos definir um conjunto de OPERADORES, sendo eles:

Operador de Atribuição:

NomeDaVariavel ¬ Valor ou Expressão Atribuída.

Operadores Aritméticos:


 

 

 

 

Operadores Relacionais:

São utilizados para relacionar variáveis ou expressões, resultando num valor lógico (Verdadeiro ou Falso), sendo eles:

 





Operadores lógicos:

São utilizados para avaliar expressões lógicas, sendo eles:

e - e lógico ou conjunção. 

ou - ou lógico ou disjunção.

não - negação.

Prioridade de Operadores:

Durante a execução de uma expressão que envolve vários operadores, é necessário a existência de prioridades, caso contrário poderemos obter valores que não representam o resultado esperado.

A maioria das linguagens de programação utiliza as seguintes prioridades de operadores:

1º - Efetuar operações embutidas em parênteses "mais internos"

2º - Efetuar Funções

3º - Efetuar multiplicação e/ou divisão

4º - Efetuar adição e/ou subtração

5º - Operadores Relacionais

6º - Operadores Lógicos

OBS: O programador tem plena liberdade para incluir novas variáveis, operadores ou funções para adaptar o algoritmo as suas necessidades, lembrando sempre, de que, estes devem ser compatíveis com a linguagem de programação a ser utilizada.