C/C++

Tema 4 · Vectors, matrius, cadenes

Introducció

Per treballar amb moltes dades alhora utilitzem vectors (arrays), matrius (arrays 2D) i cadenes de caràcters. En C, les cadenes són vectors de tipus char acabats amb el caràcter nul '\0'. Amb aquestes estructures podem emmagatzemar i processar seqüències d'ADN, llistes de pacients, taules de dades, etc.

Objectius

  • Declarar i inicialitzar vectors i matrius
  • Recórrer arrays amb bucles
  • Treballar amb cadenes: strlen(), strcpy(), strcmp()
  • Llegir i emmagatzemar seqüències curtes d'ADN

Vectors i matrius

Exemple de vector (llista de temperatures):

#include <stdio.h>

int main() {
    float temps[5] = {36.2, 36.8, 37.1, 36.5, 37.0};
    int i;

    printf("Temperatures dels pacients:\n");
    for (i = 0; i < 5; i++) {
        printf("Pacient %d: %.1f °C\n", i+1, temps[i]);
    }
    return 0;
}
float temps[5] declara un vector de 5 floats

Les matrius (2D) són vectors de vectors. Exemple amb dades de glucosa per pacient i dia:

#include <stdio.h>

int main() {
    // 3 pacients, 4 dies
    int glucosa[3][4] = {
        {110, 125, 118, 130},
        {95,  102, 88,  91},
        {140, 135, 142, 138}
    };
    int p, d;

    for (p = 0; p < 3; p++) {
        printf("Pacient %d: ", p+1);
        for (d = 0; d < 4; d++) {
            printf("%d ", glucosa[p][d]);
        }
        printf("\n");
    }
    return 0;
}
Accés: glucosa[pacient][dia]

Cadenes de caràcters

Les cadenes es declaren com char seq[100];. No es poden assignar amb = excepte en la inicialització. Cal usar funcions de <string.h>:

#include <stdio.h>
#include <string.h>

int main() {
    char adn[100] = "AGCTTAG";
    char copia[100];

    strcpy(copia, adn);           // copia la cadena
    int longitud = strlen(adn);   // longitud (sense '\0')

    printf("Original: %s\n", adn);
    printf("Còpia:    %s\n", copia);
    printf("Longitud:  %d\n", longitud);

    // Comparar cadenes
    if (strcmp(adn, copia) == 0)
        printf("Són iguals.\n");

    return 0;
}
strcmp() retorna 0 si són iguals

Exercicis

  1. Crea un vector amb 10 valors de pH i mostra'ls en ordre invers.
  2. Defineix una matriu 2x3 amb dades de pressió arterial i calcula la mitjana de cada pacient.
  3. Llegeix una seqüència d'ADN amb scanf() i mostra la seva longitud i la cadena complementària (A↔T, C↔G).

Mini Projecte – Lector de seqüències curtes

Escriu un programa que faci el següent:

  • Demana el nombre de seqüències a introduir (màxim 5).
  • Per a cada seqüència, llegeix una cadena d'ADN (màxim 50 caràcters).
  • Emmagatzema totes les seqüències en un vector de cadenes (char sequencies[5][51]).
  • Mostra un resum: per a cada seqüència, imprimeix la cadena original, la seva longitud i el percentatge GC.

Pista: per calcular el %GC, compta les 'G' i 'C' i divideix per la longitud.