Tema 2 - Variables i Entrada de Dades

Exercici 1

Declara una variable int per a l'edat d'un pacient i mostra-la amb printf().

#include <stdio.h>  /* Inclou la biblioteca estàndard d'entrada/sortida */
                     /* stdio.h conté funcions com printf() i scanf() */

int main(){  /* Funció principal del programa, punt d'entrada d'execució */

    int edat = 45;  /* Declara una variable enter anomenada 'edat' i li assigna el valor 45 */
                    /* 'int' és el tipus de dada per a nombres enters */

    printf("Edat del pacient: %d anys\n", edat);  /* Mostra un missatge per pantalla */
                                                  /* %d és un marcador de posició per a enters */
                                                  /* \n afegeix un salt de línia al final */
                                                  /* 'edat' és la variable que substitueix %d */

    return 0;  /* Retorna 0 per indicar que el programa ha finalitzat correctament */
               /* 0 és el valor estàndard d'èxit en C */
}

Exercici 2

Llegeix el nom del mateix gen del tema 1 amb scanf() i imprimeix-lo.

#include <stdio.h>  /* Inclou la biblioteca estàndard d'entrada/sortida */
                     /* Necessària per utilitzar printf() i scanf() */

int main(){  /* Funció principal del programa */

    char gen[30];  /* Declara un array de caràcters (cadena de text) anomenat 'gen' */
                   /* Pot emmagatzemar fins a 29 caràcters + el caràcter nul '\0' */
                   /* 'char' és el tipus de dada per a caràcters individuals */

    printf("Introdueix el nom del gen: ");  /* Mostra un missatge demanant dades a l'usuari */
                                            /* No inclou \n perquè el cursor es quedi a la mateixa línia */

    scanf("%s", gen);  /* Llegeix una cadena de text introduïda per l'usuari */
                       /* %s és el marcador per a cadenes de text */
                       /* 'gen' sense & perquè els arrays ja són punters */
                       /* La lectura s'atura en trobar un espai en blanc */

    printf("Gen introduit: %s\n", gen);  /* Mostra el gen introduït */
                                         /* %s substitueix per la cadena emmagatzemada a 'gen' */

    return 0;  /* Finalitza el programa amb èxit */
}

Exercici 3

Demana el %GC d'una seqüència (float) i mostra'l amb dos decimals.

#include <stdio.h>  /* Inclou la biblioteca estàndard d'entrada/sortida */

int main(){  /* Funció principal del programa */

    float gc;  /* Declara una variable de tipus float (nombre decimal) anomenada 'gc' */
               /* 'float' permet emmagatzemar nombres amb decimals (precisió simple) */

    printf("Introdueix el percentatge GC: ");  /* Demana a l'usuari que introdueixi el percentatge GC */

    scanf("%f", &gc);  /* Llegeix un nombre decimal introduït per l'usuari */
                       /* %f és el marcador per a floats */
                       /* &gc passa l'adreça de memòria de la variable (necessari per a scanf) */
                       /* El & és l'operador d'adreça, indica on emmagatzemar el valor llegit */

    printf("Percentatge GC: %.2f %%\n", gc);  /* Mostra el percentatge amb format */
                                              /* %.2f mostra el float amb 2 decimals */
                                              /* %% mostra el símbol % literal (s'ha d'escapar) */
                                              /* gc és la variable que conté el valor a mostrar */

    return 0;  /* Retorna 0 indicant execució correcta */
}

Exercici 4

Donats dos enters, mostra la suma, la resta, el producte, la divisió entera i el mòdul.

#include <stdio.h>  /* Inclou la biblioteca estàndard d'entrada/sortida */

int main(){  /* Funció principal del programa */

    int a, b;  /* Declara dues variables enteres: 'a' i 'b' */
               /* Es poden declarar múltiples variables del mateix tipus separades per comes */

    printf("Primer nombre: ");  /* Demana el primer nombre a l'usuari */
    scanf("%d",&a);  /* Llegeix un enter i l'emmagatzema a la variable 'a' */
                     /* %d és el marcador per a enters (dígits) */
                     /* &a passa l'adreça de 'a' perquè scanf pugui modificar-la */

    printf("Segon nombre: ");  /* Demana el segon nombre a l'usuari */
    scanf("%d",&b);  /* Llegeix un enter i l'emmagatzema a la variable 'b' */

    printf("Suma = %d\n", a+b);  /* Calcula i mostra la suma d'a i b */
                                 /* L'operador + realitza la suma */
    printf("Resta = %d\n", a-b);  /* Calcula i mostra la resta d'a menys b */
                                  /* L'operador - realitza la resta */
    printf("Producte = %d\n", a*b);  /* Calcula i mostra el producte d'a per b */
                                     /* L'operador * realitza la multiplicació */
    printf("Divisio entera = %d\n", a/b);  /* Calcula i mostra la divisió entera */
                                           /* L'operador / amb enters dóna divisió entera (sense decimals) */
    printf("Modul = %d\n", a%b);  /* Calcula i mostra el residu de la divisió */
                                  /* L'operador % retorna el residu (mòdul) de dividir a entre b */

    return 0;  /* Finalitza el programa amb èxit */
}

Mini Projecte - Conversor ADN → ARN

Converteix una base d'ADN en la seva base complementària d'ARN.

#include <stdio.h>  /* Inclou la biblioteca estàndard d'entrada/sortida */

int main(){  /* Funció principal del programa */

    char base;  /* Declara una variable caràcter anomenada 'base' */
                /* Emmagatzemarà una sola lletra: A, C, G o T */

    printf("Introdueix una base (A,C,G,T): ");  /* Demana a l'usuari que introdueixi una base d'ADN */
    scanf(" %c",&base);  /* Llegeix un sol caràcter */
                         /* L'espai abans de %c és important: ignora espais en blanc previs */
                         /* %c és el marcador per a caràcters */
                         /* &base passa l'adreça on emmagatzemar el caràcter llegit */

    if(base=='A')  /* Comprova si la base introduïda és Adenina */
                   /* == és l'operador de comparació d'igualtat */
                   /* Les cometes simples '' s'usen per a caràcters individuals */
        printf("Complement ARN: U\n");  /* Si és A, mostra Uracil (complement en ARN) */
    else if(base=='C')  /* Si no era A, comprova si és Citosina */
        printf("Complement ARN: G\n");  /* Si és C, mostra Guanina */
    else if(base=='G')  /* Si no era C, comprova si és Guanina */
        printf("Complement ARN: C\n");  /* Si és G, mostra Citosina */
    else if(base=='T')  /* Si no era G, comprova si és Timina */
        printf("Complement ARN: A\n");  /* Si és T, mostra Adenina */
    else  /* Si no coincideix amb cap base vàlida */
        printf("Base incorrecta.\n");  /* Mostra missatge d'error */

    return 0;  /* Finalitza el programa amb èxit */
}

Ampliació - Convertir una seqüència de 3 bases

Exemple: ATG → UAC

#include <stdio.h>  /* Inclou la biblioteca estàndard d'entrada/sortida */

int main(){  /* Funció principal del programa */

    char adn[4];  /* Declara un array de 4 caràcters per a la seqüència d'ADN */
                  /* 3 bases + 1 espai per al caràcter nul '\0' */
    char arn[4];  /* Declara un array de 4 caràcters per a la seqüència d'ARN */
                  /* Emmagatzemarà la conversió complementària */

    printf("Introdueix una sequencia de 3 bases: ");  /* Demana una seqüència de 3 bases */
    scanf("%3s", adn);  /* Llegeix exactament 3 caràcters (o menys si hi ha espai) */
                        /* %3s limita la lectura a 3 caràcters per evitar desbordaments */
                        /* adn sense & perquè és un array (ja és un punter) */

    for(int i=0;i<3;i++){  /* Bucle que itera 3 vegades (i=0,1,2) */
                           /* 'int i=0' inicialitza el comptador a 0 */
                           /* 'i<3' continua mentre i sigui menor que 3 */
                           /* 'i++' incrementa i en 1 després de cada iteració */

        if(adn[i]=='A')  /* Comprova si la base actual és Adenina */
                         /* adn[i] accedeix al caràcter a la posició i de l'array */
            arn[i]='U';  /* Assigna Uracil a la posició corresponent de l'ARN */
        else if(adn[i]=='T')  /* Comprova si és Timina */
            arn[i]='A';  /* Assigna Adenina (complement de Timina en ARN) */
        else if(adn[i]=='C')  /* Comprova si és Citosina */
            arn[i]='G';  /* Assigna Guanina */
        else if(adn[i]=='G')  /* Comprova si és Guanina */
            arn[i]='C';  /* Assigna Citosina */
        else  /* Si la base no és vàlida */
            arn[i]='?';  /* Assigna un interrogant com a marcador d'error */
    }

    arn[3]='\0';  /* Afegeix el caràcter nul al final de la cadena ARN */
                  /* '\0' indica el final d'una cadena en C */
                  /* Sense això, printf() no sabria on acaba la cadena */

    printf("ARN: %s\n", arn);  /* Mostra la seqüència d'ARN convertida */
                               /* %s mostra la cadena completa fins a trobar '\0' */

    return 0;  /* Finalitza el programa amb èxit */
}