Staffer Group BR™

Fórum interativo totalmente gratuito!

/* Widget *//* Resposta rápida bloqueada */
Cadastre-se
→ Crie a sua conta

 VisualizaçõesPermissão deste fórum:
Você não pode responder aos tópicos neste fórum


CurtirDiretório deste fórum:
Fóruns » Principal »  » Tutoriais » Programação Externa

#1
 D'Leandro™

avatar
Fundador
Recadinho: Agora a coisa ta ficando séria, se você ainda está ai obrigado e/ou parabéns. Com essa dedicação toda você tem potencial para se tornar um grande programador...
Caso queira retornar ao indice inicial do curso, clique neste link.

Este artigo é tão grande que dividi em 3 partes e cada uma delas ficou enorme e bem complexa, estude cada parâmetro com calma, faça anotações e pesquise por palavras que não entenda, bom gente chega de dicas e vamos ao conteúdo.
Rafael Toledo escreveu:Pare por um instante! Após ler este post, a sua vida como programador nunca mais será a mesma… você será apresentado à linguagem considerada por alguns como A linguagem de programação… ou melhor, ela não é “A” linguagem, ela é a Linguagem C!!!!!
Bom, no post de hoje vamos tratar, então, de uma nova linguagem, a linguagem C. Bom, antes de começarmos a vê-la, vale nos informarmos um pouco sobre a história, origens, características e etc.
A Linguagem C é uma linguagem compilada (assim como Pascal), ou simplificadamente, o seu código, após passar pelo processo de compilação/linker, é convertido em arquivo executável. Além disso, ela é uma linguagem estruturada, ou seja, o seu código é organizado e definidos em blocos.

Ela foi criada por Dennis Ritchie em 1972, para desenvolver o Unix, que originalmente havia sido escrito em Assembly (ou Linguagem de Montagem – linguagem de programação de baixo nível, muito próxima à linguagem de máquina). Por permitir uma integração com Assembly (os códigos poderiam se misturar ao código em C), tornou-se uma das linguagens de programação mais utilizadas. Influenciou muitas linguagens, inclusive C++, que foi desenvolvida originalmente como uma extensão da linguagem C, englobando características da Programação Orientada a Objetos. Devido à sua ampla utilização, e a imensa gama de variações que foram sendo criadas ao longo de seu desenvolvimento, foi padronizada em 1999, padrão conhecido como C99. Em 2000, foi adotado como padrão ANSI. Em 2007, começou a surgir uma nova idéia de padronização, englobando novas funcionalidades à linguagem. Essa idéia é conhecida como C1X.

Bom, acho que de história isso é suficiente para o post. Quem se interessar por mais detalhes, pode acessar os links da Wikipedia que se encontram ao longo do texto.

Para programarmos, precisamos de um compilador, que irá transformar nosso código-fonte em programa. Para desenvolvermos, podemos optar por uma IDE ou Ambiente de Desenvolvimento Integrado, que reúnem ferramentas como editor de texto, compilador, depurador (debugger – permite encontrarmos erros de lógica). As opções gratuitas mais populares, sem sombra de dúvida, são Dev-C++ e Code::Blocks. Ambos os sistemas estão disponíveis para Windows e Linux. A última versão do Dev-C++ é a versão 4.9.9.2 (5.0 beta), de 2005, disponível para download aqui a baixo. Já o Code::Blocks encontra-se na versão 10.05, de maio desse ano (eles utilizam a nomenclatura de versão “Ubuntu”), que pode ser obtida aqui a baixo. Eu, particularmente, prefiro o Code::Blocks apesar dele ser um pouco mais “pesado”. Já tive problema com bugs no Dev-C++ (o que me causou algumas dores de cabeça quando desenvolvia meu projeto de 1º ano na faculdade. . .). A seguir, temos uma imagem da janela dos dois ambientes:

A instalação dos dois ambientes é bastante tranquila e intuitiva (apesar do Code::Blocks estar disponível apenas em inglês). Qualquer dúvida, basta deixar um comentário.

Para aqueles que preferem utilizar o Linux para programar, também existem boas opções de IDE, como KDevelop e Anjuta, além dos próprios Code::Blocks e Dev-C++. Basta usar o gerenciador de pacotes de sua preferência ou baixar diretamente dos sites correspondentes e instalar. :)

Bom, já ficamos sabendo da história, já preparamos o nosso ambiente de programação. Mas e daí? Eu quero é programar! Como é a sintaxe dessa tal linguagem C? É totalmente diferente de Pascal? Tudo que eu já aprendi é inútil?

Calma, calma. Todos os conceitos já vistos até aqui serão utilizados e as diferenças serão explicadas. Pra começarmos, vamos ver o famoso Alô Mundo em Algoritmo, em Pascal e em C. As diferenças serão explicadas logo a seguir:
Código:
Algoritmo Alo_Mundo
 
[Processamento]
   escreva("Olá mundo! - rafaeltoledo.net")
[Fim]
Código:
program Alo_Mundo;
 
uses
   crt;
 
begin
   writeln('Olá mundo! - rafaeltoledo.net');
end.
Código:
// Comentário: o nome do programa não aparece mais!
 
#include ;
 
int main(void)
{
   printf("Ola mundo! - rafaeltoledo.net\n");
 
   return 0;
}
Bom, logo de cara é meio chocante, meio nada a ver com Pascal. Mas calma, é bem simples. Primeiramente, podemos ver que o nome do programa não aparece mais no código. Em C, programas podem conter vários arquivos de código, o que torna totalmente dispensável adicionar o nome do programa aos arquivos. Então, observação 1: em C, não temos o nome do programa no código. Logo em seguida, temos #include que “equivale” ao uses crt. Os includes indicam arquivos de cabeçalho (daí a extensão .h – header) que contêm funções. No caso, stdio (standard iout) possui referências às funções padrão de entrada e saída. Podemos generalizar uma observação 2 dizendo que todos os programas em C terão o #include . Em seguida, temos o “assustador” int main(void)! Calma, calma pessoal. Vamos explicar. Por padrão definido na linguagem, todo programa em C é composto de funções e deve conter a função main, que é a primeira função do programa, a que é chamada pelo sistema operacional quando o sistema é chamado. Tá, mas e esse tal de int main(void), o que significa. Significa o seguinte: a função de nome main devolverá um valor do tipo inteiro – int - e não receberá nada como argumento – void. O abre e fecha chaves equivale ao nosso begin / end do Pascal, ou seja, o que definimos entre eles é o que a função irá fazer. Podemos, então, definir as funções em C com o seguinte formato:

()
Aproveitando a cartada, vou falar sobre os tipos primitivos em C.


  • int – o nosso querido amigo, inteiro

  • long – o inteiro, com uma maior capacidade (para números beeeeem grandes)

  • float – o conhecido real. Chamado de float ou “ponto flutuante” porque a vírgula (ou ponto, nos EUA) “caminha” ou “flutua” (haja criatividade!)

  • double – float com maior precisão de casas após a vírgula

  • char – tipo caractere

  • void – o “nada”, “vazio”, “coisa nenhuma”… Não é usado para declarar variáveis, apenas para valores de retorno e parâmetros de funções.

Putz, acabou??? E a string??? E o booleano??? Calma, gente… C, ao contrário de Pascal (que foi desenvolvida para ser uma linguagem voltada para o ensino da programação), foi desenvolvida para fornecer flexibilidade aos programadores. String em C, são na verdades vetores de caracteres terminados com ”. Este caractere serve pra diferenciar strings de vetores de caracteres comuns. Por exemplo, uma string com o meu nome ficaria com ‘R’ ‘a’ ‘f’ ‘a’ ‘e’ ‘l’ ”, ou seja, seria um vetor de 7 posições. Já o tipo booleano só passou a existir a partir do padrão C99 (desde que seja incluído o arquivo stdbool.h), sendo então chamado de bool. Mas no geral, a linguagem C considera todo inteiro igual a 0 (zero) como falso e qualquer valor não-zero como verdadeiro.

Bom, continuando a nossa análise do nosso pequeno Alo Mundo. Logo após à declaração da função main, temos uma abre-chaves. Em C, as chaves delimitam o corpo das funções e dos laços, da mesma forma como temos o begin e o end em Pascal. Bastante simples, não? E poupa digitação, agilizando a codificação! :-)

Prosseguindo, temos uma chamada ã função printf. Esta é a função padrão da linguagem para a escrita de texto na tela do console. Na chamada a ela, passamos uma constante de texto. Em C, as constantes de texto vem entre aspas duplas, em vez das aspas simples do Pascal. Mas o que seria esse n no final?? Em C, temos algumas constantes para a formatação de texto. n é pra pular de linha. Outra constante bastante utilizada é o t que indica uma tabulação horizontal.

Para concluirmos, temos o return 0; que indica o retorno da função (como foi declarado que a função main retorna um inteiro, precisamos retorná-lo, certo?). Mas por que 0? E pra quem estamos retornando isso? Estamos retornando 0 para o sistema operacional. O valor 0 indica que o programa executou corretamente, sem erros.

Vamos agora ver um exemplo com a função de leitura e o uso de condicionais.
Código:
Algoritmo maiorIdade
 
[Declaração de Variáveis]
   idade : inteiro
 
[Processamento]
   leia(idade)
 
   se (idade >= 18)
      então
         escreva("Então você já é maior de idade!")
      senão
         escreva("Então você é menor de idade!")
   fim-se
[Fim]
Código:
program maiorIdade;
 
uses
   crt;
 
var
   idade : integer;
 
begin
   write('Olá! Quantos anos você tem? ');
   readln(idade);
 
   if (idade >= 18) then
      begin
         write('Então você já é maior de idade!');
      end
   else
      begin
         write('Então você é menor de idade!');
      end;
end.
Código:
/* Como já foi dito, o nome do programa não aparece no código */
#include
 
int main(void)
{
   int idade;
 
   printf("Olá! Quantos anos você tem? ");
   scanf("%d", &idade);
 
   if(idade >= 18)
   {
      printf("Então você já é maior de idade!");
   }
   else
   {
      printf("Então você é menor de idade!");
   }
 
   return 0;
}
Vamos começar, então, explicando o uso das condicionais. Como pode ser percebido, pouquíssima coisa muda em relação ao Pascal. não temos a palavra then após a sentença condicional e o uso dos parênteses é obrigatório. A seguir, a lista dos operadores lógicos em C, que por sua vez diferem um pouco dos já conhecidos em Pascal:


  • Igualdade: ==

  • Menor, Maior, Menor ou Igual, Maior ou Igual: <, >, <=, >=

  • Diferente: !=

  • E: &&

  • Ou: || (dois pipes, aquele símbolo geralmente Shift+Contrabarra)

Como pode ser visto, nenhuma novidade. A lógica funciona da mesma maneira: executa-se o bloco if caso a sentença seja verdadeira e o bloco else (caso exista), caso seja falsa.

Agora, vamos verificar a nossa função de leitura, a função scanf. Nesta função, passamos dois parâmetros para a mesma. Primeiramente, devemos passar o formato do conteúdo que vamos ler. Como assim??? Calma, no começo pode parecer um tanto quanto confuso, mas é mais simples do que parece. Neste primeiro parâmetro, especificamos o tipo da variável que vamos ler. Os argumentos mais comuns são:

  • “%d” ou “%i” – para o tipo int
  • “%f” para o tipo float
  • “%c” para o tipo char
  • “%s” para strings (ou melhor, vetores de caracteres char[])

Já no segundo parâmetro, passamos a variável em que queremos guardar o conteúdo lido. Mas por que esse & antes do nome da variável??? Porque na verdade estamos passando o endereço na memória desta variável. Mas não se preocupe com isso por enquanto. Essa história de endereços será vista com mais calma quando chegarmos nos famosos (e temidos) ponteiros. Logo logo a gente chega lá. Voltando ao scanf, o único tipo que não necessita do & é quando vamos ler strings (pelo fato de vetores já serem ponteiros… mais uma vez, não se preocupe com isso por enquanto!).

Bom, aqui encerro a primeira parte da Introdução à Linguagem C. Pratiquem a programação, busquem materiais diferentes (tolo é o homem de um só livro, dizia um professor do Ensino Fundamental…) e divirtam-se! Desculpem-me por esse hiato entre os posts, mas a vida de faculdade no 3º ano não está fácil. Assim que possível, posto a segunda e última parte dessa nossa introdução. No próximo post, explicarei a estrutura de seleção switch e as estruturas de repetição while, do-while e for. E quem sabe uma explicação sobre funções!

Uma última coisa antes de encerrar. Gente, por favor não fiquem pedindo programas prontos, sejam nos comentários, sejam via e-mail. Tenho recebido inúmeros e-mails com pedidos do tipo. Sinceramente, os exercícios que os professores passam no curso técnico / faculdade servem pra que vocês desenvolvam o seu raciocínio lógico. Treinar, errar, quebrar a cabeça é essencial para um bom aprendizado. Digo isso para o bem de vocês mesmos como futuros profissionais. Fica a dica!

Este artigo foi escrito por Rafael Toledo e publicado no site rafaeltoledo.net
Abraço a todos e boa programação!

Confira a parte 2 e a parte 3 no índice principal.
Ver perfil do usuário