Mudanças entre as edições de "AULA 7 - Programação 1 - Graduação"
(34 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
==Objetivos== | ==Objetivos== | ||
− | *O aluno | + | *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 17: | Linha 17: | ||
− | ===O comando ''while()'':teste da repetição no começo === | + | ===O comando ''while()'': teste da repetição no começo === |
+ | ---- | ||
− | O comando while permite implementar ''loops'' com controle no início: | + | ;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<br> | ||
+ | a declaração é executada e faz-se o teste novamente, e assim por diante.<br> | ||
+ | |||
+ | O comando ''while'' permite implementar ''loops'' com controle no início: | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 34: | Linha 50: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
Variação do exemplo anterior: | Variação do exemplo anterior: | ||
+ | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Linha 52: | Linha 70: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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=" | + | {| border="1" cellpadding="5" cellspacing="0" |
− | + | ! style="background: #ffdead;" | Fluxograma | |
− | + | ! style="background: #ffdead;" | C | |
− | + | ! style="background: #ffdead;" | Comentário | |
|- | |- | ||
| |[[imagem:fluxo5.jpg|200px]] | | |[[imagem:fluxo5.jpg|200px]] | ||
Linha 76: | 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. |
|} | |} | ||
− | + | '''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.<br> | ||
+ | Isto permite que o bloco seja executado pelo menos uma vez. | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 99: | Linha 115: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | {| border="1" cellpadding=" | + | {| border="1" cellpadding="5" cellspacing="0" |
− | + | ! style="background: #ffdead;" | Fluxograma | |
− | + | ! style="background: #ffdead;" | C | |
− | + | ! style="background: #ffdead;" | Comentário | |
|- | |- | ||
| |[[imagem:fluxoDoWhile-Eraldo.jpg|200px]] | | |[[imagem:fluxoDoWhile-Eraldo.jpg|200px]] | ||
Linha 126: | 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. | ||
|} | |} | ||
− | + | ===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; | ||
+ | ::}'' | ||
Linha 149: | Linha 166: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | {| border="1" cellpadding=" | + | {| border="1" cellpadding="5" cellspacing="0" |
− | + | ! style="background: #ffdead;" | Fluxograma | |
− | + | ! style="background: #ffdead;" | C | |
− | + | ! style="background: #ffdead;" | Comentário | |
|- | |- | ||
| |[[imagem:FluxogramaComandoFor-Eraldo.jpg|300px]] | | |[[imagem:FluxogramaComandoFor-Eraldo.jpg|300px]] | ||
Linha 171: | 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''. |
|} | |} | ||
− | + | ===Aninhamento de loops=== | |
− | + | ---- | |
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
Linha 194: | Linha 202: | ||
====Comando ''goto'' ==== | ====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. | 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. | ||
Linha 216: | Linha 224: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | :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 [http://julipedia.meroh.net/2005/08/using-gotos-in-c.html goto]. | Em alguns casos de tratamento de erro pode ser interessante o uso do [http://julipedia.meroh.net/2005/08/using-gotos-in-c.html goto]. | ||
Linha 222: | Linha 230: | ||
Leia um pouco mais sobre o goto [http://en.wikipedia.org/wiki/Goto aqui]. | Leia um pouco mais sobre o goto [http://en.wikipedia.org/wiki/Goto aqui]. | ||
− | + | ===Loop Infinito=== | |
− | + | ---- | |
É possível implementar loops infinitos com qualquer uma das instruções acima. | É possível implementar loops infinitos com qualquer uma das instruções acima. | ||
Linha 238: | Linha 246: | ||
ou com o comando ''while'': | ou com o comando ''while'': | ||
+ | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
main() | main() | ||
Linha 247: | Linha 256: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | + | ;Exemplo | |
− | + | ||
− | + | Usando o comando '''for''' aninhado, construa um programa que implemente a figura abaixo. <br> | |
+ | |||
+ | :x | ||
+ | :xx | ||
+ | :xxx | ||
+ | :xxxx | ||
+ | :xxxxx | ||
+ | :xxxxxx | ||
+ | :xxxxxxx | ||
+ | :xxxxxxxx | ||
+ | :xxxxxxxxx | ||
+ | :xxxxxxxxxx | ||
+ | :xxxxxxxxxxx | ||
+ | :xxxxxxxxxxxx | ||
+ | :xxxxxxxxxxxxx | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #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 */ | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <!-- | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 413: | Linha 456: | ||
4.Sobre o exercício 3, implemente uma versão usando o comando while(). | 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. | + | 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;
- }
- 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 tem a seguinte forma geral
- do {
- declaração1;
- declaração2;
- } while (condição);
- do {
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);
}
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;
- }
- for(inicialização;condição;incremento){
#include <stdio.h>
main()
{
int i;
for (i=0;i<10;i=i+1)
printf("i =%d\n",i);
}
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 | >> |
---|