domingo, 25 de março de 2012

C++ - Inteligência Artificial - Criando um Bot. (parte 1)

 Olá caro leitor , este post é o primeiro de um série que pretendo realizar enquanto desenvolvo um protótipo de um boot para chats ou até mesmo jogos utilizando linguagem C++,tomei como base teórica uns exemplos no site http://ai-programming.com (Inglês).Neste exemplo utilizarei o Visual C++ Express para compilar e gerenciar meu código.Como essa e a primeira postagens de inteligência artificial , eu vou indicar alguns links para que você fique por dentro.

http://www.cplusplus.com/reference/   - C e C++ , algorítimos em geral (Em Inglês).
http://pt.wikipedia.org/wiki/Bot           - Bots
http://ai-programming.com                  -  Inteligência Artificial e C++ (Em Inglês).
http://pt.wikipedia.org/wiki/Intelig%C3%AAncia_artificial -  Inteligência Artificial uma visão geral (Em português)


(Clique para ampliar)

Neste post vamos apresentar somente a função de cumprimentar somete (" exemplo : oi,olá,eai").Vou apresentar nesta primeira parte somente o "system programming", que é configurar o console.

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>

#pragma warning(disable: 4786)

#define ai001
#define functions

#ifdef ai001
#ifdef functions

   using namespace std;

class controler
{
  public:

 int contador_INPTS;
};

 void pause(){system("pause");}
 void cls(){system("cls");}
 void fim(){system("exit");}
 void jmpln(){cout<<" "<<endl;}

int main()
{
cls();

/*
controler ctrl;
ctrl.contador_INPTS;
*/
int cont = 0;

system("title IA-001");
system("color 1f");

cout<<"IA-001 Application"<<endl;
pause();

return 0;

}


#endif
      #endif

 void pause(); equivalente à pause do Batch.
 void cls(); equivalente à cls do Batch.
 void fim(); equivalente à exit do Batch.



Até a próxima postagem sobre Bots

quinta-feira, 22 de março de 2012

Tipo da navegação - Esclarecendo o método de conversão (com python)

Olá caro leitor,neste post irei mostrar mais detalhadamente o método de conversão utilizado no desenvolvimento daquele nosso primeiro programinha em Fortran , porém,desta vez utilizaremos a flexibilidade do Python para que seja melhor explicado e compreensível para todos.Lembra-se daquela sequência lógica que por mim foi elaborada para "ilustrar" o funcionamento do programa na parte de conversão de valores?Então,nessa postagem você irá ver como fazer esta conversão de uma maneira mais "dinâmica",ao menos na minha opinião.Bem para quem não viu a postagem da qual eu citei algumas informações acima clique aqui e leita a mesma.
Primeiramente , desta forma que eu irei apresentar , tem o propósito de deixar muito mais fácil a conversão de unidades de valores , trocando apenas algumas variáveis ou constantes,neste caso a implementação foi em Python.porém você também pode usar outras linguagens.Muito bem, vamos por a mão na massa!
   Imagine que você tem uma variável D (distância), em que seu valor é igual a V (valor variável) e mn (constante) e queira transformar o valor de D em uma outra unidade.Você pode pensar ,muito fácil,preciso somente usar uma outra constante em cada caso,bem , pode até ser , mas você irá ganhar uns Kilobytes a mais de consumo de memória com seu programa em execução, ao clicar na imagem acima, no meu exemplo você pode notar que utilizei uma mesma constante e operações , modificando somente os valores finais, fazendo com que economizemos espaços na  memória com outras variáveis e possamos fazer tudo isso de uma forma mais simples.Claro isso tem de ser tratado na sua aplicação , mas não vem ao caso comentar isso neste postagem,deixarei este assunto para talvez uma outra postagem.

  A formula é a seguinte.

Y = v (operador) constante (operador)  1
(Y pode ser alterado por qualquer letra.)

 Esse valor "1" deve ser alterado para que possa ocorrer a mudança da unidade.Então você pode alterar a unidade com apenas 3 variáveis em diversas situações.

  Por exemplo

 Vamos imaginar que temos 3 variáveis de tipo inteiro de 4 bytes. (4b*3var=12bytes).

EX1: Kilometros

 valor = 1;
 constante = 1;
 r = valor * constante  * 1000

 r = 1000 m.

EX2: Metros





 valor = 1;
 constante = 1;
 r = valor * constante  * 1


r = 1 m.



Então ,com estes poucos exemplo é possível transformar unidades com facilidade em sem "estourar sua memória".

Link da outra postagem aqui.

terça-feira, 20 de março de 2012

C# - Uma dica

 Olá caro leitor neste post vou lhe apresentar uma forma bem simples para ganhar alguns milésimos ou até mesmo segundos em seus cálculos ou saídas em programas utilizando a linguagem de programação C#.Nesse exemplo estou usando o Visual C# 2010 Express que pode ser baixado clicando aqui.Você pode muito bem reproduzir este exemplo utilizando o SharpDevelolp que pode ser baixado clicando aqui.OBS: Habilite o modo   "unsafe code" antes de utilizar a palavra chave unsafe.Então vamos lá!
(Clique para ampliar.)

Agora você deve está se perguntando o porque de se utilizar ponteiros nesse caso,já que se trata de uma operação bastante simples.Bem , quando você criar uma variável do tipo inteiro ela precisa de um espaço de 4 bytes, então quando utilizamos o ponteiro estamos apontando para o endereço da variável apenas , e não chamando a mesma , oque levaria alguns milésimos a mais,ou seja,no nosso pequeno exemplo utilizamos o ponteiro como uma espécie de cache,nesse caso pode parecer não muito significativo,porém,em cálculos mais complexos ou em programas com um fluxo de dados maior você pode notar a diferença.

segunda-feira, 19 de março de 2012

Calcular o Tipo da Navegação


   Olá caro leitor,neste post irei apresentar um pequeno software com pouco mais de 120 linhas de código, este foi desenvolvido em linguagem Fortran77 e faz o cálculo do tipo da navegação baseado na informação de profundidade e da distância da costa.Este programa foi compilado gerando um executável com 64,9 kb,seu código fonte tem no total 126 linhas de código entre linhas de comentário,em branco e código fonte propriamente dito.
  As regras de navegação foram obtidas através do livro NAVEGAÇÃO : CIÊNCIA E A ARTE, da Marinha do Brasil,o programa irá efetuar um simples cálculo hidroceanográfico.

Tipo da navegação:      Águas Restritas

Distância: 3 mn
Profundidade: 20 metros
Precisão: 0,05 mn
Frequência(atualização): 3 minutos


Tipo da navegação:      Águas Costeira

Distância:4 a 50 mn
Profundidade: 21 a 200 metros
Precisão: 0,5 mn
Frequência(atualização):  10 || 30


Tipo da navegação:      Águas Oceânica

Distância: 51 + a mn
Profundidade: 500 + metros
Precisão: 1 || 2 mn
Frequência(atualização):  3 minutos



mn = milhas náuticas => 1.852 km
|| =.> sinal em computação numérica significa OU.

(Dados de 2006).

Agora que já obtemos as informações iremos para a parte lógica do nosso programa.

  10  Recebe DISTANCIA 
  20  Se DISTANCIA = 0 => Voltar para 10
  30  Converte DISTANCIA em :  mn,m,yd,ft
  40
  50 Recebe PROFUNDIDADE
  60 Se PROFUNDIDADE  = 0 => Voltar para 50
  70 Converte  PROFUNDIDADE   em : m,yd,ft
  80
  90 Se  DISTANCIA  =  < 4  || Se PROFUNDIDADE = < 24
 100 NAVEGACAO == AGUAS RESTRITAS
 110 
 120 
 130 Se  DISTANCIA  =  > 4 e < 50  || Se PROFUNDIDADE =<24 e> 201
 140 NAVEGACAO == AGUAS RESTRITAS
 150 ESCREVA RESULTADOS
 160 Se  DISTANCIA  =  > 50  || Se PROFUNDIDADE = > 500
 170 NAVEGACAO == AGUAS OCEANICAS
 180ESCREVA RESULTADOS
 190 
 200 ESCREVA RESULTADOS FINAIS
 210 ESCREVA TIPO DA NAVEGAÇÃO.


Veja agora abaixo a "print" do programa em execução e o código fonte.

(Clique para expandir.)

C
C      NAME: TNA
C      AUTHOR: Lucas de Matos Rocha
C      DESCRIPTION: Calcular o tipo da navegação
C      DATE:
C

C     .START
       PROGRAM TIPONAVEG

C      .DATA

        REAL TNV;
C       REAL TNV = Tipo navegacao
        REAL D,P;
C       REAL D = Distancia
C       REAL P = Profundidade
        CHARACTER MSG*(10);
C       CHAR MSG =  Mensagens
        CHARACTER SPC_*(30);
                  SPC_='...........................';
C                 ESPACO 30 CHARACTERS

C      .CODE
               WRITE(*,*),SPC_,'TIPO DA NAVEGACAO ',SPC_;
               PRINT'(a)',' '!PULAR LINHA
C
C         #### DISTANCIA ####
C
          WRITE(*,*),'INSIRA A DISTANCIA:(KM)' ;
          PRINT'(a)',' '!PULAR LINHA
        READ (*,*),D;
             PRINT'(a)',' '!PULAR LINHA
             
        DO WHILE (D==0)
         PRINT'(a)',' '!PULAR LINHA
         WRITE(*,*),'A Distancia nao pode ser 0 (ZERO).'
                    PRINT'(a)',' '!PULAR LINHA
                    WRITE(*,*),'INSIRA A DISTANCiA:(KM)'
                    PRINT'(a)',' '!PULAR LINHA
                READ (*,*),D;
        END DO
        
        PRINT'(a)','_DISTANCIA_'

           WRITE(*,*),'NM:',D/1.852 ,'        Milhas N uticas'
           WRITE(*,*),'M :',D/1000  ,'        Metros'
           WRITE(*,*),'YD:',D/0.91439920429,'        Jardas'
           WRITE(*,*),'FT:',D/0.3048,'        Pes'
           
                        PRINT'(a)',' '!PULAR LINHA
C
C        #### PROFUNDIDADE  ####
C
        WRITE(*,*),'INSIRA A PROFUNDIDA:(M)'
          PRINT'(a)',' '!PULAR LINHA
        READ (*,*),P;
             PRINT'(a)',' '!PULAR LINHA

        DO WHILE (P==0)
         PRINT'(a)',' '!PULAR LINHA
         WRITE(*,*),'A Profundidade nao pode ser 0 (ZERO).'
                    PRINT'(a)',' '!PULAR LINHA
                    WRITE(*,*),'INSIRA A Profundidade:(M)'
                    PRINT'(a)',' '!PULAR LINHA
                READ (*,*),P;
        END DO
        
         PRINT'(a)','_PROFUNDIDADE_'

           WRITE(*,*),'M :',P,'        Metros'
           WRITE(*,*),'YD:',P/0.91439920429,'        Jardas'
           WRITE(*,*),'FT:',P/0.3048,'        Pes'
           
                        PRINT'(a)',' '!PULAR LINHA

C         ####     OCEANICA   ####
C
          IF(D>50)THEN
               IF(P>500)THEN
                  PRINT'(a)','TIPO DA NAVEGACAO [( OCEANICA )]'
               ENDIF
          ENDIF
C                  ####


C         ####     COSTEIRA    ####
C
          IF(D<50)THEN
          IF(D>4)THEN
          
               IF(P<500)THEN
               IF(P>24 )THEN
                  PRINT'(a)','TIPO DA NAVEGACAO [( COSTEIRA )]'
                  ENDIF
               ENDIF
               
               ENDIF
          ENDIF
C                  ####


C
C         ####     RESTRITA    ####
C
          IF(D<4)THEN
               IF(P<24)THEN
                  PRINT'(a)','TIPO DA NAVEGACAO [(  RESTRITA  )]'
               ENDIF
          ENDIF
C                  ####


C      .END BLOCK
                PRINT'(a)',' '!PULAR LINHA
                 PRINT'(a)','Lucas Softwares 2010-2012'
                PRINT'(a)','Scientific Software'
                PRINT'(a)','Free Softwre GPL 3.0  '
                  PRINT'(a)',' '!PULAR LINHA
                    PRINT'(a)',' Pressione "ENTER"'!
                    PRINT'(a)',' '!PULAR LINHA
            PAUSE
           
              RETURN;
          STOP
       END



;

Notepad++

Essa é a primeira postagem "efetiva" do meu blog.Neste post vou dar apenas uma dica.Um ótimo editor de código de fonte o Notepad++, ele é grátis, e open source.E também temos uma extensão para o "velho notepad" do windows, o notepad2.
 Veja a seguir as fotos


A segunda imagem mostra somente o Notepad++ e a primeira imagem mostra o Notepad2 e o Notepad++ sendo executados.Eu gosto destes dois editores pois sua cor de sintaxe é muito agradável.E com o Notepad++ você pode trabalhar com múltiplos documentos.

Para baixar :

Primeiro post


  Primeira postagem.Alguns esclarecimentos
Oque será escrito?

Neste blog irei escrever sobre minhas experiências além de exemplos e códigos com computação científica e inteligência artificial , ou seja , irei relatar e explicar enquanto também aprendo, afinal , também sou autodidata.


Como será escrito?


Meu objetivo é primeiramente compartilhar meus conhecimentos,então irei relatar detalhadamente algumas das minhas experiências com computação.Pretendo escrever artigos e matérias sem contaminar o leitor com uma tecnologia específica.


Que que tecnologias?

Sistemas operacionais : Por enquanto somente Windows , pretendo também usar Linux futuramente.
Linguagens de programação : As minhas preferidas C,C++,C#,Fortran77,Assembly86x e outras.


Quem escreve?


Quem escreve é Lucas de Matos Rocha ,14 anos de idade , estudante , cursando o 1º ano do ensino médio.Programador autodidata, me interesso por programação de computadores em relação a softwares em geral , especificamente Computação Científica e Inteligência Artificial, além de Elétrica e eletrônica,matemática,filosofia e política!
 Sonho e luto para conquistar uma carreira militar...


Para quem é escrito?

 Para o público em geral que se interesse por programação de computadores, em específico na área científica : estudantes,autodidatas,profissionais,professores e etc...

Oque é computação científica?

É  a área da computação que é aplicada em diversos ramos científicos como : engenharia,eletrônica.Visa simular e calcular formulas com precisão para aplicação em uma área específica.

Oque é inteligência Artificial?

É a área da computação que visa reproduzir redes neurais e raciocínio humano em um computador.

Imagem:
http://upload.wikimedia.org/wikipedia/commons/1/17/ArtificialFictionBrain.png