C/C++

Tema 1 · Introducció a C/C++

Introducció

C és un dels llenguatges més utilitzats en bioinformàtica per la seva eficiència i control a baix nivell. En aquest tema aprendràs a crear el teu primer programa, compilar-lo i executar-lo.

Objectius

  • Crear el primer programa en C
  • Compilar-lo amb gcc
  • Executar-lo des del terminal

Primer programa

#include <stdio.h>

int main() {
    printf("Hola Bioinformàtica!\n");
    return 0;
}
Utilitza gcc programa.c -o programa

El viatge complet de la lletra H · De printf("Hello world") a la teva percepció conscient

📋 Resum exprés (10 passos clau)

  1. Escrius "H" al codi font.
  2. El compilador la transforma en el número 72 (ASCII).
  3. El 72 es guarda en binari: 01001000 a la memòria.
  4. printf rep l'adreça on comença aquest byte.
  5. El sistema operatiu envia el byte al terminal.
  6. El terminal tradueix 72 → caràcter ‘H’ i demana la seva forma a la font.
  7. La GPU converteix la forma en una graella de píxels encesos/apagats.
  8. El monitor il·lumina els subpíxels RGB segons el patró.
  9. La llum arriba als teus ulls i estimula els fotoreceptors (cons L, M, S).
  10. El cervell reconstrueix les línies i reconeix la lletra H.

En les seccions següents ho veurem pas a pas i entendràs per què cada transformació és necessària.

Fase 1: Text → Número Fase 2: Memòria i CPU Fase 3: SO i Terminal Fase 4: Font → Píxels Fase 5: Llum → Cervell

1 Fase 1 – Del text al número

Tot comença amb el fitxer de codi font. Per a nosaltres és text, però l'ordinador no pot treballar directament amb lletres.

  1. Escrivim printf("Hello world"); al fitxer hola.c.
  2. Executem gcc hola.c -o hola. El compilador llegeix el fitxer i tradueix el codi C a llenguatge màquina.
    ❓ Per què? Perquè el processador només entén instruccions numèriques (codi màquina), no paraules en anglès.
  3. La lletra H es converteix en el número 72 (codi ASCII). ASCII és una taula que assigna un número a cada caràcter.
    H → 72    e → 101    l → 108    o → 111
  4. El número 72 es guarda en binari dins de l'executable:
    72 decimal = 0x48 hexadecimal = 01001000 binari
💡 Metàfora: Imagina que el compilador és un traductor que canvia les paraules d'un llibre per codis de barres. Ara el llibre no es pot llegir, però un escàner (la CPU) el pot processar.

En aquesta fase, la H ha desaparegut. Ara només existeix el valor numèric 72 (bits).

2 Fase 2 – Dins la memòria i la CPU

L'executable es carrega a la memòria RAM. La cadena "Hello world" ocupa una seqüència de bytes consecutius.

  1. La cadena es copia a la memòria en temps d'execució. Cada byte té una adreça única.
    Adreça 1000: 72 (H)   Adreça 1001: 101 (e)   Adreça 1002: 108 (l) …
💡 Metàfora: La memòria és un immens caseller. L'adreça és el número del calaix, i dins de cada calaix hi ha un byte (8 interruptors en posició ON/OFF).
  1. Quan el programa crida printf, no li passa la frase sencera, sinó l'adreça del primer byte (1000).
    printf( adreça 1000 );
  2. La CPU va a l'adreça 1000, llegeix el byte 01001000 (72) i el carrega en un registre intern.
    ❓ Per què? printf no envia caràcters, envia bytes. Com que només coneixem el punt d'inici, la funció va llegint byte a byte fins a trobar el byte 0 (final de cadena).
🔍 Pregunta de verificació: En aquest moment, on és la lletra H? Encara no ha aparegut visualment. Només tenim bits viatjant per circuits.

La CPU ha obtingut el byte 72 des de la memòria. El programa d'usuari ha de demanar al sistema operatiu que l'escrigui al terminal.

3 Fase 3 – Del programa al sistema operatiu i terminal

  1. printf utilitza una crida al sistema (write) per enviar el byte 72 al dispositiu de sortida estàndard (stdout).
  2. El sistema operatiu lliura el byte al controlador del terminal. El terminal rep 01001000.
  3. El terminal consulta la seva taula de caràcters (normalment ASCII o Unicode) i tradueix el número 72 al caràcter 'H'.
    ❓ Per què? El terminal és un programa que sap dibuixar lletres; per això necessita tornar a convertir el número en una forma visual.
💡 Metàfora: printf és com un missatger cec que porta un paperet amb el número 72. El terminal, en rebre'l, mira un pòster a la paret (taula ASCII) i diu: "Ah, això és una H".

Per primera vegada, el byte 72 s'interpreta com el caràcter 'H'. Però encara no s'ha dibuixat res.

4 Fase 4 – De la font als píxels

  1. El terminal demana a la font tipogràfica la forma geomètrica de la lletra 'H'. La font descriu la lletra amb corbes i línies (ex.: dues verticals i una horitzontal).
  2. Rasterització: La forma vectorial es converteix en una graella de píxels. Per a una mida petita podria ser:
    1 0 0 0 0 0 1
    1 0 0 0 0 0 1
    1 1 1 1 1 1 1
    1 0 0 0 0 0 1
    1 0 0 0 0 0 1
    (1 = píxel encès, 0 = apagat)
  3. La GPU (targeta gràfica) rep la graella i actualitza el framebuffer (la memòria de vídeo) amb el color de cada píxel. Per a un text negre sobre fons blanc, emmagatzema:
    Píxel(0,0) = negre   Píxel(1,0) = blanc …
  4. Què és realment un píxel? Un píxel està format per tres subpíxels: vermell, verd i blau. La GPU envia les intensitats adequades a cada subpíxel (0 = apagat, 255 = màxima llum).
  5. Milions de transistors microscòpics al panell (LCD/OLED) reben els senyals i obren o tanquen el pas de la llum. Per als píxels negres de la 'H' es bloqueja la llum; per al fons blanc es deixa passar al màxim.
💡 Metàfora: La GPU és una fàbrica de píxels. Converteix la plantilla de la lletra en milers d'interruptors que diuen "encesa" o "apagada" a cada bombeta minúscula.

Ara la pantalla mostra un patró físic de llum amb forma d'H, però la teva ment encara no ha interpretat res.

5 Fase 5 – De la llum al cervell

  1. La llum emesa pels píxels viatja fins als teus ulls. Travessa còrnia, pupil·la i cristal·lí, i es projecta sobre la retina.
  2. A la retina hi ha milions de fotoreceptors: cons L, M i S (sensibles al vermell, verd i blau) i bastons (llum tènue). Els fotons de la 'H' activen principalment els cons segons el color dels píxels.
  3. Fototransducció (resum): Dins de cada con, una molècula de retinal canvia de forma en absorbir un fotó (d'11-cis a tot-trans). Això desencadena una cascada química que tanca canals iònics i genera un impuls elèctric.
    ❓ Per què? El cervell no rep llum, rep impulsos elèctrics. Per això cal convertir l'energia lumínica en senyals nerviosos.
  4. La informació visual és processada per diverses capes de neurones a la retina (bipolars, ganglionars) i surt cap al cervell pel nervi òptic.
  5. Al còrtex visual primari, les neurones detecten característiques simples: vores, línies verticals i horitzontals, contrast. En aquest nivell no existeix cap "detector de H".
  6. Àrees cerebrals superiors combinen aquestes peces: dues línies verticals + una línia horitzontal al mig → activen la representació apresa del símbol H.
  7. Percepció conscient: Finalment emergeix la experiència subjectiva de veure la lletra H.
🔍 Pregunta de verificació: En quin moment va aparèixer la H? No al codi, no als bits, sinó al teu cervell. Fins al final tot eren números, electricitat i llum.

La H no existeix físicament a l'ordinador; és una interpretació del cervell a partir d'un patró de llum.

⏳ Línia del temps completa

Codi C ASCII (72) Binari RAM CPU SO / write Terminal Font GPU Píxels RGB Fotons Retina Nervi òptic Cervell H conscient

Per a ments curioses: Com funcionen realment els fotoreceptors

Aquesta secció amplia els passos 17-18 per a qui vulgui entendre la cascada molecular.

Les opsines i el retinal

Cada con conté una proteïna (opsina) diferent: OPN1SW (blau), OPN1MW (verd), OPN1LW (vermell). Totes porten unit el mateix cromòfor: 11-cis-retinal.

  • Quan un fotó colpeja el retinal, aquest s'isomeritza a tot-trans-retinal.
  • Aquest canvi de forma activa l'opsina, que al seu torn activa una proteïna G (transducina).
  • La transducina activa una fosfodiesterasa que degrada GMP cíclic.
  • En disminuir el GMPc, es tanquen canals de Na+ i Ca2+ de la membrana.
  • La cèl·lula s'hiperpolaritza i allibera menys neurotransmissor, cosa que les cèl·lules bipolars tradueixen en un senyal cap a les ganglionars.
❓ Per què? La sensibilitat al color no ve donada pel retinal, sinó per l'entorn químic de l'opsina, que ajusta l'energia necessària per isomeritzar el retinal. Per això un fotó blau activa més fàcilment el con S que el con L.

Exemple amb un píxel vermell

Si la pantalla mostra un píxel vermell, els fotons estimularan intensament els cons L, molt poc els M i gens els S. El cervell rep aquesta combinació i interpreta "vermell".

Per a una descripció pas a pas del processament retinià, consulta el material complet original sobre bastons, bipolars i còrtex.

📚 Glossari ràpid

ASCII – Codi que assigna un número (0-127) a cada caràcter. 'H' = 72.
Byte – Conjunt de 8 bits, suficient per representar 256 valors (ex. 01001000).
Adreça de memòria – Número que identifica una posició concreta a la RAM, com el número d'un calaix.
printf – Funció de C que escriu text formatat a la sortida estàndard. Internament fa crides al SO.
GPU – Processador especialitzat en gràfics, encarregat de convertir dades en píxels.
Rasterització – Conversió d'una imatge vectorial (línies i corbes) a una graella de píxels.
Fototransducció – Procés pel qual la llum es transforma en senyal elèctric a la retina.
Opsina – Proteïna sensible a la llum que, juntament amb el retinal, inicia la cascada visual.

Fi del viatge. Ara, cada cop que vegis una lletra a la pantalla, sabràs els milions de processos que l'han feta possible.

Exercicis

  1. Canvia el text del printf() per mostrar el teu nom.
  2. Cerca la seqüència del gen assignat segons l'ordre alfabètic de la llista següent. Copia els primers 50 nucleòtids i mostra'ls amb printf().

    Assignació de gens:

    1. ACE
    2. ACTB
    3. APOE
    4. BRAF
    5. BRCA1
    6. BRCA2
    7. CFTR
    8. EGFR
    9. F5
    10. F8
    11. G6PD
    12. HBB
    13. INS
    14. KRAS
    15. MTHFR
    16. MYC
    17. PTEN
    18. TNF
    19. TP53
    20. VEGFA

    On trobar la seqüència: NCBI Gene

    Exemple: cerca el gen, accedeix al registre i copia una part de la seqüència nucleotídica per mostrar-la amb printf().

  3. Compila sense errors i executa el programa.

Mini Projecte

Crear una fitxa d'una proteïna utilitzant printf(). Mostra el nom, la seqüència i la longitud.