Gilson de Souza Carvalho gaucho.gilson@hotmail.com 1
Comando Do/While Além do comando while, existem outras estruturas para implementar laços repetitivos. O comando Do/While funciona de forma similar ao comando while, exceto pelo fato de que a condição de controle só é testada após a execução do bloco de comandos, e não antes, como é o caso do comando while. 2
Vejamos sua sintaxe: faça <bloco de instruções> enquanto <valor booleano>; <continuação do algoritmo> 3
Assim, podemos utilizar o comando Do/While sempre que tivermos certeza de que o bloco de instruções será executado ao menos uma vez, sem a necessidade do teste na entrada do bloco. Vejamos um exemplo: Do um algoritmo que calcule a soma dos números ímpares entre 1 e um limite superior definido pelo usuário. 4
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(lc_all,"portuguese"); unsigned short int i, limite, s_impar; i = limite = s_impar = 0;... 5
... printf("informe o limite do intervalo: "); scanf("%d", &limite); } do { if (i % 2!= 0) s_impar += i; i ++; } while (i < limite); printf("soma dos Impares entre 1 e %d: %d \n", limite, s_impar); return 0; 6
7
EXERCICIO: 1. do uma multiplicação apenas por meio de somas (utilize o comando do/while). 2. do um algoritmo que determine if um numero é primo (utilize o comando do/while). 8
Comando for if analisarmos os exemplos de utilização de laços, perceberemos que a maioria deles tem comportamento similar. Uma situação inicial, definida antes do inicio do laço como uma *preparação para a sua entrada, um **teste de controle para a entrada/saída do bloco e uma ***instrução dentro do laço que, em algum momento, fará com que a condição de controle seja atingida e o laço if encerre no momento oportuno. Vejamos um exemplo: 9
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(lc_all,"portuguese"); unsigned short int i, limite, s_impar; i = limite = s_impar = 0; //*preparação para entrada no laço (i=0)... 10
... printf("informe o limite do intervalo: "); scanf("%d", &limite); } while (i < limite) //** Teste de entrada/saída { if (i % 2!= 0) s_impar += i; i++; //***Instrução utilizada para que a condição de controle seja atingida } printf("soma dos Impares entre 1 e %d: %d \n", limite, s_impar); return 0; 11
12
O comando for procura resumir essas três características comuns à maioria das implementações de laços em uma só instrução, facilitando assim a construção típica de laços. A sintaxe do comando for: for <instrução de preparação>; <instrução de controle>; <passo para alcance da condição> <bloco de instruções> <continuação do algoritmo> Portanto, temos a separação do comando em três cláusulas: preparação, condição e passo. 13
Vale citar que, quando temos mais de uma instrução de preparação (primeira cláusula), estas são separadas por vírgula e executadas na ordem em que se encontram no comando. for <instrução1 de preparação>, <instrução1 de preparação>; <... 14
Quando temos mais de uma condição de controle (segunda cláusula), os testes também são realizados em ordem, e a condição toda é Verdadeira apenas se todas as condições o forem. Ou seja, é equivalente a uma condição lógica ligada pelo conectivo &&. Não há como representar composição de condições no comando for. Nesse caso, eleve-se obrigatoriamente fazer uso dos comandos while ou do/while. for...>; <condição1 de controle>, <condição2 de controle>; <... 15
Algumas linguagens de programação não implementam explicitamente a terceira cláusula (passo), e esta tem, nesses casos, um comportamento implícito sempre igual. No caso da linguagem Pascal, por exemplo, o passo sempre é o incremento/decremento em 1 à variável preparada na primeira cláusula. Nesses casos, em geral, o for é usado quase que exclusivamente em algoritmos com contadores. Já a linguagem de programação C implementa todas as cláusulas do comando for. 16
O comando for é executado da seguinte maneira: 1. Execute a instrução de preparação na primeira iteração do laço. 2. Execute o teste de controle. Caso seja Verdadeiro, passe para o item 3. Caso contrário, passe para o item 6. 3. Execute o bloco de instruções. 4. Execute o passo para alcance da condição de controle. 5. Passe para o item 2. 6. Saia do laço e prossiga o algoritmo. 17
O comando for é equivalente à seguinte estrutura: <instrução de preparação> while <teste de controle> { <instruções> <passo> } Implementemos novamente o algoritmo Soma_Impares utilizando o comando for em vez do comando while: 18
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(lc_all,"portuguese"); unsigned short int i, limite=0, s_impar=0; printf("informe o limite do intervalo: "); scanf("%d", &limite);... 19
... for (i = 0; i < limite; i++) if (i % 2!= 0) s_impar += i; printf("soma dos Impares entre 1 e %d: %d \n", limite, s_impar); return 0; } 20
21
O bloco de instruções do comando for só contém uma instrução (o comando if) e, por isso, não precisa ser delimitado pelo { }. 22
O comando for é uma construção diferente no que diz respeito apenas ao estilo de programação, mas internamente seu funcionamento é igual ao do comando while ou do/while, e não há ganho de desempenho ou diminuição de instruções executadas pela sua utilização. Temos apenas uma diminuição do número de linhas do algoritmo em virtude de seu estilo compacto, em que descrevemos três instruções em apenas uma linha. 23
Calcular o somatório Faça um algoritmo que calcule a fórmula abaixo: em que n é definido pelo usuário. Esse tipo de fórmula encaixa-se perfeitamente na estrutura do comando for. Podemos separar: Instrução de preparação: i = 3 Condição de saída: i = n Passo: i := i + 1 24
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(lc_all,"portuguese"); unsigned short int i, n=0, somatorio=0; printf("informe o valor para n: "); scanf("%d", &n); for (i = 3; i < n; i++) somatorio = 5 * i + 2; } printf("o resultado do Somatório é: %d \n", somatorio); return 0; 25
26
EXERCICIO: 1. Faça os próximos algoritmos utilizando o for. a) Faça a multiplicação apenas por meio de somas. b) Faça um algoritmo que determine se um numero é primo. 27
2. Faça um algoritmo que calcule a soma dos números primos entre 1 e 100. 3. Dada a definição de MDC:"dados dois números inteiros a e b não nulos, define-se o maximo divisor comum (MDC) como sendo o maior inteiro que divide simultaneamente a e b", faça um algoritmo que leia dois números e, a partir deles, descubra o máximo divisor comum (MDC). 28
4. Dada a definição de MMC:"dados dois números inteiros a e b não nulos, define-se o mínimo múltiplo comum (MMC)como sendo o menor inteiro positivo, múltiplo comum de a e b", faça um algoritmo que leia dois números e encontre o mínimo múltiplo comum (MMC). Esse algoritmo deve utilizar o seguinte método para calcular o MMC:"multiplicar os dois números e dividir pelo MDC (máximo divisor comum)". 29
5. Faça o algoritmo para a resolução do somatório a seguir, sendo n definido pelo usuário e maior que 5: 30
6. Faça um algoritmo que encontre o n-ésimo termo da série de Fibonacci. A série de Fibonacci é dada por: fib(n) = fib(n - 1) + fib(n - 2) para n> 1; Para n = 0 e n = 1, o valor é dado por definição: fib(0) = 0 e fib(1) = 1. Exemplos: fib(0) = 0 fib(1) = 1 fib(2) = fib(1) + fib(0) = 1 + 0 = 1 fib(3) = fib(2) + fib(1) = 1 + 1 = 2 fib(4) = fib(3) + fib(2) = 2 + 1 = 3 fib(5) = fib(4) + fib(3) = 3 + 2 = 5 fib(6) = fib(5) + fib(4) = 5 + 3 = 8 31
32