AULA 7 - Programação 1 - Graduação
Objetivos
- O aluno deverá ser capaz de implementar estruturas de repetição em linguagem C.
- Criar fluxogramas ou pseudo-código na forma de estruturas em linguagem C.
- Implementar loops infinitos.
Estruturas de Repetição
Existem 4 estruturas/comandos que permitem implementar loops ou repetições de blocos de código:
- while()
- do while()
- for()
- goto label
NOTA 1: Observe que repetir o código siginifica voltar a executá-lo, normalmente sobre o controle de uma expressão lógica.
O comando while(): teste da repetição no começo
- O comando while tem a seguinte forma geral
- while (condição) declaração;
ou
- while (condição){
- declaração1;
- declaração2;
- }
- while (condição){
Podemos ver que a estrutura while testa uma condição. Se esta for verdadeira
a declaração é executada e faz-se o teste novamente, e assim por diante.
O comando while permite implementar loops com controle no início:
#include <stdio.h>
main()
{
int contador;
contador=0;
while (contador<5) {
printf("valor do contador = %d\n", contador);
contador=contador+1;
}
}
Variação do exemplo anterior:
#include <stdio.h>
main()
{
int contador;
contador=0;
while (contador<5) {
printf("valor da expressão = contador < 5 é %d\n", contador<5);
printf("valor do contador = %d\n", contador);
contador=contador+1;
}
printf("NO FINAL a expressão contador < 5 é %d\n", contador<5);
}
Vamos ver a correspondência do comando while com um fluxograma:
NOTE que no exemplo anterior o contador inicialmente DEVE conter um valor válido.
Comando do while: controle do loop no final
O comando do while() permite a repetição de uma ou mais instruções, com controle do loop no final. Isto permite que o bloco seja executado pelo menos uma vez.
#include <stdio.h>
main()
{
int contador;
contador=0;
do {
printf("valor do contador = %d\n", contador);
contador=contador+1;
} while (contador<5);
}
A estrutura do comando, informalmente, é:
do instrução_simples; while (expressão);
ou
do { lista_de_instruções } while (expressão);
Comando for()
O comando for() permite uma forma mais elaborada de loop, com controle no início do bloco de repetição.
#include <stdio.h>
main()
{
int i;
for (i=0;i<10;i=i+1)
printf("i =%d\n",i);
}
A estrutura do comando é:
for(expressão_inicial;expressão_de_controle; expressão_de_final_de _bloco) instrução_simples;
ou
for(expressão_inicial;expressão_de_controle; expressão_de_final_de _bloco) { lista_de_instruções }
Aninhamento de loops
#include <stdio.h>
main()
{
int i,j;
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
printf("valor de j = %d\n", j);
}
printf("valor de i = %d\n", i);
}
}
Comando goto
O comando goto é um dos mais antigos da programação. A ideia é comandar um salto para um determinado ponto específico do programa marcado por um rótulo (LABEL). Para utilizá-lo deve-se, portanto, marcar o ponto para onde será feito o salto usando um LABEL.
Exemplo:
#include <stdio.h>
main()
{
int i;
i=0;
PONTO1:
printf("Laço de número %d\n", i);
i++;
if (i<10)
goto PONTO1;
}
Devido a ser uma instrução "desestruturante", em geral NÂO se recomenda o uso deste comando.
Em alguns casos de tratamento de erro pode ser interessante o uso do goto.
Leia um pouco mais sobre o goto aqui.
Loop Infinito
É possível implementar loops infinitos com qualquer uma das instruções acima.
Exemplo com comando for:
main()
{
for(;;) {
/* Este bloco se executará infinitamente */
}
}
ou com o comando while:
main()
{
while(1) {
/* Este bloco se executará infinitamente */
}
}
- Usando o comando for aninhado, construa um programa que implemente a figura abaixo. A margem esquerda (margem de espaços), o caracter do desenho, o número de linhas vazadas e o tamanho horizontal da figura deve ser lido pelo teclado.
aaaaaaaaaa a a aaaaaaaaaa
#include <stdio.h>
void imp_linha_cheia(int margem, int num_caracteres, char car1)
{
int i;
for(i=0;i<margem;i++)
printf(" ");
for(i=0;i<num_caracteres;i++)
printf("%c", car1);
printf("\n");
}
void imp_linha_vazada(int margem, int num_vazados, char car1)
{
int i;
for(i=0;i<margem;i++)
printf(" ");
printf("%c", car1);
for(i=0;i<num_vazados;i++)
printf(" ");
printf("%c\n", car1);
}
void plot_ret(int margem, int num_vazados, int num_linhas_vazado, char car1)
{
int i;
imp_linha_cheia(margem, num_vazados+2, car1);
for(i=0;i<num_linhas_vazado;i++)
imp_linha_vazada(margem, num_vazados, car1);
imp_linha_cheia(margem, num_vazados+2, car1);
}
|}
AULA 6 DIA 28/02/2014 |
---|
Exercícios 1.Usando o comando for aninhado, construa um programa que implemente a figura abaixo. A margem esquerda (margem de espaços), o caracter do desenho, o número de linhas vazadas e o tamanho horizontal da figura deve ser lido pelo teclado. aaaaaaaaaa a a aaaaaaaaaa #include <stdio.h>
main()
{
int i, j,num_linhas, num_colunas, margem;
printf("Entre com linhas\n");
scanf ("%d",&num_linhas);
printf("Entre com colunas\n");
scanf ("%d",&num_colunas);
printf("Entre com margem\n");
scanf ("%d",&margem);
/* subproblema 1 */
for (i=0;i<margem;i=i+1)
printf(" ");
for (i=0;i<num_colunas;i=i+1)
printf("A");
printf("\n");
/*subproblema 3 */
for(j=0;j<num_linhas-2;j++) {
/*subproblema 2 */
for (i=0;i<margem;i=i+1)
printf(" ");
printf("A");
for(i=0;i<num_colunas-2;i=i+1)
printf(" ");
printf("A");
printf("\n");
}
/* subproblema 1 */
for (i=0;i<margem;i=i+1)
printf(" ");
for (i=0;i<num_colunas;i=i+1)
printf("A");
printf("\n");
}
2.Construa um programa para desenhar a seguinte figura de forma parametrizável: AAAAAAAAAAAAAAAA AAAAAAAAAAAAAA AAAAAAAAAAAA AAAAAAAAAA AAAAAAAA AAAAAA AAAA AA BB BBBBB BBBBBBBB BBBBBBBBBBB BBBBBBBBBBBBBB BBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB 3.#Estude o programa (referência) abaixo: /* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int iSecret, iGuess;
/* initialize random seed: */
srand ( time(NULL) );
/* generate secret number: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if (iSecret<iGuess)
printf ("The secret number is lower\n");
else {
if (iSecret>iGuess)
printf ("The secret number is higher\n");
}
} while (iSecret!=iGuess);
printf ("Congratulations!\n");
return 0;
}
srand ( time(NULL) ); iSecret = rand() % 10 + 1; 4.Sobre o exercício 3, implemente uma versão usando o comando while(). 5.Elabore um programa que lê um número inteiro e imprime todos os números pares entre 1 e este número. |