C/C++

Tema 3 · Condicionals, bucles, funcions

Introducció

Els programes han de prendre decisions i repetir accions. Amb condicionals (if, else, switch) controlem el flux segons condicions. Els bucles (for, while) ens permeten repetir instruccions. Les funcions agrupen codi reutilitzable, fent el programa més llegible i modular.

Objectius

  • Utilitzar if/else i switch per prendre decisions
  • Repetir tasques amb for i while
  • Crear funcions amb paràmetres i valor de retorn
  • Calcular la composició nucleotídica d'una seqüència d'ADN

Condicionals i bucles

Exemple amb if/else per classificar una base nitrogenada:

#include <stdio.h>

int main() {
    char base;
    printf("Base (A, C, G, T): ");
    scanf(" %c", &base);

    if (base == 'A' || base == 'a')
        printf("És Adenina\n");
    else if (base == 'C' || base == 'c')
        printf("És Citosina\n");
    else if (base == 'G' || base == 'g')
        printf("És Guanina\n");
    else if (base == 'T' || base == 't')
        printf("És Timina\n");
    else
        printf("Base no vàlida\n");

    return 0;
}
Observa l'ús de || (OR) per acceptar majúscules i minúscules

Ara comptem quantes bases hi ha en una seqüència usant un bucle for:

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

int main() {
    char adn[] = "AGCTTAGGCTA";
    int i, a = 0, c = 0, g = 0, t = 0;

    for (i = 0; i < strlen(adn); i++) {
        switch (adn[i]) {
            case 'A': a++; break;
            case 'C': c++; break;
            case 'G': g++; break;
            case 'T': t++; break;
        }
    }

    printf("A: %d, C: %d, G: %d, T: %d\n", a, c, g, t);
    return 0;
}
strlen() retorna la longitud de la cadena

Funcions

Una funció ens permet encapsular un càlcul. Per exemple, una funció que retorna el percentatge d'una base:

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

float percentatge_base(char adn[], char base) {
    int i, compt = 0;
    for (i = 0; i < strlen(adn); i++) {
        if (adn[i] == base) compt++;
    }
    return (100.0 * compt) / strlen(adn);
}

int main() {
    char seq[] = "AGCTAGCT";
    printf("%%A = %.2f\n", percentatge_base(seq, 'A'));
    printf("%%G = %.2f\n", percentatge_base(seq, 'G'));
    return 0;
}
La funció rep la seqüència i la base, retorna el %

Exercicis

  1. Escriu un programa que demani una lletra i digui si és vocal o consonant (amb if).
  2. Utilitza un bucle while per llegir bases fins que l'usuari introdueixi un '0'.
  3. Crea una funció complementaria(char base) que retorni la base complementària (A→T, C→G, etc.).

Mini Projecte – Calculadora de Composició Nucleotídica

Escriu un programa que:

  • Demani una seqüència d'ADN (cadena de text, màxim 100 caràcters).
  • Calculi el nombre i el percentatge de cada base (A, C, G, T).
  • Utilitzi una funció comptar_base() per no repetir codi.
  • Mostri un resum net com:
Seqüència: AGCTAGCT
A: 2 (25.0%)  C: 2 (25.0%)  G: 2 (25.0%)  T: 2 (25.0%)
Longitud total: 8 bases

Ampliació: fes que també calculi el contingut GC ((G+C)/total*100).