Quaddro + MacMagazine: programando em C — estrutura de repetição FOR

Declaração de um FOR

Prosseguindo em nosso estudo, chegou a hora de trabalhar com estruturas de repetição. A partir de agora conseguiremos montar uma série de códigos bem legais, que vão permitir um estudo mais bacana de vocês.

Pré-requisitos

Time, Hans Zimmer, de “Inception” ♪

Conceitos

Fazendo uma análise do que já estudamos até aqui, temos o trabalho com variáveis, que nos permitem armazenar valores, e temos os condicionais, que permitem criar códigos que possuem mais de um fluxo possível de operação. Porém existe um tipo de situação em que o uso de variáveis e condicionais apenas não resolve tudo.

Em um cenário hipotético, imagine que você precisa criar um aplicativo que exibe uma listagem de frases de autores famosos, mas a quantidade dessas frases pode variar. A cada execução o sistema puxa uma base de dados que contém as frases e, consequentemente, a sua quantidade.

Esse tipo de situação não pode ser resolvida criando diversos campos de texto na tela e tratando com um IF quais seriam exibidos. Você não pode tentar “antecipar” uma quantidade e partir da premissa de que isso “serve na maioria dos casos”. Esse tipo de trabalho (em que uma base dinâmica define tanto a quantidade quanto o conteúdo de itens) possui uma abordagem com nome e sobrenome: automatização de tarefas.

A proposta não é você criar dez campos de texto na interface gráfica e “ajustar” no código quem aparece ou não. O ideal nesse tipo de código é que a própria criação dos elementos seja dinâmica. Até por uma questão lógica: “…se eu terei oito frases, só preciso criar oito campos de texto…”.

É dentro de todo esse cenário que entram os chamados repetidores, estruturas que permitem ao sistema executar um bloco de código repetidas vezes de acordo com um intervalo que nós definimos. Dessa maneira, com base no volume de dados, nós disparamos tanto a criação quanto a exibição dos conteúdos.

Seu uso é amplo e o exemplo da exibição dessas frases é apenas uma das possíveis abordagens. Podemos pensar também em criar painéis (ou grids) para mostrar diversas fotos, onde teríamos linhas e colunas criando uma matriz de elementos. Pense que, se um bloco de código vai rodar mais de uma ou duas vezes, possivelmente você poderia otimizá-lo usando um repetidor.

Essa otimização, além de facilitar o entendimento e a manutenção do código, nos leva inevitavelmente a uma bela redução no número de linhas do script. Pegando novamente o exemplo das frases, se nós tivéssemos que criar 10 campos, posicioná-los e definir seus textos na “unha”, teríamos por baixo mais de 30 linhas de código. Agora se criassemos um repetidor automatizando isso, conseguiríamos um resultado melhor com aproximadamente 5 linhas.

Então não tenham medo de estruturas de repetições. Elas estão lá para lhe ajudar (e muito). Já tive diversos alunos na Quaddro com traumas incríveis de FOR, WHILE e afins, mas após uma sequência bem conduzida de exercícios, eles não só entenderam como realmente gostavam de aplicá-los.

Sendo assim, vamos à prática para deixar tudo isso bem claro e tranquilo.

Prática

Vou começar com um dos repetidores mais úteis e famosos. Para isso vou criar um novo projeto chamado Repetidor_For.

Esta primeira imagem ilustra alguns comentários, conceitos e declarações do FOR:

Declaração de um FOR

Analisando o código nós podemos perceber que um FOR é uma estrutura que usa variáveis e condicionais. Sua declaração é baseada em uma variável que será aumentada até chegar ao limite definido. Nesse caso, a variável i começa com valor 0 e rodará o FOR enquanto seu valor for menor que 3.

Para o entendimento ficar bem tranquilo, vamos bancar o compilador (programa que lê e interpreta o que está no código):

…Ah, a variável i começa valendo 0, ok…

…o código dentro das chaves roda até a variável i valer 3, ok…

…cada vez que o FOR chegar ao fechamento das chaves, a variável i aumenta seu valor em 1, ok…

Obs.: imaginem tudo isso com a voz computadorizada Cellos. 😛

A ideia é bem simples. Tudo o que estiver dentro das chaves do FOR será executado repetidas vezes até que a condição definida seja falsa. Do jeito que está o nosso código, ele deve exibir três vezes a mensagem Repetiu no console (ninguém esqueceu a quebra de linha, né?!).

Por mais simples que esse código seja, ele já dá uma boa ideia dessa rotina de automatização. Aí você pergunta: “Danilo, e se eu quiser exibir um número até dez?” Sem problemas gafanhoto, façamos dois ajustes no nosso código:

FOR i até 10

Perceba que alterei minha condição de limite para menor IGUAL a 10, e também ajustei para que o printf exiba o valor atual da variável i. Essa é uma das formas mais práticas de entender o funcionamento de um repetidor.

Ao rodar esse código você terá 11 exibições da mensagem no console. “Ué, não era para ser 10?” Seria, se em vez de começar a variável com 0 nós começássemos com 1, ou então definir um limite apenas MENOR que 10 e não menor igual como está. Faça alguns testes com isso. 😉

Aproveitando esse momento de abordagem de limites, fica o alerta para que vocês definam com atenção esses valores iniciais e finais. É aí que os novatos com extrema frequência testam coisas que podem travar um código e deixar o processador “chorando” em loop.

Um exemplo pode ser observado no código a seguir. Note que eu defini o valor inicial de 0, falei que ele vai rodar até o limite 3, mas configurei um decremento. Assim a cada execução o valor da variável diminui e, não tendo como chegar ao limite, esse código vai rodar por toda a eternidade.

FOR com loop eterno

A menos que a sua ideia seja esquentar o processador da máquina do chefe ou então ver a bateria do iPhone de um “amigo” secar, tome cuidado com loops infinitos. Já perdi as contas de quantas vezes em sala de aula os alunos testavam FOR e falavam coisas como “ficou lento”, ou então “tem algo estranho…”, rs. A estrutura é fácil, pessoal; é só prestar atenção nos valores definidos.

Uma vez que vocês tenham aprendido e testado os conceitos básicos de FOR, o melhor caminho agora é a prática. Vou adotar aqui uma metodologia que usamos em todos os cursos da Quaddro: desafios. A partir de agora, dependendo do tema dos artigos, vou procurar sempre bolar uns desafios para vocês exercitarem o que aprenderam.

Esse tema de repetição com FOR nos dá uma margem bacana, então vou definir aqui três desafios com níveis de dificuldade gradativos.

» DESAFIO 1: NÚMEROS ÍMPARES

Você deve montar um FOR que exiba todos os números impares de 1 até 20. Existem diversas abordagens possíveis. Vocês podem mesclar tudo o que aprenderam até agora usando variáveis e condicionais, também.

Quero que as mensagens no console fiquem assim:

Desafio de números ímpares

» DESAFIO 2: EXIBIR TABUADA

Você deve criar uma variável definindo um número inteiro entre 1 e 10. Depois, deve exibir a chamada da tabuada desse número. Por fim, deve criar um FOR que exiba a tabuada desse número.

Quero que as mensagens no console fiquem assim:

Desafio de tabuada

» DESAFIO 3: MATRIZ

Você deve criar uma estrutura que exiba uma matriz 10×10 com a contagem de 1 até 100 — isso quer dizer uma exibição de 10 linhas e 10 colunas. Perceba que os valores menores que 10 possuem um algarismo ZERO antes deles. 😉

Quero que as mensagens no console fiquem assim:

Desafio matriz

·   ·   ·

Acho que está bom, né?! Esses serão bons estudos para vocês. Façam com calma e, se quiserem, rabisquem em um papel — ajuda bastante nesse começo. Para os que estiverem realmente começando em programação a coisa não está tão fácil, por isso o termo “desafio”. Mas essa é a premissa: você só grava um conceito quando sofre para entender e fazer sozinho. Balançar a cabeça dizendo que entendeu não quer dizer nada.

Criei um tópico no fórum da Quaddro para debater os códigos dos desafios e ajudar nas dúvidas de vocês. Tá com dúvida ou resolveu o código e quer compartilhar?! Posta lá! 😉

Um abraço e até a próxima.

Posts relacionados