sábado, 30 de março de 2013

Convertendo Celsius para Fahrenheit.

Vamos criar um programa simples, que converte a temperatura de Celsius para Fahrenheit.
Vale lembrar que C++ diferencia entre letras maiúsculas e minusculas (case sensitive)
Então, cuidado na digitação.

Nesta primeira etapa, digite tudo exatamente como esta. No progresso do estudo vamos identificando o que é o quê, o que faz, pra que serve e tudo o que for necessário.

------------------------------------------------------------------------------------------------------------


#include<cstdio>
#include<cstdlib>
#include<iostream>

using namespace std;

int main(int nNumberofArgs, char* pszArgs[])
{
    //Entrada de informações através do usuário
 int celsius;
 cout << "Entre coma temperatura em Celsius = ";
 cin >> celsius;

    //Convertendo Celsius para Fahrenheit
 int fahrenheit;
 fahrenheit = celsius * 9/5 + 32;

   //Mostrando os resultados na tela
 
 cout << "O valor em Fahrenheit = ";
 cout << fahrenheit << endl;

  //As linhas abaixo servam para não fechar o programa após a execução.
  //Aguarda qq toque de tecla para finalizar
   
 system("Pause");
 return 0;

}
------------------------------------------------------------------------------------------------------------

Montando o Programa.
Após toda a digitação, o compilador verificar os possíveis erros e, acredite, quase sempre tem erros.

Aprender como interpretar o que o compilador esta tentando informar com as mensagens de erro e aviso é uma parte importante do aprendizado da linguagem. #Dica ;)
Apenas trabalhando sobre os seus erro é que vc desenvolve o sentido de como a linguagem funciona.

Para finalizar, algumas informações sobre o código do programa.

O Gabarito:
A primeira parte do programa e o final. Será sempre usado.

------------------------------------------------------------------------------------------------------------


#include<cstdio>
#include<cstdlib>
#include<iostream>

using namespace std;

int main(int nNumberofArgs, char* pszArgs[])
{

//Aqui entra todo o código.


 system("Pause");
 return 0;

}
------------------------------------------------------------------------------------------------------------
Comentários:
É uma linha ou parte de uma linha que é ignorada pelo compilador. Os comentários permitem explicar o que o programador esta fazendo.

Um comentário em C++ começa com barras duplas //

Arquivos Include.
Sempre começa com a declaração #include na coluna 1, seguido pelo nome do arquivo a incluir. Vamos falar mais sobre isso em breve.

Main.
Cada programa precisa conter um main() em algum lugar. A execução começa na chave de abertura logo de  main() e termina na declaração de retorno, antes da chave de fechamento. Vamos falar mais sobre isso em breve.







Linguagens de Computador.


Linguagens de Computador.

Os computadores "pensam" usando uma série de zeros e uns. Os comandos são uma sequência de números binários (base 2) como 01011101 ou hexadecimais (base 16). Já imaginou programar desta forma?

Antes os programas eram feitos na linguagem Assembly e, depois, um programa chamado assembler convertia os códigos para linguagem de máquina.

Os programas escritos hoje são chamados como código fonte - a fonte de todo o mal.
Na verdade, o computador jamais executa instruções de linguagem Assembly. Ele executa as instruções de maquina que resultam da conversão das instruções Assembly.

Em 1950, as pessoas começaram a conceber, gradativamente, linguagens expressivas que poderiam ser automaticamente convertidas para linguagem de máquina por um programa chamado compilador.

Essas eram as linguagens de alto nível, pois eram escritas em um nível de abstração mais alto do que a linguagem Assembly.

Umas das primeiras linguagens foi o COBOL. Linguagem Orientada para Aplicações Comerciais, que permitia aos programadores escreverem comandos que se pareciam máximo possível com frases em inglês.


Processo de Compilação.
É possível criar programas C++ utilizando um simples editor de texto, como o bloco de notas ou notpad.
Porém, é preferível um editor que saica alguma coisa sobre a sintaxe do C++ e vai ajudar no processo de montagem.

Existem alguns programas bacanas e muitos, gratuitos.
Eu recomendo o DevC++, é simples, direto, gratuito e em português.

sexta-feira, 29 de março de 2013

Computador X Humanos.

Computador X Humanos.

O computador é uma maquina incrivelmente idiota. Ele pode fazer qq coisa que eu digo a ele (dentro do razoável), mas ele faz "exatamente" o que lhe é dito - nada mais e nada menos.

Sendo que é tão importante, e consideravelmente mais difícil, entender o que não foi dito. Neste aspecto, o computador é quase o oposto de um ser humano, pois nós, os humanos, respondemos intuitivamente (bem, quase todos...)

Por exemplo: 
Se eu digo: Lave os pratos! São instruções claras, mas a grande maioria das informações contidas em tal frase esta "implícita" e não dita.

Vou utilizar um modelo que acho ser bastante ilustrativo e intuitivo, retirado do livro Começando a Programar em C++ para Leigos, de Stephen R. Davis.

"Como Programar um Computador Humano".

O Algoritmo.
#Dica. Um algoritmo é uma descrição das etapas a serem executadas, normalmente a um alto nível de abstração.

1. Erga o carro.
2. Remova as porcas.
3. Remova o pneu.
4. Coloque um novo pneu.
5. Instale as porcas.
6. Abaixe o carro.

Para passar estas instruções ao computador, precisamos falar com ele em uma linguagem que ele conheça.
Para nos ajudar, vou seguir a mesma linguagem de modelo utilizada por Stephen no livro, a TCL - Tire Changing Language ou Linguagem de Troca de Pneu :)

TCL tem substantivos como:
carro
pneu
porca
macaco
caixa de ferramentas
pneu sobressalente
chave inglesa

TCL também tem os verbos:
agarrar
mover
soltar
girar

TCL também precisa saber contar e tomar decisões simples.

Bom, basicamente é tudo que o nosso robô trocador pneu entende. QQ outro comando e ele não faz nada.

O Programa.
Agora vamos converter o algoritmo para o programa necessariamente.

Vc diz: "remova a porca". Para iniciar a troca, certo? Errado. O robô não entende  desta forma, aliás, por mais completa que a frase seja, não contem nenhuma das palavras do nosso TCL que o robô entende.

Vamos realizar esta primeira tarefa utilizando nossa TCL e os passos necessário para o entendimento da máquina.

1. agarre a chave inglesa ;
2. mova a chave inglesa para a porca ;
3. gire a chave inglesa cinco vezes no sentido anti-horário ;
4. mova a chave inglesa para a caixa de ferramentas ;
5. solte a chave inglesa.

Até aqui, podemos dizer que o fluxo do programa flui da etapa 1 até a 5.

Uma dúvida: E se não houver porca?
Não teria problema se a chave inglesa girar sem uma porca. Porém, gastaria tempo e energia, e nosso programa precisa ser funcional, econômico e rápido.

A TCL precisa de uma extensão para tomada de decisões simples, escolhendo o que fazer de acordo com a situação encontrada. Vamos adicionar uma declaração IF (se).

1. agarre a chave inglesa ;
2. Se houver porca ;
3. {
4.    Mova a chave inglesa para a porca ;
5.    Gire a chave inglesa cinco vezes no sentido anti-horário ;
6. }   
7. mova a chave inglesa para a caixa de ferramentas ;
8. solte a chave inglesa.

O programa incia normalmente, se houver porca, o fluxo continua a execução de todas as etapas. Se não houver porca, o programa pula para a etapa 7 e 8.
Neste ponto, o programa executa uma expressão lógica que retorna um valor verdadeiro ou falso. Sim, a porca esta presente - verdadeiro. Não, a porca não esta aqui - falso.

Ainda nos resta um problema. Como o robô vai saber quantas voltas precisa girar a chave inglesa para soltar a porca?
Existe porcas diferentes, certo? Se informa um número médio para ter a certeza de que atenderia a todas as porcas, naquelas que precisam de menos voltas para soltar gastaria tempe e energia novamente, pois o robô continuaria rodando a chave onde a porca já esta solta. Vamos solucionar este ponto.

1. agarre a chave inglesa ;
2. Se houver porca ;
3. {
4.  Mova a chave inglesa para a porca ;
5.  Enquanto (porca anexada ao carro)
6.  {
7.    Gire a chave inglesa uma vez no sentido anti-horário ;
8.  }  
9. }
10. mova a chave inglesa para a caixa de ferramentas ;
11. solte a chave inglesa.

Agora o robô toma uma decisão.
Encontra a porca encaixada e executa a etapa 7.
Retorna a etapa 5 e, como a porca ainda encaixada, ou seja, verdadeiro, repete a etapa 7.
Até que a porca esta solta, como o retorno é falso, o robô então passa para a etapa 9 e segue o fluxo.

Mas ainda temos um problema (nossa que saco!) Os diferente tipos de carros tem diferentes números de porcas. Para continuar com a boa prática de economia de tempo e energia, vamos adicionar uma melhoria no código.

1. agarre a chave inglesa ;
2. Para cada porca na roda
3. {
4.   Se houver porca ;
5.   {
6.     Mova a chave inglesa para a porca ;
7.     Enquanto (porca anexada ao carro)
8.     {
9.       Gire a chave inglesa uma vez no sentido anti-horário ;
10.    }
11.   }
12. }
13. mova a chave inglesa para a caixa de ferramentas ;
14. solte a chave inglesa.

As etapas 7 até 10 ainda são repetidas para cada roda.
Isto é um loop nested (aninhado).
As etapas de 7 até 10 são o loop interno, enquanto as etapas de 2 até 12 são o loop externo.

Eu sei, o program é simples e ainda tem diversas situações que podem surgir, como por exemplo, uma porca faltando. Afinal, não "ensinamos" o robô o que deve ser feito nesta situação.

Mas veja onde começamos e de que forma o código ficou no final.
Disposto a continuar? Então vamos.

 <a href="https://plus.google.com/u/0/109289031165722699327/about/p/pub?rel=author">Google</a>