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;
}
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
- Crea un vector amb 10 valors de pH i mostra'ls en ordre invers.
- Defineix una matriu 2x3 amb dades de pressió arterial i calcula la mitjana de cada pacient.
- 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.