29 de ago. de 2008

Aula 02: Instruções Seqüênciais

Antes de iniciarmos com as instruções e os algoritmos, alguns alunos me perguntaram qual IDE seria bom para se programar em C. Bem, particularmente, uso o Eclipse, mas existem dezenas de ferramentas, tanto para Linux, quanto para Windows e MacOS.

O mais usado no Windows é o Dev C++ e para aqueles que ainda estão com dificuldades de instalar e criar os primeiros projetos, segue um tutorial.

Bem, tem ainda o Turbo C da Borland. Eu usei muito o Turbo Pascal e pra mim o ambiente dele é familiar.

Mas, se você é adepto do Linux como eu e não quer instalar o Eclipse, sugiro instalar o Geany. Ótima dica do nosso garoto carvão, vulgo Idelmar "Cavernoso" Mader, grande adorador de C.

Bom, pra instalar o Geany no Linux/Debian ou variante, basta, como root, digitar o comando apt-get install geany. Se você usa o Ubuntu, tem que, antes, instalar a biblioteca de desenvolvimento. Digite então apt-get install libc6 libc6-dev. Mas, se você quer testar outros, segue aí uma lista completa.

Os puristas irão me criticar se eu não comentar nada sobre o emacs ou vi (que provavelmente já estarão instalados no seu Linux).

Por fim, se você quer apenas testar seus pseudo-códigos, uma boa alternativa é o VisualG, desenvolvida pela empresa Apoio Informática Ltda.

O VisualG tem uma pequena diferença em relação à sintaxe adotada por mim, entretanto, não é nada difícil a adaptação. Basta ler e estudar sua sintaxe. Eis o link para download do VisualG.

Bem, mas vamos à aula...

Imagine que você queira programar um robô para fazer uma tarefa rotineira e chata como lavar a louça. É bem provável que você queira um robô assim... e eu também :-)

Bem, o seu robô possui uma linguagem embutida que lhe permite programá-lo. Entretanto você deve seguir uma ordem estabelecida pela semântica da linguagem e precisa também acertar na sintaxe das instruções. O seu robô possui uma memória onde você poderá gravar informações temporariamente para realizar as tarefas.

Então você irá abrir o editor de códigos do robô e digitar a "receita de bolo", digo a receita de lavar a louça:

Algoritmo Lava_Louca;
Início
   Pegue a esponja;
   Pegue o detergente;
   Passe o detergente na esponja;
   Esfregue a esponja na louça;
   Abra a torneira;
   Passe a água na louça;
   Ponha a louça no escorregor;
   Pegue outra louça...
Fim.


Vejamos os problemas encontrados neste algoritmo:
- às vezes teremos pouca louça, às vezes muita, então como fazer um algoritmo que atenda todas as situações?
- Como medir a quantidade de detergente colocada na esponja?
- Como determinar se a quantidade de água é suficiente para retirar toda a espuma?
- Nem sempre o que entendemos o robô entende, como em "passar o detergente na esponja" pode sugerir que iremos passar o recipiente do detergente na esponja, o que não iria surtir o efeito desejado.

Bem, temos inúmeros problemas aqui. Temos que entender melhor a semântica e sintaxe da linguagem. Além disso, toda linguagem possui diversas instruções, como as sequenciais, as condicionais e as iterativas.

Iniciaremos com as seqüênciais:
É uma instrução de uma única linha que ao terminar passa para a próxima linha, sem desvios. Todas as instruções do algoritmo Lava_Louca são instruções sequenciais.

Bom, para fazer programas de verdade, instruções sequenciais são insuficientes. Mas precisamos delas para fazer diversas coisas como ler um dado do teclado, imprimir textos na tela ou realizar algum cálculo.

Vamos conhecê-las?

Instrução de saída:
Escreva("Constante", lista_de_argumentos);

Em C:
printf("O texto que você quer escrever", argumentos);

Vamos ao famoso algoritmo "Olá Mundo":
Algoritmo Ola_Mundo;
Início
   Escreva("Olá Mundo Cruel!");
fim.


Agora, vamos converter o algoritmo para C:
#include "stdio.h"//biblioteca padrão para entradas e saídas
int main() {
   printf("Olá Mundo Cruel");
   return 0;
}

Instrução de entrada:
Leia(lista_de_argumentos);

Em C:
scanf("formatos", &argumentos);

Ok, dada as instruções iniciais, vamos fazer um programa que lê a idade de uma pessoa, calcule e mostre quantos dias essa pessoa já viveu.

Vamos ao segundo algoritmo "Dias_Vividos":
Algoritmo Dias_Vividos;
variáveis
   inteiro idade;
Início
   Escreva("Quantos anos você têm?");
   Leia(idade);
   Escreva("Você já viveu ", idade*365, " anos.");
fim.

Agora, vamos converter o segundo algoritmo para C:
#include "stdio.h"//biblioteca padrão para entradas e saídas
int main() {
   int idade;
   printf("Quantos anos você têm? ");
   scanf("%d", &idade);
   printf("\nVocê já viveu %d dias.", idade*365);
   return 0;
}

Instrução de atribuição:
var <- expressão;

Em C:

var = expressão;

Durante a programação você irá necessitar de armazenar dados para serem processados. Todas as linguagens de programação possuem formas de se fazer isso: são os identificadores.

Um identificador pode ser o nome de uma função ou procedimento, uma variável ou uma constante.
As constantes irão servir para armazenar valores que não se modificam durante a execução do programa, como valores de impostos, valores que são conhecidos e são constantes como o PI.
As variáveis, estas sim, são muito úteis. Elas servem para armazenar, pasmem, dados variáveis :-)

Vamos ao terceiro algoritmo "Dias_VividosII":
Algoritmo Dias_VividosII;
variáveis
   inteiro idade, dias;
Início
   Escreva("Quantos anos você têm?");
   Leia(idade);
   dias = idade * 365;
   Escreva("Você já viveu ", dias, " anos.");
fim.

Agora, vamos converter o terceiro algoritmo para C:
#include "stdio.h" //biblioteca padrão para entradas e saídas
int main() {
   int idade, dias;
   printf("Quantos anos você têm?");
   scanf("%d", &idade);
   dias = idade * 365;
   printf("Você já viveu %d dias.", dias);
   return 0;
}

A maioria das linguagens estruturadas necessitam que variáveis e constantes sejam declaradas, assim como seu tipo de dado. Em C não é diferente. Os cinco tipos básicos em C são:

char: O valor armazenado é um caractere. Caracateres geralmente são armazenados em códigos ASCII.
* int: Número inteiro. O tamanho a ser representado depende da máquina em que o programa está rodando.
* float: Número em ponto flutuante (real) de precisão simples. São números com casas decimais.
* double: Número em ponto flutuante de precisão dupla.
* void: Este tipo indica que o resultado não tem um tipo definido. É a ausência de valor.



Faça os exercícios da aula 02.

Retornar ao índice do curso.
Avançar à próxima aula.

Nenhum comentário: