domingo, 29 de dezembro de 2013

Áreas de TI

     Muitos estudantes da área de TI quando começam a entrar para a universidade, criam uma série de dúvidas sobre em que área seguir ao se formarem. Classifico como uma das causas disso, a falsa imagem de "ouro" sobre a área, que muitos estudantes recebem ao começar estudar.
     É claro que trabalhando em qualquer profissão você poderá atingir o status de profissional bem sucedido. Entretanto, deve fazer por merecer, buscando caminhos certos e que se encaixem com seu perfil profissional.
     Nesse link segue uma lista de áreas de TI. Não focalize muito nos salários, pois eles são meras ilustrações que variam de regiões e exigências de cargos.

quinta-feira, 2 de maio de 2013

OpenGL: Objetos em 2D

     Quem já jogou os antigos consoles, teve muito contato com objetos 2D. Os objetos são definidos pela descrição geométrica e atributos, definindo suas características. Definimos sua orientação pelo SRU(Sistema de Referência do Universo), que é o lugar onde fazemos a descrição geométrica do objeto. Nos exemplos será utilizado o Sistema Cartesiano, formando o 3D por eixos x, y e z, e o 2D por x e y.



Definindo um objeto 2D


Antes de mais nada é importante ter uma noção sobre geometria(elementos topológicos do espaço) e sua "descendente", a topologia(especificamente arestas e faces).
As imagens são geradas em cinco estágios distintos, chamados de pipelines. Em resumo são:

- Modelagem Geométrica:


Primeiro, definimos as coordenadas.


- Instanciamento:


Depois vem o instanciamento, aplicando as transformações geométricas.



- Recorte:


Aplicado o instanciamento, é realizado o recorte, mostrando o que vai ser exibido na tela.



- Mapeamento:


O mapeamento faz com que as coordenadas na SRU sejam mapeadas para o sistema de referência da tela (SRT).


- Conversão Vetorial-Matricial:


E por último, vem a conversão vetorial-matricial, onde o objeto é convertido em pixels.


Até a Próxima!!! ^^

Menu de OpenGL

quinta-feira, 28 de março de 2013

OpenGL: Configurando o ambiente

A OpenGL possui 3 bibliotecas com a finalidade de simplificar determinadas tarefas de programação: Elas são GL, GLU e GLUT.

GL: É responsável pelas tarefas de baixo nível.
GLU: É utilizada para criar objetos complexos.
GLUT: Utilizada para fazer a comunicação com as janelas por meio de funções.

Quando eu comecei a passar os tutoriais de C, eu mostrei uma pequena lista de compiladores que poderiam ser usados durante a programação da linguagem. Todos os exemplos que eu passar aqui, vou estar utilizando a IDE Dev-C++ com o sistema Windows (Ruindows para alguns :) ).

Caso você ja tenha as bibliotecas, é bom atualiza-las. Abra o Dev-C++. Clique na aba 'Ferramentas', e depois em atualizações. Deve aparecer esta tela.


Na aba 'Groups', selecione 'OpenGL', seguindo um click em 'Check for updates'. Ele vai atualizar a lista de bibliotecas. Nela você deve achar e baixar a biblioteca GLUT, e atualiza-la.

Agora indo ao ponto de que as bibliotecas não se encontram na máquina.
Entre no diretório do Dev-C++ (\Dev-Cpp\Include\GL), e verifique se o mesmo contém gl.h, glu.h e glut.h.



OBS: Caso não consiga achar as bibliotecas, as mesmas estão disponíveis no site da OpenGL
Depois de baixar, copie a "glut32.dll" para a pasta "system32". Copie a "glut.h" para "\Dev-Cpp\Include\GL".

Após isso, va em "Arquivo>>Novo>>Projeto", e dentro da aba "Basic" selecione "Console Application", definindo o projeto como "Projeto C++". Dê um nome ao projeto e clique "OK". Você deve salvar seu projeto em uma pasta de fácil acesso.


Va na aba 'Projeto' e clique em Opções de Projetos, clicando em seguida na aba 'Parâmetros'. No Linker, adicione: lib/libglu32.a, lib/glut32.a e lib/libopengl32.a. As mesmas se encontram na pasta "\Dev-C++\Lib".



quarta-feira, 27 de março de 2013

Linguagem C: Parte 7 [Strings]

As Strings são um conjunto de caracteres armazenados em um vetor. Diferente de char, float, double e int, a string não é um tipo básico de C. Nesse texto, irei mostrar formas de construir e tratar Strings, usando algumas funções que a linguagem C oferece. :)



 Exemplos de Strings:
"Paulo", "Brasil", "Faculdade de Psicologia", "C".

OBS: Note que para representar um char, eu utilizo aspas simples, enquanto as strings são utilizadas aspas. Por isso "C" é uma string, e 'C' é um char.

Uma coisa importante de entender é como uma string é utilizada. Como uma string é um vetor de caracteres, cada caractere da palavra é colocado em uma posição como se fosse um char. Quando declaramos a carga inicial de um vetor, de forma superior ao número de caracteres utilizados, o compilador colocará automaticamente o caractere '\0' para delimitar a string.
Ex:
char pais[30] = "Brasil";

Ficaria {Brasil+\0}, que da 5+1, utilizando 6 caracteres ao todo.

Outros exemplos:

char nome[30] = "Pedro";
char pais[30] = {'B','R','A','S','I','L'}; // delimitador colocado depois de 'L'
char fruta[] = "tomate";
char *fruta = "tomate"; // igual ao anterior

No caso de fruta, é calculado o número de caracteres da string, sendo add o '\0'.

I/O de Strings

Existe algumas funções de grande importância para leitura e escrita de strings.

Puts
Essa função é utilizada para escrever strings que estejam em ConstantesVariáveis, ou simplesmente imprimir uma linha, mudando de linha logo em seguida.

Ex:
puts("IBM");
printf("IBM\n");
As duas expressões irão imprimir, indo em seguida para uma nova linha.

Printf
Sua maior importância é melhor empregada na escrita de formato da string, utilizando a formatação.

Ex:
char pais[30] = "Paraguai";
printf("País: %s", pais);

Scanf
É uma função que permite fazer a leitura de apenas uma palavra na string utilizando %s. Claro que existe maneiras de fazer a leitura de mais uma palavra usando scanf(). Poderíamos utilizar scanf("%[^\n]s", var), informando que o scanf() vai ler até encontrar um ENTER. O bom é utilizarmos um fflush(stdin), antes do scanf(), para limpar o buffer do teclado. É sempre bom lembrar que não colocamos "&" antes de scanf() quando se trata de strings.

Ex:
#include<stdio.h>
main()
{
   char materia;
   puts("Insira o nome da materia:");
   scanf("%s",materia);
   printf("Matéria: %s" ,materia);
   system("pause");
}

Gets
Essa função tem a capacidade de ler mais de uma palavra. Sendo para alguns, uma das mais apropriadas para ler strings.

Ex:
#include<stdio.h>
main()
{
   char nome[60];
   puts("Insira seu nome completo:");
   gets(nome);
   printf("Seu nome é: %s", nome);
}

►Funções Especias para manipular Strings

As seguintes funções tem o objetivo de auxiliar o programador, sendo consideradas as principais para manipular strings. Elas se encontram na biblioteca <string.h>, por isso não se esqueça de chamar essa biblioteca em seus programas, quando for utilizar essas funções, evitando assim possíveis erros.

►1 - strlen: Devolve o número de caracteres de uma string.
Ex:
#include <stdio.h>
#include <string.h>
main()
{
   char psg[60]; // personagem
   int tamanho;
   puts("Ins nome do personagem:");
   gets(psg);
   tamanho = strlen(psg);
   printf("O personagem tem %d caracteres.", tamanho);
}

►2 - strcmp: Função usada para comparar duas strings. Podemos levar em consideração as seguintes informações.
strcmp(string1,string2);
strcmp("bola","barco"). A resposta é: O primeiro é maior, pois 'o' é maior que 'a'.
strcmp("canudo","juiz"). A resposta é: O segundo é maior, pois 'c' é menor que 'j'.
strcmp("navio","navio"). A resposta é: Os dois são iguais.

O que essa função faz é analisar o primeiro caractere das strings passadas por seus parâmetros, comparando eles entre si. A letra maior é sempre a que vem depois. Se a primeira letra da string1 for maior que a da string2, então string1 é maior. Se as duas strings tiverem a primeira letra igual, então a função verifica a segunda letra e assim por diante. Se ao chegar ao fim da leitura e ambas tiverem os mesmos caracteres, as duas serão classificadas como iguais.

Ex:
#include <stdio.h>
#include <string.h>
main()
{
   char z1[60], z2[60];
   int valor;
   puts("Insira uma palavra:");
   gets(z1);
   puts("Insira outra palavra:");
   gets(z2);
   valor = strcmp(z1,z2); // atribuindo o valor da função a variável
   if(valor == 0)
      puts("Igual!!!");
   else if(valor > 0)
      puts("Primeira é maior.");
   else
      puts("Segunda é maior.");
}

►3 - strcpy: É uma função que recebe dois argumentos, copiando o conteúdo de uma string para outra. Sua definição é: strcpy(char *dest, char*orig), a orig copiada para dest.

Ex:
#include <stdio.h>
#include <string.h>
main()
{
   char z[60], zCopia[60];
   puts("Insira um nome:");
   gets(z);
   strcpy(zCopia, z);
   printf("O nome é: %s", zCopia);
}

►4 - isNull: Essa função verifica se a string contém um caractere, devolvendo um valor lógico. Ela não faz parte da linguagem C, o que pode ocasionar erro em seu compilador,  mas eu achei um exemplo de como pode ser usada.

Ex:
#include <stdio.h>
main()
{
   char z[60];
   int valor;
   puts("Insira um nome:");
   gets(z);
   valor = isNull(z); // atribuindo o valor da função a variável
   printf("%d", valor); // retorna 0(falso) ou 1(verdadeiro)
}
int isNull(char *z)
{
   return (z[0] == '\0');
}

►5 - strcat: Concatena a string orig com a dest. Sua definição: strcat(char *dest, char *orig).

Ex:
#include <stdio.h>
#include <string.h>
main()
{
   char z[60], zCopia[60];
   puts("Insira uma palavra:");
   gets(z);
   strcpy(zCopia,z);
   strcat(z, zCopia);
   printf("Palavra =  %s", z);
}

►6 - strcountc: Devolve o número de vezes que um determinado caractere apareceu em uma string. Sua definição: strcountc(char *z, char a). :)

Ex:
#include <stdio.h>
#include <string.h>
int strcountc(char *z, char a);
main()
{
   char z[60];
   int valor;
   puts("Insira uma palavra:");
   gets(z);
   valor = strcountc(z, 'a');
   printf("O 'a' apareceu %d vezes.", valor);
}
int strcountc(char *z, char a)
{
   int c, contar;
   for(c=contar=0; z[c]!='\0'; c++)
   if(z[c]==a)
      contar++;
   return contar;
}

►7 - strcountd: Mostra o números de dígitos na string. Sua definição: strcountd(char *z).

Ex:
#include <stdio.h>
#include <string.h>
int strcountd(char *z);
main()
{
   char z[60];
   int valor;
   puts("Insira uma palavra:");
   gets(z);
   valor = strcountd(z);
   printf("%s tem %d digitos." , z, valor);
}
int strcountd(char *z)
{
   int c, contar;
   for(c=contar=0; z[c]!='\0'; c++)
   if(isdigit(z[c]))
      contar++;
   return contar;
}

►8 - indchr: Mostra o índice da primeira ocorrência de um determinado caractere na string.

Ex:
#include <stdio.h>
#include <string.h>
int indchar(char *z, char a);
main()
{
   char z[60];
   int valor;
   puts("Insira uma palavra:");
   gets(z);
   valor = indchar(z, 'o');
   if(valor<0)
   {
      printf("O caractere 'o' não se encontra na string.");
   }
   else
   {
      printf("Posição %d" , valor);
   }
}
int indchar(char *z, char a)
{
   int c;
   for(c=0; z[c]!='\0'; c++)
   if(z[c]==a)
      return c;
   return -1;
}

►9 - strset: Substitui todas as posições de uma string com um determinado caractere. 

Ex:
#include <stdio.h>
#include <string.h>
main()
{
   char z[60];
   puts("Insira a senha:");
   gets(z);
   printf("Senha = %s", strset(z, '*'));
}

►10 - strupr e strlwr: Uma imprime uma string maiúscula, e a outra uma string minúscula, respectivamente. Para evitar erros, inclua a função <ctype.h>.


Ex:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
main()
{
   char z[60];
   puts("Insira uma palavra:");
   gets(z);
   printf("Maiúsculo = %s\n", strupr(z));
   printf("Minúsculo = %s", strlwr(z));
}

►11 - strcounta -  Devolve apenas letras. Mudei pouca coisa em relação a de números.


#include <stdio.h>
#include <string.h>
int strcounta(char *z);
main()
{
   char z[60];
   int valor;
   puts("Insira uma palavra:");
   gets(z);
   valor = strcounta(z);
   printf("Tem %d letra(s)." ,valor);
}
int strcounta(char *z)
{
   int c, contar;
   for(c=contar=0; z[c]!='\0'; c++)
   if (!isdigit (z[c])) // verifica se é um número
      contar++;
   return contar;
}

E "eras isso". Essas são apenas algumas formas que podemos manipular nossas strings. Lembrando que o que foi mostrado, apenas arranha a superfície do que pode ser feito com strings em C. Você pode criar ou implementar novas strings a partir do que viu, traçando uma  boa lógica. :)

Menu da Linguagem C

Até a próxima! ^^

quinta-feira, 21 de março de 2013

Aeroportos mais perigosos do mundo

Apesar de ser antiga, a reportagem mostra uma série de vídeos, sobre aeroportos que aparentam ter sido construídos de forma insana, mas que funcionam normalmente.



quarta-feira, 20 de março de 2013

Linguagem C: Parte 6 [Vetores]

Agora chegou a hora de aprender um pouco sobre vetores. Lembrando que é apenas algo superficial, perto do que realmente pode ser criado, utilizando esses comandos.
Um vetor pode ser entendido como um conjunto de elementos consecutivos, podendo ser de qualquer tipo de dado, mas todos do mesmo tipo, sendo acessados em conjunto ou individualmente pelo seu nome. Também é importante lembrar, que o índice do 1° elemento de um vetor é sempre 0, alternando entre 0 e n-1.
A declaração de um vetor, é feita por: tipo nome[n°elementos].

Ex 1:

#include<stdio.h>
main()
{
   int z[3]; // Um vetor de 3 elementos
   int c;
   z[0] = 1; // 1° elem
   z[1] = 4; // 2° elem
   z[2] = 59; // 3° elem
   for(c=0; c<3; c++)
   {
       printf("%d, ",z[c]);
   }
   system("pause");
}

Existe outros jeitos de declarar:
z[4-2] = 10; // equivale a z[2] = 10
z[3] = {1,4,59};
z[] = {1,4,59}; // equivale ao de cima

Lembrando que quando os vetores são criados, eles também acumulam valores aleatórios em suas posições. Se eu decidir declarar um vetor com 5 elementos, mas colocar apenas 2 valores, os primeiros dois elementos irão conter os valores que lhes forma atribuídos, e os elementos restantes serão iniciados com 0(ZERO).
Ex :
z[5] = {90,40}; // como eu atribui
z[5] = {90,40,0,0,0}; // como ficou

Agora vou mostrar um simples programa que utiliza um vetor, de exemplo:

#include<stdio.h>
/* Recebe 5 números ins pelo user, e imprimi os mesmos */
main()
{
   int num[5];
   int c;
   for(c=1; c<=5; c++)
   {
       printf("Ins o %d° num: ",c);
       scanf("%d", &num[c]);
   }
   for(c=1; c<=5; c++)
   {   
       printf("...%d\n", num[c]);
       system("pause");
   }

Constantes

São dados gravados na memória que não podem ter seus valores alterados, armazenando valores que representam tamanho fixo, durante a execução. São declaradas fora das funções, podendo serem utilizadas em qualquer parte do programa. Elas simplificam muito o trabalho do programador, quando ele precisa alterar um único valor que se encontra espalhado, ao longo do programa.
Para criarmos uma constante, podemos utilizar a palavra reservada const.
Ex:

#include<stdio.h>
const int num = 50;

void func(int z[])
{
   int c;
   for(c=0; c<num; c++)
      z[c] = 0;
}
main()
{
   int x[num], c;
   func(x);
   for(c=0; c<num; c++)
      x[c] = c;
   for(c=num-1; c>=0; c--)
      printf("%d\n", x[c]);
}

A outra forma é usando #define, considerada uma constante simbólica. Ela é uma diretiva que indica ao pré-processador que o símbolo que a segue vai ficar com o valor que aparece depois do símbolo. Ela não ocupa um espaço físico em memória, tendo seu valor substituído ao longo do programa, antes da compilação. É normal representar constantes simbólicas por letras maiúsculas.

#include<stdio.h>
#define NUM 50
void func(int z[])
{
   int c;
   for(c=0; c<NUM; c++)
      z[c] = 0;
}
main()
{
   int x[NUM], c;
   func(x);
   for(c=0; c<NUM; c++)
      x[c] = c;
   for(c=NUM-1; c>=0; c--)
   printf("%d\n", x[c]);
}

Vetores em Funções

O exemplo a seguir, é de uma função que recebe um vetor de int(sem dimensão) e um int, indicando quantos elementos irão iniciar.
Ex:

#include<stdio.h>
void func(int z[], int num)
{
   int c;
   for(c=0; c<num; c++)
       z[c] = 0;
}
main()
{
   int x[5];
   int y[16];

   func(x,5);
   func(y,16);
}

Se eu passar a dimensão do vetor no parâmetro, o compilador iria descartar os números dos elementos do vetor.

Vetores Multidimensionais

Um vetor pode ser declarado com n dimensões. Eles são preciosos quando precisamos escrever programas que são melhores de organizar utilizando muitos elementos. Um bom exemplo disso é o jogo da velha. Note que o exemplo apresenta apenas as posições dos elementos "X" e "0" sobre o "tabuleiro", e mais nada, partindo de como fazer uma jogada, pontos e etc.
Ex:

#include<stdio.h>
#define JOG 3

main()
{
   char Velhas[JOG][JOG] = {{' ', ' ', ' '},{' ', ' ', ' '},{' ', ' ', ' '}};
   int c;
   int k;
   Velha [0][0] = 'X';
   Velha [1][1] = 'X';
   Velha [0][2] = '0';
   Velha [2][2] = '0';
   for(c=0; c<JOG; c++)
   {
      for(k=0; k<JOG; k++)
         printf("%c %c", Velha [c][k], k==JOG-1? ' ' : ' | ');
      if(c != JOG-1)
         printf("\n-----------\n");
         system("pause");
}
}

Até a próxima! ^^

Menu da Linguagem C

quarta-feira, 6 de março de 2013

Desenhos: Parte 1

Artes

     Estou postando os desenhos que achei na net. E antes de mais nada, os artistas estão de parabéns.

Pessoa dormindo.

Se conhecerem me avisem.

Dr. House

Cantora Amy Lee

sábado, 9 de fevereiro de 2013

Linguagem C: Parte 5 [Funções]

►Funções e Procedimentos

     Até agora, todo os programas que escrevemos foram colocados direto na função main(). Mas no decorrer em que criamos novos programas, precisaremos reutilizar pequenos, médios, ou grandes trechos de código, sem a necessidade de escreve-los novamente. Para isso, criaremos funções com tarefas específicas pelo programa. Já tínhamos utilizado funções anteriormente (printf(), scanf(), putchar(), getchar(), entre outras). 

Ex:

/*
* O programa recebe três funções, cada uma contendo uma mensagem.
* Elas são chamadas pela função main(), exibindo seu conteúdo na ordem que forem chamadas.
* Não existe ordem certa para chamadas de funções.
* Chame na hora que precisar.
*/

#include<stdio.h>

void msg_oi();

void msg_eaee();
void msg_cambio();

main()
{
   msg_oi();
   msg_eaee();
   msg_cambio();
}

void msg_oi()
{
   printf("Oi!");
   getchar();
}


void msg_eaee()
{
   printf("Eaee!");
   getchar();
}


void msg_cambio()
{
   printf("Cambio!");
   getchar();
}

►Regras de funções

  • Uma função pode ser invocada por outra.
  • Cada função recebe apenas um único nome.
  • Uma função deve ser utilizada para, realizar determinada tarefa. Não dependendo do resto do programa.
  • Podem receber parâmetros.
  • Pode retornar, para o lugar que a invocou, um valor.
  • uma função é declarada dentro de blocos.
  • Uma função nunca deve receber " ; " no fim de sua declaração.

►Parâmetros


     Uma outra forma de enxergarmos uma função, é imaginar um processador de alimentos. Você coloca uma fruta na entrada, e recebe o suco logo depois. Partindo do ponto em que você é apenas um consumidor comum, não lhe interessa, como o processador de alimentos faz o suco. Se ele filtra, coa, faz em tal velocidade e mais milhares de processos, nada lhe interessa. O que importa é você receber seu suco, depois de colocar uma laranja no bocal do aparelho.
     Uma função é como esse processador, recebe ( por parâmetros ) o alimento e depois realiza o processo até o resultado final. 

Ex: 

#include<stdio.h>

/*
* Foi criada uma função chamada calculo.
* Ela recebe um valor por parâmetro.
* Quando chamada pela main(), recebe o valor da variável de n1.
* Ela é processada, como se fosse a " x ".
* E imprimi o valor no fim
*/

void calculo();

main()
{
   int n1 = 5;
   calculo(n1); // recebe n1 como parâmetro
}

void calculo(int x)
{
   int a = 95;
   int calc = (a + x)*2;
   printf("Cálculo = %d",calc);
}

     Eu não poderia enviar mais de um valor para calculo(), pois foi especificado, que calculo() receberia apenas UM PARÂMETRO. Se eu quisesse, poderia declarar, mais de um na função. Lembrando que uma função só recebe o número de parâmetros, que ela foi projetada para receber.

Ex:
#include<stdio.h>

// Aqui esta a mesma função, agora com 2 parâmetros

void calculo();

main()
{
   int n1 = 5;
   int n2 = 20;
   calculo(n1, n2); // recebe n1 e n2 como parâmetro
}

void calculo(int x, int y)
{
   int a = 95;
   int calc = (a + x + y)*2;
   printf("Cálculo = %d",calc);
}

►Return

     Ela permite terminar a execução de uma função e voltar ao programa que a invocou. Quando utilizada dentro de main(), termina o programa.

Ex:

#include<stdio.h>

main()
{
   int a = 5;
   int b = 5;
   return a * b; // O que vier depois de return, não executa. ;)
}

Ex2:

int calc(int a, int b)
{
   int z = a + b;
   return z;
}

►Procedimentos

     O procedimento pode ser intendido como aquele que não retorna nada. Diferente de uma função, que tem um tipo e retorna algo. Um exemplo seria a função calculo(). Ela não tem um tipo e não retorna nada. Mas, eis que na linguagem C, sempre quando não colocamos um tipo de retorno, no cabeçalho da função, automaticamente ele é substituído por int. Existem programadores que negam a existência de procedimentos em C, considerando-os como funções. Outros, defendem a diferença entre eles.
     Em linguagens como PASCAL, as funções são definidas por FUNCTION, e os procedimentos por PROCEDURE. Eu, particularmente, considero que procedimentos são funções, na linguagem C.

►Void

     É um tipo, indicando que uma função não retornará nada. Também, são passadas por parâmetros, indicando que a função não receberá nenhum parâmetro. Um exemplo de void foi o do calculo().

►Variáveis Locais

     São variáveis criadas dentro de funções. Diferentes das globais, apenas são reconhecidas dentro da função, sendo destruídos depois do término da função. Foram utilizadas variáveis locais na função calculo().

Até a próxima! ^^

► Menu da Linguagem C

sábado, 2 de fevereiro de 2013

Linguagem C: Parte 4 [Laços]

     Muitas vezes enquanto estamos programando, vamos precisar repetir determinadas instruções diversas vezes, enquanto não for estabilizada a condição correta. Para isso utilizaremos os laços while, do while e for, que auxiliados de alguns operadores, se tornam fundamentais para nossos programas. 


While

     Esse laço sempre executara a instrução enquanto uma certa condição for verdadeira. Primeiro ele avalia a condição. A instrução sendo verdadeira, a instrução é repetida novamente, sendo assim, ficara repetindo até a condição se tornar falsa. Se for falso (ZERO), ele simplesmente encerra o laço e partirá para próxima instrução.
     Aqui esta um pequeno exemplo, onde eu quero mostrar na tela todos os números menores que 9, partindo de 1.

Ex1:
#include<stdio.h>

/*
* O laço executa enquanto num for menor que 9.
* Se eu quisesse que ele chegasse a 9, precisaria colocar apenas " <= " ao invés de " < ". :)
*/
main()
{
   int num = 1; // carga inicial

   while(num<9) // condição a verificar
   {
       printf("E aeee %d\n",num);
       num++; // pós instrução
   }
}

Ex2:

#include<stdio.h>

main()
{
   int num = 2;
   while(num<90)
   {
       printf("3 * %d = %d\n",num, 3*num);
       num = num + 1;
   }
}

For

     Esse laço reúne carga inicial, condição e pós-instrução, tudo em apenas uma linha. É utilizada para executar uma determinada instrução dentro de um bloco, sendo a condição feita no inicio do corpo do laço, até o limite estipulado.
     Ele executa a carga inicial, avalia a condição, e se for falsa termina e passa para próxima instrução. No caso de ser verdadeira, a instrução (ou bloco de instruções) é executada. Depois de executada é feita a pós-instrução, onde é realizado o incremento ou o decremento dos valores. Voltando depois a verificação da condição, até se tornar falsa.

Ex:

#include<stdio.h>
main()
{
   int num;

   printf("Carregando...\n");

   for(num = 1; num <= 100; num++)
   {
       printf("...%d%%\n",num);
   }
   printf("Concluído!");
}

Poderia também adicionar um numero para interagir.

Ex2:

#include<stdio.h>
main()
{
   int num;
   int z;

   scanf("%d ",&z);
   
   printf("Carregando...\n");

   for(num = 0; num <= 100;  num++)
   {
       printf("...%d\n",num);
   }
}

do While

     A instrução do.. while diferencia-se de for e while, pois a condição é testada no fim do laço. Ele executa a condição avaliando logo em seguida. Se o resultado for positivo, volta a executar e avaliar, até o resultado ser negativo. Sendo negativo, o laço é terminado e a próxima instrução é executada.

Ex:

#include<stdio.h>
/*
* Criei aqui um humilde programa, que faz o usuário escolher uma fruta.
*/
main()
{
    char op;

    do
    {
        printf("\t\nEscolha uma fruta \n");
        printf("\tL = Limão \n");
        printf("\tB = Banana \n");
        printf("\tT = Tomate\n\n");

        scanf("%c", &op);
        fflush(stdin); // Limpa o Buffer do teclado
        switch(op)
       {
             case 'l':
             case 'L': printf("Limão!");
             break;

             case 'b':
             case 'B': printf("Banana!");
             break;

             case 't':
             case 'T': printf("Tomate!");
             break;

             default: printf("Erro");
       }
    } while (op!=  's' && op != 'S'); // Enquanto não for digitado 's' ou 'S', o programa continuara.
}

     LEMBRANDO QUE PODEMOS UTILIZAR TODOS ESSES LAÇOS DE FORMA ENCADEADA. VOU EXPLICAR MAIS TARDE!

     Também é possível criar laços infinitos, bastando colocar uma condição que seja sempre verdadeira.
Ex:

#include<stdio.h>

main()
{
    int z = 2;

    while(z>1)
   {
       printf("...%d \n",z);
       z++;
   }
}

Os Operadores unários ++ e --

     São operadores utilizados para incrementar ou decrementar as variáveis. Foram utilizados nos exemplos anteriores.

► Operador " ++ " ► Incremento de 1. Ex: a++, ++z

► Operador " -- " ► Decremento de 1. Ex: b--, --f

Diferença de ++z e z++

     Quando o operador vier antes da variável (++z), a variável é incrementada primeiro, para depois ser utilizada. No caso de ser incrementa depois (z++), ela é utilizada primeiro, para depois ser incrementada. Isto vale o mesmo para decremento. E depende é claro, se ela estiver isolada.

Até a próxima! ^^


► Menu da Linguagem C

sábado, 19 de janeiro de 2013

Linguagem C: Parte 3 [Condições]

     Enquanto desenvolvemos nossos programas, precisamos que certas coisas aconteçam em momentos específicos. Levamos em conta o seguinte exemplo:
     Temos um personagem. Nosso personagem assim como qualquer ser humano, sente frio, calor, sede, fome e etc. Quando estiver frio, queremos que ele coloque um casaco, ou quando calor, ele deve vestir uma bermuda. Também podemos detalhar um pouco mais. Se a temperatura marcar até 30°C ele vai para a piscina, mas se estiver marcando mais que 30°C ele vai para praia.
     Esses são exemplos extremamente simples de tomadas de decisões que podemos colocar em um programa. E para fazermos isso, recorreremos aos operadores e instruções de C.


► Verdadeiro e Falso

     Como em C não existe um tipo que permita armazenar valores lógicos, utilizamos o 0 (ZERO) para representar um valor FALSO, enquanto tudo que for diferente de 0 (ZERO), sera VERDADEIRO.

Ex:
Valor Falso: 0
Valores Verdadeiros: -5 , 10 , 160.7, 0.00090

► Operadores Relacionais

     Para avaliarmos se a temperatura é menor que tal marca, ou se determinado valor é maior que o outro, utilizamos os Operadores Relacionais

Operador de Igualdade:
Representado por " == ".
Ex: 
f == z // Verifica se f é igual a z.

Operador Maior que:
Representado por " > ".
Ex:
f > z // Verifica se f é maior que z.

Operador Menor que:
Representado por " < ".
Ex:
f < z // Verifica se f é menor que z.

Operador Maior ou Igual que:
Representado por " >= ".
Ex:
f >= z // Verifica se f é maior igual a z.

Operador Menor ou Igual que:
Representado por " <= ".
Ex:
f <= z // Verifica se f é menor igual a z.

Operador Diferente de:
Representado por " != ".
Ex:
f != z // Verifica se f é diferente de z.

OBS: SO NÃO CONFUNDA " = " COM " == ". O PRIMEIRO ATRIBUI UM VALOR, O SEGUNDO COMPARA. ;)

► Instrução if-else

     Para determinar quais instruções devem executar em uma certa ocasião, utilizamos um dos controles de fluxos de C chamado if-else.

Ex:

#include <stdio.h>

main()
{
    int a;
    printf("Ins um número\n");
    scanf("%d",&a); // Insere um int
   
    if (a > 0) // verifica se o número inserido foi maior que 0
        printf("Verdadeiro"); // se for, imprime Verdadeiro
    else // 
        printf("Falso"); // caso não for imprime Falso
// utilizar getchar() aqui caso o programa fechar rapidamente.
}

     A instrução do if é obrigada a estar entre parênteses. Foi verificada a primeira instrução. Caso ela não fosse verdadeira, o else seria executado. Lembrando que o else não é obrigatório.
     Também existe casos em que temos que encadear mais de uma instrução:

#include <stdio.h>

main()
{
    float sal;
    printf("Ins o salário:\n");
    scanf("%f", &sal);
    
    if (sal<= 0)
        printf("Sem grana!");
    else if (sal > 500)
        printf("Imposto = %.2f\n", sal*0.20);
    else
        printf("imposto = %.2f\n", sal*0.90);
}

     Uma das coisas que é importante utilizar na programação, é a indentação. Mesmo não surtindo nenhum efeito na compilação ou mesmo na execução (no caso de C), ela ajuda a apresentar os limites de cada instrução para o programador ou qualquer um que ler o código. Cada um escolhe o melhor jeito de fazer a sua.

Ex:
     Esses dois exemplos são iguais. A única diferença é que o primeiro não foi utilizado indentação.

1)
if (v!=1)
printf("Certo.\n");
else
printf("Erro");

2)

if (v!=1)
    printf("Certo.\n");
else
    printf("Erro");

► Operadores Lógicos

     Existem outros tipos de operadores chamados de Operadores Lógicos, que são utilizados para ligar duas ou mais condições. Sendo que ao final da operação, devolvem um apenas um valor (VERDADEIRO OU FALSO). A utilização desses operadores é muito simples. Partimos do exemplo de que toda a bola é redonda e, os peixes nadam.

Ex:

if (bola_redonda && peixes_nadam)
    printf("Verdadeiro"); // True

Caso algum destes elementos fosse alterado:

if (bola_redonda && vacas_voam)
    printf("Falso"); // False


Operador: " && "
Significado: AND (E lógico). Obriga as duas operações serem verdadeiras. Caso contrário, sera falso.
Ex: f >= 9 && f <= 19

Operador: " || "
Significado: OR (OU lógico). Obriga pelo menos uma das operações serem verdadeiras. Caso contrário, sera falso.
Ex: f == 10 | | f == 6

Operador: " ! "
Significado: NOT (Negação lógica). Verdadeiro se a condição for falsa. Falso se for verdadeira.
Ex: ! z

     Como as instruções nem sempre são avaliadas da esquerda para direita, existe uma tabela de precedência que indica a precedência de cada um.

► Operador Condicional - ?

     É um operador ternário (e também o único) de C, que recebe três argumentos. Ele avalia a condição retornando um resultado Verdadeiro pelo elemento1, ou Falso pelo elemento2.

Ex:

condição ? elemento1: elemento2

#include<stdio.h>

main()
{
     int idade;
     printf("Insira sua idade:\n");
     scanf("%d", &idade);
     
     idade = idade >= 18 ? 20 : 10;
     printf("Ganhou %d pontos!",idade);
}

►Instrução Switch

     Utilizado para tomada de decisões quando a quantidade de opções é muito grande. Imagina se quiséssemos escolher entre 30 opções? Fazer isso com if-else não é legal. O Switch executa os valores numéricos do tipo char, long ou int. Comparando em seguida o valor recebido, com as constantes dos cases.
     O case que for igual ao valor inserido, sera executado e o programa passara para próxima instrução com o auxilio do break. Caso contrário, mesmo achando o case certo, o programa continuara percorrendo o switch até finaliza-lo. Se o valor não bater com nenhum dos cases, a instrução que estiver em default será executada.


► Instrução Break

     É utilizada quando queremos parar a execução dentro de um switch. O programa pula para próxima instrução .


Ex:

#include <stdio.h>

main()
{
   char estCivil;
   printf("Qual seu estado Civil:\n");
   printf(" S - Solteiro \n C - Casado\n D - Divorciado \n V - Viúvo \n");
   estCivil = getchar();

   switch(estCivil)
  {
      case 'S': printf("Solteiro(a)");
      break;

      case 'C': printf("Casado(a)");
      break;

      case 'D': printf("Divorciado(a)");
      break;

      case 'V': printf("Viúvo(a)");
      break;



      default: printf("Estado Civil incorreto");
  }
}

    O programa poderia ter sido feito utilizando números nas escolhas, ou também, colocando 's' , 'c', 'd' e 'v' junto de cada um de seus correspondentes.

Ex:
case 'c':
case 'C': printf ("Casado");
break;

     Significa que tanto 'c' minúsculo quanto 'C' maiúsculo, seria entendido como casado.

Até logo! ^^

Menu da Linguagem C