Mudanças entre as edições de "AULA 7 - Programação 1 - Graduação"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(12 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
==Objetivos==
 
==Objetivos==
  
*O aluno deverá ser capaz de implementar estruturas de repetição em linguagem C.
+
*O aluno será capaz de implementar estruturas de repetição em linguagem C.
 
*Criar fluxogramas ou pseudo-código na forma de estruturas em linguagem C.
 
*Criar fluxogramas ou pseudo-código na forma de estruturas em linguagem C.
 
*Implementar ''loops'' infinitos.
 
*Implementar ''loops'' infinitos.
Linha 73: Linha 73:
 
Vamos ver a correspondência do comando ''while'' com um fluxograma:
 
Vamos ver a correspondência do comando ''while'' com um fluxograma:
  
{| border="1" cellpadding="2"
+
{| border="1" cellpadding="5" cellspacing="0"
!Fluxograma
+
! style="background: #ffdead;" | Fluxograma
!C
+
! style="background: #ffdead;" | C
!Comentário
+
! style="background: #ffdead;" | Comentário
 
|-
 
|-
 
  | |[[imagem:fluxo5.jpg|200px]]
 
  | |[[imagem:fluxo5.jpg|200px]]
Linha 84: Linha 84:
 
   soma=soma+x;
 
   soma=soma+x;
 
   contador = contador + 1;
 
   contador = contador + 1;
}</syntaxhighlight>|| comando ''while()'' aplicado sobre um bloco de instruções. Note que se for uma instrução simples, as chaves podem ser omitidas.
+
}</syntaxhighlight>|| O comando ''while()'' aplicado sobre um bloco de instruções.<br>Note que se for uma instrução simples,<br>as chaves podem ser omitidas.
 
|}
 
|}
  
Linha 91: Linha 91:
 
===Comando ''do while'': controle do ''loop'' no final===
 
===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.
+
;O comando ''do while'' tem a seguinte forma geral
 +
 
 +
::''do {
 +
:::declaração1;
 +
:::declaração2;
 +
::''} while (condição);
 +
 
 +
Nesta variação o comando ''do while()'' permite a repetição de uma ou mais instruções, com controle do ''loop'' no final.<br>
 +
Isto permite que o bloco seja executado pelo menos uma vez.
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
Linha 108: Linha 116:
  
 
    
 
    
{| border="1" cellpadding="2"
+
{| border="1" cellpadding="5" cellspacing="0"
!Fluxograma
+
! style="background: #ffdead;" | Fluxograma
!C
+
! style="background: #ffdead;" | C
!Comentário
+
! style="background: #ffdead;" | Comentário
 
|-
 
|-
 
  | |[[imagem:fluxoDoWhile-Eraldo.jpg|200px]]
 
  | |[[imagem:fluxoDoWhile-Eraldo.jpg|200px]]
Linha 123: Linha 131:
 
         contador++;
 
         contador++;
 
} while(contador<5);
 
} while(contador<5);
</syntaxhighlight>|| Note que instruções ''while'' e ''if'' são tratadas como instruções normais que podem ser aninhadas normalmente em outros comandos.
+
</syntaxhighlight>|| Note que instruções ''while'' e ''if'' são tratadas como instruções normais<br>
 +
que podem ser aninhadas normalmente em outros comandos.
 
|}
 
|}
  
Linha 129: Linha 138:
 
----
 
----
 
O comando ''for()'' permite uma forma mais elaborada de ''loop'', com controle no início do bloco de repetição.
 
O comando ''for()'' permite uma forma mais elaborada de ''loop'', com controle no início do bloco de repetição.
 +
 +
;Sua forma geral é
 +
 +
::''for(inicialização;condição;incremento) declaração;''
 +
 +
;ou
 +
 +
::''for(inicialização;condição;incremento){
 +
:::declaração1;
 +
:::declaração2;
 +
::}''
  
  
Linha 146: Linha 166:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
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''
 
}
 
  
{| border="1" cellpadding="2"
+
{| border="1" cellpadding="5" cellspacing="0"
!Fluxograma
+
! style="background: #ffdead;" | Fluxograma
!C
+
! style="background: #ffdead;" | C
!Comentário
+
! style="background: #ffdead;" | Comentário
 
|-
 
|-
 
  | |[[imagem:FluxogramaComandoFor-Eraldo.jpg|300px]]
 
  | |[[imagem:FluxogramaComandoFor-Eraldo.jpg|300px]]
Linha 168: Linha 179:
 
       printf("Este é o laço 5\n");
 
       printf("Este é o laço 5\n");
 
}
 
}
</syntaxhighlight>|| Observe que a expressão ''i=0'' é executada SEMPRE e uma única VEZ, no início do comando.
+
</syntaxhighlight>|| Observe que a expressão ''i=0'' é executada SEMPRE e uma única VEZ, <br>no início do comando.
A expressão ''i<10'' é o controle do ''loop''. Se FALSA o ''loop'' é encerrado. Ela é executada após a expressão
+
A expressão ''i<10'' é o controle do ''loop''. Se FALSA o ''loop'' é encerrado. <br>Ela é executada após a expressão
de inicialização e, na sequência,  no início de cada ''loop''. A expressão i++ é executada no final de cada ''loop''.
+
de inicialização e, na sequência,  <br>no início de cada ''loop''. <br>A expressão i++ é executada no final de cada ''loop''.
 
|}
 
|}
  
Linha 246: Linha 257:
  
  
;Exemplo 1
+
;Exemplo
  
 
Usando o comando '''for''' aninhado, construa um programa que implemente a figura abaixo. <br>
 
Usando o comando '''for''' aninhado, construa um programa que implemente a figura abaixo. <br>
Linha 274: Linha 285:
 
   for (i=0;i<13;i++) {
 
   for (i=0;i<13;i++) {
 
         for (j=0;j<=i;j++) {
 
         for (j=0;j<=i;j++) {
           printf("*", j);
+
           printf("*");
 
         }
 
         }
 
   printf("\n"); /* deixa uma linha em branco */
 
   printf("\n"); /* deixa uma linha em branco */
Linha 446: Linha 457:
  
 
5.Elabore um programa que lê um número inteiro e imprime todos os números pares entre 1 e este número.-->
 
5.Elabore um programa que lê um número inteiro e imprime todos os números pares entre 1 e este número.-->
 +
 +
 +
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
! style="background: #cdc5bf;" | [[AULA 6 - Programação 1 - Graduação | << ]]
 +
! style="background: #cdc5bf;" | AULA 7
 +
! style="background: #cdc5bf;" | [[AULA 8 - Programação 1 - Graduação | >> ]]
 +
|}

Edição atual tal como às 09h41min de 11 de março de 2015

Objetivos

  • O aluno 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;
}


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:

Fluxograma C Comentário
Fluxo5.jpg
while(contador<5) {
   printf("Entre com x\n");
   scanf("%f",&x);
   soma=soma+x;
   contador = contador + 1;
}
O comando while() aplicado sobre um bloco de instruções.
Note que se for uma instrução simples,
as chaves podem ser omitidas.

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 tem a seguinte forma geral
do {
declaração1;
declaração2;
} while (condição);

Nesta variação 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);
}


Fluxograma C Comentário
FluxoDoWhile-Eraldo.jpg
contador = 0;
do {
        scanf("%d",&x);
        soma=soma+x;
        if (soma>150) 
           y=z+x;
        contador++;
} while(contador<5);
Note que instruções while e if são tratadas como instruções normais

que podem ser aninhadas normalmente em outros comandos.

Comando for()


O comando for() permite uma forma mais elaborada de loop, com controle no início do bloco de repetição.

Sua forma geral é
for(inicialização;condição;incremento) declaração;
ou
for(inicialização;condição;incremento){
declaração1;
declaração2;
}


Estrutura de Repetição
#include <stdio.h>

main()
{
  int i;
  
  for (i=0;i<10;i=i+1)
      printf("i =%d\n",i);
}


Fluxograma C Comentário
FluxogramaComandoFor-Eraldo.jpg
for(i=0; i<10; i++) {
  printf("Laço de número %d\n", i);
  if (i==5)
      printf("Este é o laço 5\n");
}
Observe que a expressão i=0 é executada SEMPRE e uma única VEZ,
no início do comando.

A expressão i<10 é o controle do loop. Se FALSA o loop é encerrado.
Ela é executada após a expressão de inicialização e, na sequência,
no início de cada loop.
A expressão i++ é executada no final de cada loop.

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 */
   }
}


Exemplo

Usando o comando for aninhado, construa um programa que implemente a figura abaixo.

x
xx
xxx
xxxx
xxxxx
xxxxxx
xxxxxxx
xxxxxxxx
xxxxxxxxx
xxxxxxxxxx
xxxxxxxxxxx
xxxxxxxxxxxx
xxxxxxxxxxxxx


#include <stdio.h>
main()
{
  int i,j;
  printf("\n"); /* deixa uma linha em branco */

  for (i=0;i<13;i++) {
        for (j=0;j<=i;j++) {
           printf("*");
        }
  printf("\n"); /* deixa uma linha em branco */
  }

}



<< AULA 7 >>