Note: Chào mừng bạn đến với Cntt-k3.com. Hãy Đăng ký thành viên hoặc Đăng nhập để có thể tham gia cùng Cntt-k3 nhá !

Você não está conectado. Conecte-se ou registre-se

Introdução à linguagem C - Parte 02

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 Introdução à linguagem C - Parte 02 em Qui Nov 27, 2014 7:14 pm

Luheca

avatar
Membro
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:

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 }
Temos algumas características interessantes a serem discutidas nesse trecho de código. Na estrutura switch, temos a palavra chave switch seguida do nome da variável que será comparada com as constantes. Neste exemplo, supomos que temos uma variável inteira (int) de nome ‘voto’. Em seguida, temos as comparações definidas. Elas são compostas da palavra chave case (que define um caso de teste), seguida da constante com a qual queremos comparar. Esta constante não precisa necessariamente ser um valor inteiro. Pode ser um caractere, um ponto flutuante, etc.

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;
Qual seria, então a diferença entre as duas formas? Na verdade, só fará diferença caso você esteja utilizando o operador de incremento dentro de uma expressão. Se o incremento estiver antes do nome da variável, o incremento será realizado antes do valor da variável ser utilizado na expressão. Se estiver depois, será utilizado depois. Veja o exemplo abaixo:

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
Simples, porém necessita de atenção ao utilizar uma forma ou outra. Fica a dica!

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 }
Como pode ser percebido, a estrutura while na linguagem C é bem mais “resumida” em comparação com a linguagem Pascal. Nela, inserimos a palavra chave while, seguida da condição para a realização da repetição entre parênteses (neste exemplo, a variável ‘contador’ ser menor que 18). Logo após, temos o abre chaves que define o bloco de repetição. Caso o bloco de repetição tiver apenas um comando, pode-se omitir as chaves. Neste nosso exemplo, temos um estrutura condicional que será repetida. Nenhuma novidade, a não ser o ‘operador’ += que eu inseri ali. Este operador nada faz do que somar ao valor atual da variável o que temos após ele. No exemplo, estamos somando 2 ao valor da variável ‘contador’. Bastante objetivo, não? O mesmo pode ser feito com os outro operadores (-=, *=, /= …). Mais uma dica para agilizar a escrita de seus códigos em linguagem 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:

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);
Bom, a sintaxe é bastante simples, e semelhante ao while já demonstrado anteriormente. Iniciamos com a palavra chave do e o bloco de código definido entre chaves. Após o bloco, temos a palavra chave while e a condição para a execução do bloco entre parênteses. O único detalhe é que, após a condição, é necessário o uso de ponto e vírgula. Quando a adaptação do código em Pascal, se vocês perceberem, basta “inverter” a condição. Em Pascal, a condição era “menor que 200″. Em C, ficou “maior ou igual a 200″, ou seja, a faixa de valores contrárias à versão em Pascal.

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 }
Podemos logo de cara dizer que sua estrutura é diferente da linguagem Pascal. Vamos explicar trecho a trecho como ela funciona. Primeiramente, é bom lembrar que em Pascal, a estrutura for incrementava automaticamente a variável definida em seu escopo automaticamente (nesse exemplo acima, a variável ‘indice’). Em C, isso não é regra. Já já veremos por que.

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];
teremos um vetor com o nome vetor com dez posições: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Por isso, em nosso for, colocamos como condicional indice < 10. Quando igualar a 10, ele encerra a execução, não lendo essa posição. Caso tentarmos acessar a posição 10 desse vetor declarado com 10 posições, obteremos um erro de memória. Fica então, mais uma dica pra vocês ;)

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

Ver perfil do usuário

2 Re: Introdução à linguagem C - Parte 02 em Sex Nov 28, 2014 2:33 pm

BrunoFerAr

avatar
Designer
Muito bom exemplo amigo, e muito boa explicação.

Ver perfil do usuário

3 Re: Introdução à linguagem C - Parte 02 em Sex Nov 28, 2014 5:27 pm

Luheca

avatar
Membro
@BrunoFerAr escreveu:Muito bom exemplo amigo, e muito boa explicação.

Obrigado. É sempre bom ajudar :)

Ver perfil do usuário

4 Re: Introdução à linguagem C - Parte 02 em Qua Dez 03, 2014 12:02 pm

Wh0s

avatar
Administrador
Vou ler isso tudo.
"Continue postando mais"

Ver perfil do usuário http://webtech.forumais.com

5 Re: Introdução à linguagem C - Parte 02 em Qua Dez 03, 2014 10:17 pm

Luheca

avatar
Membro
Reset escreveu:Vou ler isso tudo.
"Continue postando mais"

Estou vendo como eu monto a parte 03.


Obrigado por comentar.
Com meus cumprimentos,
Luheca, Staff do WebTech

Ver perfil do usuário

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum

  • criar um fórum | © PunBB | Fórum grátis de ajuda | Fale conosco | Assinalar uma queixa | Criar um fórum