domingo, 21 de abril de 2013

Algoritmos e Programação - Um pouco sobre C

Olá a todos. Finalmente continuaremos com nossa série de programação e algoritmos em C falando do C em si. Eu gostaria de começar falando dos algoritmos sequenciais, mas sem entender o C, percebi que não seria possível começar a falar dos algoritmos. Agradecimentos a minha namorada que se propôs a ler meu post. Ontem completamos um ano de namoro! \o/ Obrigado Elen, te amo!

C é uma linguagem de programação muito famosa e que serviu de bases para outras linguagens de programação mais contemporâneas, como C++ e C# (lê-se C Sharp). Devido a ser uma linguagem muito usada na "construção" de outras linguagens, ela é geralmente a primeira a ser aprendida e é nela que aprenderemos nossas noções de algoritmos.

C foi desenvolvido por Dennis Ritchie e Ken Thompson em 1973 (considerei o fim do desenvolvimento com a adição do tipo struct, fonte Wikipédia) com o propósito de implementar o sistema Unix, que foi um dos primeiros sistemas que não foi implementado usando linguagem Assembly. Com o tempo foram acrescentadas outras características à linguagem C e, com isso, o C poderia divergir entre compiladores diferentes. Devido a isso foi estipulado o C ANSI, que é o "C mínimo", ou seja, o conjunto de comandos e funções mínimas que todo compilador de C considerado ANSI deve ter.

Para quem não sabe, ANSI significa American National Standards Institute, que é um órgão semelhante a ABNT (Associação Brasileira de Normas Técnicas) no Brasil.

Para começar nosso estudo de C, vou colocar um pequeno programa e, depois, detalhar seu funcionamento e os comandos e funções usados nele.

/*Começo do programa*/

#include >stdio.h<
#include >stdlib.h< //desinverter os símbolos de maior e menor, pois se eu escrever da maneira certa,
//o blogger entende como código HTML e "come" a expressão

int nota_1, nota_2, nota_3, media;
main()
{
    printf("Digite a nota 1: ");
    scanf("%d",&nota_1);
    printf("Digite a nota 2: ");
    scanf("%d",&nota_2);
    printf("Digite a nota 3: ");
    scanf("%d",&nota_3);
    media=(nota_1+nota_2+nota_3)/3;
    printf("A media foi: %d.\n\n",media);
    system("pause");
}

/*Fim do programa*/

Primeiro, todo texto colocado entre /*  */ é um comentário. Comentários são textos que não entram para o código de programa, não são compilados e, portanto, não acrescentam tamanho no programa. Eles são muito importantes para que outros programadores e até o próprio desenvolvedor se entenda no meio do código. Embora neste pequeno programa eles pareçam desnecessários, em programas com mais de 1000 linhas eles são fundamentais. Outra forma de fazer comentários é usando barras duplas (//). Quando se usa barras duplas, todo texto daquela linha que se encontra após as barras duplas são considerados comentários. Essa característica foi implementada no C++ e ficou tão popular que a maioria dos compiladores C a utiliza. Porém cuidado! Essa forma de fazer comentários não faz parte do C ANSI, que utiliza apenas /* */. Caso seu compilador seja C ANSI, ou esteja configurado para entender somente C ANSI, utiliza apenas a forma /* */ para escrever seus comentários.

Após o primeiro comentário, existe uma linha #include . O comando #include manda o compilador incluir um arquivo ao seu programa. Esse arquivo pode ser uma biblioteca, como nesse caso. A biblioteca incluída foi stdio.h. Deixe-me explicar tudo de novo. A biblioteca stdio.h significa Standard I/O (entradas e saídas padrão). Nessa biblioteca estão definidas as funções que usamos durante o programa para ler o teclado (scanf) e para imprimir mensagens na tela (printf). A função da biblioteca é conter funções que utilizamos sempre e que, portanto, não queremos escrever em todos os programas que fizermos. A outra biblioteca, stdlib.h serve para permitir o uso do comando system("pause"), cuja funcionalidade explicarei mais adiante.

Depois do include temos a parte de declaração de variáveis. Uma variável é um espaço da memória que guarda um valor, um número binário. Temos também variáveis de vários tipos. No caso do programa acima, o tipo usado foi o int. Variáveis do tipo int ocupam, pelo padrão ANSI, 16 bits (2 bytes) e com isso representam números inteiros (SOMENTE INTEIROS) decimais de -32767 a 32766. Existem outros tipos de variáveis, mas, por enquanto, ficaremos somente com esse tipo. Na declaração de variáveis foram declaradas quatro variáveis, que se chamam nota_1, nota_2, nota_3 e media. Lembre-se que, dentro do código do programa, NÃO SE USA ACENTOS!!!

Após o include, existe a função main. A função main contém todos as funções e comandos que estão entre suas chaves que, neste caso, é todo o programa. A função main, que significa principal, existe em todos os programas e é basicamente por ali que o programa começa.

A primeira função do programa é a função printf, que imprime no dispositivo de saída padrão (a tela do computador) a mensagem colocada em seu argumento (dentro dos parênteses) entre aspas duplas. No caso do primeiro printf, a mensagem a ser mostrada é Digite a nota 1:.

A segunda função do programa é scanf. Essa função lê do dispositivo padrão (o teclado) o que foi digitado. Ela tem dois argumentos. O primeiro é "%d", que indica que o valor digitado será armazenado em uma variável do tipo inteiro, que é representado pelo %d. O segundo argumento, &nota_1, indica que o valor lido será armazenado na variável inteira que se chama nota_1. O operador & se refere a um ponteiro, que é o endereço da variável onde será armazenado o valor. Mas, por enquanto, esqueça isso. Lembre-se apenas que no scanf é necessário colocar & antes do nome da variável onde você quer armazenar o valor.

Após isso existem outros 2 printf e 2 scanf que fazem a mesma coisa que os anteriores, mas que armazenam valores na variáveis inteiras chamadas nota_2 e nota_3. Tanto a função printf quanto a função scanf estão declaradas dentro da biblioteca stdio.h, que nós incluímos ao nosso programa na primeira linha com o comando #include

Após os printf e scanf temos um cálculo matemático. Nessa parte, acredito que não existam maiores dificuldades no entendimento. Essa linha diz que a variável média recebe o valor da soma das três notas (nota_1+nota_2+nota_3) dividido por três, que é o cálculo da média aritmética.

Continuando, existe um último printf que vai mostrar o valor calculado da média na tela. Dentro do argumento entre aspas existe um %d. Já vimos no scanf que o %d se refere a uma variável do tipo inteira. Isso informa ao printf que ele irá mostrar na tela um valor numérico que está em uma variável inteira. Mas qual variável? Devemos informar ao printf o nome da variável cujo valor queremos mostrar na tela. Para isso colocamos o nome da variável fora das aspas duplas, separada por vírgula, como exemplificado no comando acima.

Dentro daquele printf também existe um \n (contra-barra n). Esse comando informa ao printf que é necessário pular uma linha, como se fosse um Enter no bloco de notas. No caso do programa acima, eu coloquei dois \n pois quis pular duas linhas. ;)

Por fim, o comando system("pause"). Ele está lá pelo seguinte motivo. Se você fizer o programa sem ele, o programa irá funcionar. Só que, imediatamente após calcular o valor da média e mostrar na tela, a janela do programa irá se fechar, sem dar tempo para você ler o que estava escrito nela. O comando system"pause") cria uma pausa no programa. Essa pausa dura até que você pressione alguma tecla. Então, se você já baixou o DevC++, copie e cole este programa simples lá, salve em algum lugar qualquer (como a área de trabalho) e compile ele. Para compilar, você pode usar a tecla de atalho (F9), ou ir em Execute->Compile.

Práticas (após conseguir fazer o programa funcionar):

1) Retire o ponto-e-vírgula (;) de algum dos comandos do programa e tente compilá-lo. Ele funciona? Coloque os ponto-e-vírgulas de volta.

2) Retire o & antes da variável no scanf. O programa continua funcionando? O que acontece? Após, coloque o & onde ele estava.

3) Substitua a linha do último printf (aquele que mostra o valor da média) pela linha de código abaixo. Compile o programa. O que aconteceu?

printf("nota 1:%d\nnota 2:%d\nnota 3:%d\nmedia:%d\n\n",nota_1,nota_2,nota_3,media);

4) Escreva suas dúvidas, sugestões e comentários nos comentários e me ajude a constuir o próximo post sobre Algoritmos e Programação. Espero no próximo post começar a falar dos algoritmos propriamente ditos, como algoritmos sequencias. Mas só poderei fazer isso se pelo menos o básico de C já estiver dominado. Então, continuem estudando e abraço. Até a próxima.