Linguaxe de programación C (V). Estruturas de control II

Tras analizar no capítulo anterior as estruturas condicionais F e switch e as estruturas repetitivas while e do-while, o obxectivo neste capítulo céntrase nas explicacións.

IF

Tras analizar as estruturas condicionais e repetitivas de while e do-while no capítulo anterior, o obxectivo deste capítulo céntrase nas seguintes explicacións:

  • Estrutura for repetitiva
  • break e uso de sentenzas continue en estruturas repetitivas.
  • Utilización das estruturas e expresións analizadas en exemplos de interese: if cavadas, manexo de bits.
  • A cadea de caracteres e a definición e utilización de táboas en estruturas repetitivas.

Estrutura FOR

Nesta complexa estrutura repetitiva admítense expresións de inicialización e actualización por ciclo sobre o corpo do abrandamento e a condición de repetición, resultando nalgúns casos una estrutura moi cómoda.

A sintaxe é a seguinte:

O seu funcionamento é o seguinte:

  1. avaliar a expresión inicial (inicialización).
  2. avaliar a expresión dos baldines. Si é falso pasar á seguinte sentenza (fin).
  3. se a expresión de baldin é certa, realízase a expresión ou expresións corporais.
  4. avaliar a expresión diaria (actualización) e 2) ao momento.

Por tanto, a primeira expresión entre paréntese (inicialización) execútase una vez, a segunda ao comezo de cada ciclo e a terceira (actualización) ao final de cada ciclo. No entanto, o que se realiza coa estrutura for pódese realizar mediante while e asignación como se pode ver a continuación.

O cálculo do factorial descrito no Programa 1 no capítulo anterior pódese ver utilizando a estrutura for.

Programa 1. Factorial por for.

Se as expresións da estrutura son opcionais, a expresión da baldin debe aparecer sempre, xa que pola contra o abrandamento sería infinito. Cando a primeira e a terceira expresión non aparecen, for e while son totalmente equivalentes.

O corpo pode estar formado por unha soa expresión ou por un conxunto de expresións separadas por{ e}, admitíndose tamén o corpo baleiro (neste caso o corpo está formado polo carácter).

Break e Continue

En estruturas repetitivas, aínda que ás veces cúmprase a expresión que controla o bigal (expresión de baldin), é conveniente que salga do bigal si produciuse algunha excepción. Paira iso utilízase a sentenza break en estruturas repetitivas.

Un exemplo pódese ver no programa 2. Nel lense 80 caracteres e cóntase o número de maiúsculas que hai. No entanto, se se le o carácter ‘.’ non se deben ler máis caracteres.

Programa 2. Uso da sentenza Break.

Noutros casos, cando o corpo da estrutura repetitiva é complexo, pode suceder que, a pesar de querer seguir abrandándose nunha situación, non sexa necesario executar una parte do corpo, paira o que se produce una sentenza continue moi adecuada.

No 3er programa lense 20 números e hai que calcular o seu produto, pero se o número é Ø non se ten en conta.

Programa 3. Uso da sentenza Continue.

Exemplos

Enunciado 1: Ler tres números enteiros e grandes (Programa 4).

Programa 4. Cavados If.

Neste exemplo, nas ramas dunha if móstranse as estruturas if ( if cavadas) e ao considerar cada estrutura como una expresión simple, non se necesita chave.

Enunciado 2: Ler un carácter e calcular cantos bits hai en estado cero. (Programa 5).

Programa 5. Cavados If.

O manexo de bits resulta moi difícil en linguaxes superiores, mentres que Cz é extremadamente sinxelo (and), | (or), interactivo (xor), (desprazamento esquerdo) e (desprazamento dereito). No exemplo, mediante a operación and analízase un bit, xa que cando na operación and emparellamos un dato cunha máscara cun único bit en estado 1, se o bit do dato correspondente a 1 é cero, e si é un, o resultado distinto é cero. A operación atópase nun bigal ( coa estrutura for) que se repite 8 veces, pero paira analizar os diferentes bits é necesario desprazar dentro do bigal os bits da máscara (como o que se fixo no programa) ou desprazar o mesmo dato.

Enunciado 3: Ler 40 caracteres e contar os bits en Ø.

Ante este exemplo exponse 2 preguntas:

  • Pódense ler os caracteres á vez ou un por un? É posible ler todos á vez, pero paira iso hai que utilizar o tipo de datos cadea de caracteres, que non analizamos até agora.
  • É posible utilizar o código utilizado no enunciado 2 paira resolver isto? A resposta é afirmativa, pero paira iso, en lugar de ser o programa principal 5 (main), debe definirse como una acción non primitiva (tamén coñecida como función, procedemento ou rutina), que analizaremos no capítulo seguinte.

Cadeas de caracteres e táboas

Os datos básicos vistos até o momento son caracteres (char), números enteiros (short, int, long) e reais (float, double). Sobre eles pódense definir conxuntos de datos formando táboas ou vectores, como se pode observar no seguinte exemplo:

char [8Ø];

/* Cadea Ø 8 caracteres */

Táboa int [Ø 2], matriz [M] [N];

A cadea de caracteres (string en inglés) é una táboa de caracteres na que o último carácter é constante ‘\Ø’. Este carácter final de cadea permite detectar o final da cadea cando a cadea é de lonxitude variable.

As táboas poden ser unidimensionales (string ou táboa no exemplo) ou múltiples (a matriz no exemplo é binaria). No uso menciónase o nome e o índice (entre macos), estando o índice entre Ø e o número de compoñentes menos un. Na definición débese indicar o nome e o número de compoñentes (entre macos) sendo opcional a inicialización. No Programa 6 pódese ver un exemplo.

Programa 6. Utilizando táboas.
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila