0% acharam este documento útil (0 voto)
1 visualizações79 páginas

IC Basico

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1/ 79

1.

Conceitos Básicos

Os computadores são como os deuses do antigo


testamento : com muitas regras e sem piedade!
Joseph Campbell.

1.1 O que é a Informatica e a Computação


exatamente ?

É o processamento e a transmissão da informação


(de dados).

O que são Dados?

Se, por exemplo, um professor quer usar um


computador e um programa que faz o cálculo do
valor médio das notas, então, para executar o
programa, ele precisará das notas para encontrar o
valor médio. O conjunto das notas neste caso
corresponde aos dados do problema.
Se o programa considerado é usado para processar
as folhas de pagamento de funcionários de uma
empresa, os dados serão as informações relativas
aos funcionários da empresa: nomes, números de
identidade, CPF, endereço, situação de família etc...
Neste caso, além de números, os dados a tratar
aparecerão também na forma de trechos textuais
(palavras).

Após tratamento dos dados, novos dados serão


produzidos e transmitidos ao usuário ou
armazenados.

Por exemplo no caso de um programa de


pagamentos de funcionários, além de
comunicar o valor dos salários aos
funcionários, os dados processados deverão ser
armazenados em bancos de dados que serão
usado para consulta do histórico dos
funcionários, além de ser transmitidos ao
banco responsável para depositar os salários
nas contas dos funcionários.
Mas como os dados são processados e
transmitidos?

Se um computador pode efetuar diversas tarefas é


porque é possível programá-lo.

Isso significa que é possível armazenar na memória


do computador um programa que o computador
poderá executar.

Um computador possua um repertório limitado de


operações elementares (como a soma de dois
numero, por exemplo).

Um programa corresponde então a um conjunto


finito de instruções (ou comandos) que especificam:

- as operações elementares a serem executadas;

- a maneira de escutar tais operações (o


sequênciamento de certas operações por exemplo)
É interessante notar que para o computador, o
programa constitua também um tipo de informação
(de dados) que poderá ser processado, transformado
é armazenado.

De fato todo novo programa deverá, num primeiro


tempo, ser processado para um outro programa,
chamado compilador ou interpretador, cujo papel
será de transformar o programa fornecido pelo
programador num novo conjunto de dados. Os
novos dados serão chamado de programa
executável.

Um programa executável será então um conjunto


de dados que o computador poderá executar
diretamente, considerando a própria arquitetura
física do computador (os seus componentes
eletrônicos). 😩😩😩

Mas que tipo de dados o computador consegue


entender e processar afinal?
1.2 Codificação da informação

Quando a gente troca informação com outras


pessoas usamos números, letras, gráficos etc...

Por um motivo puramente tecnológico, o


computador só pode manipular a informação
representada na forma binária.

Os componentes eletrônicos atuais que encontramos


nos circuitos eletrônicos são constituídos de
transistores que são tipos de interruptores que
consegue entender somente duas coisas: ou a
corrente elétrica passa, ou ela não passa.

Com isso, podemos transmitir ao computador


somente dois tipos de símbolos que por convenção
são os símbolos: 0 (a corrente não passa) e 1 (a
corrente passa)
Como consequência, toda informação
comunicada à um computador (tanto os
números quanto as palavras de um texto) tem
de ser representada na foram de sequências
finitas de símbolos de tipo : 0 e 1
Na verdade o computador não é o único que
codifica a informação. O homen também codifica
a informação no dia a dia...

Por exemplo:

13
treze
XIII

O homen, devido à sua inteligência vai interpretar


automaticamente a mesma informação.

Para o computador entender a mesma informação,


teremos de escrever:

10011010

❓❓❓
Atualmente, para representar qualquer número,
usamos a base 10, é o que chamamos de sistema
decimal.

Com certeza isso tem a ver com o número de dedos


nas mãos... 👐 👐 👐

Mas como isso funciona na prática?

Para representar qualquer número, temos o que


chamamos de alfabeto de 10 símbolos diferentes.

0 1 2 ... 8 9

Qual codificação executa o cérebro humano


quando ele recebe por exemplo: 9 526 ?

Qual operação, codificação mental efetuamos?


Qual são as Regras para codificar tal informação
baseado nos 10 símbolos do sistema decimal?
Podemos representar 9 562 de várias formas:

9000 + 500 + 60 + 2

(9 x 1000) + (5 x 100) + (6 x 10) + 2

(9 x 10 x 10 x 10) + (5 x 10 x 10) + (6 x 10) + 2

E finalmente:

Ex: representar em base decimal o número:


2 569
1.3 Codigo binário

O computador só tem 2 dedos: 👆+ 👆

Desde o surgimento dos primeiros computadores, a


informação sempre foi representada considerando
"pacotes" de 0 e 1, e o tamanho destes "pacotes" foi
fixado considerando 8 informações binárias.

Algumas definições precisam ser apresentadas


para fixar um certo vocabulário utilisado em
computação:

Uma informação binária (que usa o símbolo 0 ou


1) é chamada de bit

Um conjunto de 8 bits é chamado de byte


Quantos estados podem ser associados a um byte?

Um bit tem 2 estados possíveis: 0 e 1

Dois bits têm 4 estados possíveis: 2x2=4

Três bits têm 8 estados possíveis: 2x2x2=8

Um byte tem então:

possibilidades.

Isso significa que podemos codificar 256 números


diferentes.
Se queremos produzir números maiores que 256,
podemos usar 2 bytes ou mais.

Com dois bytes temos: 256 x 256 = 65 536

e com 3 bytes temos: 16 777 216

Um byte pode ser usado para codificar outras


coisas que números: as letras e os símbolos
principais de pontuação etc.

Para estabelecer uma comunicação de dados


padronizada entre os diversos computadores
existentes, foi criado um sistema padrão de
codificação chamado de codigo ASCII para
American Standard Code for Information
Interchange: cada letra é símbolo possui um
código binário específico!
Como transformar um byte numa notação decimal?

11010011

corresponde em notação decimal à:

211

E o contrário? Por exemplo, dar a representação


binária de 186.

Encontrar as potências sucessivas de 2.


2^7=128 e 186-128=58 : o valor 1 na posição 7

2^6=64 e 64>58 : o valor 0 na posição 6

etc...

Solução: 10111010
1.4 Código Hexadecimal

É um código em base 16. Porque usar a base 16?

O problema é que representar um byte em binário se


torna rapidamente ilegível, em particular para
executar operações matemáticas como a soma,
divisão etc...

Uma alternativa é de considerar que um byte é


composto de dois pacotes de quatro bits.

Com 4 bits podemos codificar 16 números


diferentes: 2 x 2 x 2 x 2 = 16

Precisamos de 16 símbolos para representar um


número na base 16 : 0, 1, 2, ..., 9, A, B, C, D, E, F

Como transformar um número em notação binária


na notação hexadecimal?

Por exemplo, transformar 10011110


Método 1:

Transformar o número binário na base decimal.

Resultado: 158

Depois, encontrar as potências de 16:

Fazendo: 158-144=14

O número em hexadecimal é então: 9E

(14 se escreve E em hexadecimal)


Método 2:

10011110 pode ser decomposto em duas parte:

1001 e 1110

1001 é igual a 9 em decimal (1 x 2^3 + 1 x 2^0)

1110 é igual a 8 + 4 + 2 = 14

A gente obtém 9 em hexadecimal para a parte


esquerda do número e E para a parte direita, o
que dá:

9 E = 9E

A vantagem do hexadecimal é de escrever bytes


com somente dois símbolos.
1.5 Como funciona um computador ?

1.5.1 Sistema Operacional

Para um programa funcionar, precisamos de


componentes eletrônico (Hardware) e também de
uma camada intermediária entre os programas que
serão usados para processar os dados e o Hardware.

Tal camada se trata também de um programa cuja


função principal é de estabelecer a comunicação
entre os programas e o Hardware.

Por exemplo, se o programa receba um número e


precisa de um lugar na memória para armazenar o
número recebido, é a função do sistema operacional
de encontrar um espaço disponível na memória para
armazenar o dado recebido sem entrar em conflito
com os dados já armazenados na memória.
Tal programa intermediário é chamado de sistema
operacional. Alguns exemplos de sistemas
operacionais são: Window 7, Linux, IOS 8, Android
etc...
Cada sistema operacional tem características
próprias. É por isso que um programa é
desenvolvido para um sistema operacional
específico.

Um programa desenvolvido para IOS não


funcionará se reaproveitado diretamente (sem
nenhuma adaptação) para Android.
1.5.2 Arquitetura de um Computador

Existem essencialmente 3 componentes na


arquitetura de um computador.

A) a memória central (chamada também de RAM


- Random Access Memory) onde são
memorizados os programas em execução.
Também são armazenados nesta memória os
dados do problemas (dados recebidos, em
processamentos, finais a serem transmitidos). Por
exemplo um número recebido será armazenado
temporariamente na RAM para ser processado.
Processado por quem?

B) A unidade central (o processador) representa a


parte ativa do computador. É a unidade central
que carrega cada instrução contida na RAM (no
programa) e que executa o comando associado.
Existem essencialmente 2 tipos de comandos:
- os comandos que atuam diretamente dos dados
armazenados na RAM;

- os comandos utilizados para comunicar e arquivar


os dados processados. Tais comandos realizem
essencialmente as operações de troca de informação
entre a memória central é os dispositivos
periféricos.

C) Os dispositivos periféricos designam todo


aparelho capaz de realizar trocas de informações
(dados) com a memória central. Existem 2 tipos
de periféricos:

- os periféricos usados para realizar a


comunicação entre o computador é o usuário
(teclado, monitor, mouse, empresora etc...)

- os periféricos usados para armazenar os dados


(HD, DVD, pen-drive...). Tais periféricos
representam um tipo de extensão da memória
central. São geralmente tipos de memórias
baratas em comparação com a memória central.
Mais um pouco 😱😱😱

Os dados são armazenados na memória central


usando pacotes de bytes.

Cada pacote de byte (tamanho 8, 16, 32, etc.) vai


ser chamado de PALAVRA.

Cada palavra é localizado na memória central


usando a noção de endereço.

A cada endereço na memória corresponde então


um byte.

Se um número foi armazenado na memória


central, precisamos então manter o endereço
onde ele foi armazenado, se não o dado fica
perdido.
A unidade central sabe executar rapidamente um
certo número de operações (soma, divisão,
comparação de dados distintos, comunicação de
dados entre a memória e um periférico específico
etc.)

Para cada instrução de um programa, devemos


especificar:

- a natureza da operação a realizar, representada


por um código binário (código de operação);

- os endereços que correspondem aos dados que


serão tratados pela instrução.

A unidade central executa as instruções na ordem


onde se encontram na memória (em sequência).
Mas existem também instruções específicas que
podem indicar à unidade central de se deslocar
num endereço específico de um comando que não
se encontra na sequência direta do último
comando executado. Isso permite por exemplo
repetir uma sub-sequencia de comandos do
programa.
A memória central é geralmente cara é volátil
(quando a gente desligo o computador, a gente
perde a informação armazenada).

Por outro lado as memórias periféricas são baratas


e permanente (exemplo: pen-drive)

O problema das memória periféricas e que elas são


de acesso lento. É por isso que mais memória
central a máquina tem, mais rápida ela executa os
programas, e mais cara ela fica...
1.5.3 Noção de linguagem

O computador somente entende linguagens


baseadas em código binário: linguagem maquina.

Para não escrever linguagens em código binário,


podemos usar um programa que serve de interprete
entre uma linguagem de alto nível (mais abstrata) e
a linguagem da maquina.

A primeira linguagem que fica num nível acima


da linguagem maquina é a linguagem de
assemblagem.

Considera por exemplo em linguagem maquina


a instrução seguinte:

0101010011011010

que significa: somar (código 0101) os valores


contidos nos endereços (na memória central):

010011 e 011010
Em linguagem de assemblagem a mesma
instrução será representada por:

ADD A, B

Para poder executar tal instrução precisamos então


de um programa capaz de converter ADD em
0101 e A e B pelos endereços binários
correspondentes.

Todos os fabricantes de computadores fornecem o


programa, junto com a maquina, capaz de fazer a
conversão de uma linguagem de tipo
assemblagem em linguagem binaria.

O problema com tal linguagens e que elas são


orientadas na maquina e necessitam de um bom
conhecimento de elementos arquiteturais físicos
dos computadores.
O que precisamos para resolver problemas
complexos em matemática é de uma linguagem
mais abstrata orientada na resolução do problema
e não na forma em que o programa será
executado na maquina.

É assim que nasceram numerosos linguagem de


programação como: Pascal, C, C++, Java,
Prolog, Standard ML etc...

Uma linguagem de programação de alto nível


somente será interessante caso existe um
programa ja pronto e instalado no computador
cujo papel principal será a tradução das
instruções de alto nível das linguagens mais
evoluídas em instruções reconhecidas pela
linguagem de assemblagem (linguagem
maquina).
Existem duas técnicas de tradução em linguagem
maquina:

- a compilação: o programa escrito em linguagem


de alto nível é traduzida inteiramente num outro
programa escrito em linguagem maquina. O
programa assim obtido é então pronto para ser
executado pelo computador.

- a interpretação: as instruções do programa


escrito em linguagem de alto nível são traduzidas
separadamente, na medida em que são
encontradas.

A interpretação permite escrever as linguagem


numa forma mais simples (abstrata) sem ficar
muito preocupado com detalhos técnicos
relativos à forma em que a maquina executará as
instruções encontradas, mas é um processo lento.

Por outro lado, um programa, uma vez


compilado, será executado somente na base de
codigo de maquina. A sua execucao será então
rápida.
1.5.4 O que significa PROGRAMAR ?

Não é porque alguém fala Inglês que sabe escrever


literatura Inglesa.

Também, não é porque uma criança conhece as


notas em musica que sabe escrever sinfonias.

Cuidado então quando se trata de programação


em computação; não é porque a gente conhece as
instruções principais de uma linguagem de
programação que a gente sabe em como usá-las
para resolver um problema em matemática!

A programação consiste então de varias etapas


que são, essencialmente:
- Analise do problema a resolver: antes de tudo
precisamos entender o problema que queremos
resolver, se não será proposta uma resolução não
adaptada ao problema.
- Depois da analise do problema, precisamos
encontrar um método de resolução do problema
(para um mesmo problema existem diversos
métodos de resolução, alguns mais eficientes
que outros em termo de velocidade e memória
ou simplicidade de realização/implementação):
tal método é chamado de ALGORITMO.

- Finalmente, precisamos traduzir o método


encontrado para resolver o problema
(algoritmo de resolução do problema) numa
linguagem que poderá ser compilada ou
interpretada na linguagem da maquina: isso que
será o PROGRAMA.

Mas o que é exatamente um ALGORITMO


❓❓❓
Nome de uma variável em linguagem C:

Os símbolos autorizados para escolher um nome


de variável são:

- as 26 letras maiúsculas e minúsculas do alfabeto


Inglês, os números de 0 a 9, e o caráter
sublinhado "_". Por exemplo, nao se pode usar
"ç" para um nome de variável;

- o primeiro símbolo não pode ser um numero;

- somente os 32 primeiros caráter do nome serão


considerados pelo compilador;

Ex: A A1 n n_1 Endereco_Joao endereco_joao

Contro Ex: 1b Enderco_João numero-1


2.2 Tipo de uma variável

as variáveis são codificadas na memória em


representação binaria.

Dependendo da informação armazenada (numero


inteiro, numero real, nome de rua etc...), o código
binário será diferente assim como a quantidade de
bytes necessária.

Por exemplo, para codificar os números inteiros, um


bit será usado para codificar o sinal (+ ou -),
enquanto que no caso de um numero natural tal bit
não será necessário.

Também os números reais precisarão de mais bytes


do que os números inteiros ja que devem repassar
mais informação relativa ao numero codificado (é
mais difícil produzir um código binário para o
numero Pi do que para um numero natural!).
Declaração do tipo da variável:

Algoritmo:

Variáveis media, x: numéricas

Significa que as variáveis "media" e "x" são de


tipo numéricas. Em linguagem algorítmica não
será obrigatório especificar o tipo de numero
utilizado para codificar a variável.

Variaveis C1, letra, simbolo: caráter

Significa que as variáveis "C1", "letra" e


"simbolo" representarão um símbolo (uma letra
por exemplo).
Linguagem C:

Os 3 principais tipos do C são: int (números


inteiros), float (aproximação dos números reais) e
char (caráter (letras, números, sinal etc.)).

Ex:

int n, p ;
float valor, x1, x2 ;
char resposta ;
int s ;

O ";" em C é usado para finalisar uma instrucao


especifica.

As declarações de tipo das variáveis devem


aparecer no programa antes de iniciar as
primeiras instrusões de processamento das
variaveis, isso a fim de ja estar com a memória
reservada necessária ao bom armazenamento dos
valores das variáveis declaradas no inicio do
programa.
Linguagem C:

Se A e B foram declaradas como variáveis do tipo


int, temos então:

A=1;
B=A+3;
A=3;

Cuidado! Em matemática, quando a gente


escreve:

b = a + 1 significa que a qualquer instante de um


calculo, qualquer que seja o valor de a, então b
sempre vai valer a + 1; isso não é sempre
verdadeiro em Computação!

a=5;
b=a+1;
a = 2;

No final do calculo, b não vale mais a + 1 !


Podemos escrever tambem:
a=a+1; 😝
2.4 Expressões numéricas

Algoritmo:

Uma expressão numérica pode ser produzida


considerando:

- valores constantes de tipo números (1, 4, -5 etc.);


os numerosa decimais usam geralmente em
programação o ponto em vez da virgula (-5.37 por
exemplo);

- variáveis de tipos ja declarados;

- operadores (+, -, *, / etc.);

- parênteses.

As multiplicações e divisões são prioritárias sobre


as somas e as substrações.

As operações são efetuadas da esquerda para a


direita.
Exercício: Avaliar os valores das variáveis A, B, C
e X no final de cada comando.

A←1
B←2
C←3
X←A+B*C
X←A*B+C
X ← A + C/B
X ← C/A + B

A←1
B←2
C←3
X←A+B*C
X ← (A + B) * C
X ← A + C/B
X ← (A + C)/B
Linguagem C:

Os operadores do C foram definidos para valores


numéricos de mesmo tipo: de fato, a gente não
sabe em binário somar um numero codificado
inteiro com um numero codificado em float (a
quantidade de bytes é diferente, as convenções de
sinais podem ser diferentes etc.)

Tipo int:

Codificado geralmente considerando de 2 a 4


bytes (código de 16 bits permite representar
valores de -32768 a 32767)

Ex. de valores constantes: +533 48 -273

Contra exemplo: 1 000 (os espaços não são


autorizados) 😱
Exemplos de expressões inteiras:

n + 3 (claro que n é uma variável de tipo int)

n+p

n-p

n*5

n*p

Cuidado com a divisão!

/ representa a divisão inteira: 11/4 representa o


valor 2

% é chamado de operador modulo e representa o


resta da divisao inteira (divisao euclidiana) :

11 % 4 representa o valor 3 !!!


" - " representa o operador menos mas também o
operador oposto aplicado a um único termo: - a
por exemplo; neste caso ele é chamado de
operador unário.

Prioridades: o operador oposto é o mais


prioritário, vem depois num mesmo nível de
prioridades os operadores *, / e %, e finalmente
no nível mais baixo os operadores + e -

Exercício: considerando que as variáveis n, p e


q são de tipo int e tenham os valores 8, 13 e 29,
respectivamente, avaliar os valores das
expressões seguintes:

n+p/q
n+q/p
(n + q) / p
n+p%q
n+q%p
(n + q) % p
n+p/n+p
(n + p) / (n + p)
Cuidado:

se uma operação que considera dois números


inteiros leva a um valor superior aos limites
estabelecidos pela linguagem, geralmente o
resultado produzido não terá sentido ( os bits
excedentes serão simplesmente ignorados)

No caso de uma divisão por zero, a maioria dos


compiladores vao produzir uma mensagem de erro
e o programa interrompido.

Não esqueçam de pensar sempre considerando os


limites da maquina!
Tipo float: é uma aproximação do números reais.

Ex: 0.6235E11

o símbolo E representa o valor do expoente de 10

O código binário vai traduzir em binário tanto


0.6235 quanto 11

Existem limites na representação dos float ja que


são codificados com um numero max de bytes:
por exemplo, a mantissa (0.6235) não pode ser
pequena ou grande demais.
Exemplo de constantes de tipo float:

Notação decimal:

12.43 -0.38 -.38 4. .27

o ponto é obrigatório para não misturar com o


tipo int .

Notação exponencial:

4.25E4 4.25e+4 42.5E3 54.27E-32

542.7E-33 5427e-34 48e13 48.e13 48.0E13

Operadores: são os mesmos que para o tipo int


na excessão do operador % que não existe
mais.

Cuidado: 5./2. vale 2,5 enquanto que 5/2 vale


2
❗️❗️❗️
Expressão mista :

é possível misturar números de tipos diferente


numa mesma expressão.

int n, p ;
float x ;

podemos escrever: n + x

Como números de tipos diferentes não podem ser


somados, o compilador vai num primeiro fazer a
conversão do tipo int no tipo float para a variável
n, e somente depois somar as duas variáveis.

Se n = 12 e x = 2.3 então n + x vai valer 14,3

Exercício: explicar os mecanismos de


conversão de tipo considerando as prioridades
envolvidas na expressão: n*p + x
Nos exemplos apresentados as conversões
são realizadas durante a execução do
programa.
Exercícios: seja as intrusões seguintes:

int n, p ;
float x ;
n = 10 ;
p=7;
x = 2.5 ;

Dar os tipos das expressões seguintes:

x+n%p
x+n/p
(x + n) / p
5. * n
(n + 1) / n
(n + 1.0) / n
Cuidado: se n é de tipo int e x de tipo float com
valor igual a 3,4, o comando de atribuição
seguinte vai envolver uma conversão de tipo:

n = x + 5.3 ;

Primeiro a gente avalia a expressão a direita que


fornece um valor de tipo float igual a 8,7.

Tal valor será convertido no tipo int para realizar


o comando de atribuição então.

O valor final de n sera entao igual a 8 ❗️❗️❗️

Exercício: quais são os valores atribuídos a x e


y fazendo:

int n1, n2 ;
float x, y ;
n1 = 15 ; n2 = 4 ;
x = n1 / n2 ;
y = n1 / n2 + 0.5
2.5 Expressões de tipo char

Nenhuma operação é possível entre caracteres.


As expressões são formadas exclusivamente de
constantes e variáveis.

O tipo char se torna necessário quando se quer


fazer a leitura de uma palavra ou quando o
programa espera uma resposta do tipo S (Sim)
ou N (Não).

Algoritmo:

Não podemos simplesmente escrever:

C=e

Não sabemos se a variável C recebe o


caracter e ou o lavor contido na variável e !
Para resolver tal ambiguidade todas as
linguagens de programação usam o apostrofo
ou uma notação parecida para destacar o
caracter escolhido.
Exemplo de atribuição de um caracter a uma variável de
tipo char:

variáveis C, X : caracteres
C ← << e >>
X ←C

A instrução seguinte não terá sentido nenhum e será


detectada na fase de compilação:

X←X+1

é por isso que a especificação dos tipos é importante,


porque a priori para o compilador tal e comando não
parece incorreto!

Exercício: sejam 2 variáveis A e B declaradas assim:

variáveis A, B : caracteres

Escrever os comandos que permitem fazer a troca de


conteúdo das variáveis.
Linguagem C:

O tipo char usa um byte para codificar diversos


símbolos.

Considerando as 256 (2^8) combinações possíveis,


são codificadas as letras (minúsculas e maiúsculas)
, os números, os sinais assim como outros
caracteres que aparecem num teclado ("ç" por
exemplo).

Geralmente os 256 caracteres seguem o padrão do


ASCII (American Standard Code for Information
Interchange).

O caracteres utilizados para escrever um programa


em C são um sub-conjunto do ASCII.
Exemplo de atribuição:

char c1, c2 ;
c1 = `s' ;
c2 = c1 ;

Exercício: escrever as instruções para realizar a


permutação de 2 variáveis ca e cb de tipo char .

Observações: os constantes de tipo char são


indicados entre apostrofes.

Ex: `e' `+' `$' `é' `5' etc.

Existem caracteres especiais anotados usando


"\" (antislash)

`\n' : pulo de linha


`\b' : volta de um caractere para traz
`\a' : bip (não pode ser lido mas pode ser
impresso na tela para produzir um são bip)
Alguns caracteres precisam do antislash:

`\\' : simbolo \

`\'' : simbolo '

`\''' : simbolo ''

Em computação não existe a distinção entre


apóstrofo aberto e fechado 😜
2.6 Variáveis não definidas

Algoritmo: observe as seguintes instruções:

variaveis x, y, z : numericas
x←3
z←x+y
y←4

Normalmente a gente deveria detectar um erro na


instrução z ← x + y ja que a variável y não
recebeu valor ainda.

Na pratica não existe uma variável sem valor. No


endereço memória onde se encontra a variável, os
bits necessariamente vão ter valores igual a 0 ou 1.

Certas linguagens vão detectar o problema e outros


vão dar um valor aleatório para y sem que seja
detectado um erro de compilação!
Linguagem C:

Considera as instruções seguintes:

int x, y, z ;
x=3;
z=x+y;
y=4;

A maioria dos compiladores C não vão


detectar um erro e dar um valor aleatório para
z😱

Solução: inicializar os valores das variáveis ja


na declaração de tipo.

int n = 5 ;
float x = 5.25 ;

Ja na etapa de compilação os valores 5 e 5,25


estarão gravado no endereço correspondente
as variáveis.
Exercício: considera as instruções seguintes:

int n ;
float x ;
n=5;
x = 5.25 ;

qual é a diferença na compilação com o código


anterior?

Mais um pouco...

podemos escrever:

int n = 5, p, q = 10, v ;
3. Para comunicar com o programa : as instruções de
impressão e de leitura.

3.1 Instrução de impressão.

O papel da instrução de impressão é de comunicar os


resultados numa forma compreensiva (não em
código binário) processados aos periféricos.

Algoritmo: Exemplo:

variáveis x, y : numéricas
x←1
y←5
escrever x, y

O resultado na tela será do tipo:

1 5

A disposição dos dados dependerá da linguagem de


programação (salto na linha entre cada dado
impresso por exemplo?)
Exercício: escrever um algoritmo que calcula e
imprima o quadrado de 547.
Linguagem C: instrução (função) printf

Tipo int: Exemplo:

int n = 20 ;
printf ("total : %d", n) ;

Resultado:

total : 20

Exemplo:

int n = 10, p = 25 ;
printf ("numero : %d valor : %d", n, p) ;

Resultado:

numero : 10 valor : 25

%d é um código de formato

Existem códigos de formato específicos para cada


tipo de dado.
Exemplo: expressão numérica

int n = 10 , p = 25 ;
printf ("a soma de %d e de %d é %d", n, p, n+p) ;

Resultado:

a soma de 10 e de 25 é 35

Exemplo: printf ("bom dia") ;

Resultado:

bom dia

Mais um pouco...
%d significa que o valor da variável deve ser
transformada do binário para o código decimal,
e o numero obtido deve ser imprimido na
forma de símbolos ASCII que representam o
valor decimal: tudo isso se chama de
formatação.
Tudo que fica dentro dos "..." constitua o que
chamamos de cadeia de caracteres (uma
simples sequencia de símbolos).
Tipo char: Exemplo:

int n = 15 ;
char c = 's' ;
printf ("numero : %d tipo : %c", n ,c) ;

Resultado:

numero : 15 tipo : s

Tipo float: Exemplo:

float x = 1.23456e4 ;
printf("x not exp : %e, x not dec : %f", x, x) ;

Resultado:

x not exp : 1.23456e+04, x not dec : 12345.599609

sempre 6 numero depois da virgula!


Gabarito de impressão: Exemplo:

printf ("%3d", n) ;

n= 20 ^20
n=3 ^^3
n= -5 ^-5
n = 2358 2358
n = -5200 -5200

o 3 depois do % significa uma impressão com no


mínimo 3 caracteres.

printf ("%10f", x) ;

x = 1.2345 ^^1.234500
x = 1.2345E5 123450.000000
Precisão da impressão: Exemplo:

printf ("%10.3f", x) ;

x = 1.2345 ^^^^^1.235
x = 1.2345E3 ^^1234.500
x = 1.2345E7 12345000.000

printf ("%12.4e", x) ;

x = 1.2345 ^^1.2345e+00
x = 123.456789E8 ^^1.2346e+10
Pulo de linha na impressão: usar u caráter \n

Exemplo:

int n = 15 ;
char c ='s' ;
printf ("numero : %d\ntipo : %c", n, c) ;

Resultado:

numero : 15
tipo : s
3.2 Um primeiro programa

Todo programa em C segue a estrutura seguinte:

main()
{
instrução de declaração de variáveis
instruções executáveis
}

main()
{
float valor = 12.85 ;
float quadrado, cubo ;
int inter ;
quadrado = valor * valor ;
cubo = quadrado * valor ;
printf ("o valor %f tem por valor quadrado %f e
por valor cubico %f \n", valor, quadrado, cubo);
inter = cubo ;
printf ("a parte inteira do seu cubo é : %d",
inter);
}
Ex: editar, compilar e executar no CodeBlocks
Cuidado:

em C uma cadeia de caracteres ( "....") e,


particularmente um formato, não pode ser digitado
no editor de texto em 2 linhas:

printf ("numero : %d
tipo : %c", n, c) ;

isso não vai produzir um pulo de linha e um erro


de compilação vai ser detectado!

Com a maioria dos compiladores, será


necessário de iniciar o programa com a linha
seguinte:

#include <stdio.h>

chama uma biblioteca de função; uma função é


um bloco de código pre-compilado; na verdade
printf nao é uma instrução do C, é uma função
❗️ ❗️❗️
Comentários: para tornar os programas mais
compreensivos é importante deixar comentários
explicativos junto com as linhas de código
(inclusive, na pratica, serão vários programadores
que desenvolverão um mesmo programa).

Os comentários devem ser localizados entre os


símbolos /*.....*/ em qualquer lugar do programa.

/* nosso primeiro programa */


main()
{
/********as declarações********/
float valor = 12.85 ;
......

/*********as instruções executáveis *****/


quadrado = valor * valor ;
......
}
Outro exemplo:

float quadrado, /* para o quadrado do valor */


cubo ; /* para o calculo do valor cubico */
Exercício 1: sejam as declarações seguinte:
char cat = 'B' ;
char art = 'S' ;
int qtd = 50 ;

Escrever um programa cujo resultado é o seguinte:

50 artigos S, de categoria B

Qual será o resultado se a variável art foi declarada


da seguinte forma:

char art = '\n' ;


Exercício 2: escrever um programa que contem
a declaração seguinte:

float raio = 5.27e5 ;

e que calcula a circunferência assim como a área


do circulo. O resultado será então o seguinte:
raio : 5.270e+05
circunferência : 3.311e+06
área : 8.725e+11
3.3 Instrução de leitura para estabelecer uma
comunicação homen-maquina

Algoritmo: a instrução de leitura permite


fornecer dados ao programa, em particular
durante a execução do programa. Tal instrução
busca um valor num periférico (teclado por
exemplo) e realiza um comando de atribuição
numa variável ja declarada no programa. A
instrução devera em particular transformar os
caracteres lidos nos periféricos num valor binário
codificado de acordo com o tipo da variável onde
será armazenado o dado lido.
Exemplo:

variáveis val, double: numéricas


ler val
double ← val * 2
escrever <<o dobro de>>, val, <<é>>, double
Exercício: escrever um algoritmo que receba um
numero e escreve o valor quadrado do numero
recebido.

Exercício: Escrever um algoritmo que recebe:


- o preço sem imposto de um produto,
- o numero de artigos comprados,
-o valor do imposto sobre o artigo (em
porcentagem)
e que imprima o preço final da encomenda
incluindo o valor calculado do imposto sobre o
conjunto dos produtos comprados.
Linguagem C: instrução (função) scanf

Tipo int: exemplo:

scanf ("%d", &n) ;

%d é um código de formato: scanf vai ler uma


cadeia de caracteres, fazer uma conversão em
binário para um codigo de tipo inteiro, e salvar o
numero binario obtido no endereço que foi
reservado para a variável n (com o numero de
bytes correspondente).

A forma de entrar o dado no teclado pode ser:

12@
-1234@
+987@
^12@
^^^+987@
Tipo float: exemplo:

scanf ("%e" , &x) ;


scanf ("%f" , &x) ;

o numero fornecido pode ser na forma:

-25@
345@
+654@
-34.56@
2.@
4.0@
3e45@
1.25e-4@
Exemplo de programa:

main()
{
float valor ;
float quadrado, cubo ;
int inteiro ;
printf ("fornecer um valor real : ") ;
scanf ("%e" , &valor) ;
quadrado = valor * valor ;
cubo = quadrado * valor ;
printf ("o valor %f tem o valor quadrado %f e o
cubo %f \n",
valor, quadrado, cubo) ;
inteiro = cubo ;
printf ("o valor inteiro do cubo é : %d",
inteiro) ;
}
Resultado na tela:

dar um numero real : 12.85


o valor 12.850000 tem por valor quadrado
165.122513 e por cubo 2121.824463
a parte inteira do cubo é : 2121
Leitura de 2 valores numericos: exemplo:

int n, p ;
scanf ("%d%d", &n, &p) ;

os dados podem ser fornecidos da seguinte forma:

123^456@
123^^^456@
^^^123^^^^456@

ou

123@
456@

ou

123^^@
^^^456^^^@
Cuidado!

tudo que é digitado vai na memória numa


localização reservada (é um buffer chamado
stdin)

se a gente entre:

15^^^341^^^67@

Após a validação, o scanf utilizará a primeira


parte da resposta: 15^^^341, mas a informação
^^^67@ restará no buffer. Se um novo scanf
aparece em seguida no programa ele vai recuperar
o valor 67!

Uma solução com o sistema operacional window


é usar a instrução (função) : fflush(stdin)
que limpa o buffer dos caracteres restantes.

Com linux usar a função : _fpurge(stdin)


Tipo char: exemplo:

char c1 ;
scanf ("%c" , &c1) ;

Cuidado com a leitura de 2 caracteres:

char c1, c2 ;
scanf ("%c%c", &c1, &c2) ;

se a gente entre ab@, c1 vale a e c2 vale b

se a gente entre a^b@, c1 vale a1 e c2 vale ^ !!!

se a gente entre a@, c1 vale a e c2 vale \n !!!

Para forcar o scanf a não ler os espaços e pulo de


linha, a solução é de deixar um espaço:
Exemplo:

scanf ("%d %c", &n, &c) ;

se a gente entre:

124^r@ então n vale 124 e c vale r

se a gente entre:

124@
g@ então n vale 124 e c vale g

Cuidado para não terminar um formato com um


espaço!

scanf ("%d ", ...);

Neste caso, depois de encontrar um valor


numérico, scanf vai procurar um caracter diferente
de um espaço e do pulo de linha; significa que
após a validação ele continuará a esperar para um
caracter.

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy