Programação Orientada à Procedimentos II Programação Orientada à Procedimentos I Processamento Paralelo Lógica de Programação Introdução à Computação Informática Básica

 

 

Informática Básica
Introdução à Computação
Lógica de Programação
Programação Orientada à Procedimentos I
Programação Orientada à Procedimentos II

Processamento Paralelo

Aula 2

Aula 3

Aula 4

2 - Variáveis

     Variáveis são uma forma organizada e simplificada para referenciar posições de memória do computador onde estão armazenados dados utilizados pelo programa. Desta forma dados compostos, por exemplo, por valores numéricos, caracteres, etc podem ser recuperados por simples referência a nomes definidos pelo programador. Tais nomes entretanto, não podem ser os nomes já utilizados internamente pela linguagem C (palavras reservadas) como as mostradas a seguir:

auto default float register struct volatile
break do for return switch while
case double goto short typedef
char else if signed union
const enum int sizeof unsigned
continue extern long static void

 

2.1 - Declaração e atribuição de valores a Variáveis

     Cada variável tem um tipo que define a quantidade de memória que ela requer, bom como as operações que o programa pode realizar com os dados. No exemplo a seguir são declaradas variáveis do tipo int (números inteiros) e logo em seguida alguns valores são nelas armazenados:

void main (void)
{
  int idade; // Variavel do tipo inteiro que guarda idade
  int peso; // Variavel do tipo inteiro que guarda o peso
  float altura; // Variavel do tipo ponto flutuante guarda altura
  idade = 20; // Atribui o valor 20 para a variavel de idade
  peso = 70; // Atribui o valor 70 para a variavel de peso
  altura = 1,70; // Atribui o valor 1,70 para a altura
}

DICA: Várias variáveis do mesmo tipo podem ser declaradas na mesma linha:

void main(void)
{
  int idade, peso ;
  idade = 20;// Atribui o valor 20 para a variavel de idade
  peso = 70;// Atribui o valor 70 para a variavel de peso
}

DICA: Durante a declaração das variáveis é aconselhável a escolha de nomes que facilitem a compreensão do programa assim como a inserção de algum comentário que indique qual o significado daquela variável, como mostrado no quadro anterior. Caracteres compostos por letras, números e sublinhado são permitidos como integrantes de nomes de variáveis.

DICA: A atribuição de valores pode ser feita durante a própria declaração da variável:

void main(void)
{
  int idade = 20 , peso 70;
}

 

2.3 - Tipos de Variáveis

     A linguagem C suporta quatro diferentes tipos básicos de variáveis:

2.3.1 - Variáveis do Tipo Int

     Armazena valores inteiros no intervalo de -32768 a +32.768. É composta por 2 bytes, sendo um bit reservado para armazenar o sinal.

     Caso se tente atribuir um valor real a uma variável inteira, a parte fracionária é ignorada e a parte inteira é armazenada.

2.3.2 - Variáveis do Tipo Char

Armazena um caractere (código ASCII), ou valores numéricos do intervalo -128 a 127. Ocupa um byte de memória. A atribuição de valores de caracteres deve ser feita utilizando caracteres de aspas simples, da seguinte forma:

char letra = 'A';

 

2.3.4 - Variáveis do Tipo Float

Ocupa quatro bytes de memória dentre os quais 1 bit representa o sinal, 8 bits representam o expoente e os demais, a mantissa. Consegue armazenar valores no intervalo de -3.4E-38 a +3.4E+38.

2.3.5 - Variáveis do Tipo Double

Ocupa 8 bytes de memória (com um bit de sinal). É capaz de armazenar números com até 15 digitos de precisão do intervalo de -1.7E-308 a +1.7E+308.

 

2.4 - Modificadores de Tipo

A linguagem C possui um conjunto de modificadores de tipo que alteram o intervalo de valores que uma variável pode armazenar ou o modo de como o compilador armazena a variável. Para modificar um tipo de variável o modificador deve vir declarado no início da mesma linha da declaração da variável:

void main(void)
{
   unsigned int segundos;
   long int indicadores;
   unsigned char caractere;
}

 

2.4.1 - O modificador de tipo unsigned

Desativa o bit de sinal de modo que este possa ser usado para armazenar valores da variável, causando a duplicação da faixa de valores positivos comportada pela variável. Assim, se uma variável do tipo inteira foi declarada como unsigned ela passa a armazenar valores de 0 (zero) a 65535.

2.4.2 - O modificador de tipo long

Modifica uma variável inteira para usar 32 bits de memória de modo que a faixa de valores por ela suportada é modificada para -2.147.483.648 a +2.147.483.648




3 - Modificadores de Tipo

3.1 - Combinando os Modificadores de tipo unsigned e long

     Nos tópicos anteriores foram mostradas as implicações da utilização em separado dos modificadores de tipo unsigned e long. A utilização simultânea de tais modificadores também é possivel e instrui o compilador a alocar uma região de memória de 32 bits para valores inteiros da faixa de 0 (zero) a 4.292.967.625 como mostrado a seguir:

void main (void)

     {

          unsigned long int valor_muito_grande;

          unsigned long int divida_publica;

     }

 

DICA: Quando manipulando valores grandes não deve ser incluída a vírgula. Salvo se manipulando valores reais (ponto flutuante) onde o símbolo separador é o ponto ".".

void main (void)

     {

          unsigned long int valor_muito_grande ;

          valor muito grande = 4877859999348 ;

     }

 

3.2 - Múltiplas Operações de Atribuição

     O operador de atribuição de valores em C é o símbolo "=", como já visto anteriormente. Em C é possível atribuir o mesmo valor a várias variáveis ao mesmo tempo. Esta atribuição é feita da direita para a esquerda na linha de atribuição. No exemplo a seguir isto é feito. O valor retornado pela função toupper é atribuído primeiramente à variável letra e posteriormente à variável salva_letra.

void main (void)

     {

          char salva_letra , letra ;

          salva_letra = letra = toupper(getchar());

     }

 

3.3 - Atribuição de valores hexadecimais ou octais

     Dependendo da apliação pode ser necessária a atribuição de valores hexadecimais (base 16) ou octais (base 8) à variáveis de programa. No primeiro caso basta preceder o valor com "0x", já para valores octais basta preceder o valor com o dígito 0 (zero), como mostrado a seguir:

void main (void)

     {

          int valor_octal = 0227 ;

          int valor_hexadecimal = 0xFF0 ;

     }

 

3.4 - Extravasamento de valores em variáveis

     Extravasamento é a ultrapassagem dos limítes de valores que uma variável pode suportar, causando a atribuição de valores errôneos e podendo produzir resultados inesperados ao programa. Nestes casos nenhuma mensagem de erro é retornada pelo compilador e a sequência de execução do programa não é interrompida. A atribuição dos valores é feita, apesar de estes não serem os desejados. Uma forma de compreender quais valores são atribuídos em tais circunstâncias é atravéz da análise da representação binária das variáveis, como mostrado a seguir:

      O valor máximo de uma variável do tipo int é 32.767, como visto anteriormente. A representaçaõ binária deste valor é "0111 1111 1111 1111". Desta forma, se o valor 1 for adicionado à variável a faixa de valores permitidos é ultrapassada e o valor resultante será -32.768, que é o valor mínimo para uma variável do tipo int, como mostrado a seguir (lembrando que o valor é negativo porque ao bit mais significativo é atribuído o valor 1):

32.767
0111
1111
1111
1111
+           1
0000
0000
0000
0001
_____________
________________________________________________
-32.768
1000
0000
0000
0000

 

3.5 - Precisão de variáveis

       Do mesmo modo que com variáveis do tipo int, variáveis de ponto flutuante também podem sofrer extravasamento. Entretando, devido a forma em que tais variáveis armazenam valores na memória as consequências são diferentes. Neste caso, a precisão da variável pode ser afetada e se tornar insuficiente.

       Como o número de bits disponíveis para armazenar valores de uma variável de ponto flutuante é fixo o computador é incapaz de representar exatamente tais tipos de valores (com todas as suas casas decimais de precisão). Neste ponto entra a diferença entra a utilização de variáveis de precisão simples e de dupla precisão como mostrado no programa a seguir, onde um mesmo valor é atribuído a uma variável de dupla precisão e a uma variável de simples precisão mas, entretanto, o valor armazenado é diferente.

#include stdio.h

void main (void)

{

  float exato = 0.1234567890987654321;

  double mais_exato = 1234567890987654321;

  printf("Valor de float = %21.19f\n",exato);

  printf("Valor de double = %21.19f\n",mais_exato);

}

     A saída de tela do programa anterior é a seguinte:

valor de float = 0.123456789043281550

valor de double = 0.1234567890987654380

 

3.6 - Atribuição de Caracteres especiais a variáveis do tipo char

      Existem algumas situações onde pode ser necessária a atribuição de caracteres especiais a variáveis do tipo char, como por exemplo símbolos de aspas duplas, etc. Isto pode ser feito com a utilização de códigos de escape utilizando a contra-barra "\"como mostrado a seguir:

char apostrofe = '\'';

char aspas = '\"'

Tabela de códigos de escape utilizados em C:

\a
Aviso sonoro
\b
retrocesso (backspace)
\f
avanço de formulário
\n
nova linha
\r
Retorno de carro
\t
tabulação horizontal
\v
tabulação vertical
\\
contra-barra
\'
apóstrofo
\"
aspas
\?
interrogação
\nnn
valor ASCII octal
\xnnn
valor ASCII hexadecimal



3.7 - Exercícios


1) Elabore um programa em C, o qual imprima na tela as seguintes mensagens:

esta eh a linha um
esta eh a linha dois


2) Escreva um programa que imprima na tela:

um dois três


3) Solicite ao usuário uma variável do tipo inteiro, uma fracionária e uma caracter. Imprimá-as


4) Escreva um programa o qual solicite ao usuário um número inteiro (n). Imprima:

      n*2
      n+2
      n-2
      n/2