Teoria

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

Nesse tópico nós iremos conversar um pouquinho sobre dados computacionais. Nós devemos entender o que são dados para podermos criar programas que sejam capazes de manipular de forma correta toda informação disponível para processamento.

Dados

Para entendermos o que são dados, vamos criar um contexto:

Imagine que a sua internet não para de cair e você precisa estudar para a prova de amanhã. Então, você decide ligar para a sua operadora de internet e ao ser atendido se depara com uma voz robotizada pedindo para discar uma das seguintes opções:

  1. Falar com o suporte técnico;
  2. Ver outros planos de internet;
  3. Cancelar o plano de internet atual.

Ainda bem que usamos a plataforma do Responde Aí! e podemos baixar o conteúdo da prova para estudar offline, não é mesmo?

Voltando a ligação, a primeira coisa que vem em nossas cabeças é discar o número 1, pois para nós isso significa falar com um dos técnicos da operadora de internet. No entanto, essa voz robotizada nada mais é do que um programa, que processará o número 1 recebido como um dado de entrada e terá como resultado o redirecionamento da chamada para um técnico (solucionando o seu problema de internet).

Por esse motivo, um dado nada mais é do que aquilo que é fornecido para o programa processar com o objetivo de resolver algum problema.

Tipos de dado

Da mesmo forma que nós classificamos os números em conjuntos numéricos, o computador classifica os seus dados em tipos. Existem três principais tipos de dados (chamados tipos primitivos) na linguagem C, são eles:

  • Inteiro (int);
  • Ponto flutuante (float);
  • Caractere (char).

Os nomes entre parênteses são a forma com que eles são chamados dentro de um código.

Para ficar mais fácil, vamos criar algumas assimilações:

O tipo int é correspondente ao nosso conjunto Z (números inteiros), são exemplos de dados inclusos nesse tipo os números presentes no subconjunto A:

A = 17 ,   90 ,   - 1 ,   - 58 ,   1001 ,   2020 ,   900

O tipo float é correspondente ao nosso conjunto R (números reais), são exemplos de dados inclusos nesse tipo os números presentes no subconjunto B:

B = { 3,14 ; 9,9 ; 2,67581 ; 0,00 ;   - 7,23 }

Já o tipo char é correspondente ao que chamamos de conjunto de caracteres alfanuméricos, que unem letras, números e símbolos especiais. São exemplos de dados inclusos nesse tipo os elementos presentes no subconjunto C:

C = A ,   C ,   @ ,   ? ,   0 ,   8 ,   H ,   % ,   # ,   !

A verdade é que esse último tipo surgiu como uma solução para entendermos aquilo que um computador gera como resultado ao processar um conjunto de dados. Isso porque esse resultado é fornecido por ele apenas em números (que lá no fundo é a única coisa que o computador entende, um monte de 0 e 1).

Talvez você não saiba, mas se esse tipo não existisse, você nunca conseguiria ler esse texto a partir do seu dispositivo. Isso aconteceria, pois tudo o que você conseguiria ver seria números e mais números (que é a maneira com que o computador se comunica).

É por esse motivo que todos os elementos do tipo char também podem ser tratados como como elementos do tipo int (o inverso não ocorre), pois o tipo char funciona como uma tradução de números inteiros em caracteres. Essa tradução é definida por uma tabela chamada ASCII, dá uma olhadinha nessa versão simplificada dela que eu fiz para você:

Nela nós podemos ver a tradução de números do tipo int para caracteres do tipo char. Então, lembre-se de que essa tabela (ASCII) existe e que os elementos do tipo char no fundo são apenas números do tipo int traduzidos para que nós humanos possamos entender de forma mais simples as informações fornecidas pelo computador.

Vale lembrar que os caracteres de números presentes no tipo char são apenas imprimíveis e para o programa não possuem nenhum valor, como por exemplo para fazer contas. Por esse motivo, não podemos substituir o tipo int, que trabalha com números inteiros de valor calculável.

Tamanho de tipos e variações

Nós já falamos um pouco sobre dados e os seus tipos, mas devemos lembrar que tudo isso está contextualizado em um computador.

O que isso quer dizer?

Que todo dado precisa de uma memória para ser armazenado, essa que é disponibilizada em diferentes quantidades dependendo do tipo do dado (aqui tudo é muito bem organizado).

Isso quer dizer que o tipo int é capaz de suportar números no seguinte intervalo: - 2.147.483.648 a 2.147.483.647 .

Mas o que acontece se um número inteiro estiver fora desse intervalo, ele não poderia ser do tipo int?

É um baita número esse, hein!?

Mas voltando a pergunta, sua resposta é não! Nós teríamos que utilizar uma variação do tipo int chamada long long int, que em relação ao tipo int dobraria a capacidade de números.

O mesmo acontece para o tipo float, que possui uma variação chamada double capaz de aumentar a quantidade de números inclusos do tipo primitivo significativamente.

Na prática não é muito comum utilizarmos números tão grandes assim como dados de programas da faculdade, mas em alguns casos isso acaba acontecendo (professor carrasco). Por esse motivo, é importante conhecermos a sua existência.

Agora que já sabemos quais são os principais tipos da linguagem C e suas variações, está na hora de resolvermos alguns exercícios de fixação!

Nos vemos em breve.

Tipos de dado

Tamanho de tipos e variações

Exercícios Resolvidos

Exercício Resolvido #1

Explique o que são e qual a importância dos dados computacionais em um programa.

Passo 1

Dado é tudo aquilo que é fornecido a um programa para que o mesmo processe e atinja um objetivo. Existem três principais tipos de dados, os chamados tipos primitivos, que são:

  • Inteiro (int);
  • Ponto flutuante (float);
  • Caractere (char).

Passo 2

Dados são importantes, pois sem eles não existiria processamento e consequentemente os programas se tornariam inúteis já que não resolveriam nenhum problema.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #2

Existem três principais tipos de dados na linguagem C, os chamados tipos primitivos. Liste cada um deles dando exemplos de dados característicos.

Passo 1

Primeiro, vamos relembrar quais são os tipos primitivos:

  • Inteiro (int);
  • Ponto flutuante (float);
  • Caractere (char).

Passo 2

Agora que já sabemos quais são os principais tipos da linguagem, podemos realizar algumas relações de dados característicos:

  • Inteiro (int): se trata de um tipo computacional muito semelhante ao conjunto Z , são exemplos de dados característicos desse tipo: - 8 ,   9 ,   5 ,   0 ,   - 5000 etc.
  • Ponto flutuante (float): se trata de um tipo computacional muito semelhante ao conjunto R , são exemplos de dados característicos desse tipo: 0 , 00 ;   - 3 , 1416 ;   42 , 2 ;   7 , 89654 ;   - 4000 , 782 etc.
  • Caractere (char): se trata de um tipo computacional que comporta caracteres digitais imprimíveis, são exemplos de dados característicos desse tipo: ? ,   - ,   A ,   c ,   5 etc.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #3

Um amigo com dificuldade na matéria de matemática, mais especificamente em converter números, pediu para que você desenvolvesse um programa que dado um número n gerasse esse mesmo número representado através dos algarismos romanos. Você, como um ótimo amigo e programador, disse que iria desenvolver o programa com o objetivo de auxiliá-lo.

São dados do seu programa:

  • Número n ;
  • Resultado em algarismos romanos.

A sua primeira tarefa no desenvolvimento do programa é definir o tipo ideal dos dados fornecidos.

Passo 1

Em primeiro lugar, devemos entender o tipo do dado que n irá assumir e para isso devemos fazer a seguinte análise:

Como o programa irá transformar um determinado número n nesse mesmo número representado através dos algarismos romanos, esse dado deve assumir apenas valores inteiros, pois devido as limitações encontradas nesse tipo de representação (algarismos romanos) os números reais não podem ser representados.

Dessa forma, o tipo ideal para o dado n é int.

Passo 2

Com o tipo do dado n identificado, podemos definir o tipo do dado resultado em algarismos romanos.

Como os algarismos romanos são representados por caracteres, definir char como o tipo ideal para o dado resultado em algarismos romanos é muito conveniente. Uma vez que nós encontramos no tipo char todos os algarismos romanos.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #4

Um amigo pediu para que você desenvolvesse um programa que calculasse o I.M.C (índice de massa corpórea) e informasse a situação da pessoa analisada, a única informação que ele te deu foi a fórmula para realizar esse cálculo:

I . M . C = P e s o ( A l t u r a ) 2

Com base na fórmula, são dados do seu programa:

  • I.M.C;
  • Peso;
  • Altura.

Além disso, para realizar o informe é necessário saber o sexo da pessoa analisada:

  • Sexo (considere apenas a primeira letra, sendo ‘M’ para masculino e ‘F’ para feminino).

Com base nessas informações você deve, como primeiro passo para iniciar o desenvolvimento do seu programa, realizar uma análise de cada um dos dados fornecidos e encontrar o tipo ideal deles.

Passo 1

Realizando uma análise mais criteriosa, os dados que serão processados (atuantes na fórmula) são: peso e altura. Como ambos não são medidas exatas e podem assumir valores reais, o tipo que melhor caracteriza esses dados é float.

Passo 2

Como agora sabemos que o tipo dos dados que serão processados (peso e altura) é float, podemos definir o tipo de I.M.C, que é o dado que caracteriza o resultado da fórmula. Sendo assim, como a fórmula do I.M.C é calculada a partir de dois dados do tipo float (peso e altura), o resultado gerado também será um número real. Portanto, o tipo do dado I.M.C também é float.

Passo 3

Por fim, só nos resta encontrar o tipo do dado sexo.

Como esse dado só receberá um caractere identificador fica bem mais fácil, né?!

Pois sabemos que pois o caractere ‘M’ representará “masculino” e o caractere ‘F’ “feminino”, ambos presentes no tipo char.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #5

Você está começando a ficar preocupado com a disciplina de geometria analítica e álgebra linear, então resolveu criar um programa que realiza operações com vetores euclidianos de três componentes (X, Y e Z) para auxiliar os seus estudos pelo Responde Aí! O programa deve receber os valores das componentes dos vetores que serão usados nas operações e processar o resultado delas. As seguintes operações serão realizadas com os vetores euclidiano: somar vetor ( 1 ), subtrair vetor ( 2 ), multiplicar por escalar ( 3 ) e imprimir módulo ( 4 ).

Antes de iniciar o desenvolvimento do programa você decidiu fazer uma análise dos dados, isto é, identificar todos os dados necessário para o desenvolvimento e definir os seus respectivos tipos na linguagem C.

Passo 1

Em primeiro lugar, precisamos identificar os dados do programa:

  • Componente X;
  • Componente Y;
  • Componente Z;
  • Opção que define a operação a ser realizada com o vetor.

Passo 2

Com os dados devidamente identificados, podemos começar a verificação dos tipos ideais.

Começando pelas componentes do vetor, por não haver nenhum tipo de restrição, podem assumir valores reais. Por esse motivo, o tipo ideal a ser definido aos dados X, Y e Z é float.

Passo 3

Por fim, basta apenas definirmos o tipo do dado opção.

Como esse dado é responsável pela escolha das operações com o vetor, essas que se restringem aos valores: 1, 2, 3 e 4 (números inteiros), o tipo ideal a ser definido ao dado opção é int.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #6

Uma empresa, visando automatizar o cálculo do salário de seus funcionários, pediu para que você desenvolvesse um programa que dado o número de horas trabalhadas e o valor do salário mínimo vigente, calcule o salário final que determinado funcionário irá receber.

Como sempre, antes de iniciar o desenvolvimento do programa, você decidiu realizar uma análise para identificar todos os dados que são necessários para o desenvolvimento e definir os seus respectivos tipos na linguagem C.

Passo 1

A primeira coisa que devemos fazer é identificar os dados do programa:

  • Horas trabalhadas;
  • Salário mínimo;
  • Salário final de um funcionário.

Passo 2

Com os dados devidamente identificados, podemos iniciar a definição dos tipos.

O dado que representa a quantidade de horas trabalhadas, por ser utilizado para o cálculo de salário, só assumirá valores inteiros, por exemplo: 1 hora trabalhada, 12 horas trabalhas etc. Dessa forma, podemos concluir que o tipo ideal para esse dado é int.

Passo 3

Por fim, nós podemos definir o tipo dos dados salário mínimo e salário final.

Como esses dados representam valores monetários e possuem os centavos em suas contagens, naturalmente assumem valores reais. Portanto, o tipo ideal desses dados é float.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #7

O seu amigo Astheobaldo precisa de ajuda com operações de números complexos, então ele pediu para você ajudá-lo conferindo os resultados das operações por ele realizadas. Você, cansado de operar uma calculadora normal, tem a brilhante ideia de fazer um programa em C que será uma calculadora específica para operações entre números complexos.

Seu programa receberá dois números complexos, sendo que cada número é composto por uma parte real e uma parte imaginária, e depois a opção correspondente a cada operação, essas são representadas pelos números: 1, 2, 3, 4 e 5.

Antes de iniciar o desenvolvimento do programa você deve primeiro identificar todos os dados necessário e definir os seus respectivos tipos na linguagem C.

Passo 1

A primeira coisa que devemos fazer é identificar os dados desse programa:

  • Parte real e imaginária do primeiro número complexo;
  • Parte real e imaginária do segundo número complexo;
  • Opção que define a operação da calculadora de números complexos.

Passo 2

Agora que conhecemos os dados do programa, podemos definir os seus tipos.

Para isso, precisamos relembrar a definição de um número complexo: se trata um número z que pode ser escrito na forma z = x + y i , sendo x e y números reais e i o responsável por denotar a unidade imaginária.

Como a parte real e a parte imaginária de um número complexo são dados do nosso programa e agora sabemos que por definição esses dados serão números reais, o tipo de dados para ambas as partes dos dois números complexos será float.

Passo 3

Por fim, só nos resta decidir o tipo do dado opção.

Como todas as opções da calculadora de números complexos se resumem na escolha de um dos seguintes números: 1, 2, 3, 4 e 5 (número inteiros), o tipo ideal para esse dado é int.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #8

Suponha que você entrou em um grupo de trabalho para desenvolver um programa científico, esse programa será utilizado para realizar cálculos extremamente complexos e longos com alta precisão.

Em todos os cálculos existe uma constante K = 0 , 154826548256 , como o programa realizará todos esses cálculos, K deverá ser um dado pertencente ao mesmo.

No seu primeiro dia de trabalho, você foi analisar o esboço do programa feito pelos cientistas e observou que o tipo estabelecido por eles ao dado K do programa foi int.

Explique o motivo pelo qual esse tipo não é o ideal e mostre a alteração que deverá ser feita nesse esboço. Além disso, quais são os impactos causados nos cálculos científicos pela não realização dessa simples alteração

Passo 1

A primeira coisa que devemos fazer é entender o motivo do porquê o tipo int não é o ideal.

O dado K possui 12 casas decimais, que seriam completamente ignoradas pelo programa caso ele seja executado no tipo int.

Isso acontece, pois o programa iria apenas pegar a parte inteira da constante, que é 0 . Uma vez que o tipo int não reconhece nada além da parte inteira de um número, é por esse motivo que esse tipo se assemelha muito ao conjunto Z .

Dessa forma, o melhor tipo a ser utilizado com a constante K é aquele que reconhece a parte inteira e real de um número.

Sendo assim, a alteração no esboço deveria ser feita no tipo atribuído ao dado K , substituindo o tipo int pelo tipo float, esse que se assemelha muito ao conjunto R .

Passo 2

Agora que já entendemos o motivo pelo o qual a alteração deve ser feita, vamos compreender as consequências da não realização dela.

Basicamente, os cálculos científicos não teriam precisão nenhuma, pois ao invés do dado K ser igual a 0 , 154826548256 ele teria valor 0 para o programa, ou seja, os cálculos resultariam em dados imprecisos e incorretos que afetariam diretamente o trabalho dos cientistas.

Resposta

Ei, a resposta está no passo a passo :)