Title: Fundamentos de Programa
1Fundamentos de Programação
- Alexandre Carlos Brandão Ramos
- http//www.ice.unifei.edu.br/ramos
- ramos_at_unifei.edu.br
2Ementa
01/08/2001
- Fornecer os principais conceitos de linguagens de
programação e explorar esses conceitos a partir
de uma linguagem algorítmica (Português
Estruturado) bem como sua implementação a partir
do conhecimento da linguagem C.
3Objetivos
- 1. Fornecer conhecimentos básicos sobre
Álgebra binária - 2. Introduzir conceitos sobre Representação
de Dados, de modo a facilitar o entendimento da
lógica de programação - 3. Fornecer conhecimentos básicos sobre o
funcionamento de Computadores Digitais (hardware
e software) - 4. Introduzir ao conhecimento da Programação
Estruturada, permitindo a criação (Análise e
Projeto) de algoritmos. - 5. Fornecer subsídios para a implementação
de programas utilizando a Linguagem de
programação C.
4Critérios de Avaliação
- 60 da nota do bimestre prova
- 30 da nota do bimestre trabalho individual a
ser realizado em laboratório - 10 trabalhos em grupo (máximo de 4 alunos) a ser
entregue no dia da prova teórica. - Datas de Provas
- B1 Teórica 29/09/2015
- Laboratorio 01/10/2015
- B2 Teórica 03/11/2015
- Laboratório 04/11/2015
5Pré-história
- Pré-história das calculadoras
- O primeiro dispositivo de cálculos foi o ábaco,
originário da China em 2000 AC.
6Régua de cálculo
- No início do século XVII, o escocês John Napier
inventou um dispositivo chamado Ossos de Napier
que são tabelas de multiplicação gravadas em
bastão, o que evitava a memorização da tabuada, e
que trouxe grande auxílio ao uso de logaritmos,
em execução de operações aritméticas como
multiplicações e divisões longas. - Hoje, o dispositivo aperfeiçoado é empregado
freqüentemente pelos engenheiros, através da
régua de cálculo.
7Calculadoras
- A primeira calculadora somente somava e subtraía
e foi inventada por Blaise Pascal na França em
1642, para ajudar o seu pai. - A máquina contém como elemento essencial uma roda
dentada construída com 10 "dentes". Cada "dente"
corresponde a um algarismo, de 0 a 9. - A
primeira roda da direita -
corresponde às unidades, a -
imediatamente à sua - esquerda
corresponde às - dezenas, a
seguinte às - centenas e
sucessivamente.
8A máquina de Leibniz
- Cerca de 30 anos após a construção da máquina de
Pascal, Gottfried Wilhem Von Leibniz inventou um
dispositivo constituído por um conjunto com dez
"dentes", cada um dos quais mais comprido que o
anterior, que permitiu efetuar de modo automático
a multiplicação e divisão.
9Alan Turing
- Alan Turing imaginou uma máquina universal que
pudesse realizar cálculos automaticamente,
demonstrando que um conjunto de estruturas
simples podia resolver qualquer problema
complexo. Esta máquina não chegou a ser montada. - Entretanto ele e a sua equipe desenvolveram o
Colossus, um dos primeiros computadores do mundo,
visto aqui em operação durante a Segunda Guerra
Mundial. - Essa máquina enorme continha 1.500 válvulas, e
sempre alguma se queimava em alguns minutos. O
Colossus era capaz de processar 5.000 caracteres
por segundo, e foi responsável pela decodificação
das mensagens alemãs "Enigma".
10John Von Neumann
- Matemático brilhante, fugiu da Alemanha nazista
para os Estados Unidos, professor em Princeton,
participou do projeto para a construção da bomba
atômica. - Foi convidado para o projeto ENIAC (Electronic
Numeric Integrator And Calculator). O trabalho
estava sob a orientação de engenheiros
eletrônicos mas, como matemático, analisou o
problema de modo diferente e
redigiu um relatório que estruturou a arquitetura
dos modernos computadores. - Ele e sua equipe desenvolveram o EDVAC
(Electronic Discrete
Variable Computer) onde, foi aplicada a idéia de
programação interna que trata do armazenamento de
programas, codificados de acordo com certos
critérios na memória do computador e não em
dispositivos externos, como ocorria até então. - Esse procedimento aumenta a operacionalidade dos
programas, pois grupos de instruções podem ser
executados várias vezes e na ordem que se fizer
necessária.
11Computadores modernos
- Mudanças tecnológicas
- vacuum tube -gt transistor -gt IC -gt VLSI
- Nanocircuitos
- dobram a cada 1.5 anos capacidade de memória
velocidade do processador (devido a avanços
tecnológicos e organização)
12Problemas
- Nos anos 60/70
- minimizar espaço em memória melhora o desempenho
- Problema atual
- hierarquia de memórias
- paralelismo dos processadores
- otimização dos compiladores
- sistema operacional...
13O que é um computador?
- Componentes
- entrada (mouse, teclado)
- saída (monitor, impressora)
- memória (discos, DRAM, SRAM, CD)
- rede
14Sistemas de Numeração
- Introdução
- Existem várias regras que permitem ler e escrever
qualquer número, usando poucas palavras e poucos
símbolos. - O conjunto de tais regras constitui um Sistema de
Numeração. Estes sistemas, têm variado com as
épocas e com os povos.
15Base de um Sistema
- É o número de elementos necessários para formar
um conjunto padrão que auxilie a contagem de
objetos. - Assim, quando falamos em base 10, estamos
pensando na formação de conjuntos com dez
elementos, isto é, dada uma coleção de objetos,
procuramos saber quantos conjuntos de 10 podem
ser formados. - A base 10 é usada desde a antigüidade, dada a
correspondência com os dedos das duas mãos. Se
tivéssemos 8 e não 10 dedos nas mãos qual seria a
nossa base de numeração?
16Outras bases
- Um sistema de base 12, é aquele que forma
conjuntos de doze elementos. É nessa base que
costumeiramente se contam as (em dúzias) as
frutas, os ovos etc. - A contagem do tempo, desde os antigos babilônios,
é feita na base sessenta (o conjunto de sessenta
segundos constitui um minuto) - A civilização Maia, da América Central, usava a
base vinte para a contagem de seus objetos - Os computadores utilizam a base dois...
17Base decimal
- Principais características
- é de base dez
- usa somente os dez numerais indo-arábicos
(algarismos) 1,2,3,4,5,6,7,8,9 e 0 para escrever
todos os números. - Obedece ao Princípio da Posição Decimal.
- Todo algarismo escrito imediatamente à esquerda
de outro representa unidades de ordem
imediatamente superior (dez vezes) à desse outro - exemplo 33 o primeiro 3 vale trinta (3x10) e
o segundo 3 vale três mesmo!
18Sistemas antigos - Egípcio
- Há 6.000 anos eles
- utilizavam um
- sistema decimal
- (dez cajados
- valem um osso,
- dez ossos valem
- uma corda etc.) porém não conheciam o Princípio
da Posição, razão porque se tornava difícil a
representação de números grandes.
19Exemplos
20Sistemas antigos - Babilônio
- Há 5.000 anos atrás eles utilizavam um sistema de
base sessenta com símbolos cuneiformes. - Números usados
- Regras para escrever
- Para números menores
- que sessenta obedece ao
- mesmo princípio da
- justaposição usado pelos
- egípcios.
21Sistemas antigos - Babilônio
- Para números maiores que sessenta usa-se (e pela
primeira vez na história!) o Princípio da Posição
de base sessenta (Princípio Sexagesimal).
Exemplos
22Sistemas antigos - Romano
- Há 2.100 anos atrás os romanos utilizavam os
seguintes numerais - I um V cinco X dez L cinqüenta
- C cem D quinhentos M mil
- Regras para escrever
- Somente os numerais I, X, C e M podem ser
repetidos no máximo 3 vezes consecutivas. - Se um numeral (ou mais) está à direita de outro
de igual ou maior valor, somam-se os seus valores
(princípio aditivo da justaposição) e se está
(com exceção de V, L, D e M) à esquerda de outro
de valor imediatamente superior, subtraem-se
(princípio subtrativo da justaposição).
23Sistemas antigos - Romano
- Para aumentar o valor do número 1.000 vezes,
coloca-se um traço horizontal sobre o numeral
(com exceção do I) para aumenta-lo um milhão de
vezes colocam-se dois traços e assim
sucessivamente. Exemplos - 3 III 9 IX 21 XXI 206 CCVI
-
- 1.969 MCMLXIX
- Nos sistemas antigos, não existia o ZERO que foi
introduzido pelos hindus há 1500 anos atrás.
24Sistemas modernos
07/08/2001
- Os vários sistemas de numeração que
- hoje prevalecem, se valem do
- Princípio da Posição, que varia de
- acordo com a base adotada, que em
- várias aplicações não é mais a base 10.
- Os computadores utilizam a base dois
- (Sistema de Numeração Binário),
- usando somente dois numerais 0 e 1,
- para descrever qualquer número.
25Mudança de base
- Ou decomposição, é conversão de um número escrito
em uma determinada base para uma outra qualquer,
exemplo - Base 10 (0 1 2 3 4 5 6 7 8 9)
- 5.386 5 x 1000 3 x 100 8 x 10 6
- 5 x 10³ 3 x 10² 8 x 10¹ 6 x 10º
- Base 8 (0 1 2 3 4 5 6 7 8)
- 12348 1 x 8³ 2 x 8² 3 x 8¹ 4 x 8º
- 12348 1 x 512 2 x 64 3 x 8 4 x 1
- 12348 512 128 24 4
- 12348 66810 ? Transformação para a base 10.
- Base 16 (0 1 2 3 4 5 6 7 8 9 A B C D E F)
- 1A2F 1 x 16³ A x 16² 2 x 16¹ F x 16
26Mudança de base
- Base 16 (0 1 2 3 4 5 6 7 8 9 A B C D E F)
- 1A2F16 1 x 16³ A x 16² 2 x 16¹ F x 16º
- 1 x 16³ 10 x 16² 2 x 16¹ 15
x 16º - 4096 2560 32 15
- 670310
-
27Mudança de base
- Da base10 para a base 2
- 3010 111102
- 111102 1 x 24 1 x 23 1 x 22 1 x 21 0 x
20 - 16 8 4 2 0
- 3010
28Mudança de base
- Da base 10 para a base 4
- 3010 1324
- 1 x 4² 3 x 4¹ 2 x 4º
- 16 12 2
- 1324 3010
-
29Operações Aritméticas
08/08/2001
- Adição
- Regra 1 0 0 0
- Regra 2 0 1 1
- Regra 3 1 0 1
- Regra 4 1 1 0 e vai 1 10
- Exemplos
- 1 0 0 4 1 11 01 1
5 - 0 1 0 2 0 1 1 3
- 1 1 0 6 1 0 0 0
8
30Operações Aritméticas
Regra 1 0 - 0 0 Regra 2 0 - 1 1 e
empresta 1 Regra 3 1 - 0 1 Regra 4 1 - 1
0 Exemplos 1 1 3
10 10 10 10 10 10 10 2 -
1 0 2 - 0 1 1 1 7 -
0 1 1 0 1 1 0
0 1 1 3 0 1 3
Lembrar que a subtração começa da
direita para a esquerda
31Representação de números negativos
- Bit de sinal
- Define-se a quantidade de dígitos a ser
utilizada, por exemplo 4 dígitos (4 bits) e
usa-se o bit mais a esquerda como o bit de sinal,
por exemplo - 0000 equivale ao numero zero
- 0001 equivale ao número 1 positivo (1)
- 1001 equivale ao número 1 negativo (-1)
- Pode ocorrer overflow!
32Representação de números negativos
- Complemento de 1
- Define-se a quantidade de dígitos a ser
utilizada, por exemplo 4 dígitos (4 bits) e
inverte-se todos os dígitos (usa-se o bit mais a
esquerda como o bit de sinal), por exemplo - 0101 5
- 1010 -5
- Dois tipos de zero 0000 0
- 1111 -0
Decimal Complemento de 1 7 0111 6 0110
5 0101 4 0100 3 0011 2 0010 1
0001 0 0000 -1 1110 -2 1101 -3 1100 -4
1011 -5 1010 -6 1001 -7 1000 -0 1111
33Representação de números negativos
- Complemento de 2
- Define-se a quantidade de dígitos a ser
utilizada, por exemplo 4 dígitos (4 bits) e
inverte-se todos os dígitos e soma-se 1 ao numero
que foi invertido, por exemplo - 0101 5 ? 1010
- 1
- 1011 (5 em
complemento de 2) - Somente um tipo de zero 0000 0
- Nesse caso, com 4 bits, representamos os numeros
de 7 a -8.
Decimal Complemento de 2 7 0111 6
0110 5 0101 4 0100 3 0011 2
0010 1 0001 0 0000 -1 1111 -2
1110 -3 1101 -4 1100 -5 1011 -6 1010
-7 1001 -8 1000
34Operações Lógicas
- Todos os sistemas digitais são construídos usando
apenas 3 operações lógicas básicas, também
chamadas de portas lógicas, quais sejam - E (and)
- Ou (or)
- Não (not)
35Operação lógica E
- Gráficamente
- B A Y A . B Y
- 0 0 0
- 0 1 0
- 1 0 0
- 1 1 1
Tabela Verdade
36Operação lógica OU
- Gráficamente
- B A Y A B Y
- 0 0 0
- 0 1 1
- 1 0 1
- 1 1 1
37Operação lógica NÃO
- Gráficamente
- A Y A ?
- 0 1
- 1 0
38Expressões e circuitos
- Pode-se escrever uma expressão lógica (booleana)
que seja executada por qualquer circuito lógico,
exemplo
- Divide-se o circuito lógico em partes
- Colocar na saída de cada bloco a expressão
correspondente - Juntam-se as expressões
39Exercícios
- Escrever a expressão lógica executada pelo
circuito abaixo - Dada a expressão lógica, desenhar o circuito
- S (A B) . (C D)
- S (A B) C (C . D)
- Representar as tabelas-verdade dos exercícios
anteriores.
40Algoritmos
41Resolução de Problemas
Podemos identificar duas grandes estratégias de
resolução de problemas 1. Estratégias
algorítmicas, generalistas, por exemplo, os
métodos numéricos, os sistemas de bancos de
dados, as planilhas etc. 2. Estratégias baseadas
em conhecimento (especialistas) por exemplo,
sistemas especialistas, sistemas de
reconhecimento de voz, tutores inteligentes etc
42Exercícios
- Represente algorítmicamente a solução dos
seguintes problemas - 1. Sejam 2 vasilhames dágua, um de 4 litros e
outro de 3 litros. Nenhum deles possui qualquer
marcação de medida. Há uma torneira que pode ser
utilizada para encher os vasilhames de água. Como
você poderá colocar exatamente 2 litros dágua
dentro do vasilhame de 4 litros?
43Exercícios
2. Três missionários e três canibais se encontram
em um lado do rio. Todos concordam que precisam
chegar do outro lado. Mas os missionários não
confiam nos canibais. Assim, os missionários
querem atravessar o rio de modo tal que o número
de missionários em qualquer das margens nunca
seja inferior ao número de canibais que estiver
do mesmo lado. O único barco disponível só
carrega 2 pessoas por vez. Como todos poderão
chegar ao outro lado, sem que os missionários
arrisquem suas vidas? Trabalho 1, para ser
entregue no dia 19/08/2014 prova, impresso em
folha de papel Almaço (pode ser a mesma da
primeira série de exercícios) os passos numerados
e em língua portuguesa.
44Fluxogramas
Corresponde a uma forma gráfica muito comum
utilizada para representar um algoritmo,
indicando a seqüência em que as primitivas devem
ser executadas.
45Primitivas Gráficas
Início/Fim do
programa
Processamento Decisão
46Montando um fluxograma
Em um fluxograma as operações primitivas aparecem
envolvidas por retângulos, com exceção da
primitiva Decisão, a qual é envolvida por um
losango. As operações são interligadas
por SETAS (--gt).
47Exemplo
Dados dois números inteiros positivos A e B,
calcular o valor absoluto de A - B.
Resposta em forma de texto nesse caso devemos
realizar os seguintes passos 1. Obter os valores
de A e B 2. Verificar qual deles é o maior 3.
Subtrair o número menor do número maior e 4.
Apresentar o valor resultante.
48Gráficamente
Início
Obtenha A,B
A lt B
C lt-- B - A
C lt-- A - B
Forneça C
Fim
49Exercício
1. Calcular o produto de 10 por 7.
Início
PROD lt-- 107
Forneça PROD
Fim
50Estruturas de Dados
51Programa
- Estruturas básicas listas, árvores e suas
generalizações. Manipulação de ponteiros.
Algorítmos e manipulação de estruturas de dados.
Inserção, eliminação, busca e percurso.
Aplicações. - Bibliografia
- Estruturas de dados. Paulo Veloso, Clésio Veloso
dos Santos e outros. Ed. Campus. - Algorítmos e Estruturas de dados. Guimarães
Lages. Ed. LTC. - Estruturas de dados Fundamentais conceitos e
aplicações. Silvio do Lago. Ed. Érica
52Desenvolvimento de Programas
O processo de solução de problemas por meio de
computador pode ser descrito a partir das
seguintes etapas 1. Especificação do
problema 2. Projeto em alto nível
3. Análise de alternativas 4.
Refinamento e codificação 5. Verificação
do comportamento Nesta descrição devemos
ressaltar 3 pontos 1. Estruturas de dados, que
retratam as relações lógicas existentes entre os
dados, de modo análogo ao uso de um modelo
matemático para espelhar alguns aspectos de uma
realidade física.
532. Operações, manipulam as estruturas de dados
transformando-as. 3. Estruturas de Representação,
que são formas de armazenar na memória os dados,
isto é, as estruturas de dados manipuladas pelas
operações, que devem 3.1 Preservar as
relações lógicas existentes entre os dados.
3.2 Permitir que as operações sejam descritas por
procedimentos simples e eficientes.
54Tipos de dados
55Tipos de Dados
Para descrever os algorítimos e procedimentos
durante o curso, vamos utilizar uma linguagem de
descrição muito parecida com as linguagens ALGOL
e PASCAL. A noção do tipo de dados ocorre na
maioria das linguagens de programação. O tipo da
variável delimita o conjunto de valores que ela
pode tomar e as operações que podemos efetuar com
elas. Geralmente uma linguagem de programação
oferece 2 tipos de Tipos de dados Tipos
Primitivos São tipos básicos pré definidos
Tipos construídos tipos criados a partir de
mecanismos presentes na linguagem.
56Exemplos
5 div 2 2 5 mod 2 1
Tipos primitivos Operações aceitas inteiro -
int - div mod real - real
- / lógico - log e ou
não (.e. .ou. V ?) caracter- car
?
Exemplos Tipos
inteiro ? Real ? Lógica ? Caracter ?
?V F e ?F V
57Funções de Transferência
São operações especiais que manipulam variáveis
de tipos primitivos, diferentes entre si, por
exemplo Xi sendo X real e inteiro. Comparações
também podem ser consideradas funções de
transferência, por exemploX lt i sendo X real e i
inteiro e o resultado lógico F(V) Trunc, converte
um numero real em inteiro trunc (75.37)75 Tier,
converte inteiro em real tier (75) 75.0 Ord,
transforma car em int que é seu numero de ordem
no conjunto de caracteres ASCII ord (0) lt...lt
ord (9)lt...lt ord(A)lt...lt ord(a). Mais
funções de transferência podem ser obtidas nos
tipos construídos.
58Mecanismo para construção de tipos
Utilizados para construir tipos novos a partir de
tipos primitivos, segundo a definição
Tipos nome_do_tipo definição_do_tipo a ser
utilizada com os seguintes mecanismos Tipos
construídos forma Geral Vetor - Vet
Vet (limite inferior...limite
superior) de tipo registro - reg
reg (seletor1 tipo1, seletor2
tipo2,...,seletorn tipon) seqüência- seq
seq de tipo p/ ex tipo cadeia
seq car referência - ref
ref a tipo p/ ex tipo matricula ref int
alternativa - alt alt (tipo1 tipo2
... tipon ) p/ ex tipo questão alt (int
car)
59Exemplos
Vetor tipo dia vet 0...30 de int
1,2,3,4,...31 onde dia2 3
dia i 31 então i 30 Registro tipo
inscriçãoreg (disciplina int, turma car) Se
matricula inscrição Se matricula é uma
variável do tipo inscrição, então matricula (103,
a) daí temos matricula.turma a
matricula.disciplina 103
O elemento da turmaa, quer inscrever-se na
disciplina 103
60Seqüência tipo cadeia seq car Se x cadeia e
xlt r, a, mgt Seq. De comprimento 3
y cadeia e ylte, m, i, g, r, agt
Seq. De comprimento 6 Então princ x r
cont x lt a, mgt yconc x lt e,
m, i, g, r, a, r, a, mgt Se Z
cadeia e Zlt a gt Então princ Za cont zltgt
Seqüência nula de comprimento 0
61Referência
Tipo de matricula ref int Este mecanismo
permite uma modalidade dinâmica de alocação, ao
contrário dos mecanismos anteriores (vet, seq,
etc.) cuja alocação é contínua. Se geografia
matrícula o espaço necessário para a variável
geografia compreende 2 partes 1 parte do valor
armazena um valor do tipo int 2 parte de
posição armazena uma indicação de posição da
localização da parte de valor.
62Sejam os comandos
Aloque geografia a) após a declaração da
variável b)após a execução do comando
alouque Desaloque geografia c)após a execução
do comando
(Na memória)
Parte de posição (geografia)
Parte de posição
Parte de valor geografia
Parte de posição
63Permite que uma mesma variável possa, em momentos
diferentes, ter valores e tipos diferentes
Alternativa tipo questão alt ( int car ) Se
resposta questão Então resposta? tem
valor igual a 1 (int) ou 2 (car) Enumeração Permi
te definir tipos de dados por meio dos valores
que os dados daquele tipo podem tomar. Tipo mês
(jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez)
seja mês_nasc mês Se mês_nasc
dez Então Processo qualquer
janltfevltmarlt...ltdez
64Variáveis, Declarações e Expressões
Nomes (identificadores) podem ser usados para
denotar variáveis, do seguinte modo var nome
tipo ou nome1, nome2,...,nome3
tipo Todas as variáveis existentes no programa
fonte devem ser declaradas uma vez ( e somente
uma vez) no seu cabeçalho, exemplos Tipos
Variáveis matr10 vet
0..9 de vet 0..9 de real adj,
custo matr10 status reg (no int, ferias
log, dia int) folha seq de
status nome seq car
alfa vet 1970...1975 de
nome celula ref int
onde celula
65Comandos Básicos
66São utilizados para manipular as variáveis, são
eles Atribuição variável
expressão Entrada Leia (
lista_de_variáveis) Saída Escreva
( lista_de_variáveis) Se condição então
comando Condicionais Se condição então
comando senão comando Interação
Enquanto condição faça comando Repita
comando até (que)
condição para variável de valor_inicial incr
valor_do_incremento até
valor_inicial. Faça
comando Escape de malha Saída ou
escape Seleção Conforme
variável, Faça lista_dos_casos
67Atribuição
- V ? e (e precisa ser do mesmo tipo de V)
- X ? (YZ)/2.0 x,y e z real
- O valor de X depois da avaliação será média
aritmética dos valores de Y e Z antes - i ? i1 exemplo comum para contagens
Variáveis de tipo contruído - var custo vet1..5 de real
- custo1 ? custo2 7.8
var matr reg(disc
int, turma car)
matr ? (2015, a ) - Exemplos
68Entrada de Dados
- Leia (V1, V2, V3, ... , Vn)
Neste caso todas as
variáveis listadas recebem vetores do dispositivo
de entrada. Por exemplo - var
- x real i int a vet 1..3 de
int - Início
- leia (x,a,i)
- Fim.
- Causará a leitura do dispositivo de entrada
para x, a e i de um real, um vetor e um inteiro.
- Exemplos
69Saída de Dados
- Escreva (V1, V2, V3, ...Vn)
Neste caso todas as
variáveis listadas serão escritas no dispositivo
de saída, por exemplo - var
- i int a vet 1..5 de int x
real - Início
- x ? 2.1 i ? i 2 a2 ? i
- escreva(i,a,x)
- Fim.
- Exemplos
70Condicional
- Se L Então A Senão B
- var x,y,z real Calcula o menor de 2
nos. - Se x lt y Então z ? x comando simples
- Senão Início comando
composto - z ? y
- Se x lt z Então z ?
x - Fim
- A avaliação da condição não altera o valor de
nenhuma variável mesmo que ela contenha
expressões como - Se (2.0y lt x/3.2) .e. (zltgt0) Então...
- Exemplos
71Iteração - Enquanto
- Enquanto L Faça A
- Var x, y int
- Início
- Enquanto x lt y Faça x ? 2y
- Enquanto x ltgt y Faça
- Se x gt y Então x ? x - y
- Senão y ? Y - x
- Fim.
- Causa a repetição do comando até que xy. Caso o
sejam no início o programa termina após o
primeiro teste.
72Iteração - Repita
- Repita A até L
- Var x,y int
- Início
- Se x gtlt y Então
- Repita
- Se x gt y Então x ? x-y
- Senão y ? y-x
- Até xy
- Fim.
73Iteração - Para
- Para V de i incr P até F Faça A
- Var i, soma int
- valor vet 1..10 de int
- Início
- Soma ? 0.0
- Para i ? 1 até 10 Faça
- soma ? somavalori
- Fim.
74Seleção
- Caso V Faça (V1C1, V2C2,...,VnCn) ou
- Caso V Faça (V1C1, V2C2,...,VnCn)
- Senão Faça (V1C2, V2C3,...,VnCn1)
- Onde Vi são valores e Ci são comandos,
exemplo - Var Ch car
- Início
- Caso Ch Faça
- A..Z,a..z Escreva (Letra)
- 0..9 Escreva(Digito)
- ,-,,/ Escreva
(Operador) - Senão Escreva (Caracter especial)
- Fim
- Fim.
-
75Vetores
76Variáveis Indexadas - Vetores
- A utilização de vetores em
- computação é uma técnica
- muito útil para a otimização
- de tempo e memória e torna
- um programa mais elaborado
- e eficiente.
- Forma geral
- Tipo vetor vet1..3 de int
- Var A, B, C vetorz
77Leitura e Escrita de Vetor
- Exemplo Leitura
- Var x vet1..4 de int
- Início
- Para i 1 até 4 Faça leia(xi)
- Fim.
- Exemplo Escrita
- Var x vet1..4 de int
- Início
- Para i1 até 4 Faça Escreva(xi)
- Fim.
- É bom lembrar que poderíamos usar os comandos
Repita e Enquanto, tanto na leitura quanto na
escrita.
78Matrizes
79Variáveis Indexadas - Matrizes
- Uma matriz é uma variável
- indexada que possui 2 dimensões
- e portanto precisa de 2 índices
- para marcação de valor. Sua
- representação matemática é
- dimensão m - linhas representação Amxn
- n - colunas
- Forma geral
- Tipo matriz vetor1..3,1..3 de int
- Var A, B, C matriz
80Leitura e Escrita de uma Matriz
- Faz-se necessário 2 varreduras,
- uma com a variável j percorrendo
- as colunas e outra com a variável
- i percorrendo as linhas
- Exemplo Leitura
- Para i 1 até m Faça
- Para j 1 até n Faça Leia(Ai,j)
- Exemplo Escrita
- Para i 1 até m Faça
- Para j 1 até n Faça Escreva(Ai,j)
-
-
81Exemplo
- Fazer um algoritmo para ler e imprimir a matriz
-
- Algoritmo matriz
- var A vet1..3,1..3
de int i,j int - Inicio
- Para i 1 ate 3
Faça - Para j 1 ate 3
Faça Leia(Ai,) - Para i 1 ate 3
Faça - Para j 1 ate 3
Faça Leia(Ai,) - Fim.
82Registros
83Registros
- São conjuntos de dados logicamente relacionados,
mas de tipos diferentes (inteiro, real, car
etc.) Utilizamos registros, quando vetores ou
matrizes possuem diferentes componentes dentro de
um mesmo campo, por exemplo - Como criar uma
matriz - desse tipo,
onde existem - 2 tipos de
variáveis (int - e car)?
Percebe-se que é - impossível a
utilizaçãode matrizes, - pois na mesma
declaração só pode conter um tipo de elemento.
Por isso utiliza-se reg.
84Forma Geral de Registro
- Tipo
- pagantes reg (cadast int,
- nome
caract, - bandeira
caract, - pagamento
caract) - Pode-se utilizar vetor composto por reg ou matriz
composta por reg, exemplo - Escreva um algoritmo que dados 10 codigos de
profissão, emita o nome da profissão
correspondente.
85Tipo lista reg(codigo int,
nomecaract) Var Tab lista
cod,i,k int Inicio Para i 1 ate 10 Faça
leia(tabi.codigo, tabi.nome) Leia (cod)
recebe o codigo para comparar Repita
i 1 Enquanto(tabi.codltgtcod) e (ilt10)
Faça ii1 Se (igt10) Então
Escreva(Codigo invalido) Senão
Escreva(Cod. Desejado ,tabi.nome)
Ate(cod0) Fim
86Linguagem C
87Linguagem C
- Principais Características
- Entrada e saída de dados
- Bases numéricas
- Estruturas de seleção
- Estruturas de repetição
- Matrizes/vetores
- Operadores lógicos
- Funções internas e subprogramas
88Ambiente de programação
- Para a edição de programas, compilação e execução
utilizaremos o ambiente Turbo C, especificamente
a IDE (Integrated Design Environment) que
funciona a partir dos sistemas operacionais DOS e
WindowsXX. - A IDE é uma interface de desenvolvimento prática
e eficiente que vai facilitar bastante o
desenvolvimento dos programas em C. - Maiores detalhes do funcionamento da IDE,
principais menus e comandos de edição e
compilação estão disponíveis em Turbo C - Guia do
Usuário.
89Identificadores
- Usados para nomear as variáveis, as funções e os
rótulos dos programas. A linguagem C - reconhece os 31 primeiros caracteres do nome e
- diferencia as maiúsculas e as minúsculas.
- O identificador sempre começa por letra
- Normalmente maiúsculas ? constantes
- minúsculas ? variáveis
- Exemplo Corretos Errados
- cont
1cont - teste23
alô! - Alto_balanco
alto..balanço
90Palavras reservadas
O nome deve ser diferente das seguintes palavras
reservadas int char float void enum short long s
igned unsigned double struct union typedef sizeof
auto register static extern const volatile goto if
else switch case default break while do for conti
nue return
91Tipos e tamanhos
- Tipos simples
- char caracter (1 byte)
- int inteiro (gt 2 bytes dependendo da máquina)
- float ponto flutuante, precisão simples (gt 6
bytes, dep. Máq.) - Qualificadores
- short se aplica ao tipo int long se aplica a
int e float - signed se aplica a char e int unsigned idem
char e int - Variáveis
- Tipos simples char, int, float e double
- Tipos compostos estruturas, tabelas, uniões etc.
- Domínio de validade auto, static, extern e
register. - Sintaxe classe qualificador tipo
nome_variavel valor
92Constantes
- Declaração simples
- define NUM_MAX_CARACT 100
- define MENSAGEM alo, alo, Terezinha
- define CR \n
- undef MENSAGEM
- Qualificadores
- 3.14 tipo double 3.14f ou 4.14F tipo
float - 1.3e-3 ou 1.3E-3 tipo double 074 tipo
inteiro, em octal - 3l ou 3L tipo inteiro longo 255u ou 255U tipo
inteiro, sem sinal - 3.14l ou 3.14L tipo ddouble longo
- 0x3b ou 0Xb tipo inteiro, hexadecimal
93Constantes
- Domínio de validade
- da definição da constante até o final do arquivo
ou até encontrar a diretiva undef da
constante - Constantes do tipo caracter devem ser escritas
entre apóstrofos (por exemplo l, a, x,
\n, \t) - Representação de caracteres ASCII não
imprimíveis - nova linha \n tabulação \t
- espaço p/trás \b retorno do carro \r
- página segui nte \f barra de fração
revertida \\ - apóstrofo \ null \0
- bell \a formfeed \f
- haspas \ interrogação \?
- caracter definido pelo seu valor ASCII (em octal)
\ddd, ex. 121 - caracter definido pelo seu valor ASCII (em hexa
\xdd, ex. \x2a
94Operadores
- Operadores aritméticos (multiplicativos e
aditivos) - , -, , /, (resto de divisão inteira)
- Operadores bit a bit (e), (ou),
(ou-exclusivo) - Operadores de deslocamento ltlt (esquerda), gtgt
(direita) - Operadores relacionais lt,lt, gt, gt
- Operadores de igualdade , !
- Operadores lógicos (e), (ou)
- Operadores unários p conteúdo de p v
endereço de v - -e menos e !e negação (booleana) de e
- e complemento bit a bit de e v v v 1
- -v v v - 1 v retorna v e depois v
v 1 - v- etorna v e depois v v - 1 (tipo)v
converte v para o tipo - sizeof(e) numero de bytes ocupado por e
- sizeof(tipo) n de bytes ocupado por um objeto
do tipo definido
95Operadores
- Operadores de atribuição
- , , -, , /, , ltlt, gtgt, , ,
- Operador vírgula
- x y, z equivale a y y 1 x z
- Operador condicional
- exp ? exp1 exp2
- Exemplo x (a gt b) ? a b equivale a
- Se a é maior que b, então x a senão x
b
96Precedência e ordem de avaliação
Operador Avaliação ( ) -gt .
esq-gtdir ! --(tipo)
sizeof dir-gtesq / esq-gtdir -
esq-gtdir ltltgtgt esq-gtdir lt ltgt gt
esq-gtdir ! esq-gtdir
esq-gtdir esq-gtdir
esq-gtdir esq-gtdir esq-gtdir ?
dir -gt esq - etc. dir -gt
esq , esq-gt dir
97Instruções de controle
- Observações preeliminares
- uma instrução é sempre terminada por
- comentários / isto é um comentário /
- as chaves e são usadas para agrupar
declarações e instruções em um bloco, o qual é
sintaticamente equivalente a uma única instrução,
exemplo - While (n ! 2) / bloco/
- x y z
- n n / 2
-
- um bloco nunca termina com
- variáveis podem ser declaradas dentro de
- qualquer bloco (e tem validade só dentro do
bloco).
98Instrução if
- Caso mais simples if (expressão) instrução
- Caso completo if (expressão) instrução
- else if (expressão) instrução
- .....
- else instrução
99Instrução switch
- Sintaxe
- switch (expressão)
- case expr-constante instr
- instr
- break
- case expr-constante instr
- break
- default instr
- break
-
100Instrução while
- Caso mais simples while (expressão) instr
- Caso geral while (expressão) instr
- instr
- A instrução break faz sair da malha while.
Exemplo - while (i ! 10)
- soma xi
- if (soma gt 100.) break
- A instrução continue faz com que a iteração
seguinte da malha seja realizada imediatamente,
exemplo - while (i lt 10)
- if (xi \n) continue
- yi yi
-
101Instrução do/while
- Caso simples do instrução
- while (expressão)
- Caso geral do
- instrução
- .....
- instrução
-
- while (expressão)
- As instruções break e continue também são
aplicáveis ao do/while.
102Instrução for
- Sintaxe for (expr1 expr2 expr3)
- instr
- ...
- instr
- A instrução for é equivalente a
- expr1
- while (expr2)
- instr
- ....
- instr
- expr3
- As instruções break e continue também são
aplicáveis a malha for.
103Instrução goto
- Sintaxe
- goto rotulo
- ...
- Rotulo instr
- instr
- ...
104Funções
- Generalidades
- A linguagem C é baseada no conceito de blocos de
construção, que são chamados de funções. - O nome de uma função sofre as mesmas restrições
que o nome de uma variável. - Como também ocorre com as variáveis, um tipo é
sempre associado a uma função (tipo do valor de
retorno) - tipos básicos void, char, int, float, double
- qualificadores short, long, signed, unsigned,
exemplo short int func () - Retorno de valor return expr
- Declaração de uma função float calc (int,
float) - definição de uma função foat calc (n, x)
- int n float x
- corpo da função
- não se pode definir uma função no interior de um
bloco .....
105Função main
- O programa principal é uma função cujo nome é
main - A função main pode ser do tipo main ()
- ......
- Ou do tipo main (argc, argv)
- int argc char argv
- ..........
- O valor contido em argc corresponde ao número
de argumentos recebido da linha de comando - Por sua vez, argv corresponde à tabela de
argumentos da linha de comando, exemplo cp
arq1 arq2 - cp nome do programa
- arq1 e arq2 argumentos
- argc 3
- argv cp, arq1 , arq2
106Alocação do espaço de memória
- Classe auto
- alocação por default
- alocação feita no momento da declaração
- liberação no final do bloco (variável local) ou
no final do programa (variável global) - Classe static
- alocação feita na declaração
- liberação no final do programa
- uma variável local, declarada static, guarda
seu valor de uma chamada a outra da função
(conceito de permanência do valor) - uma variável global, declarada static , só é
acessível por funções contidas dentro do arquivo
onde foi declarada (conceito de privacidade) - Classe extern
- a variável é alocada em um outro arquivo
107Alocação de espaço de memória
- Classe register
- deve ser empregado somente com as variáveis
automáticas (auto) - classe de alocação normalmente empregadas para as
variáveis utilizadas de maneira intensiva - o compilador é livre de atribuir um registrador
do processador à variável ou de ignorar a
solicitação - não se pode, evidentemente, tentar obter o
endereço de uma variável do tipo register - como regra geral, as variáveis de classe
register são do tipo char ou int
108Definição de tabelas (arrays)
- Uma tabela é um conjunto de elementos de mesmo
tipo. - Declaração
- classe qualificador tipo tabela n
elementos - Inicialização
- tipo tabela val1, val2, ...
- Exemplos
- char v10
- static double x20
- int stat -1, -1, 0, 1
- Acesso a um elemento de uma tabela, exemplos
- y x10
- ss stat 2i-3
- Tabelas multidimensionais
- int tab2 3 4 ou
double pos3 3
109Estruturas
- Uma estrutura corresponde a um conjunto de uma ou
mais variáveis, eventualmente de tipos diferentes
e agrupadas sob um mesmo nome - Exemplos de declarações de estruturas (struct
define o tipo estrutura) - declara a estrutura x (tipo num_complexo),
alocando para a mesma 2 campos do tipo double - struct num_complexo double parte_real
- double parte_imag x
- declara a estrutura data, alocando para a mesma
inteiros - struct int dia
- int mês
- int ano data
- Acesso aos membros de uma estrutura data.dia
18