quarta-feira, 19 de outubro de 2011

O que é um algoritmo?

O que é um algoritmo?

January 4, 2006


Um algoritmo é um procedimento computacional definido que recebe um ou mais valores (entrada) e produz um ou mais valores (saída). O algoritmo é aquela fórmula matemática, aquele pedaço de código, que fica ali no meio da entrada e da saída para transformar o primeiro no segundo.
Vamos supôr por exemplo que temos a função:
LaTeX: f(x) = \frac{x^{2}}{3}
A sua entrada é o x e a sua saída é o y (ou f(x), o valor que a função retorna).
O algoritmo aqui seria o seginte:
  1. Entrada: Receber o valor X.
  2. Elevar X ao quadrado e guardar o número resultante como Z.
  3. Dividir Z por 3 e guardar o número resultante como Y.
  4. Saída: Imprimir o valor Y.
O algoritmo, portanto, é a lógica do nosso problema matemático, ou, informático. É a seqüência de passos que eu faço na minha cabeça (ou, quando é complexo, no papel) antes de escrever, em C, a função f:
int f(int x) {   int z, y;   z = pow(x, 2);   y = z/3;   return y;}
Se formos pensar, veremos que tudo o que fazemos é um algoritmo, é um procedimento que recebe uma entrada e envia uma saída. Não só no computador, mas na vida. Quando eu falo com alguém, eu espero sua entrada (o que a pessoa fala pra mim), então penso e transformo essa entrada numa saída (a resposta que vou dar pra pessoa). E assim é com várias outras coisas. Podemos dizer também que acordar é um algoritmo, por exemplo:
  1. Entrada: Meu cérebro disse que eu estou acordado!
  2. Percebi que acordei, mas estou com sono. Espero um pouco.
  3. Saída: Abrir os olhos.
  4. Saída: Se espreguiçar.
  5. Saída: Tirar a coberta.
  6. Saída: Sentar na cama.
  7. Saída: Sair da cama.
Podem existir vários algoritmos diferentes para resolver o mesmo problema. No caso de Acordar, cada um acorda de forma diferente, por exemplo. Foi até um exemplo meio estranho esse aí, mas outro algoritmo poderia dar outra saída, como por exemplo simplesmente abrir os olhos e cair da cama. Ou no caso acima da função matemática, poderíamos ter um algoritmo que fizesse a mesma coisa de maneira diferente também.
O algoritmo que usamos depende principalmente do tempo que ele demora pra ser executado e a memória que ele gasta no computador. Chamamos isso de custo. Quando começarmos a ver os algoritmos de ordenação de vetores (arrays), veremos que cada algoritmo faz uma coisa diferente, mas todos servem para o mesmo propósito: ordenar o vetor. Para uma entrada pequena, um pode ser mais rápido... Para uma maior, outro. Portanto, o algoritmo que queremos usar (o tempo que ele vai demorar pra ser executado e a memória que ele vai gastar no computador) depende principalmente do tamanho da entrada (que chamamos de n e no exemplo da função seria lá em cima seria a variável x).
Na maioria dos casos (e vai ser sempre assim aqui nos meus artigos), a entrada será o teclado (por exemplo, o usuário digita o X para a função) e a saída será a tela (por exemplo, o programa imprime o resultado da função, o Y, para a tela). Essas são a entrada e saída padrão (standard input output do C), que é usada nas olimpíadas e na maioria dos problemas que resolvemos no computador.
Em resumo, portanto, um algoritmo é a lógica de um programa computacional. Nos próximos artigos, isso deverá ser mais esclarecido e começaremos a ver algoritmos "de verdade" ;)
Qualquer dúvida, sugestão ou notificação de erro; poste um comentário ou me envie um e-mail (não só nesse, mas também nos próximos artigos). Espero que gostem.

Programação-Aprender algoritmos com facilidade

Programação-Aprender algoritmos com facilidade


PUBLICIDADE


Lembro da alegria quando entrei na faculdade de computação alguns bons anos atrás, bem que a alegria durou poucas semanas, até as primeiras provas de cálculos e de algoritmos, em específico as de algoritmo, pois aquelas questões de condições, “if”, “else”, “while”, “for” e recursão simplesmente não entravam na minha cabeça, ou melhor não entrava na cabeça da maioria dos alunos da turma, eram poucos que tinha uma noção ou base de programação.
Porém, o tempo foi passando e as coisas, ou melhor as condições, foram se encaixando e agora após formado a algum tempo, vejo o quanto eram fáceis aquelas provas.
Mas enfim, lembro que na época da faculdade eu li um texto falando sobre a questão de algoritmos e como um programa de computador deve funcionar, e como lembrei desse exemplo simples, nada mais justo que postar por aqui para quem é iniciante na “arte” de programa ou da criação de algoritmos possa entender um pouco melhor e claro “clarear” as idéias, afinal tudo que é novo acaba assustando um pouco no início.
O exemplo que vou citar é um exemplo extremamente simples, mas como citei anteriormente é bem interessante para iniciantes.
E para exemplificar, vamos usar os velhos telefones públicos de ficha, então vamos imaginar que você precisa fazer uma ligação de um orelhão.
Para isso você precisa:
1 – Tirar o fone do gancho;
2 – Ouvir se existe sinal de linha;
3 – Colocar a ficha;
4 – Discar o número desejado;
5 – Aguardar ser atendido;
6 – Conversar com quem atender;
7 – Desligar(Colocar o fone no gancho);
Acima como você pode ver que para realizar uma simples ligação partindo do pressuposto que estamos utilizando um telefone público e que obtivemos sucesso na liga, temos que percorrer esses 7 passos.
Porém temos que analisar as condições desses casos.
1° Condição:
1 – Tirar o fone do gancho;
2 – Ouvir se existe sinal de linha;
3 – Caso não tenha sinal devemos desligar(Colocar o fone no gancho);
2° Condição:
1 – Tirar o fone do gancho;
2 – Ouvir se existe sinal de linha;
3 – Colocar a ficha;
4 – Discar o número desejado;
5 – Telefone ocupado, ou ninguém atendeu;
7 – Desligar(Colocar o fone no gancho);
8 – Retirar a ficha do orelhão visto que a mesma não foi utilizada;
Olha só que interessante as duas condições citadas acima, elas devem ser validadas caso você crie um sistema que simule um orelhão de ficha, e caso você esqueça de programar/tratar alguma condição e o usuária resolva realizar uma operação que o sistema acabe não validando o que ele irá receber como retorno são os famosos erros de memória ou então outra mensagem qualquer de erro.
Bem esse foi exemplo simples, mas espero que tenha ajudado de alguma forma aos iniciantes na arte de desenvolver sistemas.