Enrere Mòdul 6
Fonaments de Programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 

Inversió d'una paraula

Com a primera pràctica de cadenes de caràcters, començarem a manipular una cadena caràcter a caràcter per tal d'invertir-la.

 

Desenvolupament de la pràctica

Abans de tot, creeu una nova carpeta per aquest tercer mòdul amb el nom Mòdul_6. Aneu afegint nous arxius per cada nova pràctica o exercici amb els noms que cada vegada es proposi.

Creeu un nou arxiu del tipus C anomenat m6p01.c i escriviu el següent codi:

//m6p01.c -Invertir la posició de les lletres d'una paraula  -

#include <stdio.h>
#include <stdlib.h>

int main (){

   char paraula[21];
   int i;
     system("clear");
   printf("Teclegi una paraula:\n");
   scanf("%s", paraula);

   i = 0;

   while(paraula[i++] != '\0');

   i--;
   printf("%s té %d lletres.\n", paraula, i);
   printf("%s escrita al revés: ", paraula);
   while (i >= 0) printf("%c", paraula[i--]);
   printf("\n");
   return 0;
}

Captura de l'execució del programa.


 

Explicació del programa

En primer lloc, es declara una variable char i una variable de cadena paraula[21]. Aquesta variable és un vector de caràcters. Es reserva espai per 21 caràcters (21 octets).

La lectura de la paraula es fa amb la funció scanf(). La forma d’obtenir el número de caràcters és una alternativa curiosa a la funció strlen(), és la línia:

while(paraula[i++] != '\0');

Aquest bucle buit s’executa fins que es trobi el caràcter ‘\0’. Encara que el cos del bucle està buit, cada vegada que es comprova la condició, s’incrementa el valor de la variable i en una unitat, per tant, quan se surt del bucle per què s’ha trobat el caràcter de fi de cadena (‘\0’), el valor de la variable i és igual a la longitud de la cadena més una unitat (més una unitat ja que quan se troba amb el caràcter fi de cadena encara incrementa en un el valor de i). És evident que aquesta línia es podria haver substituït per:

i=strlen(paraula);

(per aquesta línia seria necessari l'arxiu capçalera string.h).

La línia que imprimeix en pantalla la paraula al revés és:

while (i >= 0) printf("%c", paraula[i--]);

És un bucle format per una única sentència, però, cada vegada que s’escriu un dels caràcters de la paraula (començant per l’últim) es decrementa el valor de la variable en 1.

Si en lloc de llegir una paraula només, es vol llegir una frase, s’ha de modificar el programa anterior ja que la funció scanf() només llegeix la primera paraula de la frase, la lectura es deté quan s’arriba al primer caràcter en blanc.