Implementação de Algoritmos – Aula 3 – 15/03/2006



Baixar 47,2 Kb.
Encontro06.03.2018
Tamanho47,2 Kb.

Implementação de Algoritmos – Aula 3 – 15/03/2006.

O Comando switch


O comando if-else e o comando switch são os dois comandos de tomada de decisão. Sem dúvida alguma o mais importante dos dois é o if, mas o comando switch tem aplicações valiosas. Mais uma vez vale lembrar que devemos usar o comando certo no local certo. Isto assegura um código limpo e de fácil entendimento. O comando switch é próprio para se testar uma variável em relação a diversos valores pré-estabelecidos. Sua forma geral é:

 

switch (variável)



{


case constante_1:
declaração_1;
break;
case constante_2:
declaração_2;
break;
.
.
.
case constante_n:
declaração_n;
break;
default
declaração_default;
}

 

Podemos fazer uma analogia entre o switch e a estrutura if-else-if apresentada anteriormente. A diferença fundamental é que a estrutura switch não aceita expressões. Aceita apenas constantes. O switch testa a variável e executa a declaração cujo case corresponda ao valor atual da variável. A declaração default é opcional e será executada apenas se a variável, que está sendo testada, não for igual a nenhuma das constantes.



 O comando break, faz com que o switch seja interrompido assim que uma das declarações seja executada. Mas ele não é essencial ao comando switch. Se após a execução da declaração não houver um break, o programa continuará executando. Isto pode ser útil em algumas situações, mas eu recomendo cuidado. Veremos agora um exemplo do comando switch:

 #include

int main ()

{

int num;



printf ("Digite um numero: ");

scanf ("%d",&num);

switch (num)

        {

        case 9:

                printf ("\n\nO numero e igual a 9.\n");

        break;

        case 10:

                printf ("\n\nO numero e igual a 10.\n");

        break;

        case 11:

                printf ("\n\nO numero e igual a 11.\n");

        break;

        default:

               printf ("\n\nO numero nao e nem 9 nem 10 nem 11.\n");

        }

return(0);

}

O Comando do-while


A terceira estrutura de repetição que veremos é o do-while de forma geral:

do

{

declaração;
} while (condição);

Mesmo que a declaração seja apenas um comando é uma boa prática deixar as chaves. O ponto-e- vírgula final é obrigatório. Vamos, como anteriormente, ver o funcionamento da estrutura do-while "por dentro":

 declaração;
if (condição) "Volta para a declaração"

 Vemos pela análise do bloco acima que a estrutura do-while executa a declaração, testa a condição e, se esta for verdadeira, volta para a declaração. A grande novidade no comando do-while é que ele, ao contrário do for e do while, garante que a declaração será executada pelo menos uma vez.

 Um dos usos da extrutura do-while é em menus, nos quais você quer garantir que o valor digitado pelo usuário seja válido, conforme apresentado abaixo:

 

#include



int main ()

{

int i;



do

        {

        printf ("\n\nEscolha a fruta pelo numero:\n\n");

        printf ("\t(1)...Mamao\n");

        printf ("\t(2)...Abacaxi\n");

        printf ("\t(3)...Laranja\n\n");

        scanf("%d", &i);

        } while ((i<1)||(i>3));

switch (i)

       {


        case 1:

                printf ("\t\tVoce escolheu Mamao.\n");

        break;

        case 2:

                printf ("\t\tVoce escolheu Abacaxi.\n");

        break;

        case 3:

                printf ("\t\tVoce escolheu Laranja.\n");

        break;

        }

return(0);

}

Vetores


Vetores nada mais são que matrizes unidimensionais. Vetores são uma estrutura de dados muito utilizada. É importante notar que vetores, matrizes bidimensionais e matrizes de qualquer dimensão são caracterizadas por terem todos os elementos pertencentes ao mesmo tipo de dado. Para se declarar um vetor podemos utilizar a seguinte forma geral:

 tipo_da_variável nome_da_variável [tamanho];

 Quando o C vê uma declaração como esta ele reserva um espaço na memória suficientemente grande para armazenar o número de células especificadas em tamanho. Por exemplo, se declararmos:

 

                float exemplo [20];



o C irá reservar 4x20=80 bytes. Estes bytes são reservados de maneira contígua. Na linguagem C a numeração começa sempre em zero. Isto significa que, no exemplo acima, os dados serão indexados de 0 a 19. Para acessá-los vamos escrever:

 

                exemplo[0]



                exemplo[1]

                .

                .

                .

                exemplo[19]

Mas ninguém o impede de escrever:

 

                exemplo[30]



                exemplo[103]

Por quê? Porque o C não verifica se o índice que você usou está dentro dos limites válidos. Este é um cuidado que você deve tomar. Se o programador não tiver atenção com os limites de validade para os índices ele corre o risco de ter variáveis sobreescritas ou de ver o computador travar. Bugs terríveis podem surgir. Vamos ver agora um exemplo de utilização de vetores:

#include

int main ()

{

int num[100];  /* Declara um vetor de inteiros de 100 posicoes */



int count=0;  

int totalnums;

do

        {



        printf ("\nEntre com um numero (-999 p/ terminar): ");

        scanf ("%d",&num[count]);

        count++;

        } while (num[count-1]!=-999);

totalnums=count-1;

printf ("\n\n\n\t Os números que você digitou foram:\n\n");

for (count=0;count

               printf (" %d",num[count]);

        return(0);

}

No exemplo acima, o inteiro count é inicializado em 0. O programa pede pela entrada de números até que o usuário entre com o Flag -999. Os números são armazenados no vetor num. A cada número armazenado, o contador do vetor é incrementado para na próxima iteração escrever na próxima posição do vetor. Quando o usuário digita o flag, o programa abandona o primeiro loop e armazena o total de números gravados. Por fim, todos os números são impressos. É bom lembrar aqui que nenhuma restrição é feita quanto a quantidade de números digitados. Se o usuário digitar mais de 100 números, o programa tentará ler normalmente, mas o programa os escreverá em uma parte não alocada de memória, pois o espaço alocado foi para somente 100 inteiros. Isto pode resultar nos mais variados erros no instante da  execução do programa.


Strings


Strings são vetores de chars. Nada mais e nada menos. As strings são o uso mais comum para os vetores. Devemos apenas ficar atentos para o fato de que as strings têm o seu último elemento como  um '\0'. A declaração geral para uma string é:

 char nome_da_string [tamanho];

 Devemos lembrar que o tamanho da string deve incluir o '\0' final. A biblioteca padrão do C possui diversas funções que manipulam strings. Estas funções são úteis pois não se pode, por exemplo, igualar duas strings:

 

                string1=string2;        /* NAO faca isto */



Fazer isto é um desastre. Quando você terminar de ler a seção que trata de ponteiros você entenderá porquê. As strings devem ser igualadas elemento a elemento.

 Quando vamos fazer programas que tratam de string muitas vezes podemos fazer bom proveito do fato de que uma string termina com '\0' (isto é, o número inteiro 0). Veja, por exemplo, o programa abaixo que serve para igualar duas strings (isto é, copia os caracteres de uma string para o vetor da outra):

#include

int main ()

{

int count;



char str1[100],str2[100];

....    /* Aqui o programa le str1 que sera copiada para str2 */

for (count=0;str1[count];count++)

             str2[count]=str1[count];

        str2[count]='\0';

....            /* Aqui o programa continua */

}

A condição no loop for acima é baseada no fato de que a string que está sendo copiada termina em '\0'. Quando o elemento encontrado em str1[count] é o '\0', o valor retornado para o teste condicional é falso (nulo). Desta forma a expressão que vinha sendo verdadeira (não zero) continuamente, torna-se falsa.



 Vamos ver agora algumas funções básicas para manipulação de strings.
  • gets


A função gets() lê uma string do teclado. Sua forma geral é:

 gets (nome_da_string);

 O programa abaixo demonstra o funcionamento da função gets():

#include

int main ()

{

char string[100];



printf ("Digite o seu nome: ");

gets (string);

printf ("\n\n Ola %s",string);

return(0);

}

Repare que é válido passar para a função printf() o nome da string. Você verá mais adiante porque isto é válido. Como o primeiro argumento da função printf() é uma string também é válido fazer:



                printf (string);

  isto simplesmente imprimirá a string.


  • strcpy


Sua forma geral é:

 strcpy (string_destino,string_origem);

 A função strcpy() copia a string-origem para a string- destino. Seu funcionamento é semelhante ao da rotina apresentada na seção anterior. As funções apresentadas nestas seções estão no arquivo cabeçalho string.h. A seguir apresentamos um exemplo de uso da função strcpy():

#include

#include

int main ()

{

char str1[100],str2[100],str3[100];



printf ("Entre com uma string: ");

gets (str1);

strcpy (str2,str1); /* Copia str1 em str2 */

strcpy (str3,"Voce digitou a string ");

printf ("\n\n%s%s",str3,str2);

return(0);

}

  • strcat


A função strcat() tem a seguinte forma geral:

 strcat (string_destino,string_origem);

 A string de origem permanecerá inalterada e será anexada ao fim da string de destino. Um exemplo:

#include

#include

int main ()

{

char str1[100],str2[100];



printf ("Entre com uma string: ");

gets (str1);

strcpy (str2,"Voce digitou a string ");

strcat (str2,str1);

printf ("\n\n%s",str2);

return(0);

}

  • strlen


Sua forma geral é:

 strlen (string);

 A função strlen() retorna o comprimento da string fornecida. O terminador nulo não é contado. Isto quer dizer que, de fato, o comprimento do vetor da string deve ser um a mais que o inteiro retornado por strlen(). Um exemplo do seu uso:

#include

#include

int main ()

{

int size;



char str[100];

printf ("Entre com uma string: ");

gets (str);

size=strlen (str);

printf ("\n\nA string que voce digitou tem tamanho %d",size);

return(0);

}

  • strcmp


Sua forma geral é:

 strcmp (string1,string2);

 A função strcmp() compara a string 1 com a string 2. Se as duas forem idênticas a função retorna zero. Se elas forem diferentes a função retorna não-zero. Um exemplo da sua utilização: 

#include

#include

int main ()

{

char str1[100],str2[100];



printf ("Entre com uma string: ");

gets (str1);

printf ("\n\nEntre com outra string: ");

gets (str2);

if (strcmp(str1,str2))

        printf ("\n\nAs duas strings são diferentes.");

else printf ("\n\nAs duas strings são iguais.");

return(0);



}



©livred.info 2017
enviar mensagem

    Página principal