Mini curso de Programação

HecKel

The WORM
Como ninguem tomou a iniciativa :P decidi pegar na ideia, vou colocando posts conforme me vá lembrando de "aulas" que possam ser uteis para os begginer em Programação para não tornar este post demasiado saturado, qualquer dica é sempre bem vinda ;)

Antes de começares a programar seja o que for é necessário sabes pensar como um programador:

- Um problema aparentemente pode parecer simples, mas certamente que é possivel decompor esse problema noutros mais simples ainda, dando um exemplo que normalmente dou aos caloiros da minha faculdade talvez seja mais fácil compreender a minha ideia:

Quais os procedimentos para abrir uma porta:
- Deslocar-se até à porta
- Verificar se a porta já está aberta
- Verificar se é necessário destrancar a porta
- Abrir a porta
- Confirmar se a porta foi aberta
O exemplo que dei é ridiculo, admito! Mas é o suficiente para transmitir a minha ideia.

Um problema pode parecer muito trivial, no entanto programar esse problema pode trazer várias dores de cabeça, e tentar dar demasiados passos de uma vez ou dá porcaria, ou nem sequer se obtêm resultados.

É chato resolver os problemas no papel antes de passar para o computador, mas as probabilidades de erros diminuem consideravelmente.

Para confirmarem que as variáveis vão obter os valores desejados em determinadas partes do programa, também é boa ideia a criação de tabelas de variáveis.

Basicamente uma tabela de variáveis, é uma tabela em que o programador vai preenchendo conforme vai "correndo" o código linha a linha (isto antes de meter no compilador, em principio já deve existir um depurador, esta sugestão é para minimizar os erros quando realmente for programar) escrevendo o valor da respectiva variável em determinado passo/linha.

A thread tão desejada já está iniciada, conto com a colaboração de todos, desculpem o texto, não foi nada preparado, foi apenas o que me ocurreu neste momento. Espero que as ideias possam ser uteis para quem está a dar os primeiros passos,

um abraço HecKel
 
Bloco Condicional (IF)

Por vezes quem pensa em seguir EngªInformática, ou outro curso ligado à programação fica sempre reticente quando vê os planos curriculares e encontra uma série de matemáticas, muitos se questionam para que serve a matemática na programação, as analogias que vou dar são de matéria de 7º ano, no entanto quanto mais desenvolvida estiver a matemática mais triviais vão parecer os problemas de algoritmia.

Grande parte das linguagens de Programação têm como bloco condicional principal o IF

Quem já tem alguma matemática já deve estar farto de sistemas...

Basicamente o que são sistemas?
São funções matemáticas cujos ramos respeitam determinadas regras, ou seja, respeitam condições.

Se repararem bem, essas condições dos sistemas acabam por ser condições booleanas(Verdadeiro ou Falso), normalmente aparecem sinais de maior, menor, igual, desigual, intervalos, etc e tal, esse ramo só é tido em conta quando essa condição é verdadeira, vejam como fica o seguinte exemplo numa linguagem de programação:

f(x) = 3x+1 ; Se x > 0
f(x) = 1 ; Se x <= 0

Em Programação:

If(x>0)
f = 3x+1 ;
else
f = 1 ;

Neste caso não seria necessário colocar um novo if para validar a segunda condição, uma vez que a segunda condição engloba o restante intervalo, vejamos como ficava o exemplo seguinte:

g(x) = 1/x ; Se x > 0
g(x) = - 1/x ; Se x < 0

Em Programação:

If(x>0)
g = 1/x ;
else
if(x<0)
g = - 1/x ;
Neste caso não existe valor definido para quando x = 0, g ficaria com o valor que tinha anteriormente (considerando que já tinha sido atribuido um valor antes deste bloco)

Poderia criar um post bastante extenso a dar exemplos, mas a ideia essencial deste post já foi dada,

um abraço HecKel
 
Última edição:
Ciclos de Repetição (FOR)

Existem vários tipos de ciclos de repetição, cada linguagem de programação tem o seu formato próprio, e nem todas têm a mesma diversidade de ciclos de repetição, vou-me basear essencialmente em java nestes posts, no entanto a "logica" é a mesma....

Tal como disse no post anterior, vou-me basear na matemática nos meus exemplos.

Os for's são ciclos, normalmente finitos, de repetição. A analogia com a matemática não é tão trivial como um IF, requer um pouco mais de conhecimentos, na minha opinião as séries são um excelente exemplo de for's, tanto podem ser finitas, como não terem um limite especifico.

Imaginem a soma dos primeiros N numeros positivos, qual seria a expressão matemática desta soma?

n
Sum (i)
i=0

(Foi a melhor forma que encontrei para escrever isto :P)

Decompondo este somatório ficaria algo do género:

0 + 1 + 2 + 3 + 4 + 5 + ... + (n-1) + n

Basicamente trata-se de um ciclo em que existe uma variável que é incrementada a cada interacção, vejamos como ficaria em java:

for(i=0;i++; i<n)
sum += i ;

Traduzindo para por miudos...,

for(i=0; i++; i < n) significa: para i = 0, incrementado um em cada interacção, dá-se o comando que se segue enquanto i for menor que n.

sum += i ; significa: a variável sum é igual á soma da própria variável com a variável i

Tal como disse anteriormente também é possivel criar ciclos for infinitos, no entanto não acho necessidade de exemplificar a sua utilidade, uma vez que pelo exemplo anterior é possivel deduzir vários exemplos semelhantes....

um abraço HecKel
 
Boa aposta, achei a ideia bastante interessante e plo que vi até agora, tou a gostar da forma como abordas os problemas, bem como os exemplos que dás... nice one... ;)
 
Epa eu na minha humilde opinião que pode parecer arrogante mas pelo contrário é realista acho que programar não é para todos porque nem toda a gente consegue estruturar um problema lógicamente e depois converter isso em programação.

Eu vejo que por exemplo colegas meus/inhas que lhes é dado um problema para resolver em VB, eles colam-se ao monitor, começam a escrever onde calha e vão exprimentando a ver se sai alguma coisa sem antes pensarem como vão resolver o problema. Já agora, deixo aqui um pequeno desafio para resolverem na linguagem que quiserem desde que esta seja orientada a objectos:
Têm uma label com "Techzone Rullez" e esta label vai-se mover lentamente até ao limite direito do form, quando lá chegar sorteia aleatóriamente um tamanho onde a label irá partir e a segunda "metade" da label fica parada no limite do form e a primeira metade começa a andar para a esquerda até tocar no limite esquerdo do form, quando la chega toca e muda de direcção novamente e quando chegar à outra label, as duas "encaixam" e andam ambas para a esquerda repetindo tudo de novo mas desta vez ficando fixo na esquerda e mexendo a segunda metade.

;)
 
_freelancer_ disse:
.... Já agora, deixo aqui um pequeno desafio para resolverem na linguagem que quiserem desde que esta seja orientada a objectos:
Têm uma label com "Techzone Rullez" e esta label vai-se mover lentamente até ao limite direito do form, quando lá chegar sorteia aleatóriamente um tamanho onde a label irá partir e a segunda "metade" da label fica parada no limite do form e a primeira metade começa a andar para a esquerda até tocar no limite esquerdo do form, quando la chega toca e muda de direcção novamente e quando chegar à outra label, as duas "encaixam" e andam ambas para a esquerda repetindo tudo de novo mas desta vez ficando fixo na esquerda e mexendo a segunda metade.

;)
ò calão , também queres que te façam os TPC's ? :D:D:D
bom truque...quase que colava :-D :-D :-D




ps: pede ajuda ao partenão e ao nadador que eles são barras nisso :zzz
 
Tu deves andar na perseguicao ou sei la :rolleyes: :D

Agora a falar a serio, o Swimmer ja lhe anda a dar no Pascal, eu inda tou nas bases (falta de estudo :(, coisa k vai mudar).

Heckel, tou contigo, gostei bastante da ideia e vou ler. :)
 
mas isto e so pessoal da fct? :P

heckel boa iniciativa, fizeste bem em começar com noções de algoritmos antes de implementares logo isso. mas n deste o exemplo clássico da receita :D
 
teknix disse:
ò calão , também queres que te façam os TPC's ? :D:D:D
bom truque...quase que colava :-D :-D :-D




ps: pede ajuda ao partenão e ao nadador que eles são barras nisso :zzz

HAHAHA BUSTED...sim é claramente um bom desafio pó p4rthen0n :x2: .

P4rthen0n disse:
Agora a falar a serio, o Swimmer ja lhe anda a dar no Pascal, eu inda tou nas bases (falta de estudo , coisa k vai mudar).

Pareceume ouvir na segunda (n me lembro bem...), tlv tenha sido até na semana passada, que nesta semana q decorre irias começar a estudar "violentamente" pascal e que irias dominar, pois tinhas de justificar um trabalho ao prof...com que então não andas a fazer os "tpc's"

(tou paqui a falar mas... :fart: )


fish disse:
mas isto e so pessoal da fct?
heckel boa iniciativa, fizeste bem em começar com noções de algoritmos antes de implementares logo isso. mas n deste o exemplo clássico da receita

Ah pois caro amigo...o pessoal da fct invadiu isto...ou será antes o pessoal da techzone invadiu a fct?!

Já quele n se quis armar em cozinheiro, podes smp ser tu a dá-la...xuta ai a receita do pastelinho de bacalhau... :cool:
 
mas vocês acreditam em tudo o que esse sr. de idade vos diz? ele até vos engana com aqueles botões falsos ... :fart: a mim é que não me enganas porque uso o outro theme :009:

sim aquilo já foi um TPC meu e sim já o fiz :D
 
Agradecia-se que não spamassem nesta thread a fim de a manter clara e objectiva.
Tudo o que não tiver directamente a ver com o tópico da mesma, é spam, correcções e dúvidas descontandas, obviamente.
 
Blocos de Decisão (Case)

fish disse:
mas isto e so pessoal da fct? :P

heckel boa iniciativa, fizeste bem em começar com noções de algoritmos antes de implementares logo isso. mas n deste o exemplo clássico da receita :D

O velho do Hello Word! pode esperar :P

Quando falei no IF esqueci-me de mensionar o CASE, vou agora falar dessa, acho que ainda vou a tempo ;)

O CASE é uma instrução dispensável até certo ponto..., o IF dá conta da situação, até uma certa parte, no entanto em alguns problemas as restrições são tantas que o quem vier ver o programa fica mesmo :wow:

Nestes casos o CASE é uma "ferramenta" muito util, além da rapidez comparada com o IF quando equiparada com muitas restrições, o CASE também melhora o "aspecto" do programa, torna-o mais perceptivel tanto para quem o lê, como para quem o pretende "alterar".

Como exemplo, fica um sistema, tal como no if, com umas quantas mais ramificações:

f(x) = ln(x) ; se x = 1
f(x) = e^x ; se x = -1
f(x) = 2 ; se x = 2
f(x) = -2 ; se x = -2
f(x) = e^(-x) ; se x != -1 e x != 1

em Pseudo-código ficaria:
select (x)
case 1 : f= ln(x) ;
case -1 : f = e^x ;
case 2 : f = 2 ;
case -2 : f = -2 ;
case else : e^(-x) ;
* Pseudo-código: Não é uma linguagem de programação, serve para estruturar programas, usado normalmente para evitar, existem regras no pseudo-código, no entanto não respeitei nenhuma delas no exemplo que dei, de qualquer das formas também não se pode dizer que aquele exemplo seja numa linguagem de programação concreta, uma vez que o meu objectivo foi apenas exemplificar como poderia ser resolvido o problema.
um abraço HecKel

PS -> obrigado pelos comentários ;)
 
Última edição:
Ciclos de Repetição (DO, WHILE, REPEAT, etc...)

Anteriormente já falei no ciclo for, um ciclo que por norma tem um valor a ser incrementado, ou decrementado, agora vou falar de ciclos que dependem de uma condição booleana....

Imaginem que agora têm um problema que assim que olha para ele vêm que é um ciclo, com um pequeno pormenor, não sabem quando pode acabar..., depende de uma expressão...

O exemplo seguinte seria facil de transpor para um ciclo FOR, no entanto serve apenas para expor a ideia destes ciclos:

i != j
Sum i-j
i=0

Num ciclo WHILE ficaria algo como:

while(i !=j ) do {
f = i-j ;
i = i+1 ;
}

Cada linguagem de programação pode ter uma forma própria de abordar estas instruções, de uma forma ou de outra existe sempre forma de criar blocos de repetição com este formato.

No caso do Assembly nem sequer existem ciclos de repetição "controlados" como ilustrei no exemplo, mas isso já são outros assuntos mais avançados para a ideia que pretendo transmitir.

um abraço HecKel
 
Última edição:
Funções vs Procedimentos

Nos posts anteriores falei das instruções mais usuais na grande maioria das linguagens de programação, agora vou entrar numa área que gera maior “discução”de opiniões, como utilizar funções/procedimentos...

Quero deixar bem explicito, que este post baseia-se apenas na minha opinião pessoal sobre o que considero mais correcto para a utilização de funções/procedimentos, não faltam teorias sobre a forma de utilização das mesmas, o que não implica que umas sejam mais correctas que outras.

Imaginem que agora têm uma equação em que dava jeito o recurso a calculos auxiliares.

Como devem saber, nem todos os calculos auxiliares devolvem um valor explicito, por vezes um gráfico serve de calculo auxiliar, é aqui que entra a principal diferença entre função e procedimento.

Uma função, tal como na matemática, serve para devolver um valor, não é suposto a meio de uma função meteres notas, isso são calculos auxiliares, ou seja, outras funções(procedimentos neste caso, como veremos adiante).

Isto é, uma função serve unica e exclusivamente para calcular e devolver algo, independentemente do tipo da função, e devolver o respectivo resultado, não é suposto pedidos de dados ao utilizador, nem imprimir para o ecrã resultados, isto só iria tornar o código mais confuso, menos evidente, e com trapalhada desnecessária.

Um procedimento é a outra parte dos calculos auxiliares, onde podemos calcular algo, “escrever” notas, apenas por uma questão de organização, algo que no decorrer do calculo da equação poderia ser dispensável.

No entanto criar uma função cuja utilização é demasiado limitada, apenas se justifica caso o algoritmo seja algo complicado, ou pouco evidente, a maior utilidade de uma função/procedimento é a reutilização das mesmas para evitar a redundância de código no programa.

Uma listagem demasiado grande de funções e procedimentos cujo unico objectivo é uma tentativa de melhor legibilidade do programa também pode trazer desvantagens, pode tornar o programa demasiado “grande”, em vez de melhorar a legibilidade pode tornar o programa mais confuso para um outro programador, entre outras coisas...

Resumidamente, o uso de funções e procedimentos deverá ser feito de forma ponderada e organizada, independetemente da forma como consideram ideal no uso das mesmas.

um abraço HecKel
 
Última edição:
Como iniciar um programa

Achei por bem colocar aqui um contributo acerca de como iniciar o desenvolvimento de um programa.

Em 1º lugar deverá de se esquematizar o nosso problema da forma mais simples possível, com quadrados, rectangulos e losangos...como quiserem. Somente para saberem qual o problema a analisar.
De seguida vamos centrar-nos no nosso problema. Sengundo uma das leis de Murphy: todo o problema é mais complicado do que parece!" é necessário decompor o problema em sub-problemas mais simples, de forma a se chegar a um ponto em que já não se pode decompor mais os problemas. Tudo isto esquematizado com setinhas e rectangulos e quadrados. Basicamente o que se deve de usar é fluxogramas.
Agora que temos o nosso problema decomposto em vários sub-problemas todos de carácter simples, é necessário verificar quais as interacções entre os diferentes blocos de sub-problemas.
No fim de tudo esquematizado, aconselho a escreverem o programa em pseudo-código. Não é obrigatório. Mas pode vir a ajudar. Por fim falta somente escrever o vosso programa (tendo por base os esquemas anteriormente feitos) na linguagem desejada.

Atenção: não se metam logo a programar e a escrever linhas e linhas de código porque o mais provável é terem de apagar tudo.

Outra coisa importante é fazer uma separação modularizada do vosso programa, ou seja, não coloquem 300 linhas de código numa só função que contém todo o programa. Para além de ser uma má prática, torna mais complicada a detecção de erros e a compreensão do código por parte de outras pessoas. É preferível escrever um maior número de funções com 3 ou 4 linhas de código. É uma questão de experimentarem e verem por voces.

Este meu post não se foca sobre nenhuma linguagem em especial, mas acho por bem quem se está a iniciar no mundo da programação a ler atentamente este post e a tentar levá-lo o mais á risca (pelo menos durante os primeiros tempos).

Abraços e bons programas! []
 
[QUOTE='Paos[CeRe4L](...) Basicamente o que se deve de usar é fluxogramas.[/QUOTE]

basicamente depende muito da linguagem que vais usar...quero ver alguém a usar uma linguagem OO e a fazer fluxogramas em vez de fazer UML, diagramas de colaboração, interacção e outros que tais...

mas boa iniciativa ;)
 
É verdade, alem do mais, pelo menos o UML é standartizado o que facilita a comunicação entre todas as pessoas intervenientes no processo, incluindo os "stakeholders".
 
fap disse:
basicamente depende muito da linguagem que vais usar...quero ver alguém a usar uma linguagem OO e a fazer fluxogramas em vez de fazer UML, diagramas de colaboração, interacção e outros que tais...

mas boa iniciativa ;)

fap, tou a partir do principio de que o ppl que se tá a iniciar ta a começar com linguagens imperativas...estilo C, Pascal ou um fabuloso Scheme!

Isso em OO é outra coisa! Interacção de classes ainda é mt para quem se ta a iniciar.
Mas por exemplo, na faculdade de ciências o ppl começa por aprender Java...mas andam meio-semestre a trabalhar somente com uma classe e a programar imperativamente...enfim! lol
 
Back
Topo