Olá pessoas! Aqui estou eu novamente pra mais um post da nossa série de aprendizado. Como prometido, neste post vamos completar alguns conceitos básicos da programação estruturada que já havíamos estudado na linguagem Pascal, mas dessa vez na linguagem C. No post passado, falamos da estrutura de seleção se (ou if). Outra estrutura de seleção também muito utilizada é o switch (em Pascal, utilizávamos o case). Com o switch, comparamos o conteúdo de uma variável com algumas constantes, e dessa forma selecionamos que trecho de código nossa aplicação irá executar. Abaixo, um trecho de código mostrando essa estrutura em Algoritmo, Pascal e em C. Logo após falaremos sobre os detalhes da sintaxe:
Após a constante, colocamos : indicando que ali se inicia o trecho de código correspondente àquela decisão. Após os dois pontos, podemos ou não abrir chaves. É raro ver quem faz isso, mas fica do gosto de cada um. Alguns preferem por questão de organização, mas nada que um identamento bem feito não resolva. Enfim, usem ou não as chaves para definir este trecho de código (nos exemplos aqui do blog, não utilizarei). No caso deste exemplo nosso, incrementamos as variáveis correspondentes, simulando que cada uma representaria um candidato específico em uma eleição (logo à frente explicarei esta maneira ‘diferente’ de incrementar variáveis em C).
Ao fim do código de cada bloco case, temos a palavra chave break. O programa, ao encontrar o comando break, sai da estrutura case, “pulando” para a próxima linha depois do fecha chaves. “Nossa, mas por que essa complicação??”. A estrutura switch funciona com “labels”. Quando você define uma comparação case, você está na verdade definindo uma “marcação” à estrutura. Ao executar, o programa vai procurar dentro desses “labels” definidos até encontrar uma comparação que satisfaça o conteúdo atual da variável. Os labels são apenas “marcadores”, ou seja, precisamos do break para avisar que ali se encerra o “bloco”. Caso não coloquemos a palavra chave break, o aplicativo continuará sua execução linearmente, passando pelos blocos de código dos outros casos de teste. Em geral, na linguagem C, a palavra break indica que o programa deve sair da execução de uma estrutura (de seleção ou de repetição). Por exemplo, se estivermos dentro de um while e o programa encontrar a palavra break, ele irá pular para a primeira linha após o fecha chaves (ou o encerramento) da estrutura while. Paralelamente ao break, temos a palavra chave continue que faz o contrário: faz o programa voltar à primeira linha da estrutura em que ele se encontra (no exemplo do while, voltaria para a primeira linha do bloco de código definido por ele). Em situações mais propícias, faremos uso dele e exemplificaremos melhor.
Continuando, caso a variável do switch não satisfaça a nenhum dos casos de teste definidos, ele procurará pela palavra chave default que indica o que fazer quando todos os casos de teste falharem. Caso não haja nenhuma ação a ser realizada caso a variável não corresponda a nenhum dos casos de teste, podemos omitir o trecho default ou deixá-lo vazio. Perceba que ele não possui a palavra chave break, pois já é o último “caso” definido, e seguindo sua execução, sairá automaticamente da estrutura switch.
Nesse trecho demonstrado acima, temos uma forma bastante interessante de incrementar variáveis. Ao colocarmos o nome de uma variável seguido de ++, simplesmente pegamos o valor que ela possui e acrescentamos 1. Simples e rápido. Podemos fazer a mesma coisa para decrementarmos, utilizando – (bastante lógico, não?). Vocês podem já ter visto estes incrementos e decrementos antes e depois do nome da variável. Assim:
Bom, já somos capazes de fazer decisões com o nosso programa, utilizando as estruturas if e switch da linguagem C. Para encerrarmos esta segunda parte da introdução à linguagem C, iremos ver como fica a sintaxe das estruturas de repetição. A primeira que iremos ver é a estrutura while. Como pode ser visto nos exemplos a seguir, sua estrutura é bastante semelhante à sua correspondente em Pascal. No exemplo, temos versões em Algoritmo, Pascal e C:
Outra estrutura de repetição utilizada é o do-while. Ele difere-se um pouco do nosso repeat-until do Pascal, pois no do-while ele repete o bloco enquanto a condição é satisfeita, enquanto que no repeat-until repetia-se enquanto a condição não era satisfeita. “Mas como eu vou portar meus códigos de Pascal pra C, se não existem estruturas iguais?”. Basta adaptar a condição. Nos exemplos a seguir, veremos códigos equivalentes em Algoritmo, Pascal e C:
Veremos agora, para encerrar essa segunda parte da Introdução à Linguagem C. O laço de repetição for tem uma estrutura relativamente diferente do que era visto na linguagem Pascal. Vejamos um exemplo prático em Algoritmo, Pascal e C, e em seguida discutiremos as particularidades da sintaxe e estrutura desse laço em C:
Primeiramente, temos a palavra chave for, seguida das regras de suas regras de execução entre parênteses. Se vocês perceberem, temos três subdivisões dentro dos parênteses. A primeira parte (no exemplo acima, indice = 0) indica o que deve ser feito antes de começarmos a inicialização do for. Neste caso, atribuiremos o valor 0 para a variável chamada indice. Podemos realizar mais de uma instrução de inicialização, separadas por vírgula. “Como assim?”. Vamos supor que queremos inicializar duas variáveis, i e j. colocaríamos for (i = 0, j =3; i < 40; i++, j–). Alguma coisa assim.
O segundo “parâmetro” do for é a condição que deve ser satisfeita para que o for continue sendo executada. Antes de executar o bloco de código, ele verifica essa condição. Foi satisfeita? Não? Então executo de novo. Foi satisfeita? Sim? Então eu pulo para a próxima instrução depois do bloco do for. Devemos sempre tomar um certo cuidado com essas condições, não só no for, mas também no while e no do-while, para evitarmos que o nosso programa fique em um looping infinito e nunca termine sua execução. Por isso, atenção ao programar!
A última parte indica o que deverá ser feito após cada execução do for. No exemplo que definimos ali em cima, iremos incrementar em 1 a variável chamada indice (olhem lá o nosso operador “especial”). Como mostrei acima, pode ser definida mais de uma ação neste “parâmetro”, como um incremento e um decremento. Fica ao seu gosto e necessidade.
Após a definição destes “parâmetros”, temos então o bloco de código que será executado. No caso acima, temos uma instrução de leitura para um vetor. Aproveitando esse exemplo falarei sobre uma peculiaridade dos vetores e matrizes na linguagem C.
Atentem, que, ao contrário do Algoritmo e da linguagem Pascal, o nosso vetor em C começa lendo a sua posição 0. Isso mesmo! Na linguagem C, os vetores e matrizes começam em sua posição 0. Ou seja, se caso declararmos um vetor
Então, pessoas, chegamos ao fim dessa segunda parte da nossa Introdução à Linguagem C. No próximo post da série, a terceira e última parte dessa nossa introdução, veremos os registros e as funções e procedimentos na linguagem C, para então continuarmos com esses nossos estudos. Não se espantem caso encontrarem algumas coisas diferentes aqui pelo blog, pois pretendo explorar algumas coisas de Java nos próximos posts também.
- Código:
1 escolha (voto)
2 caso (voto = 1) : candidato1 ← candidato1 + 1;
3 caso (voto = 2) : candidato2 ← candidato2 + 1;
4 caso (voto = 3) : candidato3 ← candidato3 + 1;
5 senão : nulos ← nulo + 1;
6 fim-escolha
- Código:
1 case voto of
2 1 : candidato1 := candidato1 + 1;
3 2 : candidato2 := candidato2 + 1;
4 3 : candidato3 := candidato3 + 1;
5 else nulos := nulos + 1;
6 end;
- Código:
1 switch(voto)
2 {
3 case 1:
4 candidato1++;
5 break;
6 case 2:
7 candidato2++;
8 break;
9 case 3:
10 candidato3++;
11 break;
12 default:
13 nulos++;
14 }
Após a constante, colocamos : indicando que ali se inicia o trecho de código correspondente àquela decisão. Após os dois pontos, podemos ou não abrir chaves. É raro ver quem faz isso, mas fica do gosto de cada um. Alguns preferem por questão de organização, mas nada que um identamento bem feito não resolva. Enfim, usem ou não as chaves para definir este trecho de código (nos exemplos aqui do blog, não utilizarei). No caso deste exemplo nosso, incrementamos as variáveis correspondentes, simulando que cada uma representaria um candidato específico em uma eleição (logo à frente explicarei esta maneira ‘diferente’ de incrementar variáveis em C).
Ao fim do código de cada bloco case, temos a palavra chave break. O programa, ao encontrar o comando break, sai da estrutura case, “pulando” para a próxima linha depois do fecha chaves. “Nossa, mas por que essa complicação??”. A estrutura switch funciona com “labels”. Quando você define uma comparação case, você está na verdade definindo uma “marcação” à estrutura. Ao executar, o programa vai procurar dentro desses “labels” definidos até encontrar uma comparação que satisfaça o conteúdo atual da variável. Os labels são apenas “marcadores”, ou seja, precisamos do break para avisar que ali se encerra o “bloco”. Caso não coloquemos a palavra chave break, o aplicativo continuará sua execução linearmente, passando pelos blocos de código dos outros casos de teste. Em geral, na linguagem C, a palavra break indica que o programa deve sair da execução de uma estrutura (de seleção ou de repetição). Por exemplo, se estivermos dentro de um while e o programa encontrar a palavra break, ele irá pular para a primeira linha após o fecha chaves (ou o encerramento) da estrutura while. Paralelamente ao break, temos a palavra chave continue que faz o contrário: faz o programa voltar à primeira linha da estrutura em que ele se encontra (no exemplo do while, voltaria para a primeira linha do bloco de código definido por ele). Em situações mais propícias, faremos uso dele e exemplificaremos melhor.
Continuando, caso a variável do switch não satisfaça a nenhum dos casos de teste definidos, ele procurará pela palavra chave default que indica o que fazer quando todos os casos de teste falharem. Caso não haja nenhuma ação a ser realizada caso a variável não corresponda a nenhum dos casos de teste, podemos omitir o trecho default ou deixá-lo vazio. Perceba que ele não possui a palavra chave break, pois já é o último “caso” definido, e seguindo sua execução, sairá automaticamente da estrutura switch.
Nesse trecho demonstrado acima, temos uma forma bastante interessante de incrementar variáveis. Ao colocarmos o nome de uma variável seguido de ++, simplesmente pegamos o valor que ela possui e acrescentamos 1. Simples e rápido. Podemos fazer a mesma coisa para decrementarmos, utilizando – (bastante lógico, não?). Vocês podem já ter visto estes incrementos e decrementos antes e depois do nome da variável. Assim:
- Código:
1 variavel++;
2 ++variavel;
3
4 variavel--;
5 --variavel;
- Código:
1 x = 3;
2 y = ++x * 2;
3 // Nesse caso, y terá o valor 8
4
5 x = 3;
6 y = x++ * 2;
7 // Nesse caso, y terá o valor 6
Bom, já somos capazes de fazer decisões com o nosso programa, utilizando as estruturas if e switch da linguagem C. Para encerrarmos esta segunda parte da introdução à linguagem C, iremos ver como fica a sintaxe das estruturas de repetição. A primeira que iremos ver é a estrutura while. Como pode ser visto nos exemplos a seguir, sua estrutura é bastante semelhante à sua correspondente em Pascal. No exemplo, temos versões em Algoritmo, Pascal e C:
- Código:
1 enquanto (contador < 18) faça se contador > 10 então
2 contador ← contador + 1
3 senão
4 contador ← contador + 2
5 fim-se
6 fim-enquanto
- Código:
1 while contador < 18 do begin if contador >; 10 then
2 begin
3 contador := contador + 1;
4 end
5 else
6 begin
7 contador := contador + 2;
8 end;
9 end;
- Código:
1 while (contador < 18)
2 {
3 if (contador > 10)
4 {
5 contador++;
6 }
7 else
8 {
9 contador += 2;
9 }
10 }
Outra estrutura de repetição utilizada é o do-while. Ele difere-se um pouco do nosso repeat-until do Pascal, pois no do-while ele repete o bloco enquanto a condição é satisfeita, enquanto que no repeat-until repetia-se enquanto a condição não era satisfeita. “Mas como eu vou portar meus códigos de Pascal pra C, se não existem estruturas iguais?”. Basta adaptar a condição. Nos exemplos a seguir, veremos códigos equivalentes em Algoritmo, Pascal e C:
- Código:
1 repita
2 x ← x / 4
3 até (x < 200)
- Código:
1 repeat
2 x := x / 4;
3 until (x < 200);
- Código:
1 do
2 {
3 x /= 4;
4 } while (x >= 200);
Veremos agora, para encerrar essa segunda parte da Introdução à Linguagem C. O laço de repetição for tem uma estrutura relativamente diferente do que era visto na linguagem Pascal. Vejamos um exemplo prático em Algoritmo, Pascal e C, e em seguida discutiremos as particularidades da sintaxe e estrutura desse laço em C:
- Código:
1 para indice = 1 até 10 faça
2 início
3 leia(vetor[indice])
4 fim-para
- Código:
1 for indice := 1 to 10 do
2 begin
3 readln(vetor[indice]);
4 end;
- Código:
1 for (indice = 0; indice < 10; indice++)
2 {
3 scanf("%i", &vetor[indice]);
4 }
Primeiramente, temos a palavra chave for, seguida das regras de suas regras de execução entre parênteses. Se vocês perceberem, temos três subdivisões dentro dos parênteses. A primeira parte (no exemplo acima, indice = 0) indica o que deve ser feito antes de começarmos a inicialização do for. Neste caso, atribuiremos o valor 0 para a variável chamada indice. Podemos realizar mais de uma instrução de inicialização, separadas por vírgula. “Como assim?”. Vamos supor que queremos inicializar duas variáveis, i e j. colocaríamos for (i = 0, j =3; i < 40; i++, j–). Alguma coisa assim.
O segundo “parâmetro” do for é a condição que deve ser satisfeita para que o for continue sendo executada. Antes de executar o bloco de código, ele verifica essa condição. Foi satisfeita? Não? Então executo de novo. Foi satisfeita? Sim? Então eu pulo para a próxima instrução depois do bloco do for. Devemos sempre tomar um certo cuidado com essas condições, não só no for, mas também no while e no do-while, para evitarmos que o nosso programa fique em um looping infinito e nunca termine sua execução. Por isso, atenção ao programar!
A última parte indica o que deverá ser feito após cada execução do for. No exemplo que definimos ali em cima, iremos incrementar em 1 a variável chamada indice (olhem lá o nosso operador “especial”). Como mostrei acima, pode ser definida mais de uma ação neste “parâmetro”, como um incremento e um decremento. Fica ao seu gosto e necessidade.
Após a definição destes “parâmetros”, temos então o bloco de código que será executado. No caso acima, temos uma instrução de leitura para um vetor. Aproveitando esse exemplo falarei sobre uma peculiaridade dos vetores e matrizes na linguagem C.
Atentem, que, ao contrário do Algoritmo e da linguagem Pascal, o nosso vetor em C começa lendo a sua posição 0. Isso mesmo! Na linguagem C, os vetores e matrizes começam em sua posição 0. Ou seja, se caso declararmos um vetor
- Código:
1 int vetor[10];
Então, pessoas, chegamos ao fim dessa segunda parte da nossa Introdução à Linguagem C. No próximo post da série, a terceira e última parte dessa nossa introdução, veremos os registros e as funções e procedimentos na linguagem C, para então continuarmos com esses nossos estudos. Não se espantem caso encontrarem algumas coisas diferentes aqui pelo blog, pois pretendo explorar algumas coisas de Java nos próximos posts também.
- Código:
Créditoss: 100% Rafael Toledo