Вы находитесь на странице: 1из 76

Sumário

 O que é a programação?
 Algoritmo
 O que é um algoritmo?
 O que é um programa?
 Características de um algoritmo
 Técnicas de representação
 Exercício
 Passos para a implementação de um programa
 Linguagem de programação
 Estrutura de um programa
 Tipos de dados
 Variáveis
 Constantes
 Funções Entrada/Saída

Programação I 1
O que é a programação?

 É o processo de planificar uma sequência de


instruções com o objectivo de executar uma
determinada tarefa.

 Para tal, deve-se:


1. Analisar o problema;
2. Apresentar uma solução (Algoritmo);
3. Implementar, usando uma linguagem de programação, a solução
apresentada (Programa).

Programação I 2
O que é um algoritmo?
 É uma sequência ordenada e precisa de passos, acções ou instruções, que conduzem
à solução do problema dado.

 Exemplos (dia-a-dia):
 Receita de culinária
 Mudar um pneu do carro
 Instalar um jogo/programa no computador
 Efectuar a matrícula numa escola (por exemplo na ESTG-Leiria)
 …

 Outros exemplos :
 Calcular a soma de dois números
 Calcular a nota obtida por um aluno numa UC em função das notas obtidas na componente prática e na
componente teórica da UC
 Determinar a nota máxima obtida numa UC e indicar o aluno ou alunos que a obtiveram
 Gerir a informação dos alunos da ESTG e dos seus resultados de avaliação
 …

Programação I 3
O que é um programa?

 É a escrita do algoritmo usando uma linguagem de


programação.

 Exemplos de linguagens de programação:


 C
 C++
 C#
 Pascal
 Delphi
 Java
 Visual Basic
 …

Programação I 4
Características de um Algoritmo

 Rigoroso (sem ambiguidade)


(mesma interpretação independentemente da leitura)

 Finito (tem um número finito de acções)

 Genérico

Programação I 5
Técnicas de Representação do
Algoritmo

 Pseudocódigo usadas na UC
 Fluxogramas
 Tabelas de decisão
 Quadros estruturados
 .....

Programação I 6
Pseudocódigo
 Muito aproximado à linguagem humana
 Palavras-chave (escritas em maiúsculas):
 INÍCIO / FIM
 LER / ESCREVER
 SE ... ENTÃO ... SENÃO ...
 FAZER ... ENQUANTO ...
 CASO ……. SEJA …. FAZER ….. [FAZER ….] SENÃO ….
 ENQUANTO ... FAZER ...
 PARA cada n DE ... ATÉ ... FAZER ...
Programação I 7
Fluxogramas
 São diagramas que indicam as operações a realizar e a
respectiva sequência de execução.
 Símbolos padrão:
 Início/fim
 Leitura/escrita
 Linhas de fluxo
 Decisão
 Decisão múltipla
 Processamento
Programação I 8
Exercício

 Elabore um algoritmo que permita somar dois


números, introduzidos pelo utilizador.

Deve elaborar o algoritmo usando as duas técnicas de


representação estudadas (pseudocódigo, fluxograma).

Programação I 9
Resolução em Pseudocódigo

INICIO
ESCREVER “Indique um número:”
LER numero1
ESCREVER “Indique um número:”
LER numero2
resultado=numero1+numero2
ESCREVER resultado
FIM
Programação I 10
Resolução em Fluxograma

Programação I 11
Exercício

 Elabore um algoritmo que permita determinar a nota final de


um aluno de uma UC em avaliação periódica. Deve ser pedido
ao utilizador as notas obtidas no trabalho prático e na
frequência. Os pesos e mínimos são:

Peso Mínimo
Trabalho Prático 50% 10,0
Frequência 50% 8,0
 Elabore o algoritmo usando as duas técnicas de representação
estudadas.
Programação I 12
Resolução em Pseudocódigo

INÍCIO
ESCREVER “Indique as notas do trabalho e da frequência:”
LER nota_trab
LER nota_freq
SE nota_trab < 10,0 OU nota_freq < 8,0 ENTÃO
ESCREVER “Não atingiu os mínimos”
SENÃO
nota_final = nota_trab * 0,5 + nota_freq * 0,5
ESCREVER nota_final
FIM

Programação I 13
Resolução em Fluxograma

Programação I 14
Passos para a implementação de
um programa
1. Edição do código fonte
 escrita do algoritmo usando uma linguagem de programação
(linguagem C)

2. Compilação do programa
 detecção de erros de sintaxe
 o compilador cria um ficheiro com extensão .obj

3. Linkagem
 criação do ficheiro executável (.exe)
linkagem do ficheiro .obj + livrarias usadas

4. Execução do programa
Programação I 15
Implementação
#include <stdio.h>
#include <conio.h>

void main(void){
float nota_trab, nota_freq, nota_final; /* Declaração de variáveis */

printf("Insira a nota do trabalho: ");


scanf("%f", &nota_trab); /* Obter Nota do Trabalho */
printf("Insira a nota da frequência: ");
scanf("%f", &nota_freq); /* Obter Nota da frequência */

if ((nota_trab < 10.0) || (nota_freq < 8.0)) /* Verificar mínimos */


printf("\n Não obteve os mínimos");
else
{
nota_final = 0.5*nota_trab+0.5*nota_freq; /* Calcular nota final */
printf("\n Nota Final =%.3f ", nota_final); /* Escrever nota final */
}
getch();
}

Programação I 16
Linguagem de Programação

 Conjunto de termos, palavras e sinais, que


assumem determinados significados (semântica)

 Conjunto de regras que estipulam o uso correcto


dos termos (sintaxe).

Programação I 17
Estrutura de um Programa

1. Definições de pré-processamento
Exemplo: #include <stdio.h>
Nestes dois pontos não se coloca
o ; no final.
2. Definição de constantes
Exemplo: #define PI 3.14

3. Declaração/Protótipos das funções


Exemplo: int ler_num (void);

4. Função main Obrigatório: void main (void){


......
}

5. Implementação das funções Exemplo: int ler_num (void){


.....
}
Programação I 18
Estrutura de um Programa

 A função main é uma função obrigatória no programa.

 O programa começa sempre na função main.

 Todas as instruções da função main são colocadas dentro


das chavetas ({<instruções>})

 A linguagem C faz distinção entre letras maiúsculas e letras


minúsculas.

 É importante a indentação para uma melhor percepção do


programa.

Programação I 19
Identificador
Identificador – nome dado pelo programador a uma variável, a
uma constante, a uma função.
 Pode conter letras, números e o carácter underscore ( _ );
 Não pode começar por um número;
 Não pode ter espaços em branco;
 Não pode conter acentuação (à, á, ã, ê, ç,...);
 Faz distinção entre maiúsculas e minúsculas;
 Não pode representar uma palavra reservada do C (exemplo: main,
break, if, case, ....);
 Dentro de uma mesma função não podem ser declaradas duas
variáveis com o mesmo nome. Em funções diferentes isso pode
acontecer sem qualquer conflito;
 É aconselhado dar nomes sugestivos.
Programação I 20
Variáveis

 Têm como função guardar um valor que não é fixo


(ou seja pode variar durante a execução do programa).

 As variáveis têm de ser declaradas antes de utilizadas.

 A declaração é efectuada dando um nome à variável e


indicando o seu tipo (int, float, double, char, …).

 Todas as variáveis têm um nome que deve ser único


dentro da função onde são declaradas.
Programação I 21
Declaração de Variáveis

 tipo nomeVar1[, nomeVar2, ....];


 A declaração das variáveis é SEMPRE feita a
seguir à chaveta { de cada função. Exemplo:

void main (void){


int idade, contador;
char sexo;
float salario, total_descontos;

<instruções da função main>


}
Programação I 22
Declaração e Inicialização de
Variáveis
É possível declarar e inicializar uma variável.
tipo nomeVar1 [=valor, nomeVar2=valor, ....];
A declaração e inicialização das variáveis é SEMPRE feita a
seguir à chaveta { de cada função. Exemplo:

void main (void){


int idade, contador = 0;
char sexo = ‘M’;
float salario, total_descontos=0.0;

<instruções da função main>


}
Obs: Não esquecer que o valor de uma variável varia ao longo da execução do
programa.
Programação I 23
Constantes
 Representa um valor que nunca é alterado ao longo da
execução do programa (ou seja é um valor fixo).
 Declaração:
#define NOME_CONST valor

 A declaração de constantes é colocada a seguir aos #include


(ver acetato 18)
 NUNCA colocar ; no final da declaração.
 São acessíveis em todo o programa (ou seja, podem ser
utilizadas em todas as funções do programa).
 Vantagem da declaração de constantes: Fácil alteração 
todo o programa fica actualizado.
Programação I 24
Constantes
 Exemplo1:
#define LETRA_A ‘a’
#define DESCONTO 0.20

 Exemplo2:
#define PI 3.1415

void main (void){


float raio = 2.5, perimetro;

perimetro = 2 * PI * raio;
.......
}
Programação I 25
Tipos de Dados

 Vários formatos que podem representar dados.


 Na linguagem C existem os seguintes tipos de
dados simples:
 char  caracter
 int  número inteiro (positivo ou negativo)
 float  número real (positivo ou negativo)
 double  número real (positivo ou negativo)

Programação I 26
char

 Representa apenas um único caracter.


 Exemplo:
 ‘A’
 ‘a’
 ‘?’
 ‘1’
 ‘#’

Programação I 27
Caracteres Especiais

\7 ou \a Sinal sonoro do computador


\b BackSpace
\n Mudança de linha
\t Tabulação horizontal
\v Tabulação vertical
\\ Escreve a barra invertida \
\’ Escreve a plica ‘
\” Escreve as aspas “
\? Escreve o ponto de interrogação ?
%% Escreve o sinal de percentagem %

Programação I 28
Qualificadores de tamanho e
Qualificadores de sinal

 São utilizados com os tipos de dados (int, double)


de forma a alterar a gama de valores do tipo de
dados
 Qualificadores de tamanho:
 short
 long
 Qualificadores de sinal:
 signed
 unsigned

Programação I 29
Qualificadores de tamanho

 Altera o número de bytes utilizados para representar


um tipo de dados e por sua vez a gama de valores

Qualificador de tamanho Tipo onde se aplica


short int
long int, double

Programação I 30
Qualificadores de sinal

 Altera apenas a gama de valores

Qualificador de sinal Tipo onde se aplica


unsigned int
signed int

Programação I 31
int e variações do tipo int
 Representa um número inteiro.
Tipo Descrição Exemplo
int inteiro
short int inteiro pequeno Idade: 21
long int inteiro grande BI: 123456789
signed int inteiro com sinal Temperatura: -1ºC
unsigned int inteiro sem sinal Nota: 20 valores

O signed pode ser omitido pois, as declarações sem o unsigned


são por omissão com sinal.
Programação I 32
int e variações do tipo int

Tipo Nº bytes Variação


int / short int 2 -32 768 a 32 767
long int 4 -2 147 483 648 a 2 147 483 647
unsigned int /
2 0 a 65 535
unsigned short int
unsigned long int 4 0 a 4 294 967 295

Programação I 33
int e variações do tipo int
(compiladores Dev C++, Code Blocks)

Tipo Nº bytes Variação


int 4 -2 147 483 648 a 2 147 483 647
short int 2 -32 768 a 32 767
long int 4 -2 147 483 648 a 2 147 483 647
unsigned int 4 0 a 4 294 967 295
unsigned short int 2 0 a 65 535
unsigned long int 4 0 a 4 294 967 295

Programação I 34
float & double

 Ambos são usados para guardar números com parte


decimal

 A diferença entre estes dois tipos é o tamanho que


ocupam em memória e a gama de valores
suportados.

Programação I 35
float & double

Tipo Nº bytes Variação


float 4 ±3.4E-38 a ± 3.4E+38
double 8 ± 1,7E-308 a ± 1,7E+308
long double 10 ± 3,4E-4932 a ± 3,4E+4932

Programação I 36
float & double
(compilador Dev C++, Code Blocks)

Tipo Nº bytes Variação


float 4 ±3.4E-38 a ± 3.4E+38
double 8 ± 1,7E-308 a ± 1,7E+308
long double 12 …

Programação I 37
Operadores aritméticos

Inteiros Resultado Reais Resultado

+ (adição) 5+2 7 5.0 + 2.0 7.0

- (subtracção) 5–2 3 5.0 - 2.0 3.0

* (multiplicação) 5*2 10 5.0 * 2.0 10.0

/ (divisão) 5/2 2 5.0 / 2.0 2.5

% (resto da
5%2 1 5.0 % 2.0 ERRO
divisão inteira)

Programação I 38
Operador de atribuição simples

 A atribuição de um valor a uma variável é


feita usando o sinal =

 A atribuição pode ser feita logo na


declaração da variável ou durante a
implementação do código.

Variável = expressão;

Programação I 39
Atribuição simples

 Exemplo 1:
char letra = ‘M’, caracter;
letra = ‘z’; A variável caracter toma o
caracter = letra; valor representado pela variável
letra, ou seja, toma o valor ‘z’.

 Exemplo 2:
int valor = 100;
float percentagem = 0.2, total; A variável total toma o valor
resultante da multiplicação entre
total = valor * percentagem; valor e percentagem, ou seja,
Programação I
20.0. 40
Atribuição simples
 Exemplo 3:
int num1 = 5, num2 = 2;
float resultado;
A variável resultado toma o valor
2.0. Apesar da variável ser do tipo
resultado = num1 / num2; float recebe apenas o resultado entre
dois inteiros.

 Se o objectivo é obter 2.5 então deve converter um dos


membros da divisão para float.
int num1 = 5, num2 = 2;
float resultado;

resultado = (float) num1 / num2;


Programação I 41
Funções Leitura/Escrita ou
Entrada/Saída
 Funções pré-definidas e armazenadas na biblioteca
padrão "stdio.h“
 Exemplo:
 getchar - permite a leitura de um caracter de uma entrada standard
(teclado)
 putchar - escreve um caracter numa saída standard (monitor)
 gets - leitura de uma cadeia de caracteres de uma entrada standard (teclado)
 puts - escreve uma cadeia de caracteres numa saída standard (monitor)
 scanf - entrada formatada de dados
Mais utilizadas
 printf - saída formatada de dados
Programação I 42
Funções Leitura/Escrita ou
Entrada/Saída

 Funções pré-definidas e armazenadas na


biblioteca padrão “stdio.h“

 Exemplo:
 getch() - permite a leitura de um caracter sem o mostrar no
monitor
 getche() - permite a leitura de um caracter mostrando-o no
monitor

Programação I 43
Função printf

printf (“<texto formatado>”, <lista de argumentos>);

 O texto formatado corresponde ao texto que se pretende ver no


monitor em conjunto com caracteres que representam cada
argumento.

 A lista de argumentos pode ser constituída por:


 Variáveis  Constantes

 Operações  Funções (desde que estas devolvam um valor)

 Se existir mais do que um argumento, estes são separados por ,


(virgula)
Programação I 44
Formatos de Leitura e Escrita

Tipo Formato
char %c
int %d ou %i
short int %hd
long int %ld
unsigned short int %hu
unsigned int %u
unsigned long int %lu
float %f ou %e ou %E
double %f ou %e ou %E

Programação I 45
Função printf
(escrita formatada)
 Exemplo 1 (sem argumentos): Resultado no ecrã:

Computadores
printf(“Computadores\n\te\nProgramação”); e
Programação

 Exemplo 2 (com um argumento):


Resultado no ecrã:
int ano = 2011;
Estamos no ano 2011.
printf(“Estamos no ano %d.”, ano);

Programação I 46
Função printf
 Exemplo 3 (com 4 argumentos):
char turno = ‘P’;
int nTurno1=1, nTurno2 = 2;

printf(“Em Computadores e Programação existem dois turnos: \n


%c%d \t e \t %c%d.”, turno, nTurno1, turno, nTurno2);

Resultado no ecrã:

Em Computadores e Programação existem dois turnos:


P1 e P2.
Programação I 47
Função printf

 Exemplo 4 (com 3 argumentos):


int num1=5, num2 = 2;

printf(“%d / %d = %f”, num1, num2, (float) num1/num2);

Resultado no ecrã:

5 / 2 = 2.500000
Programação I 48
Formatos de Escrita

Formato Significado Valor Resultado

%.3f Arredonda a 3 casas decimais 120.2365 120.237

Coloca o sinal (+) à esquerda se o


%+f 120.23 +120.23
número for positivo

Guarda 15 espaços para o número e


%15.3f escreve-o da direita para a esquerda e, 120.2365 _ _ _ _ _ _ _ _120.237
apenas considera 3 casas decimais.

Igual ao anterior mas preenche os


%015.3f 120.2365 00000000120.237
espaços em branco com o 0

Nota: o valor 15 e 3 usado no formato são apenas exemplos.


Programação I 49
Função scanf

scanf (“<texto formatado>”, &<lista de argumentos>);

 Se existir mais do que um argumento são separados


por , (virgula) e o & repete-se por cada variável.

 A ordem do tipo de argumentos deve ser respeitada

Programação I 50
Função scanf

 Exemplo 1 (com um argumento):


int num;
scanf(“%d”, &num);

 Exemplo 2 (com dois argumentos):


int num;
char caracter;
scanf(“%d %c”, &num, &caracter);

Programação I 51
Função scanf

 Exemplo 3: Resultado/simulação no ecrã:

char ch1, ch2; Introduza um caracter: X 


Introduza outro caracter:

Os caracteres inseridos foram => X e <=


printf(“Introduza um caracter: “);
scanf(“%c”, &ch1);
printf(“\nIntroduza outro caracter: “);
scanf(“%c”, &ch2);
printf(“\n\nOs caracteres inseridos foram: => %c e %c <=”, ch1, ch2);

Programação I 52
Função scanf

 Problema do Exemplo 3:
 A leitura do teclado é feita usando um buffer (todos os
caracteres são ali guardados até pressionarmos enter).

 Quando se insere o primeiro caracter o processo é inserir o


caracter e depois enter ( ), ficando o buffer com 2 caracteres.

  representa o caracter \n, ou seja, mudança de linha.

 Sendo assim, o primeiro caracter (o inserido) é atribuído à 1ª


variável (ch1) e o  é atribuído à 2ª variável (ch2).
Programação I 53
Função scanf

 Solução do Exemplo 3:
 Limpar o buffer antes de qualquer leitura. Este processo pode
ser realizado de duas formas:
1. Colocar um espaço em branco antes do %c  limpa os caracteres em
branco, \n, \t e \v

scanf(“ %c”, &ch2);

2. OU usar a função fflush(stdin);  limpa todos os caracteres do buffer.

fflush(stdin);
scanf(“%c”, &ch2);
Programação I 54
Exemplo
#include <stdio.h>
#include <conio.h>

void main (void){


int n_turno;
char tipo_aula;

printf("Indique número do turno e o tipo de aula (T/P):");


scanf("%d / %c", &n_turno, &tipo_aula);

printf("\n\nO aluno frequenta a aula %c do turno %d.",


tipo_aula, n_turno);

getch(); Resultado no ecrã:


}
Indique número do turno e o tipo de aula (T/P):2 / P

O aluno frequenta a aula P do turno 2.


Programação I 55
Função getchar()

 Efectua a leitura de um caracter.


 Evita os formatos de leitura e a utilização do
operador endereço, &.
 Exemplo:
char caracter;
printf(“Indique o tipo de aula (T/P): ”);
caracter = getchar();

Programação I 56
Função putchar(variavel)

 Escreve no monitor um caracter.

 Evita os formatos de escrita.

 Exemplo:
char caracter = ‘a’;
putchar(caracter);

Programação I 57
Operadores relacionais

== (igual)
!= (diferente)
> (maior)
>= (maior ou igual)
< (menor)
<= (menor ou igual)

Programação I 58
Operadores lógicos

&& (and)
|| (or)
! (not)

Atenção:
Na linguagem C o valor lógico FALSO é representado por 0.
Qualquer valor diferente de 0 é VERDADE.

Programação I 59
Operador atribuição composta

 Atribuição composta:
+=
Exemplos:
-=
+= a+=2;  a=a+2;
*=
-= a-=2;  a=a-2;
/=
*= a*=2;  a=a*2;
%=
/= a/=2;  a=a/2;
%= a%=2;  a=a%2;

Programação I 60
Operador
incrementação/decrementação

 Incrementação
++

 Decrementação
--

Programação I 61
Operador
incrementação/decrementação

 Operador de incrementação: Exemplo


prefixo i++;
posfixo ++i;

 Operador de decrementação: Exemplo


prefixo i--;
posfixo --i;

Programação I 62
Operador
incrementação/decrementação
 Operador de incrementação. Exemplo:
i++;  ++i; (quando aparece isolado numa expressão)

 Operador de decrementação. Exemplo


i--;  --i; (quando aparece isolado numa expressão)

Atenção: Quando aparecem numa expressão podem conduzir a resultados


diferentes!

Programação I 63
Operador
incrementação/decrementação
Exemplo 1:
int x, n=7;
x=++n; /*incrementa o valor de n (que passa a ter o valor 8) e
atribui-o a x (que passa a ter o valor 8)*/

Exemplo 2:
int x, n=7;
x=n++; /*atribui a x o valor de n (x passa a ter o valor 7)
e de seguida incrementa o valor de n (n passa a ter o
valor 8)*/

Programação I 64
Expressão

 Formada por um conjunto de operandos,


ligados por operadores
 Exemplo:
y – x / 2 + 100
Operandos: Operadores:
y -
x /
2 +
100

Programação I 65
Cálculo de expressões

 No cálculo de expressões é preciso ter em


atenção:
 A prioridade dos operadores

 O tipo de cada operando

Programação I 66
Prioridade dos operadores
+alta () cálculo de funções
-- ++ !
* / %
+ -
< > <= >=
== !=
&&
||
= += -= /= *= %=
+baixa
+alta Programação I +baixa 67
Prioridade dos operadores

 Numa expressão a prioridade dos operadores


pode ser alterada utilizando parêntesis:
Exemplo:
y – x / 2 + 100;

(y – x) / 2 + 100;

Programação I 68
Cálculo de expressões

 No cálculo de expressões é preciso ter em


atenção o tipo de cada operando.
Exemplo:
y – x / 2 + 100;
Se y for do tipo int e x for do tipo float, qual
será o tipo do resultado?

Programação I 69
Conversão por atribuição
Exemplo1: Exemplo2:
valor1=valor2; valor1=valor2;

double int double


int
long long
float float
Não há problema!
Problema?
Sim, pode existir perda de
informação.

Programação I 70
Conversão aritmética

 No cálculo de expressões que incluam


operandos de mais do que um tipo seguem-se
as seguintes regras de conversão aritméticas:

Programação I 71
Regras de conversão nas
expressões (1)

Os operandos do tipo char e short são


convertidos para int

Programação I 72
Regras de conversão nas
expressões (2)
Se um dos operandos é do tipo long double os outros são
convertidos para long double e o resultado da expressão é
long double
Senão
Se um dos operandos é do tipo double os outros são
convertidos para double e o resultado da expressão é double
Senão
Se um dos operandos é do tipo float os outros são convertidos
para float e o resultado da expressão é float
Senão

Programação I 73
Regras de conversão nas
expressões (3)
Se um dos operandos é do tipo unsigned long os outros são convertidos
para unsigned long e o resultado da expressão é unsigned long
Senão
Se um dos operandos é do tipo long os outros são convertidos para long e o
resultado da expressão é long
Senão
Se um dos operandos é do tipo unsigned int os outros são convertidos para
unsigned int e o resultado da expressão é unsigned int
Senão
O resultado da expressão é int

Programação I 74
Operação de casting

 A linguagem C permite ao programador


forçar o resultado de uma expressão a um
tipo diferente do que resultaria do seu cálculo
de acordo com as regras anteriores.
 Este processo é chamado operação de
casting e consegue-se antecedendo um dos
operandos da expressão, ou a expressão com
o tipo desejado entre parêntesis.

Programação I 75
Operação de casting

 Exemplo:
int x=5, y=2;
float m;

m= (float) x/y;

Programação I 76

Вам также может понравиться