É um assunto um tanto quanto extenso e eu sou um tanto quanto perfeccionista, vou querer deixar bem detalhado.
Sei que uma parte da galera aqui do forum programae talz e já vi que tem outros que fazem faculdades na mesma área que eu, então, se tiverem algo para corrigir e/ou acrescentar, peço que comentem a respeito.
Não é o melhor tutorial do mundo e eu sou um péssimo professor.
Para quem programa, mas é daquele jeito, não sabe o que está fazendo, isso facilitará em muito a vida de vocês.
E, para quem não programa, é uma ajuda para começar. Enfim, vamos ao tutorial, sem mais blábláblá...
Introdução:
Algoritmos são sequencias finitas de instruções lógicas bem definidas e não ambíguas (não podemos dar margem de dupla interpretação ao compilador - explicarei mais tarde sobre isso).
Basicamente um algoritmo é uma receita de bolo, onde colocamos quais passos devem ser seguidos pelo programa.
Para se entender algoritmo, deve-se ter um bom domínio de lógica. Muitas vezes nos deparamos com situações onde devemos usar todo nosso potencial lógico para passar do mundo real para um algoritmo uma estrutura passos que faça algum sentido. Algo próximo ao que chamamos de "abstração" (mas nisso entraríamos em um conceito de Programação Orientada a Objeto, que prefiro deixar para um outro tutorial).
A grosso modo, uma forma de exercitar seu raciocínio lógico é fazendo aqueles testes bobos que existiam aos montes na internet há alguns anos. O teste do "lobo, ovelha, grama e a balsa", ou o teste da "família, polícial, ladrão e a balsa", tudo isso pode ser descrito em passo lógicos, que, no final, descrevem um algoritmo.
Para exemplificar melhor um algoritmo, peguemos o seguinte exemplo: ligar para um amigo
Quote
discar número;
falar com amigo;
colocar telefone no gancho;
Tudo isso é uma sequencia lógica de instruções sobre como deve ser feita uma ligação. Claro que descrevemos um caso com melhores chances de sucesso, se fôssemos avaliar cada um dos riscos ao discar, ficaria mais ou menos assim:
Quote
verificar se há linha;
(caso sim faça:)
discar número;
verificar linha do amigo;
(caso ocupado faça:)
botar fone no gancho;
(caso atenda faça:)
falar com amigo;
(caso não:)
botar fone no gancho;
botar fone no gancho;
Isso descreveria mais uma situação de orientação a objeto e ficaria melhor em um português estruturado, mas achei melhor deixar isso por aqui, para melhor exemplificação.
Português estruturado
A maneira mais interessante de se aprender algoritmos é o português estruturado. Com ele usamos nossa própria língua, aproximando-se da linguagem da máquina, para descrever ações lógicas.
As linhas que escrevi acima se assemelham muito a alguns trechos escritos em português estruturado. Vejamos um exemplo:
Obter dois números inteiros do usuário e somá-los exibindo um resultado na tela.
variável:
Algoritmo "SomaDoisValores";
SOMA,X,Y: inteiro;
inicio
Escreva("Digite um numero");
Leia(A);
escreva("digite outro numero");
leia(B);
SOMA = A + B;
escreva(SOMA);
fim.
Basicamente é isso, começa-se de uma maneira bem escrita, até um ponto onde chega-se só a parte da lógica e fica extremamente fácil traduzí-la para o mundo real e vice-versa.
O ; deve estar presente ao final de qualquer linha de instrução, indicando que aquela acabou. Para ser mais direto, o ; indica onde terminam as linhas na programação.
Mas vamos ao ponto principal, os componentes de um algoritmo/linguagem de programação.
Os componentes a seguir estarão em QUALQUER linguagem de programação, seja ela estruturada ou orientada a objetos.
Vamos a eles:
VARIÁVEIS
Variáveis são pequenas alocações de memória feitas ao decorrer do desenvolvimento do código. Variáveis armazenam dados que podem ser externos (recebidos dos usuários), pré-definidos pelo próprio programador, ou resultado de outras variáveis (tais como operações matemáticas entre outras). Variáveis são divididas em vários classificações, para não haver conflito na memória e na hora de se compilar o programa, elas podem ser:
OPERADORES MATEMÁTICOS
Dentro do universo da programação é obvio que são usado os operadores matemáticos. Os mais comuns são:
OPERADORES LÓGICOS
Esse operadores são usados fora do universo da programação, principalmente na área de probabilidade, estatística e genética.
Quote
|| : Operador OU/OR. Basicamente impõe uma relação entre duas, ou mais, situações, onde um OU outra deve acontecer. Ex: x>10 || x==7 (nesse caso só será válido, ou wtv, se a variável for maior que 10, ou ela também pode ser o 7 - mesmo sendo menor que 10)
! : NÃO/NOT. Nega qualquer operador. Deve ser usado com outros operadores, o mais usado geralmente é o !=, que significa diferente de (o nosso = com tracinho). Ex: x != 7, x é diferente de 7.
Os operadores lógicos tem uma complexidade maior, mas que não se aplica tanto à programação, são as chamadas portas lógicas, que são melhores estudadas em matemática discreta e em arquitetura de computação, outros exemplos de portas lógicas seriam XOR, XNOR... Entre outras, que são, nada mais, que as combinações dos operadores lógicos primários.
Dados as variáveis, operadores matemáticos e lógicos, vamos aos componentes BÁSICOS da lógica de programação:
Condicionais:
SE/OU ENTÃO (IF/ELSE), CASO (SWITCH CASE).
Repetição:
ENQUANTO/POR ENQUANTO/ FAÇA ENQUANTO (WHILE/FOR/DO)
SE/OU ENTÃO (IF/ELSE)
A grosso modo é um operador que estabelece uma condição a ser cumprida para que as instruções que se encontram dentro de seus "domínios" sejam executadas.
Um SE pode, ou não, ter um ENTÃO, que seria as instruções a serem seguidas, caso não sejam satisfeitas as condições estabelecidas ao se declarar o SE.
As coisas ficam mais claras exemplificando-se:
SE (x>10) FAÇA: x--; FIM SE;
No caso SE o número fora maior que dez, ele receberá um decremento de 1.
SE (x>10 && x<50) FAÇA: x=+10; OU ENTÃO FAÇA: x=+50; FIM SE; FIM SE;
Nesse caso SE o número for maior que 10 E menor que 50, ele receberá mais 10 em seu valor. Caso ele seja menor que 10 ou maior que 50, ele receberá uma soma de 50 em seu valor.
A estrutura do SE pode ser muito mais complexa, fazendo uma "rede" de condições e pré-condições. Muitas vezes essa rede pode ser poupada usando-se o CASO (SWITCH CASE), outras vezes não.
CASO (SWITCH CASE)
É uma estrutura que permite avaliar várias condições e determinar várias instruções diferentes para cada uma delas, ao inves de usar-se vários IF/ELSE. O que torna tudo muito mais prático.
Deve ser colocada uma variável como parâmetro para as condições. Um deafult (padrão) pode ser, ou não declarado, para o caso da variável não preencher nenhum dos requisitos. Após terminar as intruções que devem ser feitas em um caso, deve-se finanizá-las, para que ela não seja aplicada em outros casos (a função usada é nomeada BREAK).
Ex:
SWTICH (X); CASO 7 FAÇA: x--; FIM CASO; CASO 10 FAÇA: x++; FIM CASO; CASO 5 FAÇA: x+7; FIM CASO; CASO 21 FAÇA: x/7; FIM CASO; PADRÃO FAÇA: x+10; FIM; FIM SWITCH;
Nesse caso a variável x é analisada. Caso ela for igual a 7, ela receberá um decremento. Caso ela for igual a 10, ela receberá um incremento. Caso ela for igual a 5, ela receberá mais 7 em seu valor. Caso ela for igual a 21, ela será dividida por 7. Caso ela não atender a nenhum desses parâmetros, por deafult ela receberá um valor de 10 em seu valor inicial.
ENQUANTO (WHILE)
É uma estrutura de repetição, que continuará executando um looping enquanto uma informação for verdadeira. A estrutura de verificação é feita da seguinte forma:
Primeiro ele verifica, depois ele executa, novamente ele verifica a condição, executa novamente, até que a condição não seja mais verdadeira.
Ex:
ENQUANTO (x<50) FAÇA: ESCREVA (x); x++; FIM ENQUANTO;
No caso acima, enquanto a variável x for menor que 50, ele escreverá na tela seu valor. Após escrever, a variável receberá um incremento, para que não haja um looping infinito (se eu colocar qualquer número abaixo de 50 e não ouver um incremento, o programa ficará exibindo na tela esse número infinitamente).
Caso o número não for abaixo de 50, as instruções serão simplesmente ignoradas dentro do ENQUANTO.
FAÇA ENQUANTO (DO WHILE)
A simples diferença entre o ENQUANTO e o FAÇA ENQUANTO é o fato que a verificação no ENQUANTO acontece antes e no FAÇA ENQUANTO é depois. Ou seja, a variável, na primeira vez, não precisa preencher a condição.
Ex:
FAÇA: ESCREVA(x); x++; ENQUANTO(x<10); FIM ENQUANTO;
Nesse caso, mesmo que a variável x fosse maior que 10, o que não preencheria a condição, ela seria exibida e sofreria o incremento ao menos uma vez, antes que seja feita a verificação.
POR ENQUANTO (FOR)
É a estrutura de repetição, sem dúvidas, mais usada e mais útil. Ela é mais robusta que o ENQUANTO e permite que mais condições sejam aplicadas a ela.
Seu funcionamento é simples:
ENQUANTO (int i=0; int<10; i++) FAÇA:
É declarada uma variável para fins comparativos (o nome pode ser qualquer um, mas usa-se o i), depois se faz a condição e, por último, o incremento, ou decremento.
Essa variável é existente apenas dentro do POR ENQUANTO. Ou seja, ela pode ser usada ao seu belprazer dentro da função.
O POR ENQUANTO é uma função meio complicada de ser explicada, devido a sua maleabilidade. Podemos usá-la de diversas formas, mas, sempre será uma estrutura de repetição.
Ex:
ENQUANTO (int i=1; int<100; i++) FAÇA: ESCREVA (i); FIM ENQUANTO
Pronto, criamos um programa que exibe todos os número de 1 a 99 na tela (me respondam porque o 100 não é exibido).
Tudo isso porque o i foi definido como 1, enquanto ele fosse menor que 100, ele receberia incremento, mas, antes de ser comparado com 100 e receber o incremento, ele seria mostrado na tela.
Quando ele não obedecer mais à condição (ser menor que 100), o POR ENQUANTO findaria-se.
Esse foi um exemplo básico, obviamente outras variáveis e operações podem ser feitas dentro do POR ENQUANTO, assim como que dentro de quaisquer funções algorítmicas.
Terminada a explicação, é hora de por em prática em alguma linguagem de programação.
Eu, particulamente, gosto do C++ para iniciantes. Muitos preferem o PASCAL, mas sabe qual é a minha sincera opinião sobre essa linguagem? É uma bosta. Não estou dizendo que são todos, mas programadores que aprendem em pascal geralmente são preguiçosos e geralmente tem dificuldade para se adaptarem a outras linguagens, pelo fato de pascal ser muito "mamão com açúcar".
Para quem ler, se é que lerão (rs) eu acomselho o compilador DevC++ (clique nele pro link de download), acho ele leve e prático. Ótimo para pequenos projetos e programadores iniciantes.
Para iniciar um programa no DevC++ faça o seguinte:
Darei um exemplo para vocês, farei um programa que calcula a média aritmética de três números, sendo eles inteiros ou com casas decimais.
Com isso, fica aqui a primeira parte desse tutorial. Quando eu tiver tempo, eu postarei aqui algumas explicações de mini programas usando as várias funções e operações com uma boa explicação.
Para quem se interessar, deixarei dois exercícios, quaisquer dúvidas, postem aqui.
Um programa que calcula a média aritmética de 5 números INTEIROS.
Um programa que receba dois nomes e imprima ambos na tela.

























