Ir para conteúdo


Algoritmo


Compartilhar este tópico:




11 respostas neste tópico

#1 Haber
Postado 06 abril 2011 - 08:40

    Too early to a checkmate yet

  • Moderador
  • 0
  • 1997 posts

Twitter Facebook
Localização: Macuco - RJ Interesses:Conhecer o Brasil! Gênero: Masculino

Primeiramente quero dizer que criarei esse tutorial por partes.
É 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

tirar fone do gancho;
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

tirar fone do gancho;
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:

Spoiler

OPERADORES MATEMÁTICOS
Dentro do universo da programação é obvio que são usado os operadores matemáticos. Os mais comuns são:

Spoiler

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 E/AND. Basicamente impõe uma relação entre duas, ou mais, situações, onde ambas DEVEM acontecer. Ex: x>7 && x<10 (o número só será válido, ou wtv, se ele for maior que 7 E menor que 10, ou seja 8 e 9)
|| : 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:
Spoiler
Usa-se o F9 para compilar os códigos.

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.
Spoiler

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.

#2 frigini
Postado 06 abril 2011 - 10:30

    engineer

  • Moderador
  • 0
  • 3206 posts

Twitter
Gênero: Masculino

bom tuto, eu só botaria uma "tradução" para o for como PARA, e não POR ENQUANTO.

e pou, programar no windows não rola! hehe
DevC++ eh tenso.

faça um tuto de programação no linux, gcc! :)

Imagem Postada


#3 Haber
Postado 06 abril 2011 - 10:44

    Too early to a checkmate yet

  • Moderador
  • 0
  • 1997 posts

Twitter Facebook
Localização: Macuco - RJ Interesses:Conhecer o Brasil! Gênero: Masculino

Visualizar Postfrigini, em 06 abril 2011 - 10:30 , disse:

bom tuto, eu só botaria uma "tradução" para o for como PARA, e não POR ENQUANTO.

e pou, programar no windows não rola! hehe
DevC++ eh tenso.

faça um tuto de programação no linux, gcc! :)

É só um tutorial básico de algoritmo, acho que não tem necessidade de botar iniciantes de frente para o Linux e o DevC++ é bem para iniciante mesmo. :lol:
E sobre programar em Linux, só é largamente vantajoso se for programar para Rede, ai sim é realmente MUITO vantajoso, no mais, não me dá tanta dor de cabeça assim ficar no Windows.

Eu deixei a tradução "errada" do "para" por motivos de entendimento, para ficar mais didático e menos sem sentido esse "para" que sempre foi no sense pra mim. :lol:

#4 Mangetsu
Postado 15 abril 2011 - 23:41

    Viva cada dia como se fosse o último. Um dia você acerta.

  • Membro
  • PipPipPipPipPipPip
  • 0
  • 719 posts


Localização: Rio de Janeiro Interesses:Comer mortadela na Lua. Gênero: Masculino

Bom tópico lucas!

seria bom eles darem uma olhada nesse antes dos que eu fiz..

exelente iniciativa.. sem nada a acrescentar..

poderia seguir a idéia para C++ depois dessa hehe

isso me lembra que o meu de PHP anda parada por motivo de falta de tempo.. continuarei no meio do ano quando der uma folgada..

Visualizar Postfrigini, em 06 abril 2011 - 10:30 , disse:

bom tuto, eu só botaria uma "tradução" para o for como PARA, e não POR ENQUANTO.

e pou, programar no windows não rola! hehe
DevC++ eh tenso.

faça um tuto de programação no linux, gcc! :)

Humm programar no linux? tipo usando o Shell??

ou usando a plataforma linux?

:hmm:

Editado por Mangetsu no Shi, 15 abril 2011 - 23:42 .

Imagem Postada

#5 Sano
Postado 15 abril 2011 - 23:43

    Messias

  • Moderador
  • 0
  • 2527 posts

Facebook
Localização: Teresópolis-RJ Interesses:Mojambo Gênero: Masculino

Só olhei rápido, bom tutorial pelo que eu tô vendo.
Vou usar ele pra estudar na prova de terça. :lol:

Imagem Postada


#6 .Kazz
Postado 16 abril 2011 - 11:15

    Flush

  • Membro
  • PipPipPipPipPip
  • 0
  • 222 posts


Localização: Area 51 Interesses:Naruto, amigos e essas parada ae. Gênero: Masculino
Ficha Naruto RPG
Ficha Bleach RPG

Bom tutorial. To no ensino médio e pensando em que área das exatas vou seguir. Tenho feito umas aulas de centro de estudos de Programação em C++ na escola e to curtindo, além do mais esse tutorial me deu mais clareza sobre essa área de programação e talz. Valeu Harber.

Imagem Postada


Bakanee~~


#7 Sano
Postado 16 abril 2011 - 18:36

    Messias

  • Moderador
  • 0
  • 2527 posts

Facebook
Localização: Teresópolis-RJ Interesses:Mojambo Gênero: Masculino

Terminei de ler, ficou maneiro.
Serve como uma boa revisão, e o engraçado é que vc postou justamente até a parte que eu cheguei, cheguei até comando de repetição. :lol:
E vou fazer coro com o frigini, "para" é bem melhor, eu pelo menos sempre fui ensinado no para, até pq é a tradução ao pé da letra de "for".
Uma pergunta idiota, ql a diferença de C pra C++?
E Lucas, posta tb procedimento, matriz e etc depois, até pq vc não vai ter tanto trabalho e seria bom postar tutorial completo. :sei:
Tá de parabéns o tutorial, dá pra eu revisar até a prova. :sei:

Imagem Postada


#8 frigini
Postado 16 abril 2011 - 23:11

    engineer

  • Moderador
  • 0
  • 3206 posts

Twitter
Gênero: Masculino

Sim manga, programar no shell e compilar via gcc. Faço assim com C, C++ e python.

Ou então programe em algum Mac (na verdade é o melhor SO pra isso) usando o Eclipse. Mas aí é questão de gosto.

Imagem Postada


#9 Haber
Postado 17 abril 2011 - 18:16

    Too early to a checkmate yet

  • Moderador
  • 0
  • 1997 posts

Twitter Facebook
Localização: Macuco - RJ Interesses:Conhecer o Brasil! Gênero: Masculino

@Sano, a diferença básica entre C e C++ é que o segundo aceita orientação a objeto (não que seja uma linguagem voltada para isso).
Algumas bibliotecas a mais e uma diferença aqui e ali na estrutura. Não há grandes diferenças, como o nome mesmo sugere ++, é um "plus" da linguagem antiga.
Muitos criticam o C++ por ser uma gambiarra do C para aceitar os paradigmas de OO.
Mas boa parte dos programas desktop um dia já foram desenvolvidos em C++ (um exemplo desses é o famoso Photoshop CS1,2 e 3).
Em breve voltarei com a continuação do tutorial, mas, infelizmente, estou sem net em casa, o que dificulta a postagem/edição de alguns detalhes.

Quanto a questão do "para", para quem tem uma noção, sabe bem que o certo é essa a tradução. Mas como eu já disse, achei mais didático para iniciantes, colocarei uma observação, para não ter confusões. rs

Editado por Lucas Haber, 17 abril 2011 - 18:17 .


#10 Shuuji
Postado 04 novembro 2011 - 20:47

    Butecologista

  • Membro
  • PipPipPipPipPipPipPip
  • 0
  • 1058 posts


Gênero: Masculino

Sério que eu me matei com essa matéria e vi esse tópico só agora ? :lol:

Bom tópico :}

#11 Thunder
Postado 26 fevereiro 2012 - 09:32

    Game Programmer

  • Membro
  • PipPipPipPipPipPip
  • 0
  • 747 posts

Twitter Facebook
Localização: E.Santo Gênero: Masculino
Ficha One Piece RPG

Haber,
Muito obrigado pelo tutorial, estou estudando isso na facul, inclusive é do PORTUGOL.
Muito bom mesmo.

Olhando bem no terceiro Quote você esqueceu de dar Fimalgoritmo.

Editado por Thunder, 26 fevereiro 2012 - 09:50 .

Game,Conquista.

Imagem Postada

Moshi, Moshi.


#12 Ichigo
Postado 26 fevereiro 2012 - 10:34

    Flush

  • Membro
  • PipPipPipPipPip
  • 0
  • 205 posts


Localização: SE-AJU Interesses:Animes/Mangás Gênero: Masculino

ele ta usando o visualg
,mas passar para linguagem do portugol ide é bem facilzinho..

eu to na universidade a umas 3 semanas já ta bem fácil usar isso aew na rotina.


edit : escreval > all :fotz:

Editado por Ichigo, 26 fevereiro 2012 - 10:35 .

"Se eu tivesse que me preocupar com os insetos que ficam no meu caminho ,eu não conseguiria nem andar..."
Imagem Postada




1 usuário(s) está(ão) lendo este tópico

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)