domingo, 27 de março de 2011

IF - ELSE em C

   
Nas linguagens de programação sempre haverá uma estrutura que controla o programa executando algumas instruções de acordo com uma regra definida pelo programador. Regras são para que o usuário chegue onde quer ir da melhor forma possível, quanto mais direto melhor (tanto para quem faz o código quanto para o usuário).
Essa estrutura é fundamental, imagine que você quer fazer um programa que rode de um jeito para os que fizerem algumas escolhas e de outro jeito para os que fizerem outras, todos os sistemas que fizerem isso precisam de um IF (traduzindo para os que realmente odeiam inglês: se). Se o usuário clicar num botão faça isso, se clicar em outro faça aquilo, se não clicar faça essa outra coisa... e por aí vai. Quem quiser saber o peso de um "se" veja essa o texto:



Sabendo que precisava subjugar Esparta para ter o domínio total sobre a Grécia, Felipe cercou as fronteiras da Lacônia e enviou uma mensagem aos espartanos.
            - Se não se renderem imediatamente - ameaçava -, invadirei suas terras. Se meus exércitos as invadirem, pilharão e queimarão tudo o que vocês mais prezam. Se eu marchar sobre a Lacônia, arrasarei suas cidades.
            Alguns dias depois, Felipe recebeu a resposta. Abriu a carta e encontrou somente uma palavra escrita:
            “Se”.

Fera não é? Continuemos programando

A estrutura do if é bem simples:
if(condição)
{
    comandos a serem executados *só entra aqui se a condição for satisfeita!
}

Existe também como usar um complemento para quando a condição não for satisfeita:
if(condição)
{
    comandos a serem executados *só entra aqui se a condição for satisfeita!
}
else
{
    comandos a serem executados *só entra aqui se a condição de cima NÃO for satisfeita!
}

Agora veremos como isso funciona na prática:
Vamos fazer um programa bem básico onde o aluno coloca sua nota e descobre se foi aprovado ou reprovado, abaixo o código-fonte:

#include <stdio.h>

void main ()
{
     float nota;             //nota pode ter uma parte fracionária Ex: 6 e 1/2 = 6,5
    
     printf("Informe o valor de sua nota: ");
     scanf("%f", &nota);     //guardando o valor da nota informado pelo usuário
    
     if(nota >= 6)           // se a nota for maior ou igual a 6, o usuário está aprovado (6 é a média para aprovação no caso)
     {
           printf("Voce passou!\n");
     }
     else            // se a nota for menor que 6, o usuário foi reprovado
     {
           printf("Voce foi reprovado...\n");
     }
    
     system("pause");        // esperando que usuário digite uma tecla para fechar programa
}


No próximo post eu continuo essa estrutura introduzindo os operadores e o "else if".
Imagine que você quer colocar mais de uma condição, por exemplo ser homem e ter idade maior ou igual a de 18 anos, como você faria esse programa? E se em vez de duas condições com diferentes comandos tivesse uma terceira, como usar if e else que só abrangem duas condições??? Próximo post! "se"

quarta-feira, 16 de março de 2011

Iniciando a lógica em PHP

Apóstrofes e aspas 


No PHP, um valor pode ser atribuído a uma string usando-se aspas ("string") ou apóstrofes ('string'). Caso só existam caracteres normais dentro da string, o efeito será o exatamente o mesmo, independentemente do uso de aspas ou apóstrofes. Porém, quando se usa variáveis dentro de strings, o efeito é completamente diferente. As aspas permitem que você insira o valor de variáveis dentro de strings sem precisar fazer concatenação, já as apóstrofes não. Perceba:

<?php
$nome = 'João';

echo "Olá, meu nome é $nome !"; // O resultado é 'Olá, meu nome é João !'

echo 'Olá, meu nome é $nome !'; // O resultado é 'Olá, meu nome é $nome !'

echo 'Olá, meu nome é '. $nome . ' !'; // O resultado é 'Olá, meu nome é João !'
?>

Dica

Eu recomendo sempre utilizar aspas, pois facilita muito, além disso, chegará uma etapa em que teremos que usar ambos (apóstrofo e aspas). Então sempre nesta hierarquia: aspas depois apóstrofo.
Operadores

Operadores Aritméticos 

Exemplo
Nome
Resultado
$a + b
Adição
Soma de $a e $b
$a - $b
Subtração
Diferença entre $a e $b
$a * $b
Multiplicação
Produto de $a e $b
$a / $b
Divisão
Quociente de $a e $b
$a % $b
Módulo
Resto da divisão de $a e $b

Operadores de Atribuição 


O operador básico de atribuição é o "=", que significa "recebe" (nunca confunda com "igual").

<?php
$a = '3'; 

echo $a; // retorna 3
?>

É importante mencionar que existem também os operadores combinados, que são o operador de atribuição mais um operador aritmético.

<?php
$a =+ 5; // o mesmo que $a = $a + 5;
?>

Operadores de comparação 

Exemplo
Nome
Resultado
$a == $b
Igual
Verdadeiro se $a igual a $b
$a === $b
Idêntico
Verdadeiro se $a igual a $b e eles são do mesmo tipo (PHP4)
$a != $b
Diferente
Verdadeiro se $a diferente de $b
$a <> $b
Diferente
Verdadeiro se $a diferente de $b
$a !== $b
Não idêntico
Verdadeiro se $a diferente de $b, ou se eles não são do mesmo tipo (PHP4)
$a < $b
Menor
Verdadeiro se $a menor que $b
$a > $b
Maior
Verdadeiro se $a maior que $b
$a <= $b
Menor ou igual
Verdadeiro se $a menor ou igual a $b
$a >= $b
Maior ou igual
Verdadeiro se $a maior ou igual a $b

Operadores Lógicos 

Exemplo
Nome
Resultado
$a and $b
e
Verdadeiro quando $a e $b são verdadeiros
$a or $b
ou
Verdadeiro se $a ou $b são verdadeiros
$a xor $b
xor
Verdadeiro se $a ou $b são verdadeiros, mas não ambos
!$a
não
Verdadeiro se $a falso
$a && $b
e
Verdadeiro quando $a e $b são verdadeiros
$a || $b
ou
Verdadeiro se $a ou $b são verdadeiros

Operadores de string 


Existem apenas 2 operadores de string. O de concatenação (".") e o de atribuição de concatenação (".="). Eles funcionam assim:

<?php
$a = 'Meu nome é ';

$a .= 'José'; // a mesma coisa que $a = $a . 'José';
?>

segunda-feira, 14 de março de 2011

Entrada e Saída em JAVA

          Pois bem, após conseguirmos fazer nosso primeiro programa em JAVA, podemos começar a saber direitinho o conceito dos termos de entrada e saída desta linguagem de programação. Para podermos desfrutar dos comandos de saída desta linguagem não precisaremos usar o comando import, pois os comandos necessários para saída já estão contidos no pacote java.Lang, já para os comando de entrada, importaremos o pacote java.util.Scanner, que funcionará como  o scanf em C.

         Para comandos de saída usaremos o console, para desfrutarmos disso temos o comando System.out.println(“seu texto aqui”); para imprimir o texto no console do compilador. Por exemplo, transcreverei todo um código aqui para mostrar uma linha de texto comum e que já usamos antes o Hello World:

 

public class HelloWorld{

      public static void main(String[] args){

                       System.out.println(“Hello World!”);

 

                       System.exit(0);

                      }

     }

            O comando println(print line) serve para imprimir algo no console, seguindo este formato:

      System.out.println(lista_de_controle, lista_de_argumentos);

            Como você pode perceber , temos antes do println os comandos System.out, significa o seguinte, dentro do pacote java.Lang, temos o “subpacote” dele chamado java.Lang.System, e dentro desta classe temos o comando out, que significa saída, e dentro deste out temos comandos de saída de dados, como o println. A separação destes pacotes por pontos se deve ao encapsulamento, pelo fato de um comando estar dentro de outro, como no caso do out e println, o comando println está encapsulado em out que está encapsulado em System que está encapsulado em Lang que por fim está encapsulado em java. Mais tarde veremos o conceito de superclasses.

            Para comandos de entrada precisaremos importar o pacote Scanner, declarando-o antes da classe:

 

import java.util.Scanner;

public class Saida{

              private static Scanner scan = new Scanner(System.in);

 

              public static void main(String[] args){

                       String teste;

                       System.out.println(“Digite alguma string:”);

             teste = scan.nextLine();

            }

}

 

            Assim conseguimos ler nossa primeira string, atente para a linha de leitura teste = scan.nextLine(); e perceba que atribuimos um comando à string teste, que é scan.nextLine(); e note também que mais acima declaramos scan em private static Scanner scan = new Scanner(System.in); e que basicamente quer dizer o seguinte: uma função privada(só essa classe conhece), estática (não muda durante o programa) do tipo Scanner (ou leitura), com o nome de scan (mais simples, mas pode colocar o que quiser) está sendo atribuída a um novo Scanner (pois tenho que declarar para o programa reconhecer) que usa System.in (assim como o out de saída, temos o in de entrada no pacote System).

            Entretanto, contudo, todavia, nem tudo é um mar de rosas como declarar a entrada de dados para strings, pois temos outros formatos como double, int, char e float, pelo menos nos básicos, e digamos que variáveis como bytes são de usos mais ‘avançados’ por assim dizer. Para podermos fazer leitura de uma variável do tipo int precisamos de: mudar o tipo de variável que queremos para leitura (óbvio diga-se de passagem), e também modificar a linha de leitura de dados, onde estávamos lendo string no código anterior, e deixemos da seguinte maneira: teste = Double.parseDouble(scan.nextLine()); , e que quer dizer que estamos lendo uma variável do tipo Double, e queremos que seja lida como Double, então convertemos de string para Double, por isso o parseDouble, pois tudo que é lido vem no formato de String, por isso que quando desejamos ler realmente uma String não precisamos de algo do tipo String.parseString, já podemos ir direto para o scan.nextLine();, e este tem o significado de que usamos nosso comando que usa a função Scanner, que no nosso caso é o scan, e pedimos para ler a próxima linha, que é onde os dados serão lidos. Para ler uma variável do tipo int, só trocaremos o Double.parseDouble(scan.nextLine(); por Integer.parseInt(scan.nextLine());, fácil não? Agora tente você com o float e veja no que dá! Já para o char, temos algo mais diferente, e não é só colocar Character.parseChar(scan.nextLine());, aposto que você pensou que seria fácil assim, para podermos ler uma variável do tipo Char, leremos ele como ‘string’, colocando apenas a linha de comando na hora da leitura teste = scan.nextLine().toCharArray();, isso quer dizer que, estamos lendo uma string, porém quero trabalhar com cara caractere separado, para isso precisamos lançar para um array, ou vetor se preferir assim, para isso não finalizamos a linha em nextLine(), mas adicionamos mais um comando que ‘existe’ em nextLine() que é toCharArray(), este nos fazendo com que cada caractere seje trabalhado separadamente.

           Agora você pensa: “Beleza, agora sei como trabalhar com o básico de entrada de dados em JAVA, mas cadê a saída desses dados?Quero, também, poder ler uma variável e depois mostrá-la na tela! Isso é possível?”. Meu caro, praticamente TUDO é possível de se fazer com linguagem de programação, se não TUDO mesmo, a imaginação é o limite, embora algumas linguagens também sejam bastante limitadas, o que nos faz preferir outras. Aqui, a coisa é parecida com a hora que você mostra na tela em linguagem C, por exemplo, em C para mostrar algo na tela, com uma variável você fazia assim, vou usar de exemplo um int: printf(“%d”, variavel); certo?; Em JAVA, após a leitura da variável, ou após ‘setar’ o valor de determinada variável no próprio código fonte, não esquecendo que inicializar uma váriavel logo na declaração da mesma é uma boa prática de programação e é ALTAMENTE RECOMENDÁVEL, usaremos este comando: System.out.println(“blablablabla “ + variavel); simples não? Não se precisa de algo como %d, %c, %s, etc… Quando você coloca o + e  o nome da variável, o compilador concatena, ou seja aloca o valor da variável à string que você provavelmente colocou entre aspas, mas não necessariamente você precisa colocar uma string antes ou depois, apenas lembre-se de que ao colocar uma string no começo coloque um + depois dessa string para poder colocar a variável, caso contrário é erro de sintaxe, e se colocar depois da variável, coloque um + depois do nome da variável, caso não coloque nenhuma string neste comando, não precisa de nenhum +.

           Pois bem, desculpem a demora do post, as coisas no trabalho tem sido corridas, e tenho escrito este post aos poucos, qualquer coisa/dúvida/erro meu ou mesmo seu, podem me enviar email: carlospecter@gmail.com. Abraços a todos! E até a próxima (:

terça-feira, 22 de fevereiro de 2011

Forca em C

Aí o código fonte do projeto Forca em C, procurei comentar tudo para que pudessem entender.
É um jogo que utiliza os recursos da bilbioteca graphics.h, bem simples mas bem didático e até
divertido. Aproveitem! O executável pra jogar se encontra no link abaixo.

Baixe tudo aqui: http://www.4shared.com/file/e5I61g_L/Forca.html

Fonte:

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

/*
Nome do Programa: Forca em C
Autor: Fernando Vieira
Co-Autores:
Testes: Luiza Allen
Blog: http://fgaexplica.blogspot.com
Aluno da UNB - Gama, DF
Comentário: O jogo é para facilitar o aprendizado da biblioteca graphics.h, se divirtam e alterem
como quiser! Dúvidas entrem no blog.
*/


//funções utilizadas

void fillrectangle(int x, int y, int width, int heigth) //criei pra facilitar o uso da bar
{
     bar(x, y, x+width, y+heigth);   //bar pegava x e y inicial e x e y final, aqui o final vem com a soma da largura e altura
}

void preencher(char letra, int pos)  //preenchendo os espaços
{   
      //coordenadas do primeiro espaço
      char texto[1];   //string que receberá o texto a ser escrito na tela
     
      //a string recebe a letra e o caracter \0 que define o final de uma string
      texto[0]=letra;
      texto[1]='\0';
     
      outtextxy((65+20/2)+30*pos, 135-1, texto);    //pos é a posição e identifica em qual dos espaços será escrita a letra
}

void desenha_parte(int erros)     //pega o número do erro cometido e desenha parte correspondente
{
     switch(erros)
     {
                  case 1: fillellipse(88+2, 30+20+10, 10, 10);  //cabeça
                          break;
                  case 2: moveto(80+2+10, 30+20+10+10);         //corpo
                          linerel(0, 35);
                          break;                 
                  case 3: moveto(80+2+10-1, 30+20+10+10+5);     //braço à direita
                          linerel(-15, 10);
                          break;                                           
                  case 4: moveto(80+2+10+1, 30+20+10+10+5);     //braço à esquerda
                          linerel(15, 10);
                          break;         
                  case 5: moveto(80+2+10, 30+20+10+10+35);      //perna à direita
                          linerel(-10, 25);
                          break;                                                                                                        
                  case 6: moveto(80+2+10, 30+20+10+10+35);      //perna à esquerda
                          linerel(10, 25);
                          break;                                                                          
                  default:
                          break;       
     }
}


//main

  int driver, mode, key=0;
  int j,i, x, y, largura, altura, erros, acertos;
  char *palavra, palavra2[50], *dica, dica2[50], letra, *palavras[50], *dicas[50];
  bool acabou=false;

  int main()
  {
      initwindow(600,400);

      printf("Digite 0 para jogar sozinho ou 1 para jogar com duas pessoas: ");     
      scanf("%d",&j);
      getchar();     //tava capturando algo desnecessário, coloquei aí para pegar
    
      if(j!=1)
      {
            //jogar de um      
            palavras[0]="abacaxi";
            dicas[0]="fruta";
            palavras[1]="banana";
            dicas[1]="fruta";           
            palavras[2]="ronaldo";
            dicas[2]="jogador";           
            palavras[3]="neymar";
            dicas[3]="jogador";                       
            palavras[4]="difícil";
            dicas[4]="???";                       
            palavras[5]="lapiseira";     
            dicas[5]="objeto";                       
            palavras[6]="bola";           
            dicas[6]="objeto";                                   
            palavras[7]="computador";               
            dicas[7]="objeto";                                     
            palavras[8]="escrivaninha";     
            dicas[8]="objeto";                                   
            palavras[9]="golfe";     
            dicas[9]="esporte";                                   
            palavras[10]="futebol";
            dicas[10]="esporte";                                               
            palavras[11]="porco";            
            dicas[11]="animal";                                               
            palavras[12]="touro";     
            dicas[12]="esporte";                                               
            palavras[13]="cavalo";     
            dicas[13]="esporte";                                               
           
            srand(time(NULL));          //definindo o número aleatório pela hora atual do sistema
            i=rand()%14;                //pegando um número de 0 à 13
            palavra=palavras[i];
            dica=dicas[i];
      }
      else
      {
            printf("Digite a palavra: ");
            gets(palavra2);            //tô passando para uma string de tamanho limitado porque não estava lendo direto...
            palavra=palavra2;
           
            printf("Digite a dica: "); 
            gets(dica2);
            dica=dica2;                //tô passando para uma string de tamanho limitado porque não estava lendo direto...
      }
     
      system("cls");
     
      outtextxy(50,10,"Forca");
     
      //colocando a dica na tela
      outtextxy(130,10,dica);          //mostrando a dica
     
      //desenhando a forca
      x=20;
      y=150;
      largura=40;
      altura=5;
     
      fillrectangle(x, y, largura, altura);       
      fillrectangle(x=x+18, y, 5, -120);      //x=38
      fillrectangle(x, y=y-120, 50, 5);       //y=30
      fillrectangle(x=x+50, y, 5, 20);        //x=88

      //desenhando espaços para letras
      x=65;
      y=150;
      largura=25;
      altura=5;
           
      for(i=0; i < strlen(palavra); i++)
      {
       fillrectangle(x+30*i, y, largura, altura);        //cada uma está separada por 30 pixels no eixo x (horizontalmente)           
      }
     
      while(!acabou)         //enquanto não tiver alcançado uma condição para acabar (ganhar ou perder)
      {
       bool acerto=false;                   //variável que informa se houve acerto com a letra escolhida
       printf("Escolha uma letra: ");
       letra = getchar();                   //pegando a letra
       for(i=0; i < strlen(palavra); i++)   //verificação letra a letra
       {
              if(palavra[i]==letra)  //verificando se a letra escolhida é igual a alguma da palavra
              {
               preencher(letra, i);  //preenchendo a letra na posição
               acertos++;            //acumulando os acertos, letras que já foram descobertas
               acerto=true;          //quer dizer que a letra escolhida aparece na palavra
              }
              if(strlen(palavra)-1==i && !acerto) //na última letra se não teve nenhum acerto
              {
               erros++;               //acumula o número de errros
               desenha_parte(erros);  //desenha a parte correspondente ao erro
              }
       }
       getchar();                     //tava capturando algo desnecessário, coloquei aí para pegar
       if(erros==6){acabou=true; cleardevice(); outtextxy(50,50,"Enforcado! MUAHAHAHAHAHA"); outtextxy(50,70, palavra);}
       if(acertos==strlen(palavra)){acabou=true; cleardevice(); outtextxy(50,50,"Você venceu... Como pôde??? AHHHHHHHH!");}
      }

      system("pause");     //esperando o pressionamento de uma tecla qualquer pelo usuário
      closegraph();        //fechando a tela da parte gráfica
      return 0;
  }

sexta-feira, 18 de fevereiro de 2011

Entrada e Saída em C

Este post descreve superficialmente algumas das funções de "entrada" (input) e de "saída" (output) mais importantes da linguagem C. Todas estão na biblioteca stdio. Portanto, seu programa deve ter um #include <­stdio.h> para usar essas funções.

- printf

A função printf (print formatted) exibe na tela do monitor uma lista formatada de números, caracteres, strings, etc.

Sintaxe da função:

printf (string_de_controle,lista_de_argumentos);

Na string_de_controle teremos uma descrição de tudo que a função vai colocar na tela. Isto é feito usando-se os códigos de controle, que usam a notação %. Com isso, indicamos quais, de qual tipo e em que posição estão as variáveis a serem apresentadas.

Alguns dos códigos %:

Código

Significado

%d

Inteiro

%f

Float

%c

Caractere

%s

String

%%

Coloca na tela um %

Alguns exemplos de printf() e o que eles exibem:

printf ("Teste %% %%") Teste % %

printf ("%f",40.345) 40.345000

printf ("%2.2f",40.345) 40.34

printf ("Um caractere %c e um inteiro %d",'D',120) → Um caractere D e um inteiro 120

printf ("%s e um exemplo","Este") Este e um exemplo

printf ("%s%d%%","Juros de ",10) Juros de 10%

Códigos de Barra Invertida

Código

Significado

\b

Retrocesso (“backspace”)

\n

Nova linha (“new line”)

\t

Tabulação horizontal (“tab”)

\“

Aspas duplas

\‘

Aspas simples

\0

Nulo (0 em decimal)

\\

Barra invertida

\a

Sinal sonoro (“beep)

Exemplos:

printf ("Ola! Eu esto\bu vivo!"); Ola! Eu estu vivo!

printf ("Ola! Eu esto\nu vivo!"); Ola! Eu esto

u vivo!

printf ("Ola! Eu esto\tu vivo!"); Ola! Eu Esto u vivo!

printf ("\"Ola! Eu estou vivo! \""); "Ola! Eu estou vivo!"

printf ("Ola! Eu esto\0u vivo!"); Olá! Eu esto

printf (“\\Ola! Eu estou vivo!\\"); \Olá! Eu estou vivo!\


- scanf

A função scanf (scan format) lê do teclado e "formata" uma lista de números, caracteres, strings, etc.

Sintaxe da função:

scanf (string_de_controle,lista_de_argumentos);

Usando a função scanf() podemos pedir dados ao usuário. Devemos ficar atentos a fim de colocar o mesmo número de argumentos que o de códigos de controle na string de controle. Outra coisa importante é lembrar-se de colocar o & antes das variáveis da lista de argumentos.

Exemplo:

#include <­stdio.h>

int main ()

{

char Ch;

scanf("%c", &Ch);

printf ("Voce pressionou a tecla %c",Ch);

return(0);

}


- gets e getchar(),

Assim como scanf(), leem uma string do teclado.

getchar() lê apenas um caractere.

gets() lê uma string até o final da linha ou até que não haja mais dados para ler, e adiciona o terminador de string "\0".

Sintaxe da função get:

gets(nome_da_string);

Exemplo:

#include <­stdio.h>

int main ()

{

char exemplo[10];

printf ("Digite o seu nome: ");

gets (exemplo);

printf ("O nome é: %s", exemplo);

return(0);

}

O programa pede ao usuário que entre uma string, que será armazenada na string exemplo. A função retorna o próprio exemplo.
Gets
não é uma função segura, pois com essa função pode ocorrer um estouro da quantidade de posições que foi especificada na string. Por exemplo, se no código a cima o usuário digitar como entrada:

Ricardo Pereira Neto

Ou seja, digitar um total de 20 caracteres: 21 posições (incluindo o '\0' ) serão utilizadas para armazenar a string. Como a string exemplo[] só tem 10 caracteres, os 11 caracteres adicionais serão colocados na área de memória subsequente à ocupada por ela, escrevendo uma região de memória que não está reservada à string. Este efeito é conhecido como "estouro de buffer" e pode causar problemas imprevisíveis.

Sintaxe da função getchar:

variavel = getchar();

Esta função retorna o valor inteiro referente ao código ASCII do caractere lido, porém você pode atribuir este valor a uma variável do tipo caractere. Caso ocorra um erro, ela retorna EOF.

Exemplo da utilização de getchar:

#include <­std­io.h>

int main()

{

char caracter;

printf("\n");

printf("Utilizando getchar()\n");

printf("--------------------\n");

printf("\n");

printf("Entre com um caracter :");

caracter = getchar();

printf("\nVocê digitou o caracter %c\n\n",caracter);

return(0);

}

Fonte: Curso de Linguagem C - UFMG (com adaptações)

Link direto para Apostila: http://migre.me/3U6Yp