Você está na página 1de 45

4 - Conceitos Básicos sobre Algoritmos e

Linguagem C

Unesp – Campus de Guaratinguetá

Curso de Programação Computadores


Prof. Aníbal Tavares
Profa. Cassilda Ribeiro

Unesp-Campus de Guaratinguetá

4 - Conceitos Básicos sobre Algoritmos e Linguagem C

4.1 - Variáveis
 Como visto anteriormente, o computador possui uma
área de armazenamento conhecida como memória.

A memória do computador pode ser entendida como


uma seqüência finita de caixinhas, que num dado
momento, guardam algum tipo de informação, como
por exemplo um número, uma letra, uma palavra, uma
frase etc, não importa, basta saber que lá sempre
existe alguma informação.

O computador  precisa saber onde, na memória, o


dado está localizado.

Algoritmos 2
Unesp-Campus de Guaratinguetá

4.1 – Variáveis

 Fisicamente, cada caixinha, ou cada posição de


memória, possui um endereço, ou seja, um número,
que indica onde cada informação está localizada.

 Este número é representado através da notação


hexadecimal, tendo o tamanho de quatro, ou mais
bytes.
A seguir é mostrado um exemplo:

Exemplo 1. 30ff712 31ff502


‘João’ Endereço físico ‘M’
Informação
20ff312
12345
Algoritmos 3

Unesp-Campus de Guaratinguetá

4.1 – Variáveis

 O endereçamento das posições de memória através de números


hexadecimais é perfeitamente compreendido pela máquina, mas
para nós humanos esta tarefa é complicada.

 As linguagens de computador permitem que, ao invés de


trabalhar diretamente com os números hexadecimais, sejam
dados nomes diferentes a cada posição de memória (a cada
caixinha).

 Tais nomes são de livre escolha do usuário.

 Os usuários ficaram livres dos endereços físicos (números


hexadecimais) e passaram a trabalhar com endereços lógicos
(nomes dados pelos próprios usuários para cada posição de
memória).
Algoritmos 4
Unesp-Campus de Guaratinguetá

4.1 – Variáveis

Então o Exemplo 1 anterior, pode ser alterado para:

Aluno sexo
‘João’ Endereço lógico ‘M’
Informação
numero
12345

 Assim, podemos dizer que os endereços lógicos são como


caixinhas, que num dado instante guardam algum tipo de
informação.

 Observe que o conteúdo destas caixinhas não é algo fixo,


permanente. Na verdade, uma caixinha pode conter
diversas informações, isto é, uma informação diferente a
cada momento
Algoritmos 5

Unesp-Campus de Guaratinguetá

4.1 – Variáveis

Então, sempre que for necessário, pode-se alterar o conteúdo


armazenado em cada variável (caixinha).
A figura do Exemplo 1, mostrado a seguir, ilustra esse fato.
Aluno sexo
‘Maria’ Endereço lógico ‘F’
Informação
numero
2358

 No exemplo 1 a caixinha (Endereço Lógico) rotulada de “Aluno”


num primeiro momento continha a informação “João”, mas agora
ela contém a informação “Maria”. O mesmo acontece com as
caixinhas numero e sexo, que antes continham respectivamente
as informações 1234 e “M”, e agora contém as informações
2348 e “F”.
Algoritmos 6
Unesp-Campus de Guaratinguetá

4.1 – Variáveis

 Então a informação armazenada em cada caixinha (endereço


lógico) pode variar. Isto é, podem ocorrer alterações em seu
conteúdo.

 Tendo este conceito em mente, a partir de agora iremos


chamar, as caixinhas ou endereços lógicos, de VARIÁVEIS.

 Desta forma podemos dizer que uma VARIÁVEL é uma


posição de memória, representada por um Nome simbólico
(atribuído pelo usuário), a qual contém, num dado instante, uma
informação.

 Então, uma variável é qualquer quantidade que possa mudar


de valor em diferentes estágios, dentro de um programa. O uso
de variáveis permite a especificação de uma fórmula geral de
cálculo.
Algoritmos 7

Unesp-Campus de Guaratinguetá

4.1 – Variáveis

Vejamos então, um outro exemplo.

Exemplo 2: Seja um triângulo com os seguintes lados: A, B, C.


Do Teorema de Pitágoras temos: A2 = B2 + C2

Para cada conjunto de valores atribuídos a B e C


teremos um valor de A, ou seja:

Caso A B C
1 5 4 3
2 13 5 12
3 10 6 8

Observe então que neste exemplo temos 3 variáveis. A variável A, a variável B


e a variável C. E quando fazemos B=4 e C=3, teremos A=5

Algoritmos 8
Unesp-Campus de Guaratinguetá

4.1.1 - Nomes de Variáveis

4.1.1 - Nomes de Variáveis


Para que as variáveis possam ser identificadas no programa,
elas necessitam ter um nome. Este nome deve ser significativo
tais como: hipotenusa, lado1 e lado2.

OBS: Na fórmula do exemplo 2, foi dado o nome de A para a


hipotenusa, B para o lado 1 e de C para o lado 2 do triângulo
retângulo. Contudo, esses nomes não são suficientemente
significativos para se usar num programa de computador, ao
passo que se for usado o nome hipotenusa, por exemplo,
imediatamente sabe-seque se trata da dimensão de um triangulo
retângulo.
 Regras para dar nomes as variáveis
As regras para dar nomes as variáveis podem variar ligeiramente
dependendo da linguagem de programação ou do sistema de
computador em utilização.
Algoritmos 9

Unesp-Campus de Guaratinguetá

4.1.1 - Nomes de Variáveis

 O nome da variável deve começar sempre com uma letra. Os


outros caracteres podem ser letras, dígitos numéricos e alguns
caracteres especiais.

 Não é permitido o uso de espaços em branco ou de qualquer outro


caractere, que não seja letra ou dígito, na composição do nome da
variável.

 Se utilizar palavras para compor o nome da variável utilize o “_”


underline para separar as palavras.

 em C, apenas os 31 primeiros caracteres são considerados.

 A linguagem C possui palavras-chave que não podem ser


utilizadas como nome de variáveis: int, for, while, etc...
Algoritmos 10
Unesp-Campus de Guaratinguetá

4.1.1 - Nomes de Variáveis

Exemplos de nomes Exemplos de nomes não válidos


válidos
3cubo  começa com número
Lado1
A3 X+Y  o “+” não vale pois confunde
Caixa_preta com o sinal
Caixa preta  não é permitido caractere
Xmetro branco

OBS: A Linguagem C é CASE-SENSITIVA, isto é, ela faz


diferença entre letras maiúscula e minúscula.
Então em C, Lado1 ≠ lado1 ≠ LADO1

As variáveis, assim como os dados, podem ser do tipo


inteiro, real, cadeia e lógica.
Algoritmos 11

Unesp-Campus de Guaratinguetá

4.1.2 - Tipos de Variáveis

4.1.2 Tipos de Variáveis


Considere a fórmula matemática para o cálculo do volume de uma
esfera:
4
V = πR 3
3

Pode-se dizer que esta fórmula contém basicamente duas


coisas:
1) Valores que podem ser classificados como constantes e
variáveis.
 Constantes são os valores que não variam em todas as
aplicações da fórmula. Na fórmula acima os valores 4, 3 e π
são chamados de constantes;
 Variáveis são valores que mudam a cada aplicação da
fórmula. Na fórmula acima o V e o R são variáveis.
Algoritmos 12
Unesp-Campus de Guaratinguetá

4.1.2 - Tipos de Variáveis

2) Operações que devem ser feitas sobre determinados


valores, para a obtenção da solução do problema.

Então para cada valor de R que atribuímos a fórmula,


4
V = πR 3
3
obtemos um valor de volume V.

Deste modo esta fórmula pode ser usada para resolver uma
certa classe de problemas e não apenas um problema
específico.

Algoritmos 13

Unesp-Campus de Guaratinguetá

4.1.2.1 - Tipos de Dados

4.1.2.1- Tipos de Dados

 A Linguagem C exige que no momento em que se for


utilizar variáveis, seja indicado o tipo de informação que a
(caixinha) variável vai conter, isto é, se numa dada posição
de memória será armazenado um número ou uma letra etc.

 Para isto, a linguagem C já tem definido alguns tipos de


dados que deverão ser usados quando da utilização de
variáveis.
 As características de cada um destes tipos será mostrada
gradativamente a medida em que ser for trabalhando com
eles.

Algoritmos 14
Unesp-Campus de Guaratinguetá

4.1.2.1 - Tipos de Dados

Resumindo:

 O tipo de uma variável define os valores que ela pode


assumir e as operações que podem ser realizadas com ela

 Ex:
– variáveis tipo int recebem apenas valores inteiros
– variáveis tipo float armazenam apenas valores reais

A seguir são mostrados alguns dos tipos de variáveis mais


utilizados.

Algoritmos 15

Unesp-Campus de Guaratinguetá

4.1.2.1 - Tipos de Dados

Algoritmo C Descrição

Representa números entre -2147483647 e +2147483647.


Inteiro int Ocupa 4 bytes de memória.

Representa números entre ±3.4x10-38 e ±3.4x10+38.


Real float Ocupa 4 bytes de memória.

Representa números entre ±1.7x10-308 e ±1.7x10+308.


Real double Ocupa 8 bytes de memória.
Representa um dos caracteres da Tabela ASCII.
Caractere char Ocupa 1 byte de memória.
Vetor de caracteres. Cada elemento do vetor
Cadeia char [ ] ocupa 1 byte de memória.
int Qualquer valor diferente de zero é associado ao valor
Lógica
float lógico verdadeiro. Senão é falso.

Algoritmos 16
Unesp-Campus de Guaratinguetá

4.1.3 - Definição de Variáveis

4.1.3 - Definição de Variáveis


 As variáveis são definidas no início do programa, para que o computador
reserve um espaço na memória para a elas.
 No Algoritmo, para definir (declarar) uma ou mais variáveis, utilizaremos a
palavra VARIAVEIS na linha abaixo do nome do algoritmo.
// Programa Exemplo 3
ALGORITMO Exemplo 3
# include <stdio.h>
VARIÁVEIS lado1, lado2:REAL;
# include <stdlib.h>
INICIO
main()
lado1 ← 1.1
{ float lado1, lado2;
lado2 ← 3.2
lado1 = 1.1;
Escreva (“L1 =“ lado1, “L2=”lado2);
lado2= 3.2;
FIM
printf(“L1 = %f L2=%f”,lado1,lado2);
Declaração da variável
lado1 do tipo REAL system(“pause”);
}
Atribuição de valor
Impressão do valor do tipo
REAL (f ⇔ float) Algoritmos 17

Unesp-Campus de Guaratinguetá

4.1.3 - Definição de Variáveis

O Exemplo anterior nos informa que:

i) Foram definidas duas variáveis as quais demos o Nome de


“lado1” e “lado2”, e informamos que estas variáveis, ou
posição de memória, só poderão aceitar dados, que sejam
números reais e que estejam entre ±3.4x10-38 e ±3.4x10+38 ,
pois estas variáveis são do tipo REAL (float na linguagem
C).

ii) Atribuímos à variável “lado1” o valor 1.1. e à variável


“lado2” o valor 3.2.

Algoritmos 18
Unesp-Campus de Guaratinguetá

4.1.3 - Definição de Variáveis

ALGORITMO Exemplo 4 // Programa Exemplo 4


VARIÁVEIS #include <stdio.h>
lado1, lado2, hipo:
hipo: REAL; #include <stdlib.h>
INICIO #include <math.h>
lado1 ← 1.1
main()
lado2 ← 2.2
{
hipo←sqrt(lado1*lado1+lado2*lado2)
float lado1,lado2,hipo;
Escreva(“L3 =”,hipo)
FIM lado1 = 1.1;
lado2 = 2.2;
Biblioteca matemática: fornece
seno, cosseno, exponencial, raiz hipo = sqrt(lado1*lado1 +lado2*lado2);
quadrada (sqrt), etc. printf(“L3 = %f ”,hipo);
system(“pause”);
Cálculo da hipotenusa:
}
c = a2 + b2 Algoritmos 19

Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

4.1.4 Maneiras de dar valores a uma variável

Quando definimos uma variável é natural atribuirmos a ela uma


informação, ou seja dar-lhe um valor.

Existem duas maneiras de se dar valores a uma variável:

1. Ler o valor da variável através de uma operação de entrada,


como por exemplo a leitura de dados.

2. Através da atribuição direta, do valor desejado à variável,


usando o comando de atribuição

Algoritmos 20
Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável


1) Ler o valor da variável através de uma operação de entrada
Em linguagem algorítmica, para fazer a leitura da variável, usamos o
comando: Leia(nome da variável).
Em linguagem C usamos o comando: scanf(“ % ”,&);

ALGORITMO Exemplo 5 // Programa Exemplo 5


VARIÁVEIS // Colocar aqui as Bibliotecas do Exemplo 4 !
LADO1: REAL main()
INICIO {
Escreva (“Digite L1:”); float lado1;
Leia (LADO1) printf(“Digite L1:”);
LADO1 ← sqrt(LADO1) scanf(“ %f ”,&lado1);
Escreva(“raiz de L1 =”,lado1) lado1 = sqrt(lado1);
FIM printf(“sqrt(L1) = %f ”,lado1);
O Tag %f indica a leitura de um
system(“pause”);
valor do tipo float }
Algoritmos 21

Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

ALGORITMO Exemplo 6 // Programa Exemplo 6


VARIÁVEIS <include stdio.h>
A,B,C: INTEIRO;
<include stdlib.h>
INICIO
main() A tag %d indica que o
Escreva(“Digite a e b:”) tipo da variável a ser
{ lida é inteiro
Leia (A,B);
int a, b, c;
C ← A + B;
printf(“Digite a e b:”);
Escreva( A,”+”,B,”=“, C);
scanf(“ %d%d”,&a,&b);
FIM
c = a + b;
Leitura de a e b com apenas um printf(“%d + %d = %d \n”,a, b, c);
scanf.
system(“pause”);
Impressão dos valores de a, b }
e c com um printf
Algoritmos 22
Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

 Observe no exemplo 6 que em linguagem algorítmica, utilizamos o Leia


para se fornecer um valor para a variável e na linguagem C, utilizamos o
comando scanf()

 Leia é um comando que ordena ao computador que vá por exemplo, na


tela buscar o que o usuário digitou.

 Então no exemplo 6, ao se executar o programa aparecerá escrito na tela:


Digite a e b.
Se digitarmos os números, por exemplo 14 e 33, eles serão armazenados
respectivamente nas variáveis a e b.
A seguir, o programa irá calcular c = a + b ⇒ 14+33 e colocará o valor 47 na
caixinha da variável c, e por ultimo escreverá na tela os valores de a, b e c

 O leia é um comando bloqueante, isto é, ele faz com que o computador


fique esperando que o dado lhe seja fornecido (digitado). Se não digitarmos
nada para que o computador possa ler, ele ficará parado para sempre
esperando que o dado seja digitado.
Algoritmos 23

Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

2) Através da atribuição direta, do valor desejado à variável,


usando o comando de atribuição

 Em linguagem algorítmica a operação de atribuição é


indicada pelo símbolo:  .
 Em linguagem C a operação de atribuição é feita pelo sinal
de igual (=)

 Exemplo: A3 no algoritmo


A=3; no programa em C

O exemplo acima indica que o valor 3 foi atribuído à variável A e


que qualquer valor que A pudesse ter antes se perdeu. Ou
seja, a posição de memória (a caixinha) que uma variável
representa, receberá uma informação, a qual será armazenada
no interior desta variável.
Algoritmos 24
Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

Então, seja a seqüência de operações mostradas a seguir:


A
 16
A
 -13
A
0
O valor da variável A após as três operações é igual à última atribuição realizada, ou
seja, 0 (zero).

ALGORITMO Exemplo 7 // Programa Exemplo 7


VARIÁVEIS #include <stdlib.h>
A: INTEIRO #include <stdio.h>
INICIO main()
A ← 16
{
Escreva (“a=“,a)
A ← -13 int a = 16;
Escreva (“a=“,a) printf(“a = %d”,a);
Escreva(“Digite o valor de a”) a = -13;
Leia(A) printf(“a = %d”,a);
Escreva (“a=“,a) printf(“Digite o valor de a”);
FIM scanf(“ %d ”,&a);
printf(“a = %d”,a);
Definição+Atribuição
system(“pause”);
Atribuição }
Leitura Algoritmos 25

Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

 No programa do Exemplo 7, anterior, foi feita a atribuição de


um valor a variável a (a=16), juntamente com a declaração da
variável a. A seguir foi feita a atribuição do valor –13 á variável
a e este valor foi impresso na tela. Depois disso foi pedido que
se digite um valor para variável a, e novamente será impresso
o valor de a, que desta vez será o mesmo que foi digitado.

 Lembre-se então que o valor que fica guardado na caixinha


(memória) é sempre o último.

Algoritmos 26
Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

OBS: em C, uma variável tem que ser declarada no início de


um bloco de código. Assim, o programa a seguir não é válido
em C (embora seja válido em C++).

#include <stdio.h>
#include <stdlib.h
main()
{
int x;
int y;
y = 10;
x = 24;
int k = 20; /* Esta declaracao de variável não é válida, pois não está
sendo feita no início do bloco */
system( “pause” );
}
Algoritmos 27

Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

Exercícios
1) Em quais dos seguintes pares é importante a ordem dos
comandos? Em outras palavras, quando se muda a ordem dos
comandos, os resultados finais se alteram? Suponha X=2 Y=3
Z=4

a) X  Y Resultado X = 3
YZ Y=4

Se invertermos o comando

YZ O resultado é alterado. Resultado Y = 4


XY X=4

Algoritmos 28
Unesp-Campus de Guaratinguetá

4.1.4 Maneiras de dar valores a uma variável

Suponha X=2 Y=3 Z=4


b) Fazendo Invertendo as linhas
XY X=3 ZX Z=2
ZX Z=3 XY X=3
O resultado é alterado.

c) Fazendo Invertendo o comando


XZ X=4 ZX Z=2
XY X=3 XY X=3
O resultado é alterado.

d) Fazendo Invertendo as linhas


ZY Z=3 XY X=3
XY X=3 ZY Z=3
O resultado não é alterado. Algoritmos 29

Unesp-Campus de Guaratinguetá

4.2 - Constantes

4.2 - Constantes

 Constantes são valores fixos que não podem ser modificados pelo
programa

Tipo Exemplos
char  ‘a’ ‘\n’ ‘9’
int  123 1 1000 -23
long int  35000 -45
short int  10 -12 90
unsigned int  1000U 234U 4365U
float  123.45 3.1415e -10
double  123.45 -0.91254

Algoritmos 30
Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída


4.3. Comandos de Entrada e Saída

Os comandos para manusear entrada e saída de dados são muito importantes.


Já vimos anteriormente que o comando leia permite que forneçamos
valores as variáveis. Então, recapitulando temos que:

1. O comando leia ordena ao computador que leia valores dados


atribuindo-os às variáveis indicadas;
2. O comando escreva ordena ao computador que escreva, por exemplo,
na tela mensagens ou valores que estão armazenados na variável.

Em linguagem algorítmica o comando leia será feito como se segue :


Leia ( lista de entrada )

A lista de entrada é composta pelos nomes das variáveis para as quais os


valores serão atribuídos e na mesma ordem em que são encontrados no
fluxo de dados de entrada. Algoritmos 31

Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída

Exemplo 8: Leia ( V1)


O computador pega o valor encontrado na tela e coloca-o na caixinha da
variável V1.

Exemplo 9: Leia ( A, B, C )
Os próximos três valores encontrados na tela serão atribuídos as variáveis
A, B e C, sendo o primeiro a A, o segundo a B e o terceiro a C.

Exemplo 10: Deseja-se ler valores digitados, e estes valores são: -16, 3,
7, 21, 6, 0, 4, 8, 1. Suponha que temos os seguintes comandos Leia:
Leia ( A, B, C )
Leia ( D, E, F, G )
Leia ( X, Y )

Os valores digitados serão atribuídos as variáveis A, B, C,


D, E, F, G, X, Y um por um na ordem escrita.
Algoritmos 32
Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída


Observações:
1. No exemplo anterior os valores estão numa única linha mas
poderiam estar em várias linhas.
2. Qualquer valor que a variável possua anteriormente é destruído.É
mantida a compatibilidade de tipo.
Na linguagem C uma maneira de se ler dados é através do
comando: scanf(“ %”,&nome da variável);

NÃO ESQUECER O ponto e virgula (;) no final da linha de comando, nem o &
antes do nome da variável

Neste comando a tag “%” é para indicar o tipo de dado que vai ser lido.
%d ⇒ é usado para valores numéricos do tipo inteiro
%f ⇒ é usado para valores numéricos do tipo real
%c ⇒ é usado para valores do tipo caractere
%s ⇒ é usado para valores do tipo cadeia de caracteres (string)
Algoritmos 33

Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída

Assim o exemplo 8, em linguagem C, torna-se:

Exemplo 8: scanf( “%d”,&V1 );


Ao executar esta linha de comando, o computador vai pegar o valor
inteiro que foi digitado na tela e vai armazena-lo na caixinha da
variável V1.
OBS: A variável V1 deve ser declarada como sendo do tipo inteira, no
inicio do programa

Exemplo 9: scanf ( “%d%d%d”, &A, &B, &C );


Ao executar esta linha de comando, o computador vai pegar os três
valores inteiros que foram digitado na tela e vai armazená-los na
caixinhas da variáveis A, B, e C, respectivamente nesta ordem.

Algoritmos 34
Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída

Exemplo 10: Deseja-se ler valores digitados, e estes valores


são: -16, 3, 7, 21.2, 6.3, 0.5, 4.2, 8, 1. Suponha que temos os
seguintes comandos de leitura:
scanf ( “%d%d%d”, &A, &B, &C );
scanf ( “%f%f%f%f”, &D, &E, &F ,&G);
scanf ( “%d%d%”, &X, &Y );

Os valores digitados serão atribuídos as variáveis A, B, C,


D, E, F, G, X, Y um por um na ordem escrita.
Observe que as variáveis D,E,F,G são do tipo real e por isso foi
usado %f

Algoritmos 35

Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída

Com o comando de saída Escreva , em linguagem algorítmica, é


possível mostrar o conteúdo de qualquer variável, o resultado de
qualquer expressão ou o valor de qualquer constante.

A forma geral do comando Escreva que será utilizada aqui é:


Escreva ( lista de saída )

Em linguagem C, uma maneira de se fazer o comando escreva é:


printf(“% “, nome da variável).

Aqui também a tag “%” serve para indicar o tipo de dado que vai ser
escrito.
%d ⇒ é usado para valores numéricos do tipo inteiro
%f ⇒ é usado para valores numéricos do tipo real
%c ⇒ é usado para valores do tipo caractere
%s ⇒ é usado para valores do tipo cadeia de caracteres (string)
Algoritmos 36
Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída


Exemplo 11
Nota1 = 73.0;
Nota2 = 65.0;
Nota3 = 94.0;
Nota4 = 87.0;
Media = (Nota1+Nota2+Nota3+Nota4) / 4.0;
printf (“%f “,Media);
O comando prinf vai mostrar o resultado 79.75.
E se desejássemos ver além da média as notas parciais?

printf (“notas individuais =%f, %f, %f, %f\n“, nota1, nota2, nota3,nota4);
printf (“media final=%f”, media);

OBS: Qualquer frase que estiver entre aspas duplas dentro do


comando printf vai aparecer na tela do computador exatamente
como está escrito. E no local onde estiver a tag %, vai aparecer
o valor da variável correspondente a tag.
Algoritmos 37

Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída


Então para o exemplo anterior, o resultado impresso na tela será:
notas individuais= 73.0, 65.5, 94.0, 87.0
media final=79.75

Observe que tem duas linhas impressas. Isto só ocorreu porque foi colocado
um \n, no primeiro printf, antes de fechar a aspa.
Se não tivesse sido colocado esse \n, a impressão iria acontecer tudo na
mesma linha, isto é:
notas individuais= 73.0, 65.5, 94.0, 87.0 media final=79.75

É possível incluir uma expressão como parte da lista de saída.


A expressão é avaliada primeiro e só depois o resultado é impresso.

Exemplo 12: printf (“media final=%f”, (nota1+nota2+ nota3+nota4) / 4.0);

Algoritmos 38
Unesp-Campus de Guaratinguetá

4.3 Comandos de Entrada e Saída

Vejamos alguns exemplos de printf() e o que eles exibem:

printf ("Teste %% %%") ⇒ Teste % %

printf ("%f",40.345) ⇒ 40.345

printf ("Um caractere %c e um inteiro %d",'D',120) ⇒


Um caractere D e um inteiro 120

printf ("%s e um exemplo","Este") ⇒ Este e um exemplo

printf ("%s%d%%","Juros de ",10) ⇒ Juros de 10%

printf ("%s %d = %.2f",“Raiz de ",10,sqrt(10)) ⇒ Raiz de 10=3.16


Algoritmos 39

Unesp-Campus de Guaratinguetá

4.4 - Expressões

Definição: uma Expressão é uma combinação de


variáveis, constantes e operadores. O resultado da
avaliação daquela expressão é o valor que é atribuído
à variável indicada.

Exemplo 13 conta ← 31
4+ 16
24 +38
Expressão

Isto significa que o valor 27 será atribuído


à variável conta.
Algoritmos 40
Unesp-Campus de Guaratinguetá

4.4 - Expressões
 Definição: Uma expressão é uma combinação de variáveis,
constantes e operadores. O resultado de uma expressão é
atribuído à variável indicada.

Exemplo 13 Código C Em termos de memória

#include<stdio.h>
#include<stdlib.h> conta
(1)
main()
conta←3+16+8
{
int conta;
conta = 3 + 16 +8;
printf(“ %d ”,conta); conta
system(“pause”);
(2)
} 27

Algoritmos 41

Unesp-Campus de Guaratinguetá

4.4 - Expressões

Exercício 1: Fazer uma programa em C que converte uma


temperatura dada na escala Celsius para a escala Fahrenheit. A
relação entre os valores TC (em Celsius) e TF (em Fahrenheit)
correspondentes à mesma temperatura é : TF - 32 = 9/5 TC.

#include <stdio.h>
#include <stdlib.h>
main()
{
int celsius, fahrenheit;
printf("Digite a temperatura de hoje: ");
scanf("%d", &celsius);
fahrenheit = 9 * celsius / 5 + 32;
printf("Hoje esta fazendo %d graus Fahrenheit!\n", fahrenheit);
system ("pause");
} Algoritmos 42
Unesp-Campus de Guaratinguetá

4.4 - Expressões
Ao se executar esse programa para uma temperatura de 3 graus
Celsius, o resultado será:

Esse resultado está errado!!!!


O valor correto é: 37.4 graus Fahreinheit.

Isso aconteceu porque as variáveis celsius, fahrenheit, foram


declaradas como int e elas deviam ser declaradas como float.
Durante o cálculo, o programa pegou a parte inteira da divisão
Algoritmos 43

Unesp-Campus de Guaratinguetá

4.4 - Expressões

O programa do Exercício 1 correto é :

#include <stdio.h>
#include <stdlib.h>
main()
{
float celsius, fahrenheit;
printf("Digite a temperatura de hoje: ");
scanf("%f", &celsius);
fahrenheit = 9.0 * celsius / 5 + 32;
printf("Hoje esta fazendo %.2f graus Fahrenheit!\n", fahrenheit);
system ("pause");
}

Algoritmos 44
Unesp-Campus de Guaratinguetá

4.4 - Expressões
Exercício 2: Fazer uma programa em C para calcular o volume da
esfera. Sabe-se que o volume da esfera é dado por: V = 4 π R 3
3

#include <stdio.h>
#include <stdlib.h>
main()
{
const float pi=3.1416;
float raio, volume;
printf("Digite o valor do raio: ");
scanf("%f", &raio);
volume = (4.0 * pi*raio*raio*raio)/3.0;
printf("O volume da espera de raio %f eh:%f\n",raio, volume);
system ("pause");
}
Algoritmos 45

Unesp-Campus de Guaratinguetá

4.4 - Expressões

Exemplo 14 Termo1 ← 13.6 + 7.4 Termo1=21


Termo2 ← 0.7 ∗ 28,6
Resultado ← Termo1/ Termo2 Termo2=20.02

resultado = 1.048951
Exemplo15 Termo1← 13.6 + 7.4
Resultado ← Termo1/ Termo2
Termo2 ← 0.7 ∗ 28.6
O exemplo 15 está errado pois na expressão
Resultado a variável Termo2 ainda não está definida.

Algoritmos 46
Unesp-Campus de Guaratinguetá

4.4 - Expressões
Algoritmo Exemplo 14
Código C Exemplo 14
Declaração de Variáveis
Termo1, Termo2, resultado: real
#include<stdio.h>
Inicio
#include<stdlib.h>
Termo1←13.6+7.4
main()
Termo2←0.7*28.6
{
resultado ←Termo1/Termo2
float Termo1, Termo2, resultado;
Escreva(“Resultado=“,resultado)
Termo1= 13.6+7.4;
Fim
Termo2= 0.7*28.6;
Em termos de memória resultado = Termo1/Termo2;
printf(“ Resultado = %f ”,resultado);
(1) 21.0
system(“pause”);
Termo1 Termo2 resultado
}
21.0 20.02
(2)
Termo1 Termo2 resultado

21.0 20.02 1.04


(3)
Termo1 Termo2 resultado Algoritmos 47

Unesp-Campus de Guaratinguetá

4.4.1 – Avaliação de Expressões


 Problema de Lógica : os componentes de uma expressão só podem
ser avaliados se seus valores já estiverem definidos.

Algoritmo Exemplo 15
Em termos de memória
Variáveis
21.0
Termo1, Termo2, resultado: real (1)
Termo1 Termo2 resultado
Inicio
Termo1←13.6+7.4
21.0
Resultado ← Termo1 / Termo2 (2)
Termo1 Termo2 resultado
Termo2←0.7*28.6
21.0
Escreva(“Resultado=“,resultado) (3)
Termo1 Termo2 resultado
Fim

 Não tem como calcular o valor da variável resultado pois, a variável


Termo2 ainda não recebeu nenhum valor. Isto causa então, um erro
de Lógica
 Você não pode tentar acessar o valor de uma variável antes de lhe
atribuir um valor Algoritmos 48
Unesp-Campus de Guaratinguetá

4.4.1 – Avaliação de Expressões


 Modificando um valor: O valor de uma variável pode ser modificado
tantas vezes quantas for necessário e a última modificação é a que fica
armazenada.

Código C Exemplo 16 Em termos de memória


Exemplo 16: Suponha que as
variáveis X e A sejam inteiras
Inicialmente o valor zero é
#include<stdio.h>
atribuído á variável X e o
Algoritmo Exemplo3 #include<stdlib.h>
valor 3 é atribuído à
main()
Variáveis X, A: inteiro variável A.
{
Inicio int X, A; X A
X←0 X = 0; 0 3
A ←3 A = 3;
A seguir é atribuído à
X ←A+1 X = A+1;
variável X o valor de A + 1,
Escreva(“Valor de X=“,X) printf(“Valor de X= %d ”,X);
e assim o valor de X passa
system(“pause”);
Fim a ser 4
}
X A

Algoritmos 4 3 49

Unesp-Campus de Guaratinguetá

4.4.1 – Avaliação de Expressões


 Modificando um valor: O valor de uma variável pode ser modificado
tantas vezes quantas for necessário e a última modificação é a que fica
armazenada.

Código C Exemplo 17 Em termos de memória


Exemplo 17: Suponha que as
variáveis X e A sejam inteiras  Inicialmente o valor zero é
atribuído á variável X.

#include<stdio.h> X
Algoritmo Exemplo 17 #include<stdlib.h> 0
Variáveis X, A: inteiro main()  A seguir o computador pega
{ o valor de X que está na
Inicio
int X; caixinha, soma uma unidade e
X←0 X = 0; devolve o valor resultante a
X ←X+1 variável X
X = X+1;
Escreva(“Valor de X=“,X) printf(“Valor de X= %d”,X); X
Fim system(“pause”);
1
}
Observe que aqui foi feito um
incremento no valor da variável
X
Algoritmos 50
Unesp-Campus de Guaratinguetá

4.4.1 – Avaliação de Expressões


Do mesmo modo que o valor de uma variável pode ser incrementado, ele
também pode ser decrementado. O Exemplo 6 a seguir nos mostra isso.

Exemplo 18: Suponha que as  Inicialmente foram


Código C Exemplo 18
variáveis X e A sejam atribuídos os valores: 1 a
inteiras variável B e 10 à variável Y.
#include<stdio.h>
B Y
#include<stdlib.h>
Algoritmo Exemplo 18 main() 1 10
Variáveis Y, B: inteiro {
 A seguir o computador
int B, Y;
Inicio pega o valor de B que está na
B= 1;
B← 1 caixinha, soma uma unidade e
Y= 10; devolve o valor resultante a
Y ←10
B = B+1; variável B, depois ele pega
B ←B+1 Y= Y-1 o0 valor de Y que está na
Y ← Y -1 printf(“Valor de Y= %d ”,Y); caixinha, subtrai um e devolve
Escreva(“Valor de Y=“,Y) printf(“Valor de B= %d ”,B); o valor resultante a caixinha
Escreva(“Valor de B=“,B) system(“pause”); B Y
Fim } 2 9

Algoritmos 51

Unesp-Campus de Guaratinguetá

4.4.1 – Avaliação de Expressões


 Linguagem C: Na linguagem C existem 3 formas de se realizar o
incremento/decremento de uma variável.

Em linguagem algorítmica Em linguagem C

x ← x + 1; x = x + 1; x++; ++x;
 Cuidado: As operações são equivalentes quando aparecem
isoladas, mas produzem efeitos diversos quando presentes em
expressões.Veja os exemplos abaixo:

1) y = x++; → Nesta expressão primeiro é atribuído o valor de X à variável Y,


depois o valor de X é incrementado de 1. Se por exemplo o valor
inicial de X for 1, ao final da atribuição os valores Y=1 e X=2
2) y = ++x; →Nesta expressão primeiro o valor de X é incrementado de 1 depois o
valor de X é atribuído a variável Y. Se por exemplo o valor inicial
de X for 1, ao final da atribuição os valores serão Y=2 e X=2
Algoritmos 52
Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


 Operadores: quando uma expressão possui mais de um tipo de
operação é necessário determinar qual é a prioridade na avaliação
destas.

Exemplo 19: Seja a expressão: x ← 3+6 * 13.


Qual será o valor resultante de x ?
Podemos ter por, exemplo, os dois casos a seguir:

Caso 1 Caso 2
x ←(3 + 6)*13 x ←3 + (6*13)

78
9

117 81
Algoritmos 53

Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


 As operações para avaliação de uma dada expressão obedecem à uma
regra de prioridade fornecida na Tabela abaixo.

Classe Operador Significado


Exponenciação: é aplicada da
1 ↑ esquerda para a direita.
Menos e mais unários: são aplicados da
2 -,+ esquerda para a direita.
Multiplicação e divisão são aplicadas da
3 *,/ esquerda para a direita.
Adição e subtração são aplicadas da
4 +,- esquerda para a direita.

Algoritmos 54
Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


 Prioridade: se operadores de mesma classe aparecerem mais de uma
vez em uma expressão realize as avaliações da esquerda para a direita.

Exemplo 20: Seja a expressão x ←8+7*3+4*5. Qual será o


valor de X ?
x←8+7*3+4*5
1 2

8 + 21 + 20
3

29 + 20
4

49
Algoritmos 55

Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


 Prioridade: o uso de parênteses serve para modificar as prioridades na
avaliação dos operadores em uma expressão.

Exemplo 21: Para esta expressão x ←(8+7)*(3+4)*5. Qual será


o valor de X?

x ← (8 + 7) * (3 + 4) * 5
1 2

15 * 7 * 5
3

105 * 5
4

525 Algoritmos 56
Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


Exemplo 22 Programa em C
x ←(3*(6+2))*8 #include <stdio.h>
#include <stdlib.h>
// Programa principal
(3 * (6 + 2)) * 8
main()
1
{
int X, Y;
(3 * 8) * 8 X = (6+2);
printf(“ X = %d ”,X);
2
X = 3*X;
printf(“ X = %d ”,X);
24 * 8 X = X*8;
printf(“ X = %d ”,X);
3 Y = (3*(6+2))*8;
printf(“ Y = %d ”,Y);
192 system(“pause”);
} Algoritmos 57

Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


Exemplo 23 Programa em C

x ←2 ↑3 ↑2 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
2 ↑ 3 ↑ 2
1 main()
{
int X, Y;
2 ↑ 9 X = pow(3,2); printf(“ X = %d ”,X);
X = pow(2,X); printf(“ X = %d ”,X);
2 Y = pow(2,pow(3,2));
printf(“ Y = %d ”,Y);
system(“pause”);
512 = 232 }

Algoritmos 58
Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


Exemplo 24 Programa em C

x ← -3 * 7 + 2 ↑ 3 / 4 -6 // Incluindo a biblioteca math.h !


#include <stdio.h>
-3 * 7 + 2 ↑ 3 / 4 - 6 #include <stdlib.h>
1
#include <math.h>

-3 * 7 + 8 / 4 -6 // Programa Principal que usa pow.


2 main()
{

-21 + 8 / 4 -6 float X;
3 X = -3*7+pow(2,3)/4-6;
printf(“ X = %f ”,X);
-21 + 2 -6 system(“pause”);
4 5
}
-25 Algoritmos 59

Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


 Alternativa: a linguagem C permite outra forma de representar
as operações aritméticas entre dois números x e y.

Algoritmo C operação 1 C operação 2


x←x+y x = x + y; x += y;
x←x-y x = x - y; x -= y;
x←x*y x = x * y; x *= y;
x←x/y x = x / y; x /= y;
x←x%y x = x % y; x %= y;
Resto da divisão inteira
(x e y tem que ser inteiros)!
Algoritmos 60
Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações

Exercício 3: Representar as frações em expressões.

12 − 2 −2 1
(12-2)/(4-3) * (-2/3)*(1/4)
4−3 3 4
Exercício 3: Calcular o valor final de x, com variáveis REAIS.

A) x ←3.0*6; Resultados:
C) X←4;
y ←2; A) x ←18.0;
B) x ←2.0;
y ←3.0; x ←x*y↑(x-y); B) x ←6.0;
x ←x ↑y-x; x ←x/y;
C) x ←8.0;
Algoritmos 61

Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações

Exercício 4 Programa em C

C) X ←4;
#include <stdio.h>
y ←2; #include <stdlib.h>
#include <math.h>
x ←x*y↑(x-y); main()
x ←x/y; {
float X, Y;
 Observação: No programa X = 4;
ao lado valores inteiros são Y = 2;
atribuídos a X e Y, mas o
resultado obtido é do tipo X = X*pow(Y,X-Y);
real. Isto ocorre, pois ocorre X = X/Y;
uma conversão implícita por printf(“ X = %f ”,X);
conta de X e Y serem
declarados do tipo float system(“pause”);
(ou seja, real). }
Algoritmos 62
Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações


Exercício 5: Escreva as seguintes expressões matemáticas
como expressões de Computador

a a+b (A+B)/(C–D)
a) +1 A/B+1 b)
b c-d

c)
a
+ 1 A/B+1
b
b
a +
d) c  (A + B / C) / ( D – E / F )
e
d -
f Algoritmos 63

Unesp-Campus de Guaratinguetá

4.4.2 – Prioridade das Operações

b
e) a+  A+B/(C–D)
c-d

f) (a + b) c  (A+B)*C/D
d

g) [(a + b) ] c d ((A+B) C) D

OBS: Não se esqueça que aqui está se usando linguagem algorítmica (PORTUGOL)
Algoritmos 64
Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas


 Freqüentemente o conjunto de operações ( +, -, *, /, ↑ ) é
complementado por operadores especiais denominados
funções embutidas.

Por exemplo: A operação de raiz quadrada é denominada


sqrt. E a exponênciação é denominada pow.

 As funções embutidas são rotinas pré-escritas, fornecidas


pelos projetistas de linguagem de programação para auxiliar
o programador na execução de cálculos que requeiram mais
do que o conjunto convencional de operadores.

 Na linguagem C as funções embutidas fazem parte da


biblioteca math.h
Algoritmos 65

Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas


Funções matemáticas da biblioteca math.h
Trigonométricas
sin (x): Retorna o valor do seno de x, sendo x em graus e em double.
cos (x): Retorna o valor do co-seno de x, sendo x em graus e em double.
tan (x): Retorna o valor da tangente de x, sendo x em graus e em double.
asin(y) Retorna o valor do arco seno de y.
acos(y) Retorna o valor do arco co-seno de y.
atan(y) Retorna o valor do arco tangente de y.
sinh(x) Retorna o valor do seno hiperbólico de x, com x em graus e tipo
double.
Constantes
M_PI : Constante, "pi", fornece o valor 3.14159265358979323846
Logarítmicas
log (x): Retorna o valor do logaritmo de x na base 2. Sendo x do tipo double.
log10(x): Retorna o valor do logaritmo de x na base 10. Com x do tipo
double.
Algoritmos 60
66
Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas


Funções matemáticas da biblioteca math.h
Potências
pow (): Retorna o valor da base elevada ao expoente. Recebe dois
argumentos do tipo double, o primeiro é a base e o segundo o expoente.
Por exemplo: Para calcular 210, faz-se pow (2, 10).
sqrt (): Retorna o valor da raiz quadrada. Recebe como argumento um
double do qual ele deve extrair a raiz.
exp(x): Retorna o valor de ex

Arredondamento
ceil(): Retorna o primeiro float sem casas decimais acima. Recebe um float
como argumento. Exemplo: ceil (45.98561) resultaria em 46.
floor(): Retorna o primeiro float sem casas decimais abaixo. Recebe um
float como argumento. Exemplo: floor (45.98561) resultaria em 45.
Algoritmos 67

Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas

Funções matemáticas da biblioteca math.h

abs(x): Retorna o valor absoluto de x um número inteiro


fabs(y): Retorna o valor absoluto de y um número real
cabs(x): Retorna o valor absoluto de x um número complexo
Exemplo: abs(-45) resultaria em 45.
floor(x): Retorna o primeiro float sem casas decimais abaixo de x.
Exemplo: floor (45.98561) resultaria em 45.

Logarítmicas
log (x): Retorna o valor do logaritmo de x na base 2. Sendo x do tipo
double.
log10(x): Retorna o valor do logaritmo de x na base 10. Com x do tipo
double.

Algoritmos 68
Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas : Exercícios


Exercício 6: Escrever as seguintes expressões matemáticas
como expressões da linguagem C.

H= [ ( a + b ) ]d h= pow ( A + B, D);

J= sen a + cos a
J= ( sin (A) + cos (A) ) / tan (A);
tg a

K= - b + b 2 − 4 ac K= - B + sqrt ( pow(B,2) – 4 * A * C ) / 2 *A
2a

Em C, para se usar as funções que calculam expoente, raiz,


seno, cos etc. é necessário colocar a biblioteca math.h

Algoritmos 69

Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas


Exercício 7: Fazer um programa
Exercício 8: Fazer um programa
que use a função acos para calcular
para imprimir o co-seno de 30º (pi/6
o arco co-seno de um ângulo em
radianos), 60º (pi/3 radianos), 45º
radianos. O valor de arg deve estar,
(pi/4 radianos) e 90º (pi/2 radianos).
logicamente entre -1.0 e 1.0
Para tanto, use a constante, "pi",
#include <stdlib.h> presente na biblioteca matemática,
#include <stdio.h> que é referenciado pela constante
#include <math.h> "M_PI“. Assim quando você
main() compilar o seu programa ela será
{ substituída pelo valor
double coseno = -1.0; 3.14159265358979323846:
printf("O arco co-seno de %lf
eh %lf\n",coseno,acos(coseno));
system("pause");
}
Algoritmos 70
Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas


#include <stdlib.h>
#include <stdio.h> Exercício 8
#include <math.h>
int main()
{ // pi/2 radianos = 90
// pi/6 radianos = 30
// pi/4 radianos = 45
// pi/3 radianos = 60
double angu_rad;
printf("Este programa imprime os cosseno dos angulos fundamentais: \n");
angu_rad = M_PI/2; //90 em radianos
printf("O cosseno de 90 graus eh %lf\n",cos(angu_rad));
angu_rad = M_PI/6; //30 em radianos
printf("O cosseno de 30 graus eh %lf\n",cos(angu_rad));
angu_rad = M_PI/4; //45 em radianos
printf("O cosseno de 45 graus eh %lf\n",cos(angu_rad));
angu_rad = M_PI/3; //60 em radianos
printf("O cosseno de 60 graus eh %lf\n",cos(angu_rad));
system("pause");
} //fim programa Algoritmos 71

Unesp-Campus de Guaratinguetá

4.4.3 – Funções Embutidas


Pode-se usar a função pow p/ extrair as raízes de qualquer número, uma
vez que a raiz cúbica de 2, por exemplo é a mesma coisa que 2 elevado a
1/3 !!!!!
#include <stdio.h>
#include <math.h> Exercício 9: Fazer um programa para
#include <stdlib.h> calcular a raiz de índice K de um numero N
main() qualquer
{double indice;
double N,M, raiz;
printf("Digite o no.para o qual vc deseja extrair a raiz:");
scanf("%lf",&N);//leitura de número com dupla precisão
printf("Digite o INDICE da raiz: ");
scanf("%lf",&indice);//leitura de número com dupla precisão
M=1.0/indice;
printf("valor de N= %lf valor de M= %lf \n", N, M);
raiz = pow(N,M);
printf("A raiz %lf de %f eh: %lf\n", M, N,raiz);
system("pause");
Algoritmos 72
}
Unesp-Campus de Guaratinguetá

4.5 - Conversão de Tipo


4.5.1 - Conversão implícita: real para inteiro
Se uma variável é declarada como real (float) e for atribuída a ela um valor
inteiro, vai ocorrer uma conversão implícita, pois ela será automaticamente
convertida para um valor real

Exemplo 25: Sejam X Em termos de memória Y X


e Y reais. 5.0
O valor 5.0 será atribuído a
Algoritmo variável X, em seguida o valor 2.0 Y X
será atribuído a variável Y, a
Variáveis x, y: real seguir o valor da variável será 2.0 5.0
Inicio dividida por dois e novamente
atribuída a variável X.
x ← 5; Y tmp X
Como as variáveis X e Y foram
y ←2; declaradas como sendo real, os
2.0 5.0 5.0

x ←x / y; valores inteiros se transformam


em reais
fim
Algoritmos 73

Unesp-Campus de Guaratinguetá

4.5.1 - Conversão implícita:

4.5.1 - Conversão implícita: inteiro para real


Se uma variável é declarada como inteira (int) e for atribuída a ela um
valor real, vai ocorrer uma conversão implícita, pois ela será
automaticamente convertida para um valor inteiro
Exemplo 26: Suponha que VI e VR sejam variáveis do tipo inteira e real,
respectivamente. Se atribuirmos os seguintes valores,
VR -17
VI 392.73

A constante inteira –17 é convertida automaticamente pelo computador


em -17.0 para se ajustar a variável.

No caso da constante 392.73, ela será convertida para inteiro mas o valor
armazenado será 392, que não é exatamente igual ao anterior.

 Portanto, deve-se evitar conversões, exceto quando são para atingir um


objetivo especial.
Algoritmos 74
Unesp-Campus de Guaratinguetá

4.5.1 - Conversão implícita:

// Programa Exemplo 27
#include <stdlib.h>
#include <stdio.h>
main()
Ao se executar o programa
anterior, teremos:
{
int vi, a = -17;
float vr, b = 392.73;
printf(“Atribuir inteiro para vi e real para vr \n”);
vi = a;
vr = b;
printf(“vi = %d \n”, vi);
printf(“vr = %f \n”, vr);
// Continuação Exemplo 14
printf(“Atribuir inteiro para vr e real para vi \n”);
vr = a;
vi = b;
printf(“vi = %d \n”,vi);
printf(“vr = %f \n”,vr);
system(“pause”);
Algoritmos 75
}

Unesp-Campus de Guaratinguetá

4.5.1 - Conversão implícita:

Exemplo 28: Seja a seguinte Exemplo 28 - Programa em C


atribuição de valores para X e Y,
onde eles são declarados como #include <stdio.h>
inteiros
#include <stdlib.h>
X ←5.0;
main()
y ←2.0;
{
X ←X/Y;
int X, Y;
 Ao se executar o programa ao lado vai X = 5.0;
ocorre uma conversão implícita por conta Y = 2.0;
de X e Y serem declarados do tipo int.
X = X/Y;
 O resultado final da divisão de X por Y
será 2, que é a parte inteira da divisão de
printf(“ X = %d ”,X);
5 por 2 system(“pause”);
Algoritmos
} 76
Unesp-Campus de Guaratinguetá

4.5.1 - Conversão implícita:

Exercício 10: Sejam A, B e C variáveis reais e K, I, J variáveis


inteiras. Dados A=4.0, B=6.0 e I=3. Quais serão os valores finais
obtidos com os seguintes comandos?

C ←A*B - I; K ←I/4 * 6; C ←A/B+1.5;


C = 4.0*6.0-3; K = 0 * 6; C=6.0/4.0+1.5;
C = 21.0; K = 0; C=3.0;
Comentário Comentário Comentário
 Apesar da variável I  A expressão I/4  A expressão A/B
ser inteira, o fornece o valor inteiro fornece um valor real e
resultado desta (zero), ao invés de 0.75 igual a 1.5. Este valor
expressão será um será somado ao valor
pois I é inteiro e 4
número real porque a
também. 1.5 resultando em 3.0.
variável C é real.
Algoritmos 77

Unesp-Campus de Guaratinguetá

4.5.1 - Conversão implícita:

Uma variável do tipo numérica


(real ou inteira) não pode ser
convertida implicitamente em
uma variável do tipo cadeia ou
vice-versa.

Algoritmos 78
Unesp-Campus de Guaratinguetá

4.5.2 - Conversão explícita:

4.5.2 - Conversão explícita ou cast: os valores atribuídos a uma


variável são promovidos para um tipo definido explicitamente pelo usuário.

Programa em C
Exemplo 16: Seja a atribuição
Abaixo, onde x e y são inteiros #include <stdio.h>
#include <stdlib.h>
x ← 5.0;
main()
y ←2.0; {
r ←float(x)/y; int X, Y;
float R;
X = 5.0;
 Observação: O resultado Y = 2.0;
da divisão entre dois
R = float(X)/Y;
inteiros seria inteiro, mas o
resultado a ser fornecido printf(“ float(X)/Y = %f ”,R);
será real (float), devido ao system(“pause”);
uso do operador float(X).
}
Algoritmos 79

Unesp-Campus de Guaratinguetá

4.5.2 - Conversão explícita:


Exercício 11: Analise o programa abaixo e mostre o que aparecerá na
tela do computador
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{ int x=9, y=0, z=0;
int NUM = 5;
y = x / NUM;
printf("\n valor inicial de x = %d", x);
z = NUM * y;
x = (NUM * x) + z;
printf("\n valor final de x = %d\n", x);
printf("\n valor inicial de y = %d", y);
y = (NUM * z) + y - 2;
printf("\n valor final de y = %d\n", y);
printf("\n valor de z = %d",z);
z = y/x;
printf("\n valor final de z = %d\n", z);
system("pause"); Algoritmos 80
}
Unesp-Campus de Guaratinguetá

4.6 - Aplicações

 Problema 1: Ler dois números inteiros exibi-los. Depois, trocar os


valores entre si e exibir novamente.

Algoritmo Em termos de memória

(1) Leia(A,B);
x y x
(2) Mostre(A,B); (3)
(3) C ← A; A B C
(4) A ← B;
(5) B ← A; x y x
(6) Mostre(A,B);
(4)
A B C

y x x
(5)
A B C
Algoritmos 81

Unesp-Campus de Guaratinguetá

4.6 - Aplicações

 Problema 1: Ler dois números inteiros exibi-los. Depois, trocar os


valores entre si e exibir novamente.

Algoritmo Programa em C
// Incluir bibliotecas !
(1) Leia(A,B);
main()
(2) Mostre(A,B); {
(3) C ← A; int A, B, C;
printf(“Digite A e B: ”);
(4) A ← B;
scanf(“%d %d”,&A,&B);
(5) B ← A; printf(“A = %d e B = %d \n”,A,B);
(6) Mostre(A,B); C = A;
A = B;
B = A;
printf(“A = %d e B = %d \n”,A,B);
system(“pause”);
}
Algoritmos 82
Unesp-Campus de Guaratinguetá

4.6 - Aplicações

 Problema 2: Fazer programa que pede ao usuário para entrar com


um valor inteiro que chama de dias, depois ele divide esse número por
365.25, ou seja, converte os dias para anos e informa ao usuário
quantos anos equivalem aos dias digitados

Programa em C
#include <stdio.h>
void main ()
{int Dias; // Declaracao de Variaveis
float Anos;
printf ("Entre com o número de dias: "); // Entrada de Dados
scanf ("%d",&Dias);
Anos=Dias/365.25; // Conversao DiasAnos
printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos);
system("pause");
Algoritmos 83
}

Unesp-Campus de Guaratinguetá

4.6 - Aplicações
 Problema 3: Determinar o saldo ao final do 3º mês de uma aplicação
financeira com investimento inicial de R$300,00 e juros de 1% ao mês.

Programa em C
A P=A+A*i S T
// Incluir bibliotecas !
main()
{
0 1 2 3 float A, P, S, T, i;
Algoritmo printf(“Digite investimento e juros: ”);
scanf(“%f %f”,&A,&i);
Leia(A); P = A*(1+i);
i ← 0.01; S = P*(1+i);
P ← A + A*i; T = S*(1+i);
S ← P + P*i; printf(“Valor final = %f \n”, T);
system(“pause”);
T ← S*(1+i);
}
Escreva(T); Algoritmos 84
Unesp-Campus de Guaratinguetá

4.6 - Aplicações
 Problema 4: Refazer o problema 3, mas considerar que (a) ao final
do mês o banco desconta R$ 10,00 e (b) imprimir o saldo em cada
mês.

Item (a) A F
Subtrair R$10,00
ao final de cada mês
0 1 2 3

Item (b) A
Ao final de cada mês
mostrar o valor
0 1 2 3
Algoritmos 85

Unesp-Campus de Guaratinguetá

4.6 - Aplicações

Algoritmo Programa em C

Leia(A); // Incluir bibliotecas !


i ← 0.01; main()
{
P ← (A + A*i-10);
float A, P, S, T, i;
Mostre(P); printf(“Digite investimento e juros: ”);
S ← (P + P*i-10); scanf(“%f %f”,&A,&i);
Mostre(S); P = A*(1+i)-10;
T ← (S*(1+i)-10); printf(“Final Mes 1 = %f \n”, P);
S = P*(1+i)-10;
Escreva(T);
printf(“Final Mes 2 = %f \n”, S);
T = S*(1+i)-10;
 Observação: Para A = R$ 300,
printf(“Valor final = %f \n”, T);
i = 1%, 3 meses e desconto de
system(“pause”);
R$10, ao final do terceiro mês o
}
saldo será de R$ 278,78 !
Algoritmos 86
Unesp-Campus de Guaratinguetá

4.6 - Aplicações

 Questão Adicional: Qual valor inicial A deve ser investido para que
o valor final F, apesar dos descontos mensais de R$ 10,00 seja igual
a A.

Fórmula: P = A*(1+i)1 – 10 = A ⇒ A*0.01=10 ⇒ A = R$ 1000,0

 Questão Adicional: Calcular o valor final F do investimento A,


sem considerar os descontos mensais, para qualquer número n de
meses.

1º Mês: P = A*(1+i)1 2º Mês: S = P*(1+i)1 = A*(1+i)2

Fórmula geral
A F
no Mês: F = A*(1+i)n

C: F = A*pow(1+i,n); 0 1 ••• n 87
Algoritmos

Unesp-Campus de Guaratinguetá

4.6 - Aplicações

Problema 5: Fazer um programa em C que leia os coeficientes a, b, c de uma equação


do segundo grau e a seguir calcule as duas raízes.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{ float A,B,C,raiz1, raiz2, delta;
//Leitura de dados
printf("Digite os coeficientes da equacao de 2o.grau:\n");
printf("Ax2+Bx+C,\n");
printf("A=?");
scanf("%f", &A);
printf("B=? ");
scanf("%f", &B);
printf("C=? ");
scanf("%f", &C);
// Calculo das Raizes
delta = (B*B) - (4*A*C);
raiz1= (-B + sqrt(delta))/(2*A);
raiz2= (-B - sqrt(delta))/(2*A);
//Impresão dos resultados
printf("As raizes sao: raiz 1= %.2f , raiz1=%.2f \n", raiz1, raiz2);
system ("pause");
} Algoritmos 88
Unesp-Campus de Guaratinguetá
4 - Conceitos Básicos sobre Algoritmos e
Linguagem C

Autores
Prof. Dr. Aníbal Tavares
Profa. Dra. Cassilda Ribeiro

Algoritmos 89

Você também pode gostar