Introdución á programación

En Galilibros, o Wikibooks en galego.

Limiar[editar]

De consultarmos nun manual de matemáticas o que é o algoritmo, deducimos que é un conxunto de finito de instrucións que permite atopar a solución dun problema. Cada microprocesador contén un conxunto de instrucións que realizan certas operacións sobre unha ou máis palabras de bits, e as instrucións van tamén codificadas en bits.

Enténdese que escribir con só dúas teclas, o 0 e mais o 1, é incómodo. Ao primeiro, para deseñar un algoritmo que executase o computador, escribíase por medio dunhas etiquetas mnemotécticas; esta foi a orixe da linguaxe ensambladora.
Sobre desta linguaxe ensambladora fóronse construíndo outras linguaxes de programación de máis alto nivel, no que se produce unha abstracción de datos, os textos nos que se condifican os algoritmos coñécense como códigos fonte e seguen as regras sintácticas de cada linguaxe de programación
Tras escribirmos o algoritmo, un compilador ou intérprete (outro programa) transformará o texto en código máquina que o procesador será capaz de executar.

Historia[editar]

Evolución da programación[editar]

Ao primeiro os programas seguían unha execución semellante á do código ensamblador, o que implicaba que houbese un control sobre que liña de instrución tiña que se executar a continuación, que se podía cambiar mediante certas redireccións (GOTO e GOSUB en BASIC, por exemplo). Malia a iso, aos poucos tendeuse cara o que se chama programación estruturada.

Programación estruturada[editar]

A programación estruturada segue tres regras: a secuencia, a iteración e a decisión. A primeira indica que as instrucións do código leranse de principio a fin; a segunda indica que, segundo determinada condición, un número de instrucións poderían repetirse un número determinado de veces, e a tercerira indique que segundo unhas certas condicións executaranse ou non un conxunto de instrucións.
No seguinte exemplo, un algoritmo para limpar pratos, aprécianse estas tres características. A identación das instrucións indican cales se engloban e cales non nas súas predecesoras.

  mentres haxa pratos
     coller prato
     mentres haxa sucidade
        botar xabón
        pasar a freguxe polo prato
     se prato é azul
        poñelo cos azuis

En código non estruturado, quedaría máis enleado.

  1 coller prato
  2 botar xabón
  3 pasar a estropallo o prato
  4 se hai sucidade ir á instrución 2
  5 se o prato non é azul ir á instrución 7
  6 poñelo cos azuis
  7 se hai máis pratos ir á instrución 1

Antes de comezar un programa[editar]

Estrutura dun programa[editar]

Na programación estruturada hai un principio e un fin perfectamente ben definidos de acordo ao diagrama de fluxo realizado ao formular a idea do programa.
Un programa ben estruturado debería ter algún subprograma que capture calquera erro dentro do programa principal ou de calquera subprograma dentro da aplicación de tal xeito que o subprograma que captura os erros xere un rexistro de datos que describa o erro xerado e/ou procurar o subprograma no que está a orixe do erro coa finalidade de corrixilo. Para facilitar a corrección destes erros faise uso dos comentarios engadidos no código fonte.

Variables e constantes[editar]

Como vimos, o computador segue unha serie de instrucións. Pero esas instrucións teñen que operar sobre unha serie de datos. O computador típico só procesa unha instrución á vez, polo que precisa espazos de memoria onde gardar ou depositar os datos cos que se traballa. Aquí é onde entran en xogo as variables e constantes.
Ao primeiro, co ensamblador, podiase dicir ao computador, por exemplo: 'Executa a instrución desa posición da memoria' ou tamén 'Nesa posición de memoria gárdase a miña idade, imprímea na pantalla'. Todo isto derívase do feito de que os programas tamén son datos. Esta ambigüidade presenta numerosos atrancos cando se producen erros, por iso que, a medida que as linguaxes evolucionan cara niveis superiores, impídese o tratamento indistinto dos datos.
Quizais semelle máis complicado do que é, poñamos un exemplo, queremos sumar dous números. O noso programa terá que ter tres caixóns, un para cada número e outro para o resultado. Cada caixón ten un nome no canto dunha posición de memoria, de xeito que só hai que o nomear:

  Preciso caixóns A, B e Resultado
  Le un número e gárdao en A
  Le un número e gárdao en B
  Suma A e B e gárdao en Resultado
  Imprime o contido de Resultado

As posicións de memoria A e B son variables. Se o queremos ler e escribir podemos facelo. Tipicamente, existirán datos que non pensamos modificar, non queremos que o usuario teña que introducilos de cada vez, ao ser de natureza máis constante que outros (como pode ser o valor Pi para calcular o perímetro). Para evitar modificalos por erro, podemos pedir ao sistema variables especiais, que non poden ser reescritas, son as constantes. Un exemplo:

  Comentario: Este programa calcula a área dun círculo
  Constante PI = 3'14159265
  Variable R
  Variable Resultado
  Ler número e gardar en R
  Calcular PI * (R * R) e gardar en Resultado
  Imprimir Resultado

Comentarios[editar]

Os comentarios son liñas de texto que o compilador ou o intérprete non consideran como parte do código, co que non están suxeitas ás restricións de sintaxe e serven para aclarar partes do código en lecturas posteriores e, en xeral, para anotar calquera cousa que o programador considere oportuno.
Os programadores adoitan documentar os programas con cabezallos de texto onde describe a función que vai realizar o programa, a data de creación, o nome do autor e nalgúns casos as datas de revisión e o nome do revisor.
Nos casos de programas que requiran facer uso de chamadas a subprogramas dentro da mesma aplicación, co que cada subprograma debera estar documentado, describindo a función que realiza cada un dos subprogramas dentro da aplicación.

Estruturas de datos e de control[editar]

Estruturas de control[editar]

As estruturas de control divídense en dúas clases: Estruturas de control condicional e estructuras de control repetitivo.
As estruturas de control condicional son as que inclúen alternativas de selección baseándose no resultado dunha operación booleana, como por exemplo, unha comparación (A=B). Segundo a expresión sexa certa ou falsa, executarase unha parte do código ou outro. É o caso da sentencia IF THEN ELSE de Pascal ou Basic:

  IF A=0 THEN
       PRINT "A ten o valor 0"
  ELSE
       PRINT "A non ten o valor 0"

Outra sentenza de control son as de tipo SWITCH CASE. Neste tipo de sentenzas especifícase a variable a comparar e a lista de valores con que comparar. O que sexa verdadeiro executarase:

   SWITCH A
       CASE 0:
           PRINT "A ten o valor 0"
       CASE 1:
           PRINT "A ten o valor 1"

Outras ferramentas imprescindibles do control da execución do noso código son os bucles ou ciclos. Consisten nun método que permite repetir un anaco de código varias veces.
Hai basicamente dous tipos:

  • Bucle FOR:

O bucle FOR consiste nunha sentenza que engloba un grupo de instrucións e ten unha variable no que o valor se vai modificando de cada volta.

    FOR A=0 TO 10   Especificamos neste caso que A variará dende 0 ata 10, co que repetiremos o bucle 
        PRINT "Estamos no bucle"      10 veces.
    NEXT A          Con isto pechamos o bucle e indicamos o final do bloque de instrucións que se repiten
  • Bucle WHILE:

O bucle WHILE consiste nun bucle no que o código se repite ata que se cumpra algunha condición booleana (que dea como resultado verdadeiro ou falso). Hai variacións, como o REPEAT...UNTIL, que se diferencia no momento de comprabar se se fai verdadeira ou non a condición.

    WHILE A<>(B*2) DO            Aquí especificamos a expresión que evaluamos e aquí se comproba
        A=A+1                    Incrementamos o valor de A ata que sexa igual a B*2
    DONE                         Como no FOR, precisamos especificar onde remata o bucle e o código.

Estruturas de datos[editar]

creo a como enteiro. creo b como enteiro. creo suma como enteiro. a=2. b=1. suma = a + b.

imprimir suma

Calquera programa que se realice debe de levar unha estrutura para diminuír a tarefa de depuración xa que este labor leva máis tempo do estimado.
De seres principiante na área da programación debes definir o programa a relizar, documentar cada un dos pasos que realizas no teu programa, debes aplicar algún método de captura de erros...
o pseudocódigo é a escrita dun algoritmo nunha linguaxe máis cercana á natural, isto é a orde na linguaxe Javascript repetiría o proceso de quitar lixo engadindo auga e xabrón mentres se refrega sería a seguinte:

function refregar(canto){
  var veces = 0;
  for (veces = 0; lixo = 0, veces = canto ; veces++){
    lixo = lixo - (auga + xabrón);
  }
}

Mentres que o algoritmo ou pseudocódigo quedaría así:

función refregar (cantasvecesofago)
  variable vecesquelevo = 0
  repetir (desde que vecesquelevo = 0 ata que o lixo = 0 ou vecesquelevo = cantasvecesofago; aumentar vecesquelevo de unha en unha)
    lixo = lixo - (auga + xabrón)
  fin repetir
fin función

En primeiro lugar, é moi recomendable facer un esquema sobre o papel con toda clase de datos que se vaian utilizar. Por exemplo, de querermos facer un programa para controlar unha empresa dedicada ao alugueiro de coches, poderiamos precisar:

  • Marca do coche
  • Modelo do coche
  • Cor do coche
  • Estado do coche (se está alugado, en reparación ou dispoñible)
  • Situación do coche (en que lugar do garaxe ou en que localidade está)
  • Quilometraxe do coche
  • Prezo por hora do coche

por unha banda, e:

  • Nome do cliente
  • Apelidos do cliente
  • Dirección do cliente
  • DNI do cliente
  • Permiso de conducir do cliente
  • Número de conta do cliente

... etc. por outro