sábado, 17 de outubro de 2009

C++ - Aula 02


C++  -  Aula 02
__________________________________________________
Conteúdo:
1. Introdução a Programação de Jogos com C++ (continuação)
     1.6 - Operadores
2. Pré-processador e diretivas de pré-processador
2.1 - Pré-processador
2.2 – Diretivas de pré-processador
3. Namespaces
3.1 – Utilizando a diretiva using
4. Entrada e Saída de Dados (Input/Output) (I/O)
4.1 – Arquivo de Input/Output
4.2 – Input
4.3 – Output
4.4 – Say Hello to the World!
___________________________________________________
1.6 – Operadores

Declarar e inicializar variáveis é muito útil, mas algumas vezes precisaremos fazer algumas operações com elas, como por exemplo multiplicação. Os caracteres responsáveis por essas operações são chamados de operadores. Existem os operadores lógicos, que resultam em valores lógicos (true ou false), operadores aritméticos, que operam sobre números e expressões e resultam em valores numéricos, operador de atribuição, que atribui valores às variáveis, operadores relacionais, que comparam valores entre variáveis e resultam em valores lógicos (true ou false). Abaixo segue uma série de tabelas mostrando os operadores e suas respectivas operações.

Operadores Lógicos
Operador
Operação
Descrição
&&
AND
Compara uma variável e outra
||
OR
Considera uma variável ou outra
!
NOT
Negação de uma variável
Exemplos:
(a == b) && (c == d) /* Verifica se “a” tem o mesmo valor de “b” e se “c” tem o mesmo valor de “d”. Retorna verdadeiro ou falso.*/
(a == b) || (c == d) /* Faz a mesma verificação, mas retornará verdadeiro se a primeira expressão ou a primeira forem verdadeiras */
! a /* Nega o valor contido na variável “a”. Por exemplo, se a variável “a” for do tipo inteiro e tiver o valor 1, com a negação qualquer valor diferente de 1 será tomado como true (verdadeiro).*/

Você talvez esteja se perguntando por que o texto está contido entre /* e */. Isso é chamado de comentário. Comentários são ignorados pelo compilador e servem para ajudar os programadores com notas descritivas em partes dos códigos. Para comentários de uma linha você também pode usar duas barras (//), e todo o texto contido na mesma linha após as duas barras será comentado, e conseqüentemente ignorado pelo compilador.

Operadores Aritméticos
Operador
Operação
Descrição
+
Soma
Soma o valor de 2 variáveis
-
Subtração
Subtrai o valor de uma variável de outra
*
Multiplicação
Multiplica o valor de uma variável por outra
/
Divisão
Divide o valor de uma variável por outra
%
Módulo
Divide o valor de uma variável por outra e considera apenas o resto da divisão
Exemplos;
int a, b = 10;
int Resultado;
Resultado = a+b; // Resultado: 20
Resultado = a-b; // Resultado: 0
Resultado = a*b; // Resultado: 100
Resultado = a/b; // Resultado:0
Resultado = a%b; // Resultado: 0

Reparem que é possível declarar e inicializar mais de uma variável do mesmo tipo de uma só vez.

Operador de Atribuição
Operador
Operação
Descrição
=
atribuição
Atribui à variável da esquerda o valor contido na variável à direita
Exemplo:
int a;
int b = 10;
a = b; // A variável “a” receberá o valor contido na variável “b”.

Operadores Relacionais
Operador
Operação
Descrição
> 
Maior
Compara se o valor contido na primeira variável é maior que o valor contido na segunda
>=
Maior ou igual
Compara se o valor contido na primeira variável é maior ou igual que o valor contido na segunda
< 
Menor
Compara se o valor contido na primeira variável é menor que o valor contido na segunda
<=
Menor ou igual
Compara se o valor contido na primeira variável é menor ou igual que o valor contido na segunda
==
Igual
Compara se o valor contido na primeira variável é igual ao valor contido na segunda
!=
Diferente
Compara se o valor contido na primeira variável é diferente do valor contido na segunda
Exemplos:
int a = 10;
int b = 20;
(a > b); // false
(a >= b); // false
(a < b); // true
(a <= b); // true
(a == b); // false
(a != b); // true

Além desses operadores existem os operadores bit-a-bit, que serão detalhados nos capítulos subseqüentes.
Veja aqui uma tabela completa dos operadores da linguagem.

2. Pré-processador e diretivas de pré-processador

2.1 - Pré-processador
O pré-processador é um programa que analisa o programa escrito e realiza mudanças nele baseado nas diretivas de pré-processador. Ele é rodado antes da compilação modificando o programa para que ele possa ser corretamente compilado.

2.2 – Diretivas de pré-processador
São comandos dirigidos ao pré-processador que não são compilados. As diretivas são iniciadas pelo caractere “#” e podem ser colocadas em qualquer parte do programa. As principais diretivas de pré-processador são:
#include
#define
#undef
#ifdef
#ifndef
#endif
#if
#else
#elif
Vamos passar por cada um explicando seus conceitos:

#includeDiz ao pré-processador para incluir um arquivo em determinado ponto do programa.
Sintaxe: #include "nome_do_arquivo" ou #include
Se o arquivo estiver na pasta de trabalho, ou se você quiser informar o caminho completo do arquivo use “ “. Se o arquivo já estiver nas pastas de procura do compilador use < >.
Nota: Para incluir uma pasta no caminho de busca do Visual Studio vá em Tools – Options, e clique na ramificação VC++ Directories dentro de Projects and Solutions na árvore à esquerda.

#define – Diretiva usada para definir um símbolo, para definir uma constante, ou para definir macros
Sintaxe:
Definindo um símbolo:
#define nome_do_simbolo
O símbolo definido poderá ser utilizado posteriormente para testes.

Definindo uma constante:
#define nome_da_constante valor_da_constante
A constante definida esta maneira tem a mesma função da constante explicada na aula 01.

Definindo uma macro:
#define nome_da_macro(parâmetros) expressão

Exemplo de definição de uma macro:
#define maior(X, Y) ((X > Y) ? (X) : (Y))
int teste = maior(varA, varB);

Com certeza parece confuso à primeira vista, portanto irei explicar passo a passo:
O nome da macro é “maior”, e ela recebe dois parâmetros (ficará mais fácil de entender durante as aulas sobre funções). Perceba que não é especificado o tipo do parâmetro, e que não há espaço entre o nome da macro e o parênteses. A expressão é escrita entre parênteses. ((X > Y) ? (X) : (Y)) verifica se a variável X é maior que a variável Y no trecho (X > Y). O valor retornado (isso também será melhor explicado durante as aulas sobre funções) será o valor contido em X se X for maior que Y, ou, se for menor, o valor retornado será o valor contido em Y. O valor retornado será atribuído à variável “teste”, que ativou a macro.

#undef – Apaga uma macro da tabela interna que armazena as macros.
Sintaxe:
#undef nome_da_macro

#ifdef – É uma diretiva condicional, porém, como as diretivas são processadas antes do programa só é possível a utilização de constantes e símbolos do pré-processador.
Sintaxe:
#ifdef constante_ou_símbolo
código
#endif
 O código entre #ifdef e #endif só será compilado se o símbolo ou a constante tiver sido definida

#ifndef – Idêntica à #ifdef, porém só compila o código se o símbolo ou a constante não tiver sido definida.

#endif – Encerra um bloco de código seguinte à diretiva condicional.


#if – Também é uma diretiva condicional. E o código só será compilado se a condição for verdadeira.
Sintaxe:
#if (condição)
  código
#endif

#else – Funciona apenas em conjunto da diretiva #if. O código contido na diretiva #else só será compilado se a condição fornecida na diretiva #if for falsa.
Sintaxe:
#if (condição)
  código
#else
  código
#endif

#elif  - Outra diretiva condicional. Também só funciona em conjunto da diretiva #if.Implementa a estrutura else if. Essa estrutura será melhor explicada nas aulas seguintes, sobre instruções condicionais.
Sintaxe:
#if (condição)
  código
#elif
  código
#endif

A lista de diretivas não acaba por aqui, porém essas são as mais importantes e mais utilizadas. Para uma lista completa siga esse link.As diretivas explicadas acima pertencem ao padrão ANSI.

3. Namespaces
Namespaces podem ser considerados, para maior entendimento, como uma área de código. Seu uso ajuda a organizar melhor o código e a não haver ambigüidade (já que os nomes de classes e estruturas, por exemplo, deve ser único). Um namespace restringe o escopo (“alcance”) de um nome, tornando-o significativo apenas dentro do próprio namespace.
Exemplo:
#include
std::cout << “Saida de dados” << std::endl;

O exemplo acima é usado para “imprimir” (mostrar) texto na tela do console.
cout é um objeto definido no arquivo iostream e um objeto no namespace std.
 O arquivo iostream contém métodos e classes que tratam da entrada e saída de dados e é necessário incluí-lo se quisermos usar esses métodos e classes.
 << é um operador de saída de dados (output operator). O texto entre aspas é o texto que será mostrado.
endl é um objeto também definido no arquivo iostream e também é um objeto no namespace std, e é usado para uma saída de dados referente a apertar a tecla Enter em um editor de texto (ou seja.. pula uma linha).
O prefixo std é utilizado para dizer ao compilador que eu quero utilizar os objetos cout e endl pertencentes ao namespace std. O prefixo std é seguido pelo operador “::” (operador de resolução de escopo) que, nesse caso, me permite acessar os objetos.

3.1 – Utilizando a diretiva using
A diretiva using possibilita acesso direto aos elementos de um namespace, não sendo necessário o uso do prefixo. Observe o exemplo abaixo que tem a mesma saída do exemplo anterior:
#include
using namespace std;
cout << "Saida de dados" << endl;

Observem que continuo usando os objetos do namespace, porém não é mais necessária a utilização dos prefixos. É como uma ligação local, onde não é necessário discar o DDD antes do número do telefone.

4. Entrada e Saída de Dados (Input/Output) (I/O)

4.1 – Arquivo de Input/Output
Librarys (bibliotecas) são grupos de arquivos que contém rotinas para tarefas comuns em programação, como por exemplo, tratar de input/output. O arquivo iostream, que trata de I/O, utilizado anteriormente faz parte da Standard Library. Essa biblioteca provê código para operações mais comuns, dando assim a possibilidade de economizar tempo ao invés de tentar reinventar a roda.
O prefixo std é um namespace referente à biblioteca Standard Library.

4.2 – Input
Para registrarmos os dados inseridos por um usuário devemos usar o objeto cin, que é um objeto de iostream, seguido de >> (operador de extração / extraction operator) e precisamos de uma variável que armazene esses dados. Utilizamos a seguinte sintaxe:
cin >> nome_da_variável;

O console ficará esperando que o usuário digite algo, e quando ele digitar, o valor digitado será armazenado na variável nome_da_variável.

4.3 – Output
Para mostrarmos os dados contidos na variável utilizamos o objeto cout, seguido de << (operador de saída / output operator). Utilizamos a seguinte sintaxe:
cout << valores_de_saída;

Alguns detalhes precisam ser ressaltados:
- Para saída de texto, o texto deve estar entre aspas (“ “). O texto será tratado como uma cadeia de caracteres. Acentuação não é suportada.
- Para mostrarmos valores armazenados em variáveis utilizamos apenas o nome da variável após o output operator.
Exemplo:
int variável = 10;
cout << " Valor contido na variavel = " << variável << endl;

Output:
Valor contido na variavel = 10

Observe que eu posso usar vários operadores de saída, e que eu estou inicializando a variável antes de usá-la. Tentar usar a variável antes de inicializá-la irá gerar um erro em tempo de execução, ou seja, seu código irá compilar, mas na hora em que ele rodar vai dar erro.

Nota: O termo “tempo de execução” está relacionado ao comportamento do seu programa enquanto ele roda. Já o termo “tempo de compilação” está relacionado à implementação do programa em si.

4.4 – Say Hello to the World!
Como manda a tradição, nosso primeiro programa será o Hello World.

//Hello World
#include
using namespace std;

void main()
{
char nome [30];

cout << "Digite o seu nome: " << endl;
cin >> nome;
cout << endl << "Hello World! Eu fui feito por: " << nome << endl;

system ("pause");
}           

Mesmo sendo um programa bem simples ainda há vários conceitos nele que ainda não foram abordados. Não se assuste pois eles serão nas próximas aulas.

___________________________________________________
________________________
Baixe essa aula AQUI !
________________________

Nenhum comentário:

Postar um comentário