Curso de Programação Computadores - feg.unesp.br · sexo 4.1 –Variáveis Algoritmos 6 ......
Transcript of Curso de Programação Computadores - feg.unesp.br · sexo 4.1 –Variáveis Algoritmos 6 ......
Unesp – Campus de Guaratinguetá
4 - Conceitos Básicos sobre Algoritmos e Linguagem C
Curso de Programação Computadores
Prof. Aníbal Tavares
Profa. Cassilda Ribeiro
Algoritmos 2
Unesp-Campus de Guaratinguetá
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.
4 - Conceitos Básicos sobre Algoritmos e Linguagem C
Algoritmos 3
Unesp-Campus de Guaratinguetá
� 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.
4.1 – Variáveis
A seguir é mostrado um exemplo:
‘João’
30ff712
12345
20ff312
Informação
Endereço físico ‘M’
31ff502Exemplo 1.
Algoritmos 4
Unesp-Campus de Guaratinguetá
� 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).
4.1 – Variáveis
Algoritmos 5
Unesp-Campus de Guaratinguetá
� 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
Então o Exemplo 1 anterior, pode ser alterado para:
‘João’
Aluno
12345
numero
Informação
Endereço lógico ‘M’
sexo
4.1 – Variáveis
Algoritmos 6
Unesp-Campus de Guaratinguetá
� 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”.
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.
‘F’‘Maria’
Aluno
2358
numero
Informação
Endereço lógico
sexo
4.1 – Variáveis
Algoritmos 7
Unesp-Campus de Guaratinguetá
� 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.
� 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.
� 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.
4.1 – Variáveis
Algoritmos 8
Unesp-Campus de Guaratinguetá
125132
86103
3451
CBACaso
Para cada conjunto de valores atribuídos a B e C teremos um valor de A, ou seja:
Exemplo 2: Seja um triângulo com os seguintes lados: A, B, C.
Do Teorema de Pitágoras temos: A2 = B2 + C2
Vejamos então, um outro exemplo.Vejamos então, um outro exemplo.
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
4.1 – Variáveis
Algoritmos 9
Unesp-Campus de Guaratinguetá
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 significativotais 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 ligeiramentedependendo da linguagem de programação ou do sistema decomputador em utilização.
4.1.1 - Nomes de Variáveis
Algoritmos 10
Unesp-Campus de Guaratinguetá
� 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 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 dcaractere, que não seja letra ou dígito, na composição do nome da a
variável.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.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...
4.1.1 - Nomes de Variáveis
Algoritmos 11
Unesp-Campus de Guaratinguetá
Exemplos de nomes válidos
Lado1A3Caixa_preta
Xmetro
Exemplos de nomes não válidos
3cubo � começa com número
X+Y � o “+” não vale pois confunde com o sinal
Caixa preta � não é permitido caractere branco
As variáveis, assim como os dados, podem ser do tipo
inteiro, real, cadeia e lógica.
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
4.1.1 - Nomes de Variáveis
Algoritmos 12
Unesp-Campus de Guaratinguetá
4.1.2 Tipos de Variáveis
Pode-se dizer que esta fórmula contém basicamente duas coisas: 1) Valores que podem ser classificados como constantesconstantes e e
variáveis.variáveis.
���� ConstantesConstantes 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áveisVariá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.
Considere a fórmula matemática para o cálculo do volume de uma esfera:
3
3
4RV π=
4.1.2 - Tipos de Variáveis
Algoritmos 13
Unesp-Campus de Guaratinguetá
2) Operações que devem ser feitas sobre determinados valores, para a obtenção da solução do problema.
4.1.2 - Tipos de Variáveis
Deste modo esta fórmula pode ser usada para resolver uma
certa classe de problemas e não apenas um problema
específico.
Então para cada valor de R que atribuímos a fórmula,
obtemos um valor de volume V.
3
3
4RV π=
Algoritmos 14
Unesp-Campus de Guaratinguetá
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ávelvariá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.
4.1.2.1 - Tipos de Dados
Algoritmos 15
Unesp-Campus de Guaratinguetá
Resumindo:
� O tipo de uma variávelvariável define os valoresdefine 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.
4.1.2.1 - Tipos de Dados
Algoritmos 16
Unesp-Campus de Guaratinguetá
Algoritmo C
Inteiro int
Real float
Real double
Caractere char
Cadeia char [ ]
Lógicaint
float
Descrição
Representa números entre -2147483647 e +2147483647. Ocupa 4 bytes de memória.
Representa números entre ±3.4x10-38 e ±3.4x10+38. Ocupa 4 bytes de memória.
Representa números entre ±1.7x10-308 e ±1.7x10+308. Ocupa 8 bytes de memória.
Representa um dos caracteres da Tabela ASCII. Ocupa 1 byte de memória.
Vetor de caracteres. Cada elemento do vetor ocupa 1 byte de memória.
Qualquer valor diferente de zero é associado ao valor lógico verdadeiro. Senão é falso.
4.1.2.1 - Tipos de Dados
Algoritmos 17
Unesp-Campus de Guaratinguetá
ALGORITMO Exemplo 3ALGORITMO Exemplo 3
VARIÁVEIS lado1, lado2:REAL;VARIÁVEIS lado1, lado2:REAL;
INICIO INICIO
lado1 lado1 ←← 1.11.1
lado2 lado2 ←← 3.23.2
Escreva (Escreva (“L1 =“ “L1 =“ lado1,lado1, “L2=”“L2=”lado2);lado2);
FIMFIM
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// Programa Exemplo 3
# # includeinclude <<stdiostdio.h>.h>
# # includeinclude <<stdlibstdlib.h>.h>
mainmain()()
{ { floatfloat lado1, lado2;lado1, lado2;
lado1 = 1.1;lado1 = 1.1;
lado2= 3.2;lado2= 3.2;
printfprintf((“L1 = %f“L1 = %f L2L2=%f”=%f”,lado1,lado2);,lado1,lado2);
systemsystem((“pause”“pause”););
}}
Declaração da variável lado1 do tipo REAL
Atribuição de valor
Impressão do valor do tipoREAL (f ⇔ float)
4.1.3 - Definição de Variáveis
Algoritmos 18
Unesp-Campus de Guaratinguetá
ii) Foram definidas duas variáveis as quais demos o Nome de Foram definidas duas variáveis as quais demos o Nome de “lado1” e “lado2”,“lado1” e “lado2”, e informamos que estas variáveis, ou e informamos que estas variáveis, ou posição de memória, só poderão aceitar dados, que sejam posição de memória, só poderão aceitar dados, que sejam números números reaisreais e que estejam entre e que estejam entre ±3.4x10-38 e e ±3.4x10+38 , , pois estas variáveis são do tipo REAL (pois estas variáveis são do tipo REAL (floatfloat na linguagem na linguagem C).C).
O Exemplo anterior nos informa que:O Exemplo anterior nos informa que:
iiii) Atribuímos à variável ) Atribuímos à variável “lado1” “lado1” oo valor 1.1. valor 1.1. ee à variável à variável “lado2” “lado2” oo valor 3.2.valor 3.2.
4.1.3 - Definição de Variáveis
Algoritmos 19
Unesp-Campus de Guaratinguetá
// Programa Exemplo 4
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
float lado1,lado2,hipo;
lado1 = 1.1;
lado2 = 2.2;
hipo = sqrt(lado1*lado1 +lado2*lado2);
printf(“L3 = %f ”,hipo);
system(“pause”);
}
ALGORITMO Exemplo 4ALGORITMO Exemplo 4
VARIÁVEIS VARIÁVEIS
lado1, lado2, lado1, lado2, hipohipo: REAL;: REAL;
INICIO INICIO
lado1 ←← 1.1
lado2 ←← 2.2
hipo←←sqrt(lado1*lado1+lado2*lado2)
Escreva(“L3 =”,hipo)
FIMFIM
Cálculo da hipotenusa:22
bac +=
Biblioteca matemática: fornece seno, cosseno, exponencial, raiz quadrada (sqrt), etc.
4.1.3 - Definição de Variáveis
Algoritmos 20
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 21
Unesp-Campus de Guaratinguetá
// Programa Exemplo 5// Programa Exemplo 5// Colocar aqui as Bibliotecas do Exemplo 4 !
mainmain()()
{{
floatfloat lado1;lado1;
printfprintf((“Digite L1:”“Digite L1:”););
scanfscanf((“ %f“ %f ””,&lado1); ,&lado1);
lado1 = lado1 = sqrtsqrt(lado1);(lado1);
printfprintf((““sqrtsqrt(L1) = %f(L1) = %f ””,lado1);,lado1);
systemsystem((“pause”“pause”););
}}O Tag %f indica a leitura de um valor do tipo float
ALGORITMO Exemplo 5ALGORITMO Exemplo 5
VARIÁVEIS VARIÁVEIS
LADO1: REALLADO1: REAL
INICIOINICIO
Escreva ((“Digite L1:”“Digite L1:”););
Leia (LADO1) Leia (LADO1)
LADO1 ←← sqrt(LADO1)
Escreva(“raiz de L1 =”,lado1)
FIMFIM
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(“ % ”,&);
Algoritmos 22
Unesp-Campus de Guaratinguetá
ALGORITMO Exemplo 6ALGORITMO Exemplo 6
VARIÁVEIS VARIÁVEIS
A,B,C: INTEIRO;A,B,C: INTEIRO;
INICIOINICIO
Escreva(“Digite a e b:”)
Leia (A,B); Leia (A,B);
C C ←← A + B;A + B;
Escreva(Escreva( A,A,”+””+”,B,,B,”=“”=“,, C);C);
FIMFIM
Leitura de a e b com apenas um scanf.
Impressão dos valores de a, b e c com um printf
4.1.4 Maneiras de dar valores a uma variável
// Programa Exemplo 6// Programa Exemplo 6
<<includeinclude stdiostdio.h>.h>
<<includeinclude stdlibstdlib.h>.h>
mainmain()()
{{
intint a, b, c;a, b, c;
printfprintf((“Digite a e b:”“Digite a e b:”););
scanfscanf((““ %d%d”%d%d”,&a,&b); ,&a,&b);
c = a + b;c = a + b;
printfprintf((“%d + %d = %d “%d + %d = %d \\n”n”,a, b, c);,a, b, c);
systemsystem((“pause”“pause”););
}}
A tag %d indica que o tipo da variável a ser lida é inteiro
Algoritmos 23
Unesp-Campus de Guaratinguetá
� Observe no exemplo 6 que em linguagem algorítmica, utilizamos o Leiapara se fornecer um valor para a variável e na linguagem C, utilizamos o comando scanf()
� Então no exemplo 6, ao se executar o programa aparecerá escrito na tela: Digite a e b.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 + bc = a + b ⇒⇒ 14+3314+33 e colocará o valor 47 na caixinha da variável c, e c, e por ultimo escreverá na tela os valores de a, b a, b e cc
� 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.
� Leia é um comando que ordena ao computador que vá por exemplo, na tela buscar o que o usuário digitou.
4.1.4 Maneiras de dar valores a uma variável
Algoritmos 24
Unesp-Campus de Guaratinguetá
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: A3 no algoritmoA=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.
4.1.4 Maneiras de dar valores a uma variável
Algoritmos 25
Unesp-Campus de Guaratinguetá
// Programa Exemplo 7#include <stdlib.h>#include <stdio.h>main(){
int a = 16;printf(“a = %d”,a);a = -13;printf(“a = %d”,a);printf(“Digite o valor de a”);scanf(“ %d ”,&a);printf(“a = %d”,a);system(“pause”);
}
Então, seja a seqüência de operações mostradas a seguir:A 16A -13A 0
O valor da variável A após as três operações é igual à última atribuição realizada, ou seja, 0 (zero).
Definição+Atribuição
Atribuição
Leitura
ALGORITMO Exemplo 7VARIÁVEISA: INTEIROINICIO
A ← 16Escreva (“a=“,a) A ← -13
Escreva (“a=“,a)Escreva(“Digite o valor de a”)Leia(A)Escreva (“a=“,a)
FIM
4.1.4 Maneiras de dar valores a uma variável
Algoritmos 26
Unesp-Campus de Guaratinguetá
� 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.
4.1.4 Maneiras de dar valores a uma variável
Algoritmos 27
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 28
Unesp-Campus de Guaratinguetá
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
4.1.4 Maneiras de dar valores a uma variável
a) X Y Y Z
Resultado X = 3Y = 4
Se invertermos o comando
Y Z X Y
Resultado Y = 4X = 4
O resultado é alterado.
Algoritmos 29
Unesp-Campus de Guaratinguetá
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.
Suponha X=2 Y=3 Z=4
4.1.4 Maneiras de dar valores a uma variável
Algoritmos 30
Unesp-Campus de Guaratinguetá
4.2 - Constantes
� Constantes são valores fixos que não podem ser modificados pelo programa
Tipo Exemploschar � ‘a’ ‘\n’ ‘9’int � 123 1 1000 -23long int � 35000 -45short int � 10 -12 90unsigned int � 1000U 234U 4365Ufloat � 123.45 3.1415e -10double � 123.45 -0.91254
4.2 - Constantes
Algoritmos 31
Unesp-Campus de Guaratinguetá
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çamosvalores as variáveis. Então, recapitulando temos que:
4.3 Comandos de Entrada e Saída
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 32
Unesp-Campus de Guaratinguetá
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.
4.3 Comandos de Entrada e Saída
Algoritmos 33
Unesp-Campus de Guaratinguetá
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.
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)
4.3 Comandos de Entrada e Saída
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
Algoritmos 34
Unesp-Campus de Guaratinguetá
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.
4.3 Comandos de Entrada e Saída
Algoritmos 35
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 foiusado %f
Algoritmos 36
Unesp-Campus de Guaratinguetá
Com o comando de saída Escreva , em linguagem algorítmica, é possível mostrar o conteúdo de qualquer variável, o resultado dequalquer expressão ou o valor de qualquer constante.
A forma geral do comando Escreva que será utilizada aqui é:Escreva ( lista de saída )
4.3 Comandos de Entrada e 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 37
Unesp-Campus de Guaratinguetá
Exemplo 11Nota1 = 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);
4.3 Comandos de Entrada e Saída
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 38
Unesp-Campus de Guaratinguetá
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
4.3 Comandos de Entrada e Saída
É 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 39
Unesp-Campus de Guaratinguetá
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
4.3 Comandos de Entrada e Saída
Algoritmos 40
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressões
Definição: uma Expressão é uma combinação devariáveis, constantes e operadores. O resultado daavaliação daquela expressão é o valor que é atribuído à variável indicada.
Isto significa que o valor 27 será atribuído
à variável conta.
43421Expressão
conta 8163 ++←Exemplo 13
Algoritmos 41
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressõ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
#include<stdio.h>
#include<stdlib.h>
main()
{
int conta;
conta = 3 + 16 +8;
printf(“ %d ”,conta);
system(“pause”);
}
Código C
conta←3+16+8
Em termos de memória
conta
27
conta
(1)
(2)
Algoritmos 42
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressõ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 43
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressõ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 44
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressõ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 45
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressões
#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");
}
Exercício 2: Fazer uma programa em C para calcular o volume da esfera. Sabe-se que o volume da esfera é dado por: 3
3
4RV π=
Algoritmos 46
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressões
Termo2Termo1ado Result
28,60.7 Termo2
7.413.6Termo1 14 Exemplo
/←←←←
∗∗∗∗←←←←
++++←←←← Termo1=21
Termo2=20.02
resultado = 1.048951
O exemplo 15 está errado pois na expressão Resultado a variável Termo2 ainda não está definida.
28.60.7Termo2
Termo2Termo1o Resultad
7.413.6Termo1 15 Exemplo
∗∗∗∗←←←←
←←←←
++++←←←←
/
Algoritmos 47
Unesp-Campus de Guaratinguetá
4.4 4.4 -- ExpressõesExpressões
Declaração de Variáveis
Termo1, Termo2, resultado: real
Inicio
Termo1←13.6+7.4
Termo2←0.7*28.6
resultado ←Termo1/Termo2
Escreva(“Resultado=“,resultado)
Fim
Algoritmo Exemplo 14
resultado
21.0(2) 20.02
Termo1 Termo2 resultado
Em termos de memória
(1)Termo1 Termo2
21.0
21.0(3) 20.02
Termo1 Termo2 resultado
1.04
#include<stdio.h>
#include<stdlib.h>
main()
{
float Termo1, Termo2, resultado;
Termo1= 13.6+7.4;
Termo2= 0.7*28.6;
resultado = Termo1/Termo2;
printf(“ Resultado = %f ”,resultado);
system(“pause”);
}
Código C Exemplo 14
Algoritmos 48
Unesp-Campus de Guaratinguetá
4.4.1 4.4.1 –– Avaliação de ExpressõesAvaliação de Expressões
� Problema de Lógica : os componentes de uma expressão só podem ser avaliados se seus valores já estiverem definidos.
Variáveis
Termo1, Termo2, resultado: real
Inicio
Termo1←13.6+7.4
Resultado ← Termo1 / Termo2
Termo2←0.7*28.6
Escreva(“Resultado=“,resultado)
Fim
Algoritmo Exemplo 15
resultado
21.0(2)
Termo1 Termo2 resultado
Em termos de memória
(1)Termo1 Termo2
21.0
21.0(3)
Termo1 Termo2 resultado
� Não tem como calcular o valor da variável Não tem como calcular o valor da variável Não tem como calcular o valor da variável Não tem como calcular o valor da variável resultadoresultadoresultadoresultado pois, a variávelpois, a variávelpois, a variávelpois, a variávelTermo2Termo2Termo2Termo2 ainda não recebeu nenhum valor. Isto causa então, um erro ainda não recebeu nenhum valor. Isto causa então, um erro ainda não recebeu nenhum valor. Isto causa então, um erro ainda não recebeu nenhum valor. Isto causa então, um erro de Lógicade Lógicade Lógicade Lógica� Você não pode tentar acessar o valor de uma variável antes de lhe atribuir um valor
Algoritmos 49
Unesp-Campus de Guaratinguetá
4.4.1 4.4.1 –– Avaliação de ExpressõesAvaliaçã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.
Algoritmo Exemplo3
Variáveis X, A: inteiro
Inicio
X←0A ←3
X ← A + 1Escreva(“Valor de X=“,X)
Fim
Exemplo 16: Suponha que asvariáveis X e A sejam inteiras
#include<stdio.h>
#include<stdlib.h>
main()
{
int X, A;
X = 0;
A = 3;
X = A+1;
printf(“Valor de X= %d ”,X);
system(“pause”);
}
Código C Exemplo 16 Em termos de memória
�Inicialmente o valor zero é atribuído á variável X e o
valor 3 é atribuído à variável A.
�A seguir é atribuído à variável X o valor de A + 1, e assim o valor de X passa
a ser 4
0
X
3
A
4
X
3
A
Algoritmos 50
Unesp-Campus de Guaratinguetá
4.4.1 4.4.1 –– Avaliação de ExpressõesAvaliaçã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.
Algoritmo Exemplo 17
Variáveis X, A: inteiro
Inicio
X←0X ← X + 1Escreva(“Valor de X=“,X)
Fim
Exemplo 17: Suponha que asvariáveis X e A sejam inteiras
#include<stdio.h>
#include<stdlib.h>
main()
{
int X;
X = 0;
X = X+1;
printf(“Valor de X= %d”,X);
system(“pause”);
}
Código C Exemplo 17
0
X
Em termos de memória
� Inicialmente o valor zero é atribuído á variável X.
� A seguir o computador pega o valor de X que está na
caixinha, soma uma unidade e devolve o valor resultante a
variável X
Observe que aqui foi feito um incremento no valor da variável
X
1
X
Algoritmos 51
Unesp-Campus de Guaratinguetá
4.4.1 4.4.1 –– Avaliação de ExpressõesAvaliaçã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.
Algoritmo Exemplo 18
Variáveis Y, B: inteiro
Inicio
B← 1Y ←10B ←B+1Y ← Y -1Escreva(“Valor de Y=“,Y)
Escreva(“Valor de B=“,B)
Fim
Exemplo 18: Suponha que asvariáveis X e A sejam inteiras #include<stdio.h>
#include<stdlib.h>
main()
{
int B, Y;
B= 1;
Y= 10;
B = B+1;
Y= Y-1
printf(“Valor de Y= %d ”,Y);
printf(“Valor de B= %d ”,B);
system(“pause”);
}
Código C Exemplo 18 � Inicialmente foram atribuídos os valores: 1 a variável B e 10 à variável Y.
� A seguir o computador pega o valor de B que está na caixinha, soma uma unidade e devolve o valor resultante a variável B, depois ele pega o0 valor de Y que está na caixinha, subtrai um e devolve o valor resultante a caixinha
1
B
10
Y
2
B
9
Y
Algoritmos 52
Unesp-Campus de Guaratinguetá
4.4.1 4.4.1 –– Avaliação de ExpressõesAvaliação de Expressões
� Linguagem C: Na linguagem C existem 3 formas de se realizar o incremento/decremento de uma variável.
� Cuidado: As operações são equivalentes quando aparecem isoladas, mas produzem efeitos diversos quando presentes em expressões.Veja os exemplos abaixo:
x = x + 1; x++; ++x;x ← x + 1;
Em linguagem algorítmica Em linguagem C
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 53
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade 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:
x ←(3 + 6)*13
9
117
x ←3 + (6*13)
78
81
Caso 1 Caso 2
Algoritmos 54
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
� As operações para avaliação de uma dada expressão obedecem à umaregra de prioridade fornecida na Tabela abaixo.
Classe Operador Significado
1 ↑↑↑↑Exponenciação: é aplicada da esquerda para a direita.
2 - , + Menos e mais unários: são aplicados da esquerda para a direita.
3 * , / Multiplicação e divisão são aplicadas da esquerda para a direita.
4 + , -Adição e subtração são aplicadas da esquerda para a direita.
Algoritmos 55
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade 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.
x ← 8 + 7 * 3 + 4 * 5
21 20++8
1 2
3
29 + 204
49
Exemplo 20: Seja a expressão x ←8+7*3+4*5. Qual será o valor de X ?
Algoritmos 56
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade 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
7 5**15
1 2
3
105 * 5
4
525
Algoritmos 57
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
x ←(3*(6+2))*8
Exemplo 22
8
(3 8** 8)
1
2
3
192
24 *
(3 * (6 + 2)) * 8
Programa em C
#include <stdio.h>
#include <stdlib.h>
// Programa principal
main()
{
int X, Y;
X = (6+2);
printf(“ X = %d ”,X);
X = 3*X;
printf(“ X = %d ”,X);
X = X*8;
printf(“ X = %d ”,X);
Y = (3*(6+2))*8;
printf(“ Y = %d ”,Y);
system(“pause”);
}
Algoritmos 58
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
2 ↑ 3 ↑ 2
2 9↑
1
2
512 = 232
x ←2 ↑3 ↑2
Exemplo 23 Programa em C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
int X, Y;
X = pow(3,2); printf(“ X = %d ”,X);
X = pow(2,X); printf(“ X = %d ”,X);
Y = pow(2,pow(3,2));
printf(“ Y = %d ”,Y);
system(“pause”);
}
Algoritmos 59
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
x ← -3 * 7 + 2 ↑ 3 / 4 -6
Exemplo 24
-3 * 7 + 2 ↑ 3 / 4 - 6
/
1
8 4 6--3 * 7 +2
-21 + /8 4 6-3
-21 + 6-2
-25
4 5
Programa em C
// Incluindo a biblioteca math.h !
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Programa Principal que usa pow.
main()
{
float X;
X = -3*7+pow(2,3)/4-6;
printf(“ X = %f ”,X);
system(“pause”);
}
Algoritmos 60
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade 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 61
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
Exercício 3: Representar as frações em expressões.
Exercício 3: Calcular o valor final de x, com variáveis REAIS.
34
212
−
−(12-2)/(4-3)
4
1*
3
2−(-2/3)*(1/4)
A) x ←3.0*6;
B) x ←2.0;y ←3.0;x ←x ↑y-x;
A) x ←18.0;
B) x ←6.0;
C) X←4;y ←2;x ←x*y↑(x-y);x ←x/y;
C) x ←8.0;
Resultados:
Algoritmos 62
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
C) X ←4;y ←2;x ←x*y↑(x-y);x ←x/y;
Exercício 4 Programa em C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
float X, Y;
X = 4;
Y = 2;
X = X*pow(Y,X-Y);
X = X/Y;
printf(“ X = %f ”,X);
system(“pause”);
}
� Observação: No programa ao lado valores inteiros são atribuídos a X e Y, mas o resultado obtido é do tipo real. Isto ocorre, pois ocorre uma conversão implícita por conta de X e Y serem declarados do tipo float(ou seja, real).
Algoritmos 63
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
Exercício 5: Escreva as seguintes expressões matemáticas como expressões de Computador
� A / B + 11b
a+a)
d-c
ba +b) ���� ( A + B ) / ( C – D )
1b
a+ ���� A / B + 1c)
f
e-d
c
ba +
� (A + B / C) / ( D – E / F ) d)
Algoritmos 64
Unesp-Campus de Guaratinguetá
4.4.2 4.4.2 –– Prioridade das OperaçõesPrioridade das Operações
d-c
ba + � A + B / ( C – D )e)
( )d
cba + � ( A + B ) * C / Df)
g) ( )[ ]dcba + � ( ( A + B ) C ) D
OBS: Não se esqueça que aqui está se usando linguagem algorítmica (PORTUGOL)
Algoritmos 65
Unesp-Campus de Guaratinguetá
4.4.3 4.4.3 –– Funções EmbutidasFunçõ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 66
Unesp-Campus de Guaratinguetá
4.4.3 4.4.3 –– Funções EmbutidasFunções Embutidas
Funções matemáticas da biblioteca math.hTrigonomé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ítmicaslog (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.60
Algoritmos 67
Unesp-Campus de Guaratinguetá
4.4.3 4.4.3 –– Funções EmbutidasFunções Embutidas
Funções matemáticas da biblioteca math.hPotê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 68
Unesp-Campus de Guaratinguetá
4.4.3 4.4.3 –– Funções EmbutidasFunçõ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 69
Unesp-Campus de Guaratinguetá
Exercício 6: Escrever as seguintes expressões matemáticas como expressões da linguagem C.
4.4.3 4.4.3 –– Funções Embutidas : ExercíciosFunções Embutidas : Exercícios
H= [ ( a + b ) ]d
J= sen a + cos atg a
h= pow ( A + B, D);
J= ( sin (A) + cos (A) ) / tan (A);
K=
2a
ac4bb- 2 −+ K= - B + sqrt ( pow(B,2) – 4 * A * C ) / 2 *A
Em C, para se usar as funções que calculam expoente, raiz, seno, cos etc. é necessário colocar a biblioteca math.h
Algoritmos 70
Unesp-Campus de Guaratinguetá
4.4.3 4.4.3 –– Funções EmbutidasFunções Embutidas
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
main()
{
double coseno = -1.0;
printf("O arco co-seno de %lf
eh %lf\n",coseno,acos(coseno));
system("pause");
}
Exercício 8: Fazer um programa
para imprimir o co-seno de 30º (pi/6
radianos), 60º (pi/3 radianos), 45º
(pi/4 radianos) e 90º (pi/2 radianos).
Para tanto, use a constante, "pi",
presente na biblioteca matemática,
que é referenciado pela constante
"M_PI“. Assim quando você
compilar o seu programa ela será
substituída pelo valor
3.14159265358979323846:
Exercício 7: Fazer um programa
que use a função acos para calcular
o arco co-seno de um ângulo em
radianos. O valor de arg deve estar,
logicamente entre -1.0 e 1.0
Algoritmos 71
Unesp-Campus de Guaratinguetá
4.4.3 4.4.3 –– Funções EmbutidasFunçõ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 = 60double angu_rad;printf("Este programa imprime os cosseno dos angulos fundamentais: \n");angu_rad = M_PI/2; //90 em radianosprintf("O cosseno de 90 graus eh %lf\n",cos(angu_rad));angu_rad = M_PI/6; //30 em radianosprintf("O cosseno de 30 graus eh %lf\n",cos(angu_rad));angu_rad = M_PI/4; //45 em radianosprintf("O cosseno de 45 graus eh %lf\n",cos(angu_rad));angu_rad = M_PI/3; //60 em radianosprintf("O cosseno de 60 graus eh %lf\n",cos(angu_rad)); system("pause");} //fim programa
Algoritmos 72
Unesp-Campus de Guaratinguetá
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>
#include <stdlib.h>
main()
{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");
}
Exercício 9: Fazer um programa para
calcular a raiz de índice K de um numero N
qualquer
4.4.3 4.4.3 –– Funções EmbutidasFunções Embutidas
Algoritmos 73
Unesp-Campus de Guaratinguetá
4.5.1 - Conversão implícita: real para inteiro
4.5 4.5 -- Conversão de TipoConversão de Tipo
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 e Y reais.
Algoritmo
Variáveis x, y: real
Inicio
x ← 5;
y ←2;
x ←x / y;
fim
Em termos de memória
�O valor 5.0 será atribuído a variável X, em seguida o valor 2.0 será atribuído a variável Y, a seguir o valor da variável será dividida por dois e novamente atribuída a variável X.
�Como as variáveis X e Y foram declaradas como sendo real, os valores inteiros se transformam em reais
2.0
Y
5.0
X
2.0
Y
5.0
tmp
5.0
X
Y
5.0
X
Algoritmos 74
Unesp-Campus de Guaratinguetá
4.5.1 - Conversão implícita: inteiro para real
4.5.1 - Conversão implícita:
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 -17VI 392.73
A constante inteira –17 é convertida automaticamente pelo computadorem -17.0 para se ajustar a variável.
No caso da constante 392.73, ela será convertida para inteiro mas o valorarmazenado 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 75
Unesp-Campus de Guaratinguetá
4.5.1 - Conversão implícita:
// Programa Exemplo 27
#include <stdlib.h>
#include <stdio.h>
main()
{
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”);
}
Ao se executar o programa anterior, teremos:
Algoritmos 76
Unesp-Campus de Guaratinguetá
4.5.1 - Conversão implícita:
Exemplo 28: Seja a seguinte atribuição de valores para X e Y, onde eles são declarados como inteiros
X ←5.0;y ←2.0;X ←X/Y;
� Ao se executar o programa ao lado vai ocorre uma conversão implícita por conta de X e Y serem declarados do tipo int.
� O resultado final da divisão de X por Y será 2, que é a parte inteira da divisão de 5 por 2
Exemplo 28 - Programa em C
#include <stdio.h>
#include <stdlib.h>
main()
{
int X, Y;
X = 5.0;
Y = 2.0;
X = X/Y;
printf(“ X = %d ”,X);
system(“pause”);
}
Algoritmos 77
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;
C = 4.0*6.0-3;C = 21.0;
K ←I/4 * 6;
K = 0 * 6;K = 0;
C ←A/B+1.5;
C=6.0/4.0+1.5;C=3.0;
� Apesar da variável Iser inteira, o resultado desta expressão será um número real porque a variável C é real.
Comentário� A expressão I/4
fornece o valor inteiro(zero), ao invés de 0.75 pois I é inteiro e 4
também.
Comentário
� A expressão A/B fornece um valor real e igual a 1.5. Este valor será somado ao valor 1.5 resultando em 3.0.
Comentário
Algoritmos 78
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 79
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.
Exemplo 16: Seja a atribuição Abaixo, onde x e y são inteiros
x ← 5.0;y ←2.0;r ←float(x)/y;
� Observação: O resultado da divisão entre dois inteiros seria inteiro, mas o resultado a ser fornecido será real (float), devido ao uso do operador float(X).
Programa em C
#include <stdio.h>
#include <stdlib.h>
main()
{
int X, Y;
float R;
X = 5.0;
Y = 2.0;
R = float(X)/Y;
printf(“ float(X)/Y =%f ”,R);
system(“pause”);
}
Algoritmos 80
Unesp-Campus de Guaratinguetá
#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");}
Exercício 11: Analise o programa abaixo e mostre o que aparecerá na
tela do computador
4.5.2 - Conversão explícita:
Algoritmos 81
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicações
� Problema 1: Ler dois números inteiros exibi-los. Depois, trocar os valores entre si e exibir novamente.
Algoritmo
(1) Leia(A,B);(2) Mostre(A,B);
(3) C ← A;(4) A ← B;(5) B ← A;(6) Mostre(A,B); (4)
A B
x
C
(5)A B
y
C
x x
x
Em termos de memória
(3)A B C
x y x
y
Algoritmos 82
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicações
� Problema 1: Ler dois números inteiros exibi-los. Depois, trocar os valores entre si e exibir novamente.
Algoritmo
(1) Leia(A,B);(2) Mostre(A,B);
(3) C ← A;(4) A ← B;(5) B ← A;(6) Mostre(A,B);
Programa em C
// Incluir bibliotecas !main(){
int A, B, C;printf(“Digite A e B: ”);scanf(“%d %d”,&A,&B);printf(“A = %d e B = %d \n”,A,B);C = A;A = B;B = A; printf(“A = %d e B = %d \n”,A,B);system(“pause”);
}
Algoritmos 83
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicaçõ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 Dias�Anos
printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos);
system("pause");
}
Algoritmos 84
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicaçõ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.
0
A
1
P=A+A*i
2
S
3
T Programa em C
// Incluir bibliotecas !main(){
float A, P, S, T, i;printf(“Digite investimento e juros: ”);scanf(“%f %f”,&A,&i);P = A*(1+i);S = P*(1+i);T = S*(1+i);printf(“Valor final = %f \n”, T);system(“pause”);
}
Algoritmo
Leia(A);
i ← 0.01;P ← A + A*i;S ← P + P*i;T ← S*(1+i);Escreva(T);
Algoritmos 85
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicaçõ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.
0
A
1 3
0
A
1 2 3
F
2
Item (a)
Subtrair R$10,00ao final de cada mês
Item (b)
Ao final de cada mêsmostrar o valor
Algoritmos 86
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicações
Algoritmo
Leia(A);
i ← 0.01;P ← (A + A*i-10);Mostre(P);
S ← (P + P*i-10);Mostre(S);
T ← (S*(1+i)-10);Escreva(T);
Programa em C
// Incluir bibliotecas !main(){
float A, P, S, T, i;printf(“Digite investimento e juros: ”);scanf(“%f %f”,&A,&i);P = A*(1+i)-10;printf(“Final Mes 1 = %f \n”, P);S = P*(1+i)-10;printf(“Final Mes 2 = %f \n”, S);T = S*(1+i)-10;printf(“Valor final = %f \n”, T);system(“pause”);
}
� Observação: Para A = R$ 300,
i = 1%, 3 meses e desconto de
R$10, ao final do terceiro mês o
saldo será de R$ 278,78 !
Algoritmos 87
Unesp-Campus de Guaratinguetá
Fórmula geralno Mês: F = A*(1+i)n
� 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.
0
A
1 ••• n
F
� Questão Adicional: Calcular o valor final F do investimento A, sem considerar os descontos mensais, para qualquer número n de meses.
Fórmula: P = A*(1+i)1 – 10 = A ⇒⇒⇒⇒ A*0.01=10 ⇒⇒⇒⇒ A = R$ 1000,0
1º Mês: P = A*(1+i)1 2º Mês: S = P*(1+i)1 = A*(1+i)2
C: F = A*pow(1+i,n);
4.6 4.6 -- AplicaçõesAplicações
Algoritmos 88
Unesp-Campus de Guaratinguetá
4.6 4.6 -- AplicaçõesAplicaçõ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 89
Unesp-Campus de Guaratinguetá
AutoresAutoresAutoresAutoresAutoresAutoresAutoresAutores
Prof. Dr. Aníbal TavaresProf. Dr. Aníbal TavaresProf. Dr. Aníbal TavaresProf. Dr. Aníbal TavaresProf. Dr. Aníbal TavaresProf. Dr. Aníbal TavaresProf. Dr. Aníbal TavaresProf. Dr. Aníbal Tavares
Profa. Dra. Cassilda RibeiroProfa. Dra. Cassilda RibeiroProfa. Dra. Cassilda RibeiroProfa. Dra. Cassilda RibeiroProfa. Dra. Cassilda RibeiroProfa. Dra. Cassilda RibeiroProfa. Dra. Cassilda RibeiroProfa. Dra. Cassilda Ribeiro
4 - Conceitos Básicos sobre Algoritmos e Linguagem C