Números aleatórios não existem

Fala pessoal,

Hoje venho aqui para falar a respeito de números aleatórios, isso mesmo, aqueles números que são retornados aleaóriamente por uma função, como  random do Pascal, rnd do C/C++ e etc.

Podemos dizer, que ela é um dos principios de I.A em jogos. Por exemplo vamos supor que eu quera desenvolver um jogo de luta (tipo Street Fighter), vai ter um jogador e um computador pro usuário enfrentar, se eu não tiver conhecimentos sólidos suficientes a respeito de I.A em Jogos, posso muito bem utilizar esses números aleatórios. Por exemplo:

 Se numero aleatório for igual 1 , então computador me da um soco

 Se numero aleatório for igual 2 , então computador me da um chute

 Se numero aleatório for igual 3, então computador me da um gancho

 Se numero aleatório for igual 4 , então computador salta pra cima

E assim vai…

Mas voltando sobre números aleatórios,

Para aqueles que trabalham com números aleatórios em suas aplicações eu tenho uma coisa pra falar para vocês, NÚMEROS ALEATÓRIOS NÃO EXISTEM.

Peraí, como assim não existem ? Calma, tudo tem uma explicação…

Os programadores iniciantes, normalmente quando trabalham com funções de alguma linguagem de programação, não estão interessados em saber COMO UMA DETERMINADA FUNÇÃO FOI IMPLEMENTADA, só querem saber como se usa e PRONTO. Mas programadores experientes, como eu, POSSUEM CURIOSIDADES A RESPEITO DAS FUNCIONALIDADES DE CERTAS FUNÇÕES, e uma delas é a função random, que me chamou atenção.

No meu ponto de vista, acho que a frase “números aleatórios” deveria ser TROCADA para números “momentâneos”. Vocês vão entender agora.

A função random, na verdade, não escolhe um número aleatório qualquer, o que na verdade essas funções fazem a CAPTURAR o valor do CLOCK DO RELOGIO DO SISTEMA  (que sempre está correndo naqueles milissegundos) e em cima daquele valor  OBTIDO NAQUELE MOMENTO, NAQUELA HORA E NAQUELE INSTANTE, é aplicado um cálculo matemático em cima dele, resultando assim, como nós chamamos, de um número aleatório escolhido pela função.

Podemos concluir que o que torna um número aletório e um cálculo matemático bem interessante em cima do valor do clock do relógio do sistema, obtido naquele momento, naquele hora e naquele instante.

 

O que nós sabemos : Logica de Programação ou Algoritmos ?

Fala Pessoal,

Hoje venho falar nesse Post sobre uma dúvida que pega muita gente, que viu ja viu o básico de programação, DE SUPRESA. O que eles sabem : Lógica de programação ou Algoritmos ?

Vou falar uma situação que aconteceu com meus alunos. Uma vez quando fui dar a primeira aula num curso para o pessoal que já tenhia visto programação eu fiz a seguinte pergunta antes de prosseguir com a aula :

E aeh, quem já viu “Lógica de Programação” ?

Ai, todos os meus alunos ficaram CALADOS, um olhando pro outro. Diante dessa situação falei :

Vocês já viram “Algoritmos” ?

Ai todos respondeu seguramente a respeito dessa pergunta.

O que pega muita gente de supresa são essas perguntas que são tipicamente SINÔNIMOS”. Lógica de programação é Algoritmos são coisas RELACIOANADAS.

Logica de programação significa representar em linguagem CORRENTE, ou por simbolos que expressam essa linguagem , INSTRUÇÕES que compõem um programa a ser executado de computador.

Algoritmo, novamente falando, consiste em um conjunto de instruções cuja finalidade e executar uma série de passos finitos com objetivo e solucionar um determinado problema proposto.

Se observarmos, Lógica de Programação e Algoritmos são , tipicamente SINÔNIMOS.

Então se algum dia alguém perguntar a você, que já sabe programação, se você ja viu Lógica de programãção, pode responder seguramente que SIM.

Aprendendo a interpretar exercícios de algoritmos

Olá pessoal,

Venho falar neste Post sobre um problema em que muitos alunos iniciantes em programação enfrentam durante o aprendizado sobre algoritmos, que é o de INTERPRETAR exercicíos de algoritmos. Existem números fatores que contribuem para tal dificuldade.

Bom, o objetivo desse Post é ensinar a INTERPRETAR exercícios de algoritmos através de dicas que vou mostrar daqui para frente.

Se lembrarmos a definição do significado da palavra  ALGORITMO, consiste em um conjuto de passos finitios cujo objetivo é solucionar um determinado problema. Esse PROBLEMA é identificado através o enunciado do exercício que nós é fornecido para desenvolvermos o algoritmo. Vamos ver um exemplo aqui:

1) Fazer um programa em Java para LER um número e no final, MOSTRAR esse número na tela.”

Uma das coisas que precisamos analisar no enunciado são os VERBOS.  Observe que eu destaquei os verbos do exercício  EM NEGRITO, para facilitar a explicação.

Quando queremos fazer um programa para LER um número, significa que esse número será obtido por meio da leitura de dados VIA TECLADO, logo , precisamos fazer uso de um comando que obtém os dados via teclado. No algoritmo, o comando de leitura de dados via teclado é conhecido como LEIA.

Outro detalhe: Observe que foi pedido para se ler um número, mas não foi especificado qual tipo do número a ler lido, se é número inteiro ou fracionário, logo, qualquer tipo de número lido é valido para este exercício.

Se lermos o exercício acima , observe que após a leitura do número que pede para MOSTRAR o número lido na tela. Quando usamos o verbo MOSTRAR, significa que devemos exibir esse número lido na tela, por meio da instrução ESCREVA.

Se fizermos o programa, ele ficaria assim:

programa “numero”

var

  num:inteiro

inicio

 escreva(“Digite um número”)

leia(num)

escreva(“O numero digitado foi:”, num)

fim

Observe que eu preferi utilizar o tipo INTEIRO para a minha variável “num” mas, se quisesse, poderia utilizar o  tipo REAL, para tipos fracionários, que o programa TAMBEM  estaria correto.

Esse exercício poderia estar escrito de várias formas diferentes, conforme é mostrado abaixo:

  – Desenvolver um programa para OBTER DO TECLADO um número e no final, IMPRIMIR esse número na tela.”

  –  Criar uma aplicação para LER DO TECLADO um número e depois APRESENTAR  esse número na tela.”

Observem que foram dois enunciados escritos diferentes, porém, com a mesma finalidade.

Agora, observe esse enunciado:

 1) Fazer um programa para LER um número INTEIRO e no final, MOSTRAR esse número na tela.”

 Esse programa será o mesmo que o anterior mas, qual é o detalhe ? Observe eu o número a ler lido do teclado deverá ser um número INTEIRO, conforme foi explicado acima. Então, só podemos nesse trabalhar nesse programa com tipos inteiros.

Bom, vamos analisar o próximo enunciado:

 2)     Fazer um programa para LER dois número FRACIONÁRIOS e no final, MOSTRAR a soma dos dois números.”

 Até aqui nenhum mistério. Os verbos do enunciado acima já foram explicados e você com certeza já consegue interpretar o exercício acima. Vamos lá, o programa acima pede a leitura de dois números fracionários, e no final, deve ser exibida na tela  a soma dos dois números. Nesse programa haverá a existência de três variáveis do tipo REAL (para números fracionários): duas variáveis para armazenar os dois números lidos pelo teclado e uma variável para armazenar a soma dos dois números. O programa então ficará assim:

programa “soma numeros”

var

 num1,num2,soma:real

inicio

 escreva(“Digite dois numeros”)

leia(num1)

leia(num2)

soma <- num1 + num2

escreva(“A soma dos dois numeros é :”, soma)

fim

 Agora vamos a um exercício mais interessante:

3)     Fazer um programa que LEIA dos números inteiros e depois MOSTRAR ao usuário quatro opções de operações aritméticas : adição, subtração, multiplicação e divisão. Se o usuário escolheu adição, mostrar a soma dos dois números ; se escolheu subtração, mostrar a subtração dos dois números e assim sucessivamente.

Vamos lá,  nesse programa está sendo pedido que sejam lidos dois números do teclado, pode ser tanto números inteiros quanto fracionários, pois no enunciado, não foi especificado qual tipo de número a ser lido. Até ai tudo bem. Depois, o programa precisa mostrar na tela quatro opções de operações aritméticas : adição, subtração, multiplicação e divisão. De acordo com a opção selecionada, efetuar a operação aritmética sobre os dois números lidos.

Se o programa mostra OPÇÕES NA TELA para que o usuário possa seleciona uma opção, é preciso criar uma TERCEIRA VARIÁVEL, que ira armazenar a opção selecionada. Também , será preciso criar mais uma variável que irá armazenar o resultado da operação sobre os dois números lidos sobre o teclado.

Como ficaria esse programa:

programa “calculadora”

var

 num1,num2,res:inteiro

opcao: inteiro

inicio

 escreva(“Digite dois numeros”)

leia(num1)

leia(num2)

escreva(‘Escolha sua opção”)

escreva(“1 – Adição”)

escreva(“2- Subtracao”)

escreva(“3 -Multiplicacao”)

escreva(“4 -Divisao”)

escreva(“Sua opcao:”)

leia(opcao)

escolha opcao

caso 1 : res <- num1 + num2

caso 2 : res <- num1 – num2

caso 3 : res <- num1 * num2

caso 4 : res <- num1 / num2

fim escolha

 escreva(” resultado é “,res)

fim

Agora vamos ver um último  exercício de algoritmo, esse é bem interessante e gostaria que, para quem tem dificuldade, siga o passo a passo que é explicado abaixo:

 Algoritmo

 

1 – Obter o valor para a variável HT (Horas  trabalhadas no mês)

2 – Obter o valor para a variável VH (Valor da hora trabalhada)

3 – Obter o valor para a variável PD (Percentual de desconto)

4 – Calcular o salário bruto  (SB): SB = HT * VH;

5 – Calcular o total de desconto  (TD): TD = (PD / 100) * SB;

6 – Calcular o salário líquido (SL): SL = SB – TD;

7 – Apresentar  o valor do salário líquido:SL.

  Vamos interpretar o enunciado acima. Observe que cada passo deve ser seguido EM ORDEM. A primeira que devemos fazer é :

 1 – Obter o valor para a variável HT (Horas  trabalhadas no mês)

 Bom, “Obter valor para a variável HT”, significa ler do teclado um valor para a variável HT, que representa as horas trabalhadas no mês. Qual o tipo dessa variável ?  Bom, essa variável irá armazenar as horas trabalhadas. Esse tipo de valor não pode ser FRACIONÁRIO, logo, o tipo dessa variável é INTEIRO.

2 – Obter o valor para a variável VH (Valor da hora trabalhada)

  Como já foi explicado “Obter valor para a variável VT”, significa ler do teclado um valor para a variável VH, que representa o valor da hora trabalhada. Qual o tipo dessa variável ?  Bom, essa variável irá armazenar um valor monetário, logo, esse tipo de valor é FRACIONÁRIO.

 3 – Obter o valor para a variável PD (Percentual de desconto)

 Qual o tipo dessa variável ?  Bom, essa variável irá armazenar um valor percentual,que é normalmente um valor FRACIONÁRIO.

 4 – Calcular o salário bruto  (SB): SB = HT * VH;

 Observe que o passo acima pede que seja efetuado o calculo do salário bruto (representado pela variável SB), informando também como é feito seu calculo.

 5 – Calcular o total de desconto  (TD): TD = (PD / 100) * SB;

 Acima pede-se que seja efetuado o calculo do total de desconto  (representado pela variável TD), informando também como é feito seu calculo.

 6 – Calcular o salário líquido  (SL): SL = SB – TD;

 Acima pede-se que seja efetuado o calculo do salário líquido  (representado pela variável SL), informando também como é feito seu calculo.

 7 – Apresentar  o valor do salário líquido:SL.

 Acho que o passo acima já explica tudo.

 Como ficaria o nosso programa ?

programa “salario”

var

 ht,vh,pd,sb,sl,td : real

inicio

escreva(“Digite as horas trabalhadas”)

leia(ht)

escreva(“digite o valor da hora”)

leia(vh)

escreva(“Digite o precentual de desconto”)

leia(pd)

sb <- ht * vh

td <- ((sb / 100) * pd)

sl <- sb – td

escreva(“Salario líquido”, sl)

fim

Então pessoal, a dica para realizar os exercícios propostos de algoritmos, quaisquer que sejam, e seguir essas dicas que lhe mostrei que, com certeza, vocês não vão se perder no caminho.

Algoritmo NÃO TEM PADRÃO

Para o pessoal que desenvolve softwares, com certeza ja passou pelos famosos algoritmos certo ?

Aposto que cada um viu uma forma diferente de se fazer um algoritmo. Vou citar um exemplo aqui : Fazer um algoritmo para ler dois números interios e no final, mostrar a sua soma:

Esse algoritmo é simples, ele ficaria assim.

programa “soma numeros”

 num1,num2 : inteiro

inicio

 escreva(“Informe números inteiros”)

 leia(num1)

leia(num2)

soma <- num1 + num2;

escreva(” A soma é”, soma)

fim

O algoritmo acima atende ao que foi pedido, somar dois números e mostrar a sua soma na tela.

Mas aposto que muita gente aprendeu a fazer esse simples programa usando uma estrutura de algoritmo diferente do que foi apresentado acima. Por exemplo: O mesmo programa usando uma outra estrutura de algoritmos

algoritmo “soma numeros”;

  inteiro num1,num2;

inicio

 imprimir “Informe números inteiros”

 ler num1

 ler num2

soma <- num1 + num2;

imprimir  ” A soma é”, soma

fim

Observe que fiz novamente esse exemplo da soma dos números usando uma outra estrutura de algoritmos. Existem muitas outras estruturas de algoritmos além dessas que foram mostradas.

Com isso chego a uma conclusão : Algoritmo NÃO TEM PADRÃO.

O que quero dizer com “Algoritmo NÃO TEM PADRÃO” . Significa que cada profissional em informática , durante a crição de seus algortimos em PORTUGUÊS ESTRUTRADO, utiliza formas diferentes de estruturas, que ATENDEM à um determinado PROBLEMA.

Quem ja teve  a curiosidade de ir comprar um determinado livro de algoritmos viu que cada autor utiliza  uma estrutura de algoritmos diferentes da outra. Isso não quer dizer que se um autor utiliza de uma determinada estrutura de algoritmo, significa que a outros autores estejam erradas, por isso, como Professor, novamente falo : Algoritmo NÃO TEM PADRÃO.

Com essa conclusão , podemos dizer que : Todas as formas de se escrever um algoritmo estão corretas.

Qual é a principal características do algortimo ? O algorimo, como todo bom profissional de informatica sabe, consiste em um conjunto de PASSOS que precisam ser seguidos para solucionar um problema proposto. Esses algoritmos podem ter caminhos grandes ou curtos, mais o importante é que esses PASSOS consigam SOLUCIONAR o problema proposto, não importa de que forma.

MakeWare – IDE de programação

Fala pessoal,

Aqui é o Luciano

Bom, venho falar aqui em meu Blog em mais detalhes, sobre a minha ferramenta de programação voltado para o desenvolvimento de softwares,o MakeWare (http://www.makeware.ueuo.com) . Essa ferramenta criei com o objetivo de facilitar a vida do programador, durante o desenvolvimento de suas aplicações. O MakeWare é um fruto de esforço e dedicação de quatro anos de pesquisas e estudos sobre o desenvolvimento de ambientes de programação, conhecidos também como IDE (Integrated Development Environment).

   Na verdade, o desenvolvimento dessa ferramenta foi uma “inspiração”. Eu tive observando a maioria das ferramentas de programação existentes e usadas no meio acadêmico (pela qual, eu as conheci), e depois de algum tempo de estudo sobre as mesmas, tive conhecimento “sólido” o suficiente para desenvolver essa ferramenta.

   A primeira ferramenta que desenvolvi foi o MakeWare Pascal, voltada para a linguagem Pascal, como o próprio nome da ferramenta diz. Era uma ferramenta muito simples, mais de fácil utilização e compreensão. Com a minha dedicação e vontade de melhorar cada vez mais essa ferramenta, ela chegou na versão em que se encontra , a versão 5.0, oferecendo o máximo de facilidade ao usuário programador, durante o desenvolvimento das aplicações como : mecanismos de templates de código, conversor de atributos compostos da linguagem C para Pascal (uma forma que achei para acelerar a produção de código fonte ao escrever expressões aritméticas), mecanismo de sugestões para alguns erros de compilação e etc.

   Depois de algum tempo do desenvolvimento do MakeWare Pascal, tive a vontade (ou melhor, inspiração) de desenvolver um ambiente voltado para a linguagem C, que foi o MakeWare for C. Essa ferramenta só existiu por alguns meses pois ela foi substituida pelo MakeWare PlusPlus, a versão do MakeWare que desenvolvi para a linguagem C++. A razão pela qual eu retirei o MakeWare for C do site é que a maioria das aplicações existentes são desenvolvidas em C++ do que em C. A linguagem C++ se difere da linguagem C por uma única característica, o suporte a Programação Orientada a Objetos (POO). Atualmente, essa ferramenta se encontra na versão 3.1.

   Depois do desenvolvimento das versões do MakeWare para as linguagens Pascal e C++, eu, pelo conhecimento que tive sobre a Máquina Virtual Java, jamais acharia que desenvolveria uma versão do MakeWare para essa linguagem, devido a certa complexidade de comandos da JVM. Depois de um certo de tempo de estudo mais detalhado sobre a Máquina virtual Java, vi que estava “enganado”. Durante quatro meses de esforços e dedicação, consegui fazer antes o que me parecia impossível, criar a versão do MakeWare para Java, o MakeWare Java.

   Essa ferramenta foi uma das melhores versões do MakeWare que já fiz para uma linguagem. No inicio, ela começou oferecendo suporte para a criação de quatro tipos de projetos diferentes, voltados para o desenvolvimento de aplicações java baseada em console, programação java voltada para a criação de sistemas distribuidos utilizando tecnologias RMI (Remote Method Invocation) e CORBA (Common Object Request Broker Architecture) e voltada par o desenvolvimento de Applets. Depois de algum tempo de pesquisa , consegui implementar nessa ferramenta o suporte a programação com Sockets cliente e servidor e programação com celulares (J2ME).

   O MakeWare Java é uma das ferramentas que passou por muitas atualizações do que qualquer outra. Na versão que ela se encontra hoje, a versão 4.0.6.1, oferece muitas funcionalidades que facilitam o usuário no desenvolvimento Java, dentre elas: Possui um editor de formuláros (como no Delphi), possui um utilitário que cria arquivos JAR com uma grande facilidade; possui um analisador dinâmico de erros de código, dispensando o processo de compilação do programa ; possui um mecanismo de sugestão para erros de compilação que ocorre no programa e entre outras funcionalidades.

   Além do MakeWare, tive vontade também de desenvolver um interpretador de algoritmos, com isso desenvolvi o AlgoWare, um interrpetador básico de algoritmos.

A razão pela qual eu decidi criar um interpretador de algoritmo é que em todas as disciplinas relacionadas ao desenvolviemnto de softwares, antes de tudo, precisa ter como BASE,  fundamnetos de lógica de programação e algoritmos, pois sem esses conceitos não existe programas de computador. com isso, me senti OBRIGADO a desenvolver um interpretador de algoritmos.

Uma coisa interessante que eu vi em alguns fóruns , nos quais costumo divulgar minhas ferramentas de programação, é que muita gente pensa que essas ferramentas foram desenvolvido ou por uma equipe de programadrores ou por um professor bem experiente em desenvolvimento de IDEs.

Na verdade, essas  quatro ferramentas de programação foram desenvolvidas por um JOVEM de apenas 24 anos. Algumas pessoas de alguns fórums que  possuem contato comigo ,não acreditavam que essas quatro ferramentas foram desenvolvidas por mim,  um  JOVEM  de 24 anos, pois acreditem, É VERDADE.

Tudo isso foi possível graças a minha dedicação e esforço INESGOTÁVEL em criar soluções que , de certa forma, contribuisse em disciplinas acadêmcias voltadas para o desenvolvimento de softwares.

Essas ferramentas de programação que desenvolvi são uma PROVA do que um ser humano é CAPAZ DE FAZER SOZINHO, o que ele sempre sonhou.

Bem vindos ao meu Blog.

Olá a você que visita meu Blog. Me chamo Luciano Alves, e sou desenvolvedor de softwares e de websites, além de atuar como Professor de Informática.

 O objetivo de eu criar este Blog é comentar minhas experiências como desenvolver de softwares e sites além de minhas experiências como Professor, na área de informática enfatizando os problemas  e dificuldades de alunos que apresentam durante o aprendizado nessa materia buscando mostrar soluções para esses problemas.

Eu mantenho um site de programação voltado para o desenvolvimento de softwares chamado MakeWare, que consiste em uma ferramenta de programação voltada para o desenvolvimento de programas  nas linguagem Pascal, C++ e Java. Além de um interpretador de algoritmos que desenvolvi chamado AlgoWare.

Para mais detalhes, visite meu site : www.makeware.ueuo.com

Valeu…