segunda-feira, 30 de abril de 2012

Programação : Introdução a linguagem C++

Olá pessoal , neste meu post irei dar uma introdução ao C++ pra quem está começando o eterno aprendizado que é a vida de um programador,
bom , oque irei abordar a principio ???


1 - Introdução
2.1 - O'que deveram saber para começar
2.2 - Declarações de variáveis
2.3 - Operadores lógicos , expressões e precedência
2.4 - Escrevendo e recebendo valores
3.1 - Estruturas de Seleção if e else
3.2 - Estruturas de Seleção Switch case
3.3 - Laços de repetição , While , Do while
3.4 - Laços de repetição For
4 - Vetores e Matrizes
5 - Funções






1 - Introdução

A linguagem C++ foi desenvolvida inicialmente por Bjarne Stroustrup na AT&T, de 1979 a 1983, a partir da linguagem C,
tendo como idéia principal a de agregar o conceito de classes,
de orientação à objetos, àquela linguagem.
Razão porque iniciamente chamva-se de “C com classes”.
Bjarneprocurou tanto quanto possível manter retrocompatibilidade com C, de modo que programas em C pudessem ser compilados por um compilador C++ com um mínimo de alterações.
Entretanto, encarar C++ como um superconjunto de C é um erro, e C++ deve ser vista como uma “outra linguagem”, por diversas razões.
Em primeiro lugar, nem todo o programa escrito em C é compilado em C++ sem erros, e pode nem mesmo gerar o mesmo resultado, já que a sintaxe e a semântica de algumas construções diferem.
Ao ligar-se partes de um programa em C++ com partes em C, estas devem ser bem especificadas, pois as convenções de funcionamento do código compilado também diferem.
Além disso, C++ oferece um conjunto de mecanismos básicos que não estavam presentes em C, e estes devem ser usados para produzir software mais modular e confiável explorando-se as verificações disponíveis no compilador.
Finalmente, os mecanismos de C++ devem inspirar a programação segundo o paradigma de orientação a objetos e, portanto, não se deve programar em C++ como se faz em C.



2.1 - O'que deveram saber para começar

Bons para começarmos bem deveram saber algumas coisinhas básicas
A diretiva #include , serve para que o compilador inclua como parte do código outro código fonte , chamados de "Bibliotecas"
utilizaremos sempre bibliotecas extras para facilitar nossa vida ao longo de nossa vida como programador
um exemplo de biblioteca é a <iostream> , que "habilita" os comandos da linguagem cout e o cin, que veremos mais para frente pra que servem.
#include <iostream>
bom ficando clara essa parte de bibliotecas , falaremos um pouco sobre as funções
um programa nada mais é do que um conjunto de funções, as funções serão abordadas no capítulo 6, porem vocês devem saber
que todos os comandos devem ser colocados dentro de funções , e que um programa deve ter no mínimo uma função
e essa função principal tem o nome de main , sendo esse o nome que identifica por onde a execução inicia , devemos lembrar também que todas as funções exceto as de formato
void retornam um valor e a função main não é exceção , então colocaremos sempre um return 0; no fim de nosso código, explicarei melhor o'que é o return na parte de funções.
temos também o namespace std que serve para que quando construímos grandes programas, nomes de variáveis , classes e funções não se conflitem.
Outra coisa que devemos saber é que todos os comandos da linguagem e declarações de variáveis devem ser terminadas sempre com ';' esse sinal não serve apenas
para separar as declarações  mas também para identificar a seqüência de execução.
Mais uma coisa importante e que não devemos esquecer é de comentar o nosso código , como assim Arthur ?? , o'que acontece é que as vezes nosso programa fica tão grande
que nem nós mesmos entendemos oque cada linha de código quer dizer, ou até mesmo para outros programadores que vierem a usar nosso código entendam sem problemas
então usamos duas barras //e oque escrevermos apartir dela , o compilador ira ignorar
//usamos então para comentar o significado de trechos de código

exemplo  do que aprendemos acima :


#include <iostream> //nossa biblioteca de entrada e saida
using namespace std;
int main() //nossa função principal
{
//escrevemos aqui todos os codigos do nosso programa

return 0;
}


- é uma boa pratica de programação comentar nossos códigos.



2.2 - Declarações de Variáveis

Vamos começar a por a mão na massa né !
Uma variável nada mais é que um espaço reservado de memória onde podemos atribuir valores a eles
as declarações de variáveis ao contrario dos códigos podem ser feitas tanto dentro quanto fora das funções , se feito fora elas são variáveis globais.
po Arthur como assim? , variáveis globais são variáveis que podem ser acessadas de qualquer função , ao contrario das que são declaradas dentro das funções
que são chamadas de variáveis locais que só podem ser acessadas dentro da função.
podemos atribuir um valor a uma variável tanto na sua declaração quanto em  outro momento.

Tipos de variáveis em c++;

bool : armazena valores booleanos , ou seja 'true'(verdadeiro) ou 'false'(falso)
char : armazena caracteres simples como 'a','A','b','B'
int : armazena valores inteiros como 1,2,3,4,100,200,322
float : armazena números reais , 1.2 , 1.23 , 1.233 , 5.999
double : a diferença do double para o float é apenas a precisão , o double pode armazenar um maior numero de casas decimais , 1.22222222
Há quatro modificadores que alteram a representação desses tipos básicos.
Os modificadores signed e unsigned alteram o significado dos dados para representação de números negativos.
Os modificadores short e long alteram a quantidade de bits com que o dado é representado.

exemplo do que aprendemos acima :


#include <iostream>
using namespace std;
int a = 10; //variavel global
int main()
{
int b = 5; //variavel local

return 0;
}

- é uma boa pratica de programação fazer toda a declaração de variáveis no inicio da função.


2.3 - Operadores lógicos , expressões e precedência


Aprendendo como declarar uma variável , começaremos a manipulá-las , em c++ existem 42 operadores e irei comentar os que acho mais importante.

operador = , serve para atribuir um valor a uma variável.
operador == , serve para comparar dois valores , usaremos geralmente em uma estrutura de seleção chamada if , que veremos no capitulo 4.1
operador != , diferente.
operador + , serve para somar um valor assim como na matemática podemos somar duas variáveis.
operador - , serve para diminuir um valor assim como na matemática podemos subtrair duas variáveis.
operador * , serve para multiplicarmos uma variável.
operador \ , serve para dividirmos uma variável.
operador < , menor.
operador > , maior.
operador <= , menor ou igual.
operador >= , maior ou igual.
operador && , e.
operador || , ou.
operador ++ , incremento , adiciona 1 a sua variável
operador -- , decremento , subtrai 1 a sua variável
operador % , retorna o resto de uma divisão.
exemplo do que aprendemos acima :

#include <iostream>
using namespace std;

int main()
{
int a = 5 , b = 5 , c = 10 , resultado;
resultado = c+(b*a); 



//o parênteses serve para priorizamos uma expressão


return 0;

}


- é uma boa pratica de programação usar nomes de variáveis menos genéricos como "resultado" para não nos confundir.



2.4 - Escrevendo e recebendo valores



ta bom , já sei de variáveis , operadores e expressões mas até agora o usuário não interagiu com meu programa ! , calma jovem explicarei agora ;]
em c++ temos dois comandos da linguagem o cout para escrevermos e o cin para recebermos um valor do usuário.

exemplo do que aprendemos acima :

#include <iostream>
using namespace std;

int main()
{
int a, b, resultado;
cout << "Usuário digite o valor de a ! \n"; 



//o \n serve para
//quebrar uma linha e continuar a escrever na próxima.


cin >> a;
cout << "Usuário digite o valor de b ! \n";
cin >> b;
resultado = a+b;
cout << "O resultado de a+b = " << resultado;

return 0;
}
- é uma boa pratica de programação editarmos bem nossos textos para melhor entendimento dos usuários.


3.1 - Estrutura de Seleção if e else


Agora sim as coisas começam a fazer sentido , if que vem do inglês "se" e o else q vem do inglês "se não"
serve para determinarmos uma condição para que determinado código aconteça, podemos usar um if dentro de outro sem problemas
obs importante : sempre q houver um else , deve haver um if antes, mas nem sempre que temos um if a necessidade do else
a  também o if else juntos que nada mais é do que um se não se... no exemplo entenderemos melhor.
exemplo do que aprendemos acima :

faremos um programa que recebe sua idade e retorna se vc é uma criança , um adolescente , um adulto ou um idoso

#include <iostream>
using namespace std;

int main()
{

int idade;
cout << "Usuário digite a sua idade \n";
cin >> idade;

if (idade < 12)
{
cout << "Você é uma criança \n";
}
else if (idade > 12 && idade < 21)
{
cout << "Você é um adolescente \n";
}
else if (idade > 21 && idade < 60)
{
cout << "Você é um adulto \n";
}
else if (idade > 60)
{
cout << "Você é um idoso \n";
}
else

//se nenhuma das condições acima for verdadeira 
//entra no bloco do else.
{
cout << "Você não existe !  \n";
}



return 0;
}

- é uma boa pratica de programação organizarmos bem o escopo de cada estrutura.



3.2 - Estrutura de Seleção Switch case



Falaremos agora sobre o switch case , uma estrutura simples de se entender e bem útil, bem parecido com o if else
o switch é utilizado na maioria das vezes para se fazer menus , dado uma determinada variável analisa-se os casos e retorna um código.



faremos um cardápio de uma lanchonete que recebe o código do produto e a quantidade

#include <iostream>
using namespace std;

int main()
{
    int codigo,qtd;
    float cachorroquente = 1.20 , baurusimples = 1.30 , baurucomovo = 1.50; 

    float hamburguerm = 1.20 , cheeseburguer = 1.30 , refri = 1.00;


    cout << "Cachorro quente - código = 100  preço = 1,20\n";
    cout << "Bauru simples - código = 101  preço = 1,30\n";
    cout << "Bauru com ovo - código =  102 preço = 1,50\n";
    cout << "Hamburger - código = 103 preço = 1,20\n";
    cout << "Cheeseburguer - código = 104 preço = 1,30\n";
    cout << "Refrigerante - código = 105 preço = 1,00\n";
    cout << "\n";
    cout << "Usuário digite o código do produto que vc quer comprar !\n";
    cin >> codigo;
    cout << "Usuário digite a quantidade\n";
    cin >> qtd;
    cout << "\n";



    switch(codigo)
{
    case 100 : cout << "Valor a pagar = " <<cachorroquente*qtd <<" reais"; break;
    case 101 : cout << "Valor a pagar = " << baurusimples*qtd <<" reais"; break;
    case 102 : cout << "Valor a pagar = " << baurucomovo*qtd <<" reais"; break;
    case 103 : cout << "Valor a pagar = " << hamburguerm*qtd <<" reais"; break;
    case 104 : cout << "Valor a pagar = " << cheeseburguer*qtd <<" reais"; break;
    case 105 : cout << "Valor a pagar = " << refri*qtd << " reais"; break;
    default : cout << "Codigo Invalido !";
}



    return 0;
}


obs : note que dentro de cada caso eu uso um cout , e dentro deste cout eu faço uma expressão
no fim de cada caso a necessidade de um break para que não continue executando os outros comandos abaixo
e no fim de tudo o default que se nenhuma das opções for verdadeira , executa-se o comando em seguida.

- é uma boa pratica de programação a utilização de um switch ao envez de vários ifs.



3.3 - Laço de repetição , While , Do while


Agora que estamos um pouco mais avançados posso explicar os laços "while" e o "do while"
o "while" nada mais é do que uma estrutura que acontecerá enquanto uma determinada condição for verdadeira, temos que tomar cuidado
pois podemos entrar em um laço infinito diminuindo a performace do seu programa ou até mesmo o travamento, ta Arthur o "while" está de boa
mais qual a diferença de "while" para o "do while" , simples a diferença é que os comandos escritos dentro do "while" só serão executados caso a condição seja verdadeira
e no "do while" a condição vem depois de todo o escopo executando os comandos ao menos uma vez antes de verificar a condição.


faremos um programa que escreve todos os números múltiplos de 5 até 2000 usando o laço "while" e usando o "do while" perguntamos se deseja repetir o comando.

#include <iostream>
using namespace std;

int main()
{
   
    int numero = 0;
    char resposta;
   
    do
    {


      while(numero < 2000)
      {
      numero = numero + 5;
      cout << "O numero " << numero << " e multiplo de 5 \n";
      }


    cout << "Usuario deseja repetir o programa ? \n";
    cout << "se sim digite 's' , se não digite 'n' \n";
    cin >> resposta;



    } while(resposta == 's' || resposta == 'S')
//coloquei tanto o 's' minúsculo quanto o maiúsculo pq nunca se sabe oque o
//usuário ira digitar

    return 0;
}


- é uma boa pratica de programação nunca dar brechas para falhas humanas , tente pensar sempre o'que o usuário pode fazer de errado.



3.4 - Laço de repetição For


Não muito diferente do while o for também executara os comandos enquanto uma condição for verdadeira , para criarmos um for devemos saber
que existem 3 parâmetros obrigatórios na hora de criar um for, são eles , a declaração de uma variável , uma condição e um incremento ou decremento,
então ficaria assim : for(int i = 0; i < 10; i++) , então tudo que estiver dentro desse for repetirá 10 vezes , usaremos o for sempre que soubermos a quantidade
de vezes que queremos que um código se repita.


faremos um programa que mostra na tela todos os números pares de 1 a 1000.

#include <iostream>
using namespace std;

int main()
{
   
    for(int i = 1; i <= 1000; i++)
    {
       if(i%2 == 0)
         {
          cout << "O numero : " << i << " é par \n";
         }
    }


    return 0;
}


bom , o programa é bem simples , se o numero dividido por 2 der resto 0 quer dizer que ele é par, então eu mostro ele
se não for não acontece nada e isso irá se repetir até que a variável 'i' chegue a 1000 e acabe o for.


- é uma boa pratica de programação ser objetivo em seus algoritmos.



4 - Vetores e Matrizes



Vetores - Agora que aprendemos o for , posso falar sobre os vetores ou em inglês arrays fale como preferir
o vetor nada mais é do que uma variável que pode armazenar vários valores  de todos os tipos como inteiros , booleanos , reais , caracteres e etc.
vetores são bastante usados em algoritmos mais complexos como os de ordenação , um exemplo de aplicação é no inventário de jogos de RPG onde o jogo automaticamente
"organiza" seu inventario da forma que foi programada.
obs importante : os vetores em c++ começam da posição 0 , e não da posição 1.

faremos um programa em que o usuário preenche um vetor de inteiros com valores a sua escolha e depois mostra esse vetor.


#include <iostream>
using namespace std;

int main()
{
    int vetor[10]; 

    //aqui a declaração de um vetor e dentro dos colchetes o
    //tamanho do vetor
   
    for(int i = 0; i < 10; i++)
    {
      
       cout << "Usuario digite o " << i+1 << "° numero do vetor : " << endl;
       cin >> vetor[i];



       //o 'i' quer dizer que estou na posição 0 do vetor 
       //a medida que o for vai rodando a posição do vetor vai junto.
    
    }

    for(int i = 1; i <= 1000; i++)
    {
        
          cout << "Posição : " << i << " =  " << vetor[i] << endl;
        
    }

   

    return 0;
}



Matrizes - matrizes nada mais são do que dois ou mais vetores juntos , um pouco mais complexo porque usaremos um for dentro de outro , preenchendo coluna por coluna até
acabar a matriz.
primeiramente devemos aprender duas novas bibliotecas para que nosso 'random' funcione
a <time.h> que serve para manipularmos o tempo em c++
e a <stdlib.h> que habilita para nós o random.
entendido isso podemos prosseguir.

faremos um programa em que ao envia do usuário preencher a matriz , o próprio programa gere números aleatórios para preencher a matriz e depois mostre-a na tela.



#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;
int main()
{

    int matriz[4][4]; 
    //aqui declaramos a matriz , e dentro dos colchetes o
    //tamanho da matriz, que no caso ali é de quatro linhas e quatro colunas.
    
    srand(time(NULL)); //devemos tambem declarar o nosso random antes de usa-lo.




    for (int linha = 0 ; linha < 4; linha++)
    {
        for (int coluna = 0; coluna < 4; coluna++)
        {
            matriz[linha][coluna] = rand () % 100; 

            // e é aqui onde  damos um valor aleatorio para a posição da matriz.
         
            cout << matriz[linha][coluna] << "\t";
        }
    }

   

    return 0;
}


obs importante : o %100 na hora de dar um valor a posição da matriz , quer dizer que o random só ira de 0 a 99
se eu quisesse um valor entre 0 a 999 colocaria %1000.

- é uma boa pratica de programação sempre que puder evitar variáveis globais , variáveis locais são acessadas 2 vezes mais rápidas do que as globais.




5 - Funções


Funções são o agrupamento de uma serie de códigos , uma função pode ser acessada de vários lugares de um programa, inclusive da própria função
quando isso acontece chamamos de função recursiva de principio acharemos que criar uma função pode ser algo sem utilidade , mas veremos ao passar do tempo
que a economia de código e a organização são extremamente úteis , para criarmos uma função devemos dar um nome , um tipo de retorno e uma quantidade de parâmetros
de entrada , para acessarmos uma função devemos seguir a risca os tipos e a quantidade de variáveis de parâmetro , podemos ter varias funções com o mesmo nome
mas não com os mesmos parâmetros , isso se chama em c++ de sobrecarga de funções, o compilador reconhece qual função usar através do parâmetro de entrada
devemos ficar atentos também que em c++ as funções devem estar antes da função 'main'
sobre os parâmetros , temos dois tipos  por referencia e  por valor , por valor a função não irá alterar o valor da variável de entrada , já por referencia
a função irá alterar o espaço de memória da variável de entrada , a principio é tudo que devemos saber sobre funções em c++, não iremos entrar muito a fundo nisso.

faremos um programa que usa uma função de adição entre duas variaveis.

#include <iostream>
using namespace std;

void adicao(int operando1, int operando2)
{

    int soma;
    soma = operando1 + operando2;
    cout << "Soma = " << soma << endl;

}

int main()
{
    int operando1, operando2, soma;
    cout << "Digite os operandos 1 e 2 :  ";
    cin >> operando1 >> operando2;
    adicao(operando1, operando2);

    return 0;
}


obs importante : o nome das variáveis do método principal , não necessariamente devem ser iguais as do parâmetro da função, evite usa o comando cout dentro de uma função
para que o código seja reaproveitavel em diversas situações.

- é uma boa pratica de programação sempre que possível criar funções para melhor organização e reaproveitamento de código.



bom galera por enquanto é só, parabéns para quem chegou até o final e
espero ter ajudado , aceito criticas tanto positivas quanto negativas
lembrando que o principal objetivo aqui foi ajudar , sem receber nada em troca ;]
se alguém tiver alguma duvida e queira entrar em contato  meu email é arthur-ti@hotmail.com , obrigado a todos e até o próximo post.


introdução a linguagem c++ escrito por Arthur Rodrigues de Almeida.
30/04/2012.

Um comentário:

  1. Bakaninha demaiis... gostei e ajudou mto, p quem naum tinha mto conhecimento, ajudo mto... vlw, tendo mais dá um toke ;)

    ResponderExcluir