Este texto está desatualizado e em processo de ser atualizado

Segunda aula, muito mais atrasada do que eu imaginava…

Porém vamos continuar a nossa jornada por aprender um pouco sobre como os computadores funcionam e como fazemos eles fazerem o que nós queremos.

Um lugar para guardar os valores

Começando com a seguinte idéia, imaginem a seguinte situação: você foi contratado para trabalhar na maior lanchonete do seu bairro, que chega a servir o (assombroso) número de 20 clientes simultaneamente. Você é responsável por escrever aquele programinha cretino que a pessoa atrás do balcão vai ficar operando o dia todo, o objetivo deste pequeno software é receber o pedido do cliente e mostrar a quantia a ser paga, o troco, expedir uma nota e todas essas coisas. Bom temos uma versão bem simples deste programa aqui em baixo:

//software de lanchonete by você
//a idéia aqui é ler os dados do pedido
//e imprimir algumas informações sobre eles
#include <stdlib.h>
#include <stdio.h>

int main()
{
    int pedido;
    int quantidade;
    float preco = 5.99;
    float tempoDePreparo = 10.1;

    //o pedido é só um número
    printf("Faça seu pedido: n");
    scanf("%d", &pedido);

    printf("Quantos desse você vai querer?n");
    scanf("%d", &quantidade);

    //imprimindo as informacoes para o cliente
    printf("####n");
    printf("Pedido: %dn",pedido);
    printf("Quantidade: %dn", quantidade);
    printf("Custo: %f reaisn", preco * quantidade);
    printf("Tempo de preparo: %f minutosn", tempoDePreparo * quantidade);
}

Com sintaxe colorida aqui http://linesocode.pastebin.com/FGi6pVmX

Este é um código bem simples que usa basicamente o que foi visto na aula anterior. O que é importante aqui é perceber que, muitas vezes enquanto estamos programando nós precisamos guardar informações para serem usadas mais tarde. Nesse exemplo eu precisei guardar o pedido e a quantidade que o cliente vai querer. Eu usei esses valores entrados para calcular qual seria o preço e a tempo de preparo do pedido. Estes lugares onde podemos guardar valores se chamam variáveis e na linguagem C elas são associadas a um tipo·

Os Tipos

Todos os dados que você irá manipular programando em C estarão dentro de variáveis e estas têm um tipo, que não pode ser modificado depois de declarado. Este esquema é o que chamamos de uma linguagem tipada estaticamente. O que? Você quer saber quais são todos os tipos existentes em C? Eu te mostro:

  • char: É o tipo utilizado para um caracter (uma letra) e geralmente tem o tamanho de 8bits (1 byte). Já demos uma olhada nele na última aula quando falamos de strings, que não são nada mais do que uma sequência de chars.
    • exemplos de char: ‘a’, ‘b’, ‘z’, ‘1’
  • int : Um número Inteiro, você sabe todos os números que você usa pra contar e também toda aquela galera negativa.
    • exemplos de int: 1, 2 , 0 , -11, 999, 44
  • float : Estes são os números Reais que você aprendeu na escola, aqueles com vírgula lembra? Eles podem ser escritos diretamente como você está acostumado, porém com a pequena exceção de que não se usa vírgulas e sim pontos para separar a parte real da decimal.
    • exemplos de float: 0.1, 22.1, 10.1 , 5.99
  • double : É um número real com mais precisão. Para todos fins práticos você deve usar um double quando quiser um número real e ele não puder ser armazenado dentro de um float.

Endereços de variáveis

Existe também toda uma leva de composições que podem ser feitas para criar novos tipos chamados ponteiros. Não vamos entrar em muitos detalhes aqui, mas imaginem que ponteiros são variáveis que guardam o endereço de outras variáveis. Qualquer um dos tipos que foram explicados na seção anterior podem ser declarados com o nome da variável precedido por um * (asterisco) e isto caracterizará um ponteiro. Veja alguns exemplos:

...
int i; //variável do tipo inteiro
int *pt; //guarda o endereço de uma variável inteira
pt = &amp;i; //"pt" recebe o endereço da variável "i"
...

Como vocês podem ver o operador & indica que não estamos falando do valor de uma variável e sim de seu endereço. Talvez fique mais fácil entender o que está acontecendo imaginando esta representação gráfica:

Ou esta utilizando setas, que deve ser entendida como “A variável pti aponta para a variável i”:

Agora que você já sabe que ponteiros existem fica mais fácil de entender porque o scanf usa o operador & antes dos seus parâmetros certo? Por enquanto chega desse papo.

Vetores de valores

Também existe mais uma variação possível na declaração das variáveis, podemos definir variáveis que comportam diversos valores de um mesmo tipo. Alguns exemplos disso podem ser vistos aqui.

...
//suponhamos que você quer guardar as letras do alfabeto
char alfabeto[26];
alfabeto[0] = 'a';
alfabeto[1] = 'b';
...

...
//alguns números primos
//usamos  { val1, val2, val3 ...} para fazer inicializaçao
int primos[] = { 2, 3, 5, 7, 11, 13 };
...

Como abordado anteriormente, strings são apenas um vetor de valores do tipo char com o último sendo ‘’. Um exemplo da declaração de uma poderia ser o seguinte:

char name[] = "lucas";
//similar a char name[] = { 'l','u','c','a','s','' };
//note que a primeira sintaxe já bota o  no final

//imprimindo cada caractere
printf("%c,%c,%c,%c,%cn",name[0],name[1],name[2],name[3],name[4]);
//imprimindo como uma string
printf("%sn",name);

Neste exemplo podemos observar que o acesso a cada um dos elementos do vetor pode ser feito usando o operador e um número inteiro. Note que os número começam do 0, isso mesmo, o primeiro elemento é 0, o segundo é 1 e assim por diante.

/*

Esta aqui é uma revelação interessante, na linguagem C basicamente não existe diferença entre o tipo vetor e ponteiro. Na realidade o nome dado para um vetor é um ponteiro para o primeiro valor, ou seja, ele contém o endereço do primeiro elemento do vetor e como vetores na linguagem C são garantidamente alocados em uma região contígua da memória, ou de forma mais simplista, todos os elementos dele ficam grudadinhos você tem na realidade o endereço de todos os elementos.

O acesso de elementos usando o operador é só uma facilitação da aritmética de ponteiros que aprederemos mais pra frente. Uma decorrência divertida (e talvez um pouco assutadora para principiantes) do fato de ponteiros e vetores serem a mesma coisa é que a seguinte sintaxe é válida:

//os dois exemplos são a mesma coisa usando sintaxes diferentes
char *string = "meu nome eh lucas";
char outra[] = "basicamente a mesma coisa";

*/

Por aqui acaba esta aula, eu ia dar mais exemplos de código, porém é melhor esperar o conteúdo da próxima para as coisas ficarem mais interessantes.

Dúvidas, sugestões, correções e elogios nos comentários aqui embaixo.

Referências

Você provavelmente curtirá: