domingo, 27 de maio de 2012

Programando em Java - parte 6

Métodos

Os métodos são as operações que um objeto é capaz de fazer, ou seja, seu comportamento. Podemos dividir um método em quatro partes:

Nome: É utilizado para chamar o método. Na linguagem Java, é uma boa prática definir os nomes dos métodos utilizando a convenção Camel Case.

Lista de parâmetros: Define os valores que o método deve receber. A lista de parâmetros pode ser vazia, caso não haja nenhum a ser passado.

Corpo: Define o que irá acontecer quando o método for chamado

Retorno: A resposta que será devolvida ao final do processamento do método. Quando o método não devolve nenhuma resposta, ele dever ser marcado com a palavra void.

Suponha que eu queira depositar um dinheiro em minha conta, para isso o método deposita precisaria ser implementado na minha classe Conta:

void deposita(double valor) {
    //Tudo o que está envolvido pelas chaves é considerado corpo do método
    this.saldo += valor;
}
//retorno: void
//nome: deposita
//lista de parâmetros: double valor


Para realizar um depósito, devemos chamar o método deposita() através da referência do objeto que representa a conta que terá o dinheiro depositado.



Conta c = new Conta();
//chamando o método
c.deposita(1000);


Na grande maioria das vezes um método vai ser montado para manter os valores dos atributos do objeto. Dentro de um método, para fazer acesso a um atributo devemos utilizar o comando this.

O método deposita não retorna nenhum valor, por isso o tipo de retorno está definido como void. Um método pode retornar praticamente qualquer tipo de variável. Um exemplo de um método que retorna um valor double.


double exibeSaldo() {
    return this.saldo + this.limite;
}


Agora devemos ter uma variável para armazenar o valor retornado pelo método. Exemplo:


Conta c = new Conta();
c.deposita(1000);

//armazenado o retorno do método em uma váriavel que tenha o tipo de definição igual ao retorno do método chamado
double saldo = c.exibeSaldo();

javax.swing.JOptionPane(null, "Saldo disponivel" + saldo);


Programando em Java - parte 5

POO - Programação Orientada a Objetos

Orientação a objetos é um paradigma de programação, que se relaciona com a ideia de organizar, classificar e abstrair as coisas. 

Domínio e Aplicação

Um domínio é composto pelas entidades, processos e informações Uma aplicação pode ser desenvolvida para tornar fazível as tarefas de um domínio.

Para entender melhor o que é domínio e aplicação, observe o seguinte cenário. Um empresa está desenvolvendo uma solução para um banco:

Domínio = banco
Entidade = clientes, funcionários, agências e contas.
Aplicação = sistema a ser vendido para o banco

Objetos, atributos e métodos

Os objetos são usados para representar as entidades do domínio. As entidades possuem características e essas características são representadas pelos atributos. As entidades também podem executar ações, essas ações são os métodos.

Exemplo:
Entidade = Cliente
Atributo(s) da entidade = nome, rg, cpf;
Método(s) da entidade = fazEmprestimo, mudaEndereco

Classes

Antes de um objeto ser criado devemos definir quais serão seus atributos e métodos. Para realizar essa tarefa fazemos o uso da classe. 

Uma classe é  desenho, projeto de um objeto. Assim como a planta  é um desenho, projeto de uma casa. 

Veja como ficaria a classe conta:
Conta.java
public class Conta { //entidade     double saldo; //atributos     double limite; //atributos     int numero; //atributos }
Agora que já definimos a classe conta, podemos criar objetos a partir dela. Para criar novos objetos é necessário utilizar o comando new.

public class TestaConta { public static void main(String[] args) { new Conta(); } }
Não há nenhum limite para se usar o comando new, ele pode ser usado mais de uma vez no código. Exemplo:

public class TestaConta { public static void main(String[] args) { new Conta(); new Conta(); new Conta(); } }
Tudo foi criado corretamente até agora, porém, se compilarmos o código veremos que nada é exibido. Isso acontece pois os objetos criados não guardam nenhuma referência, e para manipular um objeto é necessário que ele tenha uma referência.

Referências 

A referência de um objeto é a única maneira de acessar seus atributos e métodos. Podemos dizer que a referência funciona como um controle remoto, com o controle conseguimos manipular a TV: aumentamos e diminuímos, ligamos e desligamos, trocamos de canal. 

O comando new, aloca um objeto na memória e retorna uma referência para que possamos acessar aquele objeto. Para guardar essa referencia devemos declarar um avariável do tipo da Classe e ela irá receber o retorno do new, exemplo:

public class TestaConta { public static void main(String[] args) { Conta c = new Conta(); //declara e já recebe a referencia Conta c2; //declara a variável que irá armazenar a referencia c2 = new Conta(); //atribui a referencia do objeto a variável } }
Agora que já temos a referencia, podemos acessar os atributos do objeto. Para acessar os atributos e métodos que estão presentes em nossos objetos utilizamos o operador "." (ponto final).

public class TestaConta { public static void main(String[] args) { Conta c = new Conta(); c.saldo = 1000; //acessando os atributos do objeto com o operador "." c.limite = 100; c.nro = 1; System.out.println("Saldo = R$" + c.saldo); System.out.println("Limite = R$" + c.limite); System.out.println("Número = R$" + c.nro); } }
No código acima o atributo saldo recebe 1000, limite recebe 100 e nro recebe 1. Na sequencia os valores são exibidos para o usuário.

Poderíamos instanciar um objeto e utilizar seus atributos sem inicializa-los explicitamente, pois os atributos são inicializados com valores padrão. Os atributos numéricos são inicializados com 0, os do tipo boolean são inicializados com o tipo false e os demais tipos são inicializados com null (vazio).

Programando em Java - parte 4

If-Else

O comando if testa condições booleanas. Para formar uma condição booleana você deve usar os operadores relacionais em conjunto com os operadores lógicos.

Se o parâmetro passado para a condição if retornar true, então o bloco de comandos do if é executado. Caso contrário o bloco do else é executado.

O parâmetro passado para o if deve ser uma condição booleana, caso o contrário um erro de compilação irá acontecer. O comando else é opcional, ou seja, um if pode existir sem que haja um else. Agora para um else existir é necessário que haja um if.

if(idade >= 18) {     System.out.println("Usuário é maior de idade"); } else {     System.out.printn("Usuário é menor de idade"); }

While

O while é um comando usado para repetir um trecho de código indeterminadas vezes. A ideia é que o comando o comando seja executado enquanto o a condição for verdadeira. Exemplo:

int i = 1;
while(i < 10) {     System.out.println("Volta " + i); }

O parâmetro do comando while tem que ser um valor booleano, caso contrário um erro de compilação irá acontecer.


For

O comando for é análogo ao comando while. A diferença é que o for tem 2 partes a mais do que o while, uma é para inicializar a variável de controle e a segunda parte é onde fica o modificador dessas variáveis.

for(int i = 0; i < 10; i++) {     System.out.println("Volta" + 1); }
O Java possui ainda o comando do-while e o teste ternário, porém, como eles não são muito usados não abordarei seu uso por enquanto.

Fixando o nosso conhecimento

  1. Faça um programa Java que imprima seu nome 100 vezes.
  2. Faça um programa Java que imprima os números de 1 a 200.
  3. Faça um programa Java que imprima todos os números pares de 1 a 100.

Programando em Java - parte 3

Variáveis 

Na linguagem de programação Java as variáveis devem ser declaradas para poder usá-las. Para acessar as variáveis usamos seu nome, as variáveis armazenam valores compatíveis com seu tipo. Para que nenhum problema ocorra na declaração das variáveis basta seguir algumas regras:
  • Declare variáveis que respeitem o escopo do código e que estejam devidamente contidas em um bloco de código;
  • Não use nomes iguais para variáveis que pertençam a um mesmo bloco de código;
  • Use somente caracteres válidos para declarar o nome de suas variáveis.

Tipos primitivos


Declaração de variáveis

Para declarar variáveis em Java, basta colocar o tipo da variável e seu nome. Exemplo:

int idade; //armazena números inteiros float peso; //armazena números reais //Declarando e inicializando as variáveis char letra = 'A'; double saldo = 132.65;

Constantes

Constante é uma variável imutável. Para declarar constantes em Java utilizamos a palavra chave final. Exemplo:

final int idade = 18; final float peso = 70.8;

Operadores em Java


Operadores de Atribuição

Com esses atributos podemos alterar e manipular o valor de nossas variáveis. Exemplo:

int v = 10;    //v = 10 v += 10;      //v = 20 v -= 5;         //v = 15 v *= 1;        //v = 15 v /= 3          //v = 5 v %= 5;       //v = 1

Operadores Relacionais

Utilizamos os operadores relacionais quando precisamos determinar a relação entre uma variável e/ou um valor. A operação realizada com operadores relacionais retornam valores do tipo primitivo boolean (true/false). Exemplo:

int v = 10; boolean x = false;
x = (v == 10); //x = true x = (v > 10); //x = false x = (v < 10); //x = false x = (v != 10); //x = false x = (v >= 10); //x = true x = (v <= 10); //x = true


Operadores lógicos

Os operadores lógicos são usados para analisarem expressões. Assim como os operadores relacionais, os lógicos também retorna um tipo primitivo boolean.

int v = 10; boolean x = false; x = v > 10 && v < 100; //x = false x = v > 10 || v < 100; //x = true

sábado, 26 de maio de 2012

Programando em Java - parte 2

Método Main 

Todo programa Java (J2SE) obrigatoriamente tem que possuir um método main. O método main é o primeiro método a ser chamado quando o programa é executado, logo, o main é o  ponto de partida dos programas Java (J2SE). Todo método main é: public, static e void. Você não precisa se preocupar em entender o que cada uma dessas palavras significam, apenas aprenda a declarar o main corretamente. Abaixo listei possíveis maneiras de se declarar o método main:

public static void main (String[] args) {} //mais comum
static public void main (String[] args) {} //raro, mais também é usado
public static void main (String args[]) {} //muito usado


Para fixar nosso conhecimento aqui adquirido, vamos refazer o programa da aula 1 e assim realizar alguns teste.

Aula.java
public class Aula1{
    public static void main(String[] args) {
        System.out.println("Sr." + args[0] + " Seja Bem vindo ao mundo Java!");
    }
}

Passando parâmetros para o main

Em java podemos passar valores para o main. Isso pode ser feito no momento em que vamos compilar o nosso código. Essa técnica não é muito utilizada, porém, um bom programador java deve conhecer todas as técnicas envolvidas na linguagem de programação.

Os parâmetros deve m ser passados logo após o nome o nome do programa, quando vamos compila-lo. Veja o exemplo:

p.s = Caso você não saiba compilar um programa e executa-lo, PARE e leia a aula Programando em Java - parte 1.

Windows

C:\User\Guilherme > cd Desktop\programando_java\
C:\User\Guilherme > javac Aula1.java Guilherme
C:\User\Guilherme > java Aula1

Linux

guilherme$ cd Área\ de\ trabalho/programando_java/
guilherme$ javac Aula1.java Guilherme
guilherme$ java Aula1
Observe a saída do programa. 

Fixando o nosso conhecimento

  1. Crie uma pasta com o seu nome underline java, exemplo: guilherme_java. Essa pata conterá todos os seus exercícios sugeridos de Java de agora em diante.
  2. Crie um programa que imprima seu nome e sobrenome.
Qualquer duvida utilize o espaço de comentários!

quarta-feira, 23 de maio de 2012

Sistema Banco simples - Aula de Lógica

E ai pessoal, desenvolvi esse programa em python para ilustrar o algoritmo que fizemos hoje em sala (23-05-2012), na aula de lógica. Fiquem a vontade para corrigir o código, assim como para tirarem suas dúvidas.

BancoBB.py
#vetor que ira armazenar todas as contas cadastradas vetorConta = [] #variavel responsavel pelas operacoes do programa opcao = int(0) #variavel armazena numero de contas ja cadastradas no sistema nroContas = int(0) while(opcao != 6):     #criando um dicionario de dados para armazenar minhas contas     conta = {}.fromkeys(['nome', 'nro', 'saldo'])     opcao = input('\n1- Cadastrar Conta \n2- Remover Conta \n3- Depositar \n4- Sacar \n5- Consultar \n6- Finalizar \n:')     if opcao == 1:         if nroContas <= 50:             conta['nome'] = raw_input('Digite o nome: ')             conta['nro'] = int(input('Digite o nro. da conta: '))             conta['saldo'] = 0         vetorConta.append(conta)         nroContas += int(1)         print '\nCliente cadastrado com sucesso!\n'         print '\n',vetorConta,'\n'     elif opcao == 2:         nroDaConta = int(input('Informe o numero da conta: '))         existe = False         for vet in vetorConta:             conta = vet             if conta['nro'] == nroDaConta:                   vetorConta.remove(conta)                 print '\nCliente removido com sucesso!\n'                 existe = True         if existe == False:             print '\nEssa conta nao esta cadastrada\n'     elif opcao == 3:         nroDaConta = int(input('Informe o numero da conta: '))         existe = False         for vet in vetorConta:             conta = vet             if conta['nro'] == nroDaConta:                 valor = float(input('Informe o valor que a ser depositado: '))                 conta['saldo'] += float(valor)                 print '\nDeposito realizado com sucesso!\n'                 existe = True         if existe == False:             print '\nEssa conta nao esta cadastrada\n'     elif opcao == 4:         nroDaConta = int(input('Informe o numero da conta: '))         existe = False         for vet in vetorConta:             conta = vet             if conta['nro'] == nroDaConta:                 valor = float(input('Informe o valor a ser sacado: '))                 if valor > conta['saldo']:                       print '\nSeu saldo e inferior ao valor do saque\n'                 else:                     conta['saldo'] = conta['saldo'] - valor                     print 'Operacao realizada com sucesso!'                 existe = True             if existe == False:                 print '\nEssa conta nao esta cadastrada\n'     elif opcao == 5:             nroDaConta = int(input('Informe o numero da conta: '))             existe = False             for vet in vetorConta:                 conta = vet                 if conta['nro'] == nroDaConta:                     print 'Nro. ', nroDaConta                     print 'Cliente.: ', conta['nome']                     print 'Saldo.: ', conta['saldo']                     existe = True             if existe == False:                 print '\nEssa conta nao esta cadastrada\n'     else:         print '\nOperacao invalida!\n'

domingo, 20 de maio de 2012

Vetor ou Array Unidimensional em C

Fala galera, hoje vamos falar de arrays unidimensionais os famosos vetores. Podemos dizer de forma bem simples que um vetor é um agregador de valores que possuem o mesmo tipo. Suponhamos que você precise armazenar todas as vogais do alfabeto, como você faria isso. Sem vetor você iria ter que declarar 5 variáveis e cada uma armazenaria uma vogal certo? Agora vejamos como isso ficaria bem mais simples com o uso de um vetor:

var vet[1..5]: literal

Pronto agora podemos armazenar todas as vogais, uma em cada posição do nosso vetor que no total possui 5 posições segundo sua declaração.

Agora vamos ver como fazer isso em C:
#include <stdio.h>
int main(void)
{
 //declarando um vetor
 char vet[5];
 int i;

 //preenchendo o vetor com as vogais
 vet[0] = 'a';
 vet[1] = 'e';
 vet[2] = 'i';
 vet[3] = 'o';
 vet[4] = 'u';

 //imprimindo as vogais contidas na variável vet (vetor)
 for(i = 0; i < 5; i++)
  printf("\t%c", vet[i]);

 return 0;
}
Lembrando que em C podemos ter vetores dos tipos: int(inteiros), float(reais) e double(reais). Uma função que é pouco usada mais é útil também é a função sizeof(*array). Essa função retorna a quantidade de bytes que sua array está utilizando. Então para usarmos essa função primeiro temos que saber quantos bytes cada tipo ocupa em C.
int e float >> 4 bytes
double     >> 8 bytes
char         >> 1 byte
Então para sabermos quantas posições nosso array tem, basta usar a função sizeof() e dividir esse tamanho por a quantidade de bytes que cada elemento da array ocupa. Exemplo:
#include <stdio.h>

int main(void)
{
 printf("char: %d bytes \n", sizeof(char));
 printf("int: %d bytes \n", sizeof(int));
 printf("float: %d bytes \n", sizeof(float));
 printf("double: %d bytes \n", sizeof(double));

 char var1[50];
 int var2[10];
 float var3[100];
 double var4[80];

 printf("qtde de elementos do vetor var1: %d \n", sizeof(var1)/sizeof(char)); printf("qtde de elementos do vetor var2: %d \n", sizeof(var2)/sizeof(int)); printf("qtde de elementos do vetor var3: %d \n", sizeof(var3)/sizeof(float)); printf("qtde de elementos do vetor var4: %d \n", sizeof(var4)/sizeof(double));
 return 0;
}

Outro ponto importante é saber quais são as formas que temos para declarar arrays em nosso código C. Temos duas maneiras, uma usamos quando não sabemos quais valores irão estar em nosso array, ou seja, só sabemos o seu tamanho:
#include <stdio.h>
int main(void)
{
    int idade[100];
    //usamos esta forma quando já sabemos o tamanho do nosso vetor, porém não sabemos os valores de seus elementos
    return 0;
}

Agora quando já sabemos os valores dos elementos de nosso array, já podemos declara-los e ao mesmo tempo inicializa-los em uma única linha de comando. Isso deixa o código mais legível e muito mais enxuto. Exemplo:
#include <stdio.h>

int main(void) 
{
    int idade[3] = {18, 10, 30}; //Com isso a posição 0,1,2 do meu array já possuem um valor no momento de sua execução
    int idade[] = {18, 10, 30}; //Esse trecho de código é equivalente ao trecho de código de cima
    return 0;
}

Aqui termina mais um tutorial sobre linguagem C. Até a  próxima pessoal...

Programando em Java - Parte 1

Olá pessoal, hoje vamos dar o ponta pé inicial para mais uma série do blog Programando: "Programando em Java". Essa série vai abordar todos os conceitos iniciais para se programar em Java. Nela vamos aprender:
  • Compilar e executar programas Java através da prompt de comando;
  • Tipos de variáveis;
  • Palavras reservadas;
  • Estrutura condicional;
  • Estrutura de repetição;
O objetivo dessa série é preparar o aluno para a próxima série que abordará POO (Programação Orientada a Objetos).

Bom, tudo esclarecido vamos agora ver brevemente como o Java funciona e escrever o nosso primeiro código Java.

Nota: Para prosseguir é fundamental que a JDK esteja instalada e configurada devidamente em seu sistema operacional. Caso você não tenha a JDK ou tenha mais ela não esteja configurada leia o post Iniciando em Java - Instalando a JDK.

Porque aprender Java?

Até hoje, a plataforma Java já atraiu mais de 6,5 milhões de desenvolvedores de software. É utilizada em todos os principais segmentos da indústria, estando presente em uma ampla gama de dispositivos, computadores e redes.
Sua versatilidade, eficiência, portabilidade de plataforma e segurança fazem dela a tecnologia ideal para a computação em rede. A tecnologia Java está em todo lugar! Ela pode ser encontrada em laptops, datacenters, consoles de jogo, supercomputadores científicos, telefones celulares e até na Internet.

O Java foi testado, refinado, ampliado e experimentado por uma comunidade dedicada. E, com mais de 6,5 milhões de desenvolvedores, é a tecnologia mais ampla e ativa do planeta. Com sua versatilidade, eficiência e portabilidade, o Java tem valor inestimável para desenvolvedores, pois permite:
  • Criar um software em uma plataforma e executá-lo em praticamente qualquer outra;
  • Criar programas para execução em navegadores e serviços da Web;
  • Desenvolver aplicativos no lado do servidor usados tanto em fóruns, lojas e pesquisas on-line, como no processamento de formulários HTML, e muito mais;
  • Combinar aplicativos ou serviços usando a linguagem Java para criar aplicativos ou serviços altamente personalizados;
  • Criar aplicativos potentes e eficazes para telefones celulares, processadores remotos, produtos de consumo de baixo custo e praticamente qualquer outro dispositivo com tecnologia digital.

Máquina Virtual, isso torna o Java multiplataforma!

O Java utiliza um conceito de máquina virtual, onde existe entre o sistema operacional e ao aplicação, uma camada extra responsável por traduzir
 o que sua aplicação deseja fazer para as respectivas chamadas ao sistema operacional onde ele está rodando no momento.

Primeiro código Java

Antes de criarmos o código propriamente dito, vamos primeiro criar uma pasta para armazenar nossos arquivos *.java e *.class. Vamos criar uma pasta na Área de Trabalho com o nome de programando_java. Agora abra o bloco de notas ou um editor de código de sua preferência e digite o seguinte código:

Aula1.java
import javax.swing.JOptionPane; public class Aula1 {     public static void main(String[] args) {         JOptionPane.showMessageDialog(null, "Olá mundo!");     } }
Saída: Olá Mundo!

Compilando e executando o código no Windows

Abra o terminal do windows (prompt de comando), e acesse a sua Área de Trabalho. Entre na pasta programando_java e digite o seguinte comando para compilar seu arquivo:
javac nome_do_seu_arquivo.java, no meu caso como o meu arquivo chama Aula1.java, ficaria mais ou menos assim: javac Aula1.java.

Se nenhum erro for retornado, então digite o seguinte comando para ver a saída do programa: 
java nome_do_seu_arquivo, no meu caso como meu arquivo chama Aula1.class, ficaria mais ou menos assim: java Aula1.

Se algum erro acontecer, reveja seu código e compare-o com o que está escrito no blog. Verifique também se você seguiu todos os passos de compilação e execução corretamente.

Compilando e executando o código no Linux

Abra o terminal do Linux. Siga as mesma instruções que foram dadas para o SO Windows.

Pessoal como essa é apenas uma introdução, o código não vai ser explicado até porque esse não é o objetivo desse post. 

Então eu fico por aqui, qualquer duvida ou sugestão é só deixar um comentário, até mais...

Programando com python - parte 2

Fala galera, mais um pouco de python para vocês. Hoje vou postar um código que trabalho um pouco com vetor (array). Esse exercício  também está na lista de estrutura de  dados compostos, ele é o exercício 1.

Segue o código em python. exercicio1.py
#programa simples em python
#manipulando um array

positivos = []
negativos = []
vetor = []
nulos = int(0)

for i in range(0,10):
    aux = int(input("Informe um número para posição {0}: ".format(i)))
    vetor.append(aux)

for i in range(1,10):
    if vetor[i] > 0:
        positivos.append(vetor[i])
    elif vetor[i] < 0:
        negativos.append(vetor[i])
    else:
        nulos += 1

print("VETOR PRIMARIO")
for i in range(0, len(vetor)):
    print(vetor[i])

print("EXIBINDO TODOS OS NUMEROS POSITIVOS")
for i in range(0, len(positivos)):
    print(positivos[i])

print("EXIBINDO TODOS OS NUMEROS NEGATIVOS")
for i in range(0, len(negativos)):
    print(negativos[i])

print("EXIBINDO QUANTIDADE DE NUMEROS NULOS NO VETOR")
print(nulos)
Até a próxima pessoal...

sábado, 19 de maio de 2012

Programando com python - parte 1

Olá pessoal, mais um post. Dessa vez vamos de python, uma linguagem simples, fácil e muito poderosa. Não é atoa que essa linguagem é a mais usada pela empresa Google.

Vamos lá então, o programa abaixo é apenas um simples exemplo de como trabalhar com o python. Esse programa pergunta a nota de 10 alunos e depois calcula a média aritmética.

Se você usa Windows e não tem o python instalado, veja o tutorial: imasters

Se você usa Linux, muito provavelmente o python já está instalado em sua máquina, apenas abra o terminal e digite: python.

Segue o código fonte do programa. pograma1.py
#programa calcula média da sala
b = int(0)
for i in range(0,10):
    a = input("Informe a nota do aluno: ")
    b += int(a)
print("A média da sala foi", b/10)
Bom pessoal, por hoje é só. Duvidas, sugestões e criticas fiquem a vontade para deixarem seus comentários. :)

Yucky Choccy


Fala pessoal, esse é o código que eu montei para o exercício 9 da lista de estrutura de dados compostas do IFSP.     :)

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

int main(void) {
    char c[3][3], player[2] = {'A','B'};
    int i, j, jogada, linhaboa, aux, cont, venceu, x;
    //preenchendo o tabuleiro do jogo com o caractere -
    for(i = 0; i < 3; i++) {
        for(j = 0; j < 3; j++)
            c[i][j] = '-';
        puts("");
    }
    aux = 1; //variável aux é responsável por controlar o inicio e o termino do jogo
    cont = 0; //variável cont, conta quantas jogadas foram realizadas. Com isso conseguimos determinar qual é a vez de cada jogador.

    srand(time(NULL));
    i = rand() % 3; //sorteando um número aleatório de 0..2
    j = rand() % 3; //sorteando um número aleatório de 0..2
    c[i][j] = 'X'; //na posição sorteada eu preencho o local com o sabão
    //enquanto aux tiver valor 1, então o código é executado
    while(aux) {
        //imprimindo o tabuleiro do jogo, isso permite que os jogadores vejam como o tabuleiro fica após cada jogada
        for(i = 0; i < 3; i++) {
            for(j = 0; j < 3; j++)
                printf("%c\t", c[i][j]);
            puts("");
        }
        printf("Sua vez de jogar JOGADOR %c\n\n", player[cont%2]);
        printf("\nInforme o que deseja fazer... \n1- Jogar em uma linha \n2- Jogar em uma coluna: ");
        scanf("%d", &jogada);
        if(jogada == 1) {
            printf("\nInforme o numero da linha: ");
            scanf("%d", &jogada);
            x = 0; //guarda o numero de vezes que alguma parte do tabuleiro foi eliminada
            while(jogada < 3) {
                linhaboa = 1; //informa se a linha está apta a ser removida do tabuleiro
                //o tabuleiro é varrido com o intuito de saber se naquela linha temos o sabão em alguma posição
                for(i = 0; i < 3; i++) {
                    if(c[jogada][i] == 'X') {
                        linhaboa = 0; //isso informará ao código que a linha escolhida do tabuleiro tem o sabão em alguma casa
                        jogada = 3; //isso fará com que o jogador passe a vez para o próximo
                    }
                }
                //se a linha estiver apta a ser removida, então isso será feito
                if(linhaboa && c[jogada][0] == '-') {
                    for(i = 0; i < 3; i++)
                        c[jogada][i] = ' ';
                    x = 1; //isso informa que não estamos mais na primeira jogada dessa iteração
                } else if(jogada == 3 && x == 0) {
                    puts("\nEssa jogada não pode ser realizada!");
                } else if(linhaboa && c[jogada][0] == ' ') {
                    jogada = 3;
                    puts("\nEssa coluna já fpoi eliminada!!!");
                }
                jogada++;
            }
            if(x)

                //incrementa a variável cont, indicando que algum jogador realizou uma jogada
                cont++;
        } else if(jogada == 2) {
            //esse trecho de código é semelhante ao código do primeiro if. A unica diferença é que este verifica as colunas ao invés das linhas
            printf("\nInforme o numero da coluna: ");
            scanf("%d", &jogada);
            x = 0;
            while(jogada < 3) {
                linhaboa = 1;
                for(i = 0; i < 3; i++) {
                    if(c[i][jogada] == 'X') {
                        linhaboa = 0;
                        jogada = 3;
                    }
                }
                if(linhaboa && c[0][jogada] == '-') {
                    for(i = 0; i < 3; i++)
                        c[i][jogada] = ' ';
                    x = 1;
                } else if(jogada == 3 && x == 0) {
                    puts("\nEssa jogada não pode ser realizada!");
                } else if(linhaboa && c[0][jogada] == ' ') {
                    jogada = 3;
                    puts("\nEssa coluna já foi eliminda!!!");
                }
                jogada++;
            }
            if(x)
                cont++;
        } else
            puts("\nNúmero de jogada é inválido!");
        venceu = 0; //variável é zerada toda vez, pois toda rodada há uma verificação para ver se algum jogador venceu
        for(i = 0; i < 3; i++) {
            for(j = 0; j < 3; j++)
                if(c[i][j] == '-') //isso pergunta se ainda existe alguma casa no tabuleiro que pode ser jogada
                    venceu++; //essa váriavel irá armazenar quantas casas ainda podem serem eliminadas
        }
        //caso não haja mais nenhuma casa, o jogo deve ser encerrado, pois já temos um ganhador
        if(venceu == 0) {
            printf("\nJOGADOR %c VENCEU\n\n", player[(cont+1)%2]);
            aux = 0;
        }
    }
    return 0;

}

Qualquer duvida só deixar um comentário... caso tenha alguma duvida ou sugestão deixe um comentário também :). Até a próxima galera!!!

terça-feira, 8 de maio de 2012

Simulador de aeronave - simples

Olá pessoal, abaixo postei o código do exercício 10 da lista de estruturas de dados compostas:

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

void _imprimeRota(char m[7][9]);

int main()
{
    int i, j, parar, linhaAtual, colunaAtual;

    parar = 1;
    linhaAtual = 5;
    colunaAtual = 1;

    char m[7][9] = {
        {'#','#','#','#','#','#','#','#','#'},
        {'#',' ',' ','#',' ',' ',' ','F','#'},
        {'#',' ',' ',' ',' ',' ','#',' ','#'},
        {'#','#',' ','#',' ',' ','#',' ','#'},
        {'#',' ',' ',' ',' ',' ',' ',' ','#'},
        {'#','I',' ',' ',' ','#',' ',' ','#'},
        {'#','#','#','#','#','#','#','#','#'},
    };

    _imprimeRota(m);

    do {
        printf("\nInforme as cordenadas que deseja sobrevoar [linha, coluna]:\n");
        scanf("%d%d", &i, &j);

        i--;
        j--;

        linhaAtual = linhaAtual - i;
        colunaAtual = j - colunaAtual;

        if((i > 7 || j > 9) || (i < 0 || j < 0))
            printf("\nEssa cordenada não é válida!\n");
        else if(linhaAtual > 1 || colunaAtual > 1)
            printf("\nEssa coordenada não segue uma rota!\n");
        else if(m[i][j] == '#') {
            system("clear");
            parar = 0;
            printf("\nO avião colidiu com um obstáculo!\n");
            m[i][j] = 'C';
        } else if(m[i][j] == 'F') {
            system("clear");
            parar = 0;
            printf("\nVocê chegou ao seu destino!\n");
        } else if(m[i][j] == 'I') {
            linhaAtual = i;
            colunaAtual = j;
            _imprimeRota(m);
            printf("\nVocê está no ponto de partida!\n");
        } else {
            m[i][j] = 'A';
            linhaAtual = i;
            colunaAtual = j;
            _imprimeRota(m);
        }

    }while(parar == 1);

    printf("\n\t\tEXIBINDO A ROTA FEITA PELA AERONAVE: \n\n");

    _imprimeRota(m);

    printf("\nLEGENDA:\n - A: [Por onde a aeronave passou]\n - C: [ponto de colisão]\n");

    return 0;
}

void _imprimeRota(char m[7][9]) {
    int i, j;

    for(i = 0; i < 7; i++) {
        for(j = 0; j < 9; j++) {
            printf("%c\t", m[i][j]);
        }
        printf("\n");
    }
}

Se você usa o sistema operacional Windows, substitua todos os system("clear") por system("cls").

Qualquer dúvida só postar um comentário... liberei os comentários anônimos :)

Novidade!!! Agora vamos ter canal no Youtube =D

Fala pessoal tudo beleza, estou sumido a correria está forte por aqui. Estou querendo dar um start em um projeto antigo que vem desde o temp...