Comando For em C
Nessa aula, nós vamos aprender sobre a estrutura de repetição for na linguagem C, e esse for aqui, traduzindo literalmente do inglês para o português, ele pode ser entendido como para.
Se você já estudou, já fez algum algoritmo em portugol lá em Portugal existe essa estrutura aqui, para, e o for, o para, é uma estrutura de repetição.
É muito comum na programação a gente ter que repetir trechos de código; e aí quando a gente precisa repetir trechos de código, normalmente, a gente não escreve esse trecho de código de novo, a gente insere, a gente escreve o trecho de código uma vez só e utiliza uma estrutura de repetição, por exemplo a estrutura for, para repetir, para executar aquele trecho de código várias vezes.
Vamos entender então como funciona essa estrutura.
Olha só, a estrutura de repetição, a estrutura for, é uma estrutura de repetição utilizada quando precisamos repetir um trecho de código, uma quantidade conhecida de vezes.
O que eu quero dizer com isso aqui?
Imagine que eu queira repetir um trecho de código dez vezes; então perceba, eu preciso repetir um trecho de código uma quantidade conhecida de vezes, nesse caso, dez vezes; ou quinze vezes, ou vinte vezes, e aí é muito comum acontecer isso aqui.
Vamos entender então como funciona essa estrutura.
A forma de escrita é essa daqui, temos a palavra reservada for, com um par de parênteses, abrimos chave, fechamos chave, tudo o que tiver aqui dentro vai ser repetido, e aí vai ser repetido quanto?
E aí tem um ponto muito interessante e importante aqui, olha só, nós temos aqui o início, nós temos aqui um teste e nós temos aqui um incremento.
Vamos entender em detalhes o que significa esse início, esse teste e esse incremento.
Temos aqui um outro exemplo: imagine uma situação prática onde nós queremos imprimir os números de um a dez para o computador.
Imagine que eu já imprimiu número um, o número dois e onúmero três; quanto falta para chegar a dez?
O computador sozinho não sabe, ele precisa contar, ou a gente precisa fazer o computador contar para saber quais números ele já imprimiu e quais faltam para imprimir.
E aí, para isso, olha só, a gente pode usar uma estrutura de repetição com o início em um, perceba, eu quero imprimir os números de um a dez; esse cara aqui é o meu início, e esse cara que é o meu fim, então olha só, quem é o meu início?
O i igual a um; quem é o meu fim?
Perceba que a gente tem aqui um test,e i é menor ou igual a dez?
Por que menor ou igual a dez?
Porque eu quero contar de um, que é o nosso início, até dez que é o nosso fim.
Esse i menor ou igual a dez, perceba que ele poderia ser substituído por i menor do que onze, que dá exatamente o mesmo resultado, ok?!?
O i menor ou igual a dez e i menor do que onze, quando for dez da verdadeiro, quando for onze, vai dar falso; igual aqui, quando foi onze vai dar falso.
Então temos aqui o nosso início e temos o nosso fim.
Agora eu quero contar de um até dez; certo!
Como que eu quero contar?
Um, depois dois, depois três depois quatro, …; então nós temos aqui o nosso incremento, (incremento).
E, nesse caso, o incremento de um em um; por que de um em um?
Porque eu quero contar de um em um; então o i começou com um, depois vai para dois, depois vai para três, depois vai para quatro, …; e aqui, dentro do for, dentro da nossa estrutura de repetição, perceba que eu tenho apenas um printf imprimindo, olha que interessante, imprimindo o valor da variável i, que foi declarada aqui em cima; a variável i vai assumir valores de um até dez.
Então, se eu fizer essa impressão, nós teremos aqui os números de um até dez.
Porém, essa estrutura é um ponto comum de muita confusão entre os estudantes, porque tem muitos detalhes aqui, perceba, nós temos condição inicial, nós temos condição de final, alguma condição de parada, nós temos um incremento; então vamos entender em detalhes como que ela funciona, como que ela é executada pelo computador.
Vamos chegar então aqui no próximo (...), e agora vamos entender em detalhes como que é executada essa instrução.
(Ela) é exatamente a mesma; a minha variável inteira i, o i começa em um, é o nosso início, esse aqui é o nosso fim ou a nossa condição de parada; e esse aqui é o nosso incremento; e aqui dentro eu estou imprimindo o valor da nossa variável i.
Agora como que isso aqui funciona?
O que o computador faz primeiro é bastante simples; e aí eu tenho uma colinha aqui para a gente entender.
Esta coluna aqui é a ordem de execução, ou seja, o que é que o computador vai fazer primeiro.
A primeira coisa que ele vai fazer é essa atribuição aqui, a variável i vai receber o valor um, e esta atribuição é feita uma vez só, na primeira vez que a estrutura for executar.
Um, a primeira coisa que ele vai fazer: i recebe um.
A segunda coisa que ele vai fazer, o nosso teste; então depois de fazer isso aí, ele vai testar, um é menor ou igual a dez?
Esse teste aqui ele vai fazer, olha só, i menor ou igual a dez?
Como i acabou de receber um, um é menor ou igual a dez?
Neste caso é verdadeiro.
Como deu um verdadeiro, ele entra e faz o que está dentro, dentro do nosso for; neste caso o printf; ele vai imprimir o valor da variável que, nesse caso, vai ser um.
Feito isso, o que ele vai fazer?
O (quarto) passo; olha só, já fizemos o primeiro, fizemos o segundo, fizemos o terceiro, que é o print, o quarto passo!.
Ele vai agora fazer um incremento, i mais mais, bom se i valia um, se eu incrementar um, para quanto que vai?
Vai para dois; então perceba, o meu i agora mudou de valor, o nosso i vale dois.
Se o nosso i vale dois, ele tem que fazer esse teste de novo para verificar se ainda é verdadeiro, concorda?
Então olha só, é o nosso quinto passo, ele incrementa o i e aí ele testa novamente: é i menor ou igual a dez?
É o teste está aqui, só que o nosso i agora vale dois.
Dois é menor ou igual a dez?
Verdadeiro; então perceba, novamente vai ser verdadeiro, novamente ele vai entrar e vai fazer esse print, só que agora o i vale dois, então ele vai imprimir o número dois.
Fez aqui o passo seis; novamente o que ele vai fazer?
Ele vai fazer o encanamento i mais mais, incrementou o nosso i foi para três, como o nosso i mudou de valor, novamente ele tem de testar; é o nosso passo oito, três é menor ou igual a dez?
Perceba, vai dar verdadeiro de novo, então ele vai imprimir três; fez o nosso print.
Isso aqui vai se repetindo, incrementa, testa printa, incrementa, testa, pergunta, (...), até quando?
Olha só, eu vou colocar uma sequência de pontinhos aqui, incrementou o nosso i foi para dez.
Dez é menor ou igual a dez?
Verdadeiro, ele entra, ele vai imprimir o valor de i, que é dez, imprimiu, ele volta para cá, incrementa, dez mais um vai dar onze, o valor de i mudou,então ele tem que testar de novo.
Onze menor ou igual a de?
- Opa deu falso - Se deu falso, o que ele faz?
Ele para a execução do for, procura essa chave e vai fazer o que está após essa chave, ou seja, o seu programa vai continuar depois da estrutura de repetição.Ela quebrou, ela terminou; é por isso que essa condição é chamada de condição de parada ou condição de fim; ela sempre vai ser testada, toda vez que a nossa variável mudar, em algum momento ela precisa dar falso para você não entrar num loop infinito, olha só, loop infinito, (infinito).
O que é um loop infinito?
Imagine que por algum motivo eu tivesse esquecido esse incremento e tivesse colocado aqui simplesmente a variável i, tivesse esquecido de fazer um incremento i mais mais.
Então, o meu i começa com um, um é menor ou igual a dez?
Verdadeiro, entra, imprime um, então imprimiu um; vêm para cá i,opa não tem incremento, i continua com um, ele vem, testa, um é menor ou igual a dez?
Verdadeiro, imprime um de novo, vêm para cá, i, só i, não tem incremento, um é menor ou igual a dez?
Verdadeiro, ele entra, ele imprime um de novo, … Percebeu o que é um loop infinito?
Um loop infinito é uma repetição infinita, o i vai ficar eternamente em um e essa repetição nunca vai finalizar, nunca vai terminar.
E aí, normalmente, quando isso ocorre o seu programa compila com sucesso, porque não dá erro de compilação, só que ele dá erro na hora da execução, porque vai entrar em loop infinito, o processador vai perceber que o seu computador, que o seu programa entrou em loop infinito e aí ele vai finalizar o seu programa com erro, ou seja, ele vai forçar a parada do seu programa.
Vamos ver esse exemplo aqui funcionando lá na IDE Code Blocks?
Vem comigo!
Eu tenho aqui exatamente aquele exemplo, olha só, na linha cinco eu declarei a variável i, não recebe nenhum valor, na linha sete nós temos a estrutura de repetição for, que termina na linha nove, que é a nossa estrutura para.
Perceba que eu tenho o icomeçando em um, é a nossa condição de início, ponte e virgula, i menor ou igual a dez é o nosso teste ou a nossa condição de parada, ponto e vírgula, i mais mais o nosso incremento, ou seja, essa variável precisa sofrer alguma alteração para que em algum momento ela chega aqui no final.
E dentro aqui do nosso for eu tenho apenas o printf, imprimindo o valor da nossa variável i.
Perceba que eu coloquei uma tabulação, o texto i igual, por cento d saltando uma linha, então eu vou colocar i igual o valor da variável i.
Vamos testar o nosso programa?
Olha só, eu vou compilar e executar; oha que resultado interessante que nós temos aqui; percebeu quanta linha de código eu economizei, se eu quisesse imprimir isso aqui apenas com printf eu teria que escrever isso aqui dez vezes.
E se fosse cem?
Eu teria que fazer o printf cem vezes.
E se fosse mil?
Eu teria que fazer o printf mil vezes.
Agora, basta eu inserir isso tudo dentro de uma repetição.
Se eu colocar aqui por exemplo trinta, eu vou ter agora uma repetição de um até trinta.
Oha só, temos aqui, vou maximizar aqui a tela, tem uma parte sumida aqui em cima, …, pronto!
Perceba que o nosso i foi variando de um em um, um, dois, três, quatro, cinco, …, nove, dez, onze, …, até o número trinta.
Então perceba que a estrutura de repetição for é bastante simples; ela tem a condição inicial, o valor inicial dessa variável contadora, tem a condição de parada e tem o nosso incremento; e dentro dela vai tudo o que precisa ser repetido, o que deve ser repetido.