Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivos
Aprender tcnicas de programao que aumentem a qualidade de software e a produtividade no desenvolvimento
Discutir conceitos de programao, ilustrando como os mesmos so representados na linguagem de programao C Discutir como programas podem ser adequadamente escritos, estruturados e documentados Explorar o ambiente de suporte a C, incluindo ferramentas e bibliotecas Discutir princpios de engenharia e qualidade de software. Desenvolver, documentar e avaliar uma aplicao de mdio porte em C
24 39%
25 41%
10 17%
2 3%
20 28%
2 3%
Anlise de Resultados
No ltimo ano, 133 alunos cursaram a disciplina
69 aprovados (52% de aprovao) Apenas 39 aprovados por mdia (29%) 64 reprovados (48% de reprovao)
Consequncias
Dificuldade de conseguir vagas para cursar a disciplina de novo Vria disciplinas dependem de IP Atraso significativo no curso de EC Para os que conseguiram passar com dificuldade, problemas para acompanhar a disciplina de Algoritmos Alm de vrias outras disciplinas que exigem que o aluno desenvolva programas (Infra de SW, Infra de Comunicao, etc)
5
Tpicos da Aula
Antes de aprender a programar, precisamos ver conceitos bsicos de Computao
Componentes de um computador Como os diferentes componentes interagem Representao das informaes em computadores
Hardware e Software
Computador = Hardware + Software
Hardware
Parte fsica do computador Chips, monitores, teclado, etc
Software
Programas (conjunto de instrues)
e dados
Editores de texto, navegadores, sistemas operacionais, etc
8
Modelo de um computador
Unidade Central de Processamento Memria Principal (RAM)
CPU
Canal de Comunicao (Barramento)
Dispositivos de Entrada/Sada
Perifricos
9
CPU e RAM
Executa as instrues presentes nos programas Armazena os programas e dados que esto sendo usados pela CPU Memria Principal (RAM)
CPU
CPU busca primeiramente programas e dados residentes na memria CPU tambm armazena dados na memria
10
Busca
Processa a instruo
Executa
Decodifica
11
Unidade de Lgica/Aritmtica
Unidade de Controle
Registradores
12
13
14
10011010
Valores que ultrapassam o tamanho mximo de uma clula so armazenados em mais de uma clula (clulas consecutivas)
15
Memria Principal
Tambm chamada de memria RAM Random Access Memory
Acesso aos endereos de memria podem ser feita de forma direta sem ter que passar por endereos anteriores
Armazena
dados
programas
utilizados
pelo
computador ligado
Memria Principal
CPU
Cache Memria Principal (RAM)
Computadores atuais utilizam tambm pequenas memrias cache para armazenar partes dos dados e programas que esto na memria principal Memria cache utiliza tecnologia que torna acesso aos dados mais rpida Evita acesso pelo barramento
17
Armazenamento Secundrio
Memria Principal (RAM)
CPU
CPU procura programa/dados na RAM No encontrando, CPU procura na memria secundria Programa/dados so transferidos para RAM Tipos de memria para armazenamento de longa durao de dados/programas
18
Armazenamento Secundrio
Armazenamento Secundrio
(Disco Rgido)
Armazenamento Secundrio
(Disco Rgido)
setor
trilha
Armazenamento Secundrio
(CD/DVD )
Memrias secundrias no so volteis Memrias secundrias geralmente so mais baratas que a memria RAM
Por serem mais baratas, geralmente a capacidade de
armazenamento maior (Ex: Disco Rgido)
22
Dispositivos de Entrada/Sada
Memria Principal (RAM)
CPU
Dispositivos de Entrada/Sada
23
Representao de Informao
Existem, basicamente, 2 formas de representar uma informao: Modo Analgico
Contnua, diretamente proporcional aos dados que constituem a informao Termmetro de mercrio Mercrio sobe em um tubo proporcionalmente ao aumento da temperatura fora do tubo
Modo Digital
Informao quebrada em pedaos e cada pedao representado separadamente Msica em um CD o disco armazena nmeros que representam amostras regulares (no tempo) de nveis de voltagens especficas do som
24
Analgico x Digital
volt
Analgico
11 8 7 4 3 1 2 3 4 5 tempo 11 8 7 4 3
Digital
1 2
3 4
25
Informao Digital
Computadores armazenam toda informao de forma digital
Nmeros Texto Grficos e Imagens Vdeo udio Instrues de programas
26
O i , M u n d o!
79 105 44 32 77 117 110 100 111 33
27
Nmeros Binrios
Quando a informao digitalizada, ela representada e armazenada em memria usando o sistema de numerao binria
Um dgito binrio (0 ou 1) chamado de bit
Um bit pode representar 2 estados possveis (0 ou 1), assim como uma lmpada que pode estar ligada (1) ou desligada (0)
Dispositivos que armazenam e manipulam informao com representao binria (com 2 estados possveis) so mais confiveis e baratos
28
1 0 0 1
1x 23 + 0 x 22 + 0 x 21 + 1 x 20
29
Unidades de Medida
Um byte corresponde a 8 bits Capacidade de armazenamento de dados de uma memria medida em termos de bytes que ela pode guardar
Unidade
Smbolo KB MB GB TB
Nmero de Bytes 2
10
kilobyte
megabyte gigabyte
= 1024
terabyte
Categorias de Software
Sistema Operacional
Controla todas as atividades do computador Fornece uma interface para que o usurio interaja com o computador Gerencia recursos computacionais tais como CPU, memria, dispositivos de E/S, etc Windows , Unix, Linux, Mac OS
Aplicativos
Termo genrico para qualquer outro tipo de software Editores de texto, jogos, navegadores, sistemas de controle areo, etc
Aplicativos
Sistema Operacional
CPU
33
CPU
Sistema Operacional
34
Resumindo
Componentes bsicos de um sistema computacional
Hardware
CPU
Memria Perifricos
Software
Categorias de software
35
Introduo Programao
Tpicos da Aula
Antes de aprender a programar, precisamos saber o que um algoritmo
Definio de algoritmo Usando algoritmos para resolver problemas
Conceito de Algoritmo
Um algoritmo um conjunto ordenado finito de passos executveis, no ambguos , definindo um processo que tem um trmino
Um algoritmo representa a sequncia de passos necessrios para realizar uma tarefa Para realizar uma mesma tarefa podemos ter diferentes algoritmos
3
Contra-exemplo de Algoritmo
Um algoritmo um conjunto ordenado finito de passos executveis, no ambguos , definindo um processo que tem um trmino
1.Retire uma moeda do bolso e coloque sobre mesa 2.Volte ao passo 1 Processo chega ao fim quando acaba as moedas do bolso
Nenhum passo indica sobre o procedimento a ser adotado quando acaba as moedas Ambigidade
5
No
Deve-se transportar todos os discos da primeira haste at a ltima obedecendo as seguintes regras: 1. S pode ser deslocado um disco por vez (o do topo de uma haste) 2. Em nenhum momento um disco maior pode estar sobre um menor
7
10
11
12
13
14
15
16
Programao de Computadores
Programao consiste no ato de indicar como o computador (hardware) deve trabalhar ou realizar servios Quais so os servios que um computador pode realizar?
Enviar mensagens eletrnicas, armazenar e recuperar dados, realizar exames e cirurgias, jogar e muito outras coisas
Para que o computador consiga realizar de fato estes servios, deve-se escrever um programa
17
Programas
Programa pode ser definido como uma srie de instrues que indicam como o computador ir realizar os servios O programa deve definir a ordem em que as instrues devem ser executadas pelo computador Um computador, geralmente, possui muitos programas, que podem estar sendo executados ao mesmo tempo Como vimos, programas constituem o grupo de softwares de um computador
Programa Software
18
Algoritmos X Programas
Algoritmo abstrato
Independe de mquina e de linguagem de programao Pode ser representado de vrias formas Pode ser feito por uma mquina ou um humano
Algoritmos X Programas
20
Atores e computadores
Do mesmo jeito que um ator de cinema precisa do roteiro de um filme para poder encen-lo, um computador precisa de um programa para poder realizar algum servio.
21
Roteiro de Matrix
Personagens, papis
Fonte: http://whatisthematrix.warnerbros.com
22
Roteiro de Matrix
Um roteiro pode ser executado mais de uma vez
Um ator pode exercer mais de um papel no mesmo filme, executando as instrues de cada um deles
Fonte: http://whatisthematrix.warnerbros.com
23
Roteiro de Matrix
Alm do texto em linguagem natural (ingls, portugus, etc.) o roteirista pode usar gravuras...
linguagem grfica
Fonte: http://whatisthematrix.warnerbros.com
24
Roteiro de Matrix
...o que importa que a linguagem usada pelo roteirista possa ser entendida pelos atores
Fonte: http://whatisthematrix.warnerbros.com
25
Roteiro de Matrix
Fonte: http://whatisthematrix.warnerbros.com
26
Roteiros e programas
As observaes sobre roteiros valem tambm para programas...
Um programa contm instrues a serem executadas por um computador Quando solicitado, um computador executa as instrues de um dado programa
O computador executa o programa
Um programa pode ser executado mais de uma vez Um programa pode se comportar de maneira diferente nas vrias execues...
dependendo do comportamento programas, hardware, etc. dos usurios, outros
27
Roteiros e programas
Um computador pode executar vrios programas ao mesmo tempo Cpias de um mesmo programa podem ser executadas em vrios computadores ao mesmo tempo Para executar um programa, o computador tem que ter uma cpia do programa
O programa tem que ser instalado ou carregado no computador
28
Roteiros e programas
Mas, na verdade, um roteiro pode ser visto como vrios programas, um para cada personagem, deixando claro como os personagens devem interagir.
29
Filmes e sistemas
Do mesmo jeito que a encenao de um roteiro por vrios atores gera um filme, a execuo de um ou mais programas que interagem constitui, junto com o hardware associado, um sistema computacional.
Sistema = Programas em execuo, interagindo + Hardware
30
Linguagens de Programao
Os programas tm que ser linguagem de programao:
10010010 10001110
escritos
em
uma
uma linguagem que pode ser traduzida para a linguagem entendida pelo computador a = 10; a = a + 1;
10010010 10001110
31
Sintaxe e Semntica
Uma linguagem de programao define as palavras e smbolos que se pode usar para escrever um programa Uma linguagem de programao emprega um conjunto de regras (sintaxe) que estabelece como palavras e smbolos podem ser agrupados de maneira a formar instrues vlidas de um programa
Linguagem assembly dependente da mquina, porm utiliza palavras reservadas para codificar instrues (mnemnicos) Outros nveis so independentes de mquina e facilitam leitura e escrita dos programas por parte do ser humano
Complexidade atual de programas exigem cada vez mais o emprego destas linguagens
34
Se a linguagem destino for a de mquina, o programa pode, depois de compilado, ser executado
Um interpretador um programa que traduz instruo por instruo de um programa em linguagem de mquina e imediatamente executa a instruo 35
Compilao x Interpretao
Compilao
Cdigo- fonte
a = 10; a = a + 1;
Compilador
Cdigo de mquina
10010010 10001110
Interpretao
Cdigo- fonte
a = 10; a = a + 1; Interpretador
Cdigo de mquina
10010010 10001110
36
Compilao x Interpretao
Existem vrios exemplos tanto de linguagens interpretadas como de linguagens compiladas
A linguagem C um exemplo de linguagem compilada Java uma linguagem de programao que utiliza um processo hbrido de traduo
O compilador Java traduz o cdigo-fonte em um formato intermedirio independente de mquina chamado bytecode Interpretador Java especfico da mquina onde ir rodar o programa ento traduz os bytecodes para linguagem de mquina e executa o cdigo
37
Resumindo...
Conceitos Bsicos de Programao
Algoritmos Programa Linguagens de Programao Compilao x Interpretao
38
Introduo Programao
Introduo a Linguagem C
Construes Bsicas
Programa em C
#include <stdio.h> #include int main int main ( ) {
Palavras Reservadas
float celsius ; celsius E ainda float farenheit ; farenheit celsius = 30; expresses... farenheit = 9.0/5 *celsius + 32; printf (30 graus celsius = %f graus farenheit,farenheit); return 0;
Tpicos da Aula
Hoje aprenderemos a escrever um programa em C, para isto veremos
Caractersticas da linguagem Estrutura de um programa Ciclo de construo de um programa em C
Conceito de funes
Executando um programa
Linguagem C - Caractersticas
Linguagem de programao de finalidade geral criada por Dennis Ritchie em 1972
Criada para desenvolver o sistema operacional Unix Padronizada em 1989 pela ANSI Tornou-se muito popular
Aes que o computador deve executar so especificadas como comandos que alteram o estado da memria
4
Linguagem C - Caractersticas
Combina o alto nvel com o baixo nvel, permitindo a manipulao direta de bits, bytes e endereos de memria Possui fluxos de controle e estruturas de dados presentes na maioria das linguagens imperativas
Agrupamento de comandos Tomadas de decises (if-else) Laos para permitir a repetio de comandos
Linguagem C - Caractersticas
Possui apenas 32 palavras-chaves (reservadas) Permite economia de expresso e gera cdigos reduzidos Possibilita alocao dinmica de memria Permite estruturar o software em mdulos, arquivos fontes, bibliotecas
Linguagem C - Crticas
D-se muita liberdade ao programador Programas ininteligveis, acesso direto memria No h verificao de tipos e nem de limites de arrays (veremos depois)
Simplifica o projeto do compilador C
Estrutura de um Programa
Em C, a construo fundamental a funo:
Uma destas funes deve ser a funo main O programa inicia sua execuo na funo main Um programa constitudo de uma ou mais funes
Estrutura de um Programa
Dentro de uma funo pode haver:
Declaraes, expresses, chamadas de outras funes, comandos, etc
Estrutura de um Programa
funo 1
funo 2
. . .
return 0;
}
10
Exemplo de um Programa em C
#include <stdio.h> int main() { Declarao de variavel int resultado; Expresso aritmtica resultado = 6 + 7; printf(%d,resultado); return 0 ; } Chamada de funo
Comando
11
int multiplicacao (int p1, int p2) { int produto; produto = p1 * p2; return produto; } Uma funo deve conter:
Uma assinatura Um corpo
Corpo da funo
12
int multiplicacao (int p1, int p2) { int produto; produto = p1 * p2; return produto; Parnteses obrigatrios } Assinatura de uma funo deve informar:
Tipo de valor retornado (se for o caso) Nome Lista de parmetros formais (se houver) Nome do parmetro e tipo do parmetro
13
Funes de Bibliotecas
A linguagem C oferece um conjunto de funes j definidas que so organizadas em bibliotecas
Programador pode utilizar (chamar) estas funes no programa Reduzem o tempo de desenvolvimento do programa
15
Funes de Bibliotecas
Informaes sobre as funes de bibliotecas so encontradas em vrios arquivos
header files ou arquivos com extenso .h
Para usar estas bibliotecas, o programa deve indicar os nomes dos arquivos que as contm Estas bibliotecas so adicionadas ao programa usando a diretiva de pr-processamento # include
Por exemplo: # include < stdio.h > No possui ponto_e_vrgula ( ; ) stdio.h uma biblioteca que contm funes de entrada/sada, tal como a funo printf que permite mostrar alguma mensagem no monitor 16
int {
main
( )
Argumentos da funo
17
Diretivas de Pr-Processamento
O pr-processador um programa que examina o programa fonte em C e executa certas modificaes com base em instrues chamadas de diretivas
Exemplos: include, define, etc
int multiplicacao (int p1, int p2) { int produto; produto = p1 * p2; return produto; }
int {
main
( )
Variveis
Programas manipulam dados (valores) e esses dados so armazenados em variveis Uma varivel uma posio na memria referenciada por um identificador (nome) Uma varivel deve ser declarada informando o tipo de dado que ela armazenar e o nome dela
tipo nome int total; int count, temp, result; Muitas variveis podem ser criadas em uma declarao
20
Variveis
Uma declarao compilador: de varivel instrui o
a reservar um espao de memria suficiente para armazenar o tipo de dado declarado o nome ao qual iremos referenciar esta posio de memria
S aps a declarao da varivel, que esta pode ser referenciada (utilizada) Quando uma varivel referenciada no programa, o valor armazenado nela utilizado
21
Variveis
Onde se declara variveis?
No corpo de uma funo (varivel local) Recomenda-se que as declaraes de variveis sejam as primeiras instrues da funo Na lista de parmetros de funes Parmetros formais Fora das funes (varivel global)
22
Declarao de Variveis
#include <stdio.h>
int resultado;
int multiplicacao (int p1, int p2) { int produto; Declarao de varivel local produto = p1 * p2; return produto; }
int
23
Atribuio
Um comando de atribuio modifica o valor armazenado na varivel O operador de atribuio o sinal de =
int total; total = 55; Valor 65 sobrescreve o total = 65; valor armazenado antes Varivel total armazena valor 55
S se deve atribuir a uma varivel valores compatveis com o tipo declarado da varivel
24
Inicializao de Variveis
Uma varivel pode ser inicializada com o comando de atribuio na hora de sua declarao
Declara varivel total do tipo int int total = 55; Inicializa total com valor 55
25
Constantes
Uma constante um identificador semelhante a uma varivel, exceto pelo fato de s poder armazenar o mesmo valor durante toda sua existncia Uma constante declarada usando a palavra reservada const Deve-se inicializar a constante no ato da sua declarao
const float PI = 3.1416; Esse comando gera um PI = 3.141618; erro de compilao
26
Constantes
So teis para dar um significado compreensvel a determinados valores
Exemplo : PI mais compreensvel que o valor 3,1416
mais
Explicitam formalmente que um determinado valor no pode ser alterado Evitam erros de outros programadores
27
Constantes
comum utilizar-se tambm a diretiva de prprocessamento define para definir constantes
#define PI 3.1416 int main() { float raio = 5; float area = PI*raio*raio; float comp = 2*PI*raio; return 0; } No pr-processamento, ocorre a substituio
int main() { float raio = 5; float area = 3.1416*raio*raio; float comp = 2*3.1416*raio; return 0; }
28
Representatividade
-128 a 127 0 a 255 -32768 a 32767 0 a 65535 -2147483648 a 2147483647
4 bytes
0 a 4294967295
30
Representatividade
3.4 X10-38 a 3.4 X1038 1.7 X 10-308 a 1.7X10308 3.4 X 10-4932 a 3.4X104932
31
32
Instruo equivalente
33
Identificadores
Identificadores so palavras que programador utiliza em programas Consiste de um ou mais caracteres. o
o primeiro caractere deve ser letra ou "_ demais so uma combinao de letras, nmeros e "_" Identificadores no podem comear com um dgito
Exemplo de identificadores vlidos: _a, a3_,bom_dia Exemplo de identificadores invlidos: 2a, a-b, a_ b
C case-sensitive
Os identificadores casa e CASA so diferentes
34
Identificadores
Identificadores podem ser:
Nomes que o programador escolheu
Exemplo: nome de uma varivel, funo, constante, etc
35
Identificadores em C
#include <stdio.h> #include int main int main ( ) {
Palavras Reservadas
float celsius ; celsius E ainda float farenheit ; farenheit celsius = 30; expresses... farenheit = 9.0/5 *celsius + 32; printf (30 graus celsius = %f graus farenheit,farenheit); return 0;
Executando de um Programa em C
Escrever o programa em um arquivo texto (cdigo fonte)
Salvar o arquivo com a extenso .c
Construo de Programas em C
Editor Codigo, Palavras reservadas Programa fonte Programa Fonte Modificado
Edio
Programa Fonte
Prprocessador
Pr-processamento
Programa Fonte
Compilador
Programa Objeto
Compilao Link-Edio
38
Programas Objeto
Programa Executvel
Ambiente de Programao
Para acelerar o desenvolvimento de programas, comum utilizar ambientes de programao ou IDEs (Integrated Development Environment)
Integra vrias ferramentas em um nico ambiente Editores de texto Compiladores Bibliotecas E muito mais ... CodeBlocks, DevC++, Visual Studio, Eclipse etc
39
Resumindo ...
Caractersticas da linguagem Estrutura de um programa Ciclo de construo de um programa em C Estruturas bsicas de uma linguagem de programao
Identificadores,Variveis,Tipos de dados, Atribuio
Conceito de funes
40
Introduo Programao
Programa em C
#include <stdio.h> #include main int main ( ) {
Palavras Reservadas
float celsius ; celsius E ainda float farenheit ; farenheit expresses celsius = 30; aritmticas... farenheit = 9.0/5 *celsius + 32; printf (30 graus celsius = %f graus farenheit,farenheit);
Tpicos da Aula
Hoje aprenderemos a escrever um programa em C que pode realizar clculos
Conceito de expresso Tipos de Operadores em C Operador de atribuio Operadores aritmticos Operadores especiais
de
Expresses
Uma expresso uma combinao de um ou mais operadores e operandos que geralmente realiza um clculo A avaliao ou clculo da expresso se faz obedecendo regras de associao e precedncia estabelecidas na linguagem
int total = 3 + 4/2 ; Diviso (/ ) tem precedncia sobre soma (+) Expresso avaliada e o resultado atribudo a total que armazena agora o valor 5
O valor calculado pode no ser necessariamente um nmero Pode ser um caractere, cadeia de caracteres, etc
4
Operadores em C
Categorias de operadores em C Atribuio Hoje veremos estes Aritmticos 3 tipos de Especiais operadores Relacionais Lgicos
Operador de Atribuio
Operador de Atribuio
Pode ser usado em qualquer expresso vlida em C Representado por = Forma geral: <nome_da_varivel> = <expresso> ; Ex.: x = 5 ; Ao executada da direita para a esquerda
5 5
6
Operador de Atribuio
Atribuio (Cont.)
usado para atribuir valores s variveis No igual ao operador = de matemtica 5 = a no faz sentido em C! Valor da expresso armazenado fisicamente em <nome_da_varivel> Mltiplas atribuies Ex: x = y = z = 0
0
7
Operadores Aritmticos
Operadores aritmticos unrios Um s operando operador operando Sinal ++ Ao Troca de sinal Incremento de 1 Precedncia 1 1
--
Decremento de 1
1
8
Ex.: -(a)
Operadores Aritmticos
Operadores aritmticos binrios
Dois operandos operando operador operando
Sinal + * / %
Precedncia 3 3 2 2 2
9
A instruo
contador++; funcionalmente equivalente a contador = contador + 1;
10
tm
comportamentos
Quando fazem parte de expresses maiores, eles podem ter comportamentos diferentes
11
Pr:
+ b
= 8
soma
12
2 b
7 soma
13
++contador;
int valor
= contador++;
valor
= ++ contador;
contador incrementado
para 7 e agora valor armazena 7
14
x += 1; x -= 2; x *= k;
x = x + 1; x = x - 2; x = x * k;
x /= 3;
x %= 3;
x = x / 3;
x = x % 3;
16
Expresses Aritmticas
Uma expresso aritmtica computa resultados numricos e utiliza operadores aritmticos combinados com operandos numricos
Variveis, constantes, funes numricas Ordem de precedncia Operadores unrios (- , -- , ++ ) e Funes Multiplicao ( *), Diviso ( / ) e Mdulo (% ) Adio ( + ) e Subtrao ( - ) Comandos Equivalentes a = a + 1; a += 1 ; a++ ; ++a ;
17
Operadores Aritmticos
Quais sero os valores das variveis declaradas aps a avaliao das expresses abaixo?
int a , r ; double b , c ; a = 3.5 ; b = a / 2.0 ; c = 1/2 + b ; r = 10 % a ; a=3 b=1.5 c=1.5 e r=1
18
answer
=
4
Operadores Especiais
O operador & utilizado para se obter o endereo da memria que a varivel representa
Forma geral &varivel
21
Converso de Tipos
Existem converses automticas de valores em uma avaliao de uma expresso quando operandos possuem tipos diferentes
Operando de tipo de menor tamanho convertido automaticamente para o tipo de maior tamanho Converso feita em rea temporria da memria antes da avaliao da expresso Resultado novamente convertido para o tipo da varivel a esquerda da atribuio
1. O inteiro 3 convertido para real
int a
3/2.0 + 0.5;
2. Expresso avaliada como 2.0,
Valor de a 2
22
Forma geral (tipo desejado) varivel ou (tipo desejado) (expresso) Armazenamento de um valor real em um tipo de dado inteiro gera erro ou perde-se preciso
Usando cast
int a = ((float)3)/2 +0.5; printf("a = %d",a);
a=1
a=2
23
Entrada de Dados
A funo scanf
Usada para a entrada formatada de dados Para cadeia de caracteres, a leitura feita at o primeiro espao em branco, ou o return, ou o tab. Est definida na biblioteca stdio.h
24
Entrada de Dados
Cdigos de Formatao
Cdigo
%c %d %u %f %e %g %lf %le %lg %l %s
Funo
ler um nico caractere ler um nmero inteiro ler um inteiro sem sinal ler um nmero real (tipo float) ler um nmero real (tipo double) ler um inteiro longo ler uma cadeia de caracteres
25
Entrada de Dados
Lista de Argumentos Cada cdigo de formatao deve corresponder a uma varivel de entrada, que deve ser representada com o operador de endereo Operador de Endereo Utilizado para permitir que o dado lido do dispositivo de entrada seja armazenado na varivel correspondente. Ele retorna o endereo da varivel.
Entrada de Dados
Exemplo:
int main() { char a, b, c ; int n ; double x ; scanf (%c%c%c%d%lf ,&a,&b,&c,&n,&x); }
27
Entrada de Dados
#include stdio.h int main ( ) /* ler um valor numrico */ { float a; scanf(%f,&a); 15.2 ..... } a
15.2
28
Sada de Dados
A Funo printf
Permite a impresso formatada de nmeros e cadeias de caracteres
Forma Geral
printf(estruturas de controle, lista de parmetros) Estruturas de Controle Caracteres especiais Cdigos de formatao precedidos por %
29
Sada de Dados
Formato %c %d %u %e %E %f %g %G %s %% Significado caracter inteiro inteiro sem sinal notao cientfica com e (7.12300e+00) notao cientfica com E (7.12300E+00) ponto flutuante decimal (7.12300) escolhe %e ou %f ,o menor dos 2 formatos escolhe %E ou %f ,o menor dos 2 formatos cadeia de caracteres imprime o caracter %
30
31
Resumindo ...
Conceito de expresso Tipos de Operadores em C Operador de atribuio Operadores aritmticos Operadores especiais
Entrada/Sada
Funes de entrada Funes de sada
33
Introduo Programao
Comandos Condicionais
Misture os ingredientes Unte forma com manteiga Despeje a mistura na forma Sim
Comandos Condicionais
2
Tpicos da Aula
Hoje vamos acrescentar comportamentos mais complexos a programas
Tomada de deciso e Mudana de fluxo de controle Expresses booleanas (lgicas) Comandos Condicionais if-else switch Operador condicional
Instrues de Controle
Toda linguagem de programao precisa oferecer pelo menos trs formas bsicas de controle:
executar uma sequncia de instrues realizar testes para decidir entre alternativas repetir uma sequncia de instrues
Hoje, aprenderemos a realizar testes para decidir quais instrues executar
4
aes
Expresso Booleana
O resultado da avaliao de uma expresso booleana ou verdadeiro ou falso
Em C, NO existe o tipo de dado boolean Verdadeiro representado como 1 Falso representado como 0
Uma expresso booleana composta de operandos booleanos (lgicos) e operadores relacionais e/ou lgicos
6
Operadores Relacionais
So usados para fazer comparaes
Operador < > <= Ao menor que maior que menor ou igual que Resultado de Comparao
Falso ou Verdadeiro
4 < 5 verdadeiro ( valor 1) 3 >= 10 falso (valor 0)
>=
== !=
Negao
Resultado da Avaliao int a , b ; int c = 23 ; int d = 27 ; a = ( c < 20 ) || ( d > c ) ; b = (c < 20 ) && ( d< c ) ;
Expresses Booleanas
Operadores lgicos e expresses:
x && y x || y !x Operandos da direita s so avaliados, se necessrio Existem os operadores bit a bit & e I As expresses resultantes x e y so so booleanas, gerando expresses verdadeiro (1) ou falso (0) booleanas como resultado da avaliao 9
Tabela Verdade
Uma tabela verdade contm combinaes verdadeiro-falso expresso booleana
a verdadeiro verdadeiro falso falso b verdadeiro falso verdadeiro falso a && b verdadeiro falso falso falso a || b verdadeiro verdadeiro verdadeiro falso
todas as de uma
!a falso falso verdadeiro verdadeiro
10
Expresses Booleanas
Exemplos 3 < 4 && 5 > 2 v v
! (3 > 7) f
v
5< 4 f v || 7>2 v
v
! (7 >= 10) f v
11
Expresses Booleanas
}
1 (verdadeiro)
Expresses Booleanas
Comandos Condicionais
Um comando condicional nos permite escolher qual deve ser a prxima instruo executada em um programa A execuo de uma determinada instruo depende de uma condio (expresso booleana) A linguagem C oferece 3 tipos de comandos condicionais:
if else switch comando ternrio
14
O comando if-else
Se a avaliao de expressaoBooleana retornar verdadeiro, comandos so executados , caso contrrio, executa-se outros comandos
15
Exemplo do if-else
#include <stdio.h> int main ( ) { float n1, n2, n3, m; printf (\nEntre com 3 notas ) ; scanf (%f %f %f, &n1, &n2, &n3); m = (n1 + n2 + n3 ) / 3 ; if (m >= 7.0) { printf (\n Aluno aprovado. ) ; printf ( Mdia igual a %f , m) ; }else { printf (\n Aluno reprovado. ); printf ( Mdia igual a %f , m) ; } return 0; }
16
else no obrigatrio
18
#include <stdio.h> int main ( ) { int num ; printf (\nDigite um nmero: ); scanf (%d, &num); if (num < 0) printf (\n Nmero negativo ! ); else printf (\n Nmero positivo ! ); return 0; }
19
Aninhando if-else
if (expressaoBooleana) if (expressaoBooleana) comando; else outroComando;
if-else aninhado
23
24
O Comando switch
switch(expressao) { Para executar um switch case rotulo1: Avalia-se expressao Comandos1 break; Executa-se os comandos case rotulo2: do case cujo rtulo igual ao valor resultante Comandos2 da expresso break; ... Executa-se os comandos default: de default caso o valor Comandos resultante no seja igual a } nenhum rtulo
Os rtulos so constantes diferentes Existe no mximo uma clusula default ( opcional) Os tipos dos rtulos tm que ser o mesmo de expressao
Vrios rtulos podem estar associados ao mesmo comando Os comandos break so opcionais:
Sem o break a execuo dos comandos de um rtulo continua nos comandos do prximo, at chegar ao final ou a um break
Exemplo de switch
Calcular a diferena, o produto, o quociente ou a soma de dois nmeros, dependendo da operao escolhida e imprimir o resultado.
# include stdio.h int main () { char x; float a, b ; float result = 0.0; printf (\n Informe os 2 nmeros e a operao ); scanf (%f %f %c, &a, &b, &x);
28
Operador Condicional - ?
Forma Geral do ?
condio ? expresso1 : expresso2
a > b ? a: b;
30
Expresso i == j ? a - 1 : b + 1
j % 3 == 0 ? i + 4 : x j>1? j -1: j+1
Valor
c 7.07 1 5
31
j % 3 != 0 ? i + 4 : x
Resumindo ...
Necessidade de Mecanismos de Tomadas de Deciso em um Programa Mudana de Fluxo de Controle Expresses Booleanas Comandos Condicionais em C
if-else switch Operador Condicional
32
Introduo Programao
Funes em C
Tpicos da Aula
Hoje vamos detalhar funes em C
Importncia
Escrevendo funes
Comando return Passagem de argumentos por valor
quando
quebramos
esta
soluo
em
mdulos
Em C, um mdulo pode representado por uma funo ou um grupo de funes logicamente relacionadas
4
Funes em C
Relembrando...
Uma funo um conjunto de instrues para realizar uma ou mais tarefas que so agrupadas em uma mesma unidade e que pode ser referenciada por um nome nico
Permitem a construo de programas constitudos de mdulos independentes So trechos de programas que podem ser ativados Pelo programa principal (funo main) Por outra funo
5
int multiplicacao (int p1, int p2) { int produto; Corpo da produto = p1 * p2; funo return produto; }
multiplicacao (int p1, int p2) { int produto; produto = p1 * p2; return produto; }
Em C, caso o tipo retornado seja omitido, o compilador assume que a funo retorna o tipo int
7
Comando return
return expresso
Uma funo que no tem valor para retornar tem o tipo de retorno void
Neste caso, o uso do comando return opcional
void imprimir(int valor) { printf(%d,valor); return; Pode ser omitido }
12
13
minhaFuncao();
14
minhaFuncao();
outraFuncao();
15
Parmetros e argumentos
Os parmetros so nomes que aparecem na declarao de uma funo
void imprimir(int valor) Os argumentos so expresses que aparecem na expresso de invocao da funo
imprimir(10);
16
float media (float num1, float num2) { float result = (num1 + num2)/2; return result; }
17
Passagem de Argumentos
C permite a passagem de argumento por valor: o valor da expresso avaliado primeiro e depois passado para a funo chamada
18
no altera o valor de y
int main() { int y = 1; printf(%d,y); sada:1 incrementa(y); sada:2 printf(%d,y); sada:1 ... }
19
Antes da funo main OU Depois da funo main desde que se declare sua assinatura antes da main
20
int main() { int minutos,hora, seg ; printf(Digite a hora:minutos\n); scanf (%d:%d,&hora,&minutos) ; seg = segundos(hora,minutos); printf(\n%d:%d tem %d segundos.,hora,minutos,seg); return 0 ; }
21
int main() { int minutos,hora, seg ; printf(Digite a hora:minutos\n); scanf (%d:%d,&hora,&minutos) ; seg = segundos(hora,minutos); printf(\n%d:%d tem %d segundos.,hora,minutos,seg); return 0 ; } Definio depois da main int segundos(int hora, int min) { return 60 *(min + horas*60); }
Deve-se declarar antes a assinatura da funo Modo alternativo int segundos (int,int)
22
Escopo de Variveis
O escopo de uma varivel define a rea do programa onde esta varivel pode ser referenciada
Variveis que so declaradas dentro de uma funo s podem ser referenciadas dentro desta funo
So chamadas de variveis locais
23
Escopo de Variveis
Pode existir uma varivel local a uma funo com mesmo nome e tipo de uma varivel global, neste caso ao se referir ao nome da varivel dentro da funo, estar-se- acessando a varivel local
#include <stdio.h>
int
numero = 10;
Declarao de varivel local Referncia varivel local
printf(%d,numero);
Ser impresso o valor 4
24
Variveis Globais
Podem ser usadas em qualquer parte do cdigo
Se no inicializadas explicitamente, inicializa com valores padres
0 para tipos numricos
25
Variveis Globais
Normalmente so declaradas no incio do
programa ou em arquivos do tipo header (*.h) So declaradas uma nica vez
26
int main() { int seg ; printf(Digite a hora:minutos\n); scanf (%d:%d,&hora,&minutos) ; seg = segundos(); printf(\n%d:%d tem %d segundos.,hora,minutos,seg); return 0 ; }
27
Variveis Locais
Tm a mesma capacidade de armazenamento que as variveis globais mas
So declaradas dentro de uma funo S existem durante a execuo da funo
No ocupam a memria durante toda a execuo do programa
28
Variveis Locais
Caso uma funo declare uma varivel local, esta criada a cada execuo da funo
int funcao( ) { int a= 100; a = a + 23; return a; } Sempre retorna 123
29
Modificador static
Caso a varivel local venha com o modificador static, a varivel criada uma nica vez
Armazena seu valor em vrias execues da mesma funo Evita uso de variveis globais
int funcao( ) { static int a= 100; a = a + 23; return a;
} 2 vez retorna 146
30
<main
1 30
<main
30 1 1 30
<segundos <main
<main
4500 1 30
<main 33
define MAX(a,b) ((a) > (b) ? (a):(b)) int main() { float v = 4.5 ; float c = MAX(v,3.0) ;
O compilador ver:
int main() { float v = 4.5 ; float c = ((v)>(3.0)?(v):(3.0)) ;
34
Sada 17 e no 8
Resumindo ...
Funes Importncia
Escrevendo funes
Comando return Passagem de argumentos por valor
Escopo de variveis
Conceito de escopo
Introduo Programao
Estruturas de Repetio
Repetio de Comandos
i
i 0
int somatorio(int n) { int soma = 0; int i = 0; soma = soma + i; i++; soma = soma + i; i++; soma = soma + i; ... }
E haja
copy&paste!
2
Tpicos da Aula
Hoje, aprenderemos a usar estruturas de repetio para programas mais complexos
Necessidade de estruturas de repetio Apresentao do conceito de lao (loop) O comando for O comando while
O comando do-while
Diferenas entre os comandos de repetio
Estruturas de Repetio
Permite repetir diversas vezes um comando ou seqncia de comandos
Cada repetio de um comando ou seqncia de comandos denominada de iterao
So geralmente conhecidos como loops(laos) Da mesma forma que comandos condicionais, so controladas por expresses booleanas C oferece 3 tipos de estruturas(comandos) de repetio:
O lao for O lao while O lao do-while
5
O Comando for
for (i = 0; i < valor; i = i+1) corpo
Executa corpo um nmero especfico de vezes: valor vezes Neste exemplo, na primeira execuo de corpo, o valor de i 0 O valor de i incrementado aps cada execuo de corpo Varivel i deve ser declarada antes de se utilizar o comando for
Varivel de controle
6
true
comando incremento
false
for ( inicializao ; condio ; incremento ) comando; O incremento executado ao fim de cada iterao
Cabealho do for
9
int somatorio(int n) { int valor; int soma = 0; for (valor = 0; valor <= n; valor++) soma = soma + valor; return soma; }
Comando ser realizado enquanto valor for menor ou igual a n
int somatorio(int n) { int valor; int soma = 0; for (valor = 0; valor <= n; valor++) soma = soma + valor; return soma; }
executado depois do for
11
12
13
15
16
O comando while
while (condio) corpo Executa corpo vrias vezes at que a avaliao da expresso retorne falso A condio avaliada de novo aps cada execuo de corpo No executa corpo nenhuma vez, se de incio a avaliao da condio retorna falso
19
condio avaliada
true
comando
false
20
21
22
equivale a ...
O Comando do-while
do { corpo } while(condio)
Executa corpo, pelo menos uma vez, at que a avaliao da condio retorne falso A condio avaliada de novo aps cada execuo de corpo
26
27
Equivalente a ...
corpo; while(condio) corpo;
29
Laos Aninhados
Laos podem ser aninhados da mesma forma que comandos condicionais
O corpo de um lao pode conter outro lao
30
Laos Aninhados
int somatorioDoSomatorio(int n, int vezes) { int soma = 0, somatorio =0; int valExt; for (valExt = 0; valExt < vezes; valExt++ ){ int valInt = 0; while (valInt <= n) { soma = soma + valInt; valInt++; } somatorio = somatorio + soma; } return somatorio; A cada iterao do for, }
31
Os laos for e while so executados 0 ou muitas vezes O lao do-while executado 1 ou muitas vezes
32
O Comando break
Forma Geral do comando break
break;
Tem dois usos distintos
Para forar o trmino de um lao de repetio (do-while, for ou while) Para terminar um case do comando switch
O Comando break
int somatorio(int n) { int soma = 0; int valor; for (valor = 0; ; valor++){ soma = soma + valor; if (valor == n) break; printf(Soma Parcial:%d\n,soma); } printf(Soma Total:%d,soma) return soma; }
34
O Comando continue
Forma Geral do comando continue
continue
Termina a execuo da iterao atual de um loop (for,while,do-while) e volta ao comeo deste loop Todos os comandos que seriam executados aps o continue so descartados
35
a realizao imediata do teste da condio correspondente continuidade do processo de repetio dependendo do resultado do teste
O Comando continue
void imprimeNumerosAteCinco() { int valor; for (valor = 0; valor <= 5; valor++){ if (valor == 4) continue; printf(%d ,valor); Controle pula para } }
o incremento e este comando no ser executado quando valor = = 4
O Comando continue
void imprimeNumerosAteCinco() { int valor = 0; while (valor <= 5){ if (valor == 4) continue; printf(%d,valor); valor++; Controle pula para } o teste e funo }
tem execuo infinita quando valor = = 4
38
Resumindo ...
Estruturas de Repetio
Necessidade de estruturas de repetio Conceito de lao (loop) Tipos de lao em C O comando for O comando while
O comando do-while
Laos Aninhados Diferenas entre os comandos de repetio
Introduo Programao
Recurso
Recurso
decorao Substantivo feminino. 1.Ato ou efeito de decorar
decorar Verbo transitivo direto. 1.Guarnecer com adorno(s); dispor formas e cores em; ornamentar, embelezar; 2.Realar, avivar, adornar;
Recurso
Tpicos da Aula
Hoje, aprenderemos a usar uma tcnica de programao chamada de recurso
Conceito de Recurso Definies Recursivas Casos Base e Geral Programando Recursivamente Recurso X Lao
Recurso
Uma definio recursiva de um conceito consiste em utilizar o prprio conceito na definio
Ex: fat(n) = n * fat(n-1)
Definies recursivas em linguagem natural no so, geralmente, muito teis Contudo, em outras situaes, uma definio recursiva pode ser a mais apropriada para explicar um conceito Recurso uma tcnica de programao que pode fornecer solues elegantes para determinados problemas
Resumindo: uma LISTA definida ou como um nico nmero, ou como um nmero seguido de uma vrgula seguida de uma LISTA Utilizamos LISTA para sua prpria definio
5
24
40, 37 37
6
5! 5 * 4! 4 * 3!
120 24 6
3 * 2! 2 * 1!
2
1
1 * 0! 1
Denomina-se de caso base, a parte no recursiva da definio, enquanto o caso geral a parte recursiva
9
Programao Recursiva
Uma funo em C pode chamar ela mesma
Funo recursiva
O cdigo de uma funo recursiva deve tratar o caso base e o caso geral Cada chamada da funo cria novos parmetros e variveis locais
Cria-se uma nova instncia da funo
Como em qualquer chamada de funo, assim que a funo termina sua execuo, o controle retorna para a funo que a chamou (que neste caso, outra instncia da mesma funo)
Caso Base
return resultado;
}
Caso Geral
11
12
resultado n fat
2 -
1 2 -
5 Retorno da 1a chamada
1 1 2 -
resultado n fat
2 2 -
<fatorial <main
fat
<main 13
Deve-se transportar todos os discos da primeira estaca at a ltima obedecendo as seguintes regras: 1. S pode ser deslocado um disco por vez (o do topo de uma estaca) 2. Em nenhum momento um disco maior pode estar sobre um menor
14
1. Mover n 1 discos da estaca Origem para a Temporria 2. Mover o disco n da estaca Origem para a Destino 3. Mover n 1 discos da estaca Temporria para a Destino
15
Torre de Hanoi
Caso Base
void mover(int n, char orig, char temp, char dest) { if (n == 1) printf("Mova o disco 1 da estaca %c para a estaca %c\n",orig,dest); else { mover (n-1,orig,dest,temp); printf("Mova o disco %d da estaca %c para a estaca %c\n",n,orig,dest); mover(n-1,temp,orig,dest); } }
Caso Geral
16
17
Recurso x Lao
No porque existe uma soluo recursiva, que sempre devemos us-la Solues iterativas (com lao) so geralmente mais eficientes
Solues recursivas geralmente demandam mais poder de processamento e memria
Porm, solues utilizando recurso podem ser mais elegantes e mais compreensveis que solues iterativas equivalentes Programador deve analisar caso a caso qual a melhor tcnica a aplicar para a resoluo do problema
18
Resumindo ...
Recurso
Conceito Exemplos de definies recursivas Casos Base e Geral Programando Recursivamente Recurso X Lao
19
Introduo Programao
Vetores !
2
Tpicos da Aula
Hoje, aprenderemos como armazenar grande quantidade de informao
Necessidade de armazenamento Utilizao de muitas variaveis Manipulao incremental das informaes
Necessidade de Armazenamento
Sistemas armazenam informaes para que possam posteriormente acess-las e manipul-las Maioria dos sistemas requer o armazenamento de grande quantidade de valores do mesmo tipo
Mesmas operaes para manipular estes valores Ex: processamento de imagens Milhes de imagens e cada imagem composta de milhes de pixels
No desenvolvimento de um programa, devemos definir estruturas e mecanismos para armazenar e manipular esta grande quantidade de informao
x
i 1
n
5
Neste caso, a soluo seria criar uma varivel para cada valor que desejamos armazenar
No uma boa soluo, porm hoje veremos como podemos trabalhar com esta alternativa
#include <stdio.h> int main() { float numero1, numero2, numero3; float media;
printf(Digite 3 numeros:\n); scanf(%f %f %f, &numero1,&numero2,&numero3); media = (numero1 + numero2 + numero3)/3; printf(\nA media eh %f\n,media); return 0; Trecho de cdigo depende } da quantidade de nmeros suportados Limitao: S permite mdia
de 3 nmeros
Dificuldade de lidar com mudana do nmero de informaes que devem ser armazenados
Acrescentar ou remover varivel Muitas vezes requer modificaes em vrias linhas de cdigo
10
variada de nmeros
nmero digitado!
No exemplo, sabemos apenas qual foi o somatrio dos valores inseridos e no quais valores foram inseridos
12
Necessidade de Vetores
Precisamos de alguma armazenamento que: estrutura de
armazene vrios valores de um determinado tipo permita que os valores sejam acessados de forma simples
8.8
9.8 10.0
Vetores !
13
Vetores
Vetor ou array um tipo de dado utilizado para representar um conjunto de valores homogneos utilizando um nico nome Define uma estrutura que armazena valores de um determinado tipo Um vetor declarado usando tipo nome[tamanho]; No ato da declarao, devemos especificar o tamanho (dimenso) do vetor
Vetores tm tamanho fixo depois de criados
14
Vetores
float notas[10]; ndices do vetor 0 1 4 9 2 3 8 6 4 3 5 7 6 8 7 2 8 9 9 5
notas
notas[0] notas[1] ... notas[9] Cada elemento do vetor referenciado atravs do ndice do vetor ndice comea em 0 e vai at tamanho -1
notas
10 9
notas[2]
A expresso notas[2] representa um local para armazenar um inteiro e pode ser utilizada da mesma forma que uma varivel do tipo inteiro
16
Vetores na Memria
int v[10];
144
Aloca espao para 10 valores inteiros, referenciados por v reservado um espao de memria contnuo
v[0]
v[9] v
104
Mas: v [10]
18
Inicializando Vetores
Inicializadores de vetores so representados da seguinte forma: {expresses},onde expresses representam expresses de tipos vlidos separadas por vrgulas Vetores podem ser inicializados na declarao
int int v[5] = {5,10,15,20,25} ; v[]= {5,10,15,20,25};
ou simplesmente:
Vetores s podem ser inicializados no ato da declarao!
21
22
Ao passar um vetor para uma funo podemos modificar o contedo deste vetor dentro da funo
Passa-se na verdade o endereo do vetor na memria (veremos em breve!) Modificar um elemento do vetor ou incluir um novo elemento
24
25
Vetores Bidimensionais
Um vetor unidimensional armazena uma lista de elementos
Um vetor bidimensional pode ser visto como uma matriz com linhas e colunas
int matriz[9][6];
uma dimenso
27
Inicializando Matrizes
A inicializao de uma matriz tambm pode ser feita das seguintes formas:
float mat[4][3]={{5.0,10.0,15.0},{20.0,25.0,30.0} , {35.0,40.0,45.0},{50.0,55.0,60.0}}
float mat[4][3] = {5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0,45.0, 50.0,55.0,60.0} float mat [][3]= {5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0,40.0,45.0,50.0,55.0,60.0} Deve ser passada a segunda dimenso
28
Percorrendo Matrizes
int main() { int i,j; int matriz[2][2]={{1,2},{5,6}}; for (i=0;i<2;i++){ for (j=0;j<2;j++){ printf("%d ",matriz[i][j]); } printf("\n"); } return 0; Laos aninhados para } percorrer matriz Sada: 1 2 5 6
como
do tipo
30
Resumindo ...
Armazenamento de grande quantidade de informao
Necessidade de armazenamento Problemas Utilizao de muitas variaveis Manipulao incremental das informaes
Vetores
Conceito Declarao Inicializao Acesso Limites de um vetor Passagem de vetores como parmetros Vetores bidimensionais (matrizes)
32
Introduo a Programao
Tpicos da Aula
Hoje aprenderemos a manipular vetores de caracteres (Strings)
Caracteres em C Entrada/Sada de caracteres Funes que manipulam caracteres Vetores de caracteres (Strings) Inicializao Strings constantes Entrada/Sada de Strings Funes de Manipulao de Strings
2
Caracteres
Em C, o tipo char :
usado para representar caracteres pode armazenar valores inteiros (em 1 byte), representando assim, 256 valores distintos Uma constante char escrita entre aspas simples
char letraA = A; char letraC; letraC = C; printf ( %c %c , letraA , letraC) ;
Caracteres
So representados internamente na memria do computador por cdigos numricos
A correspondncia entre os caracteres e os seus cdigos numricos feita por uma tabela ASCII Na tabela ASCII: os dgitos so codificados em seqncia as letras minsculas e maisculas tambm formam dois grupos sequenciais
char letraA = 65; /* letra A*/ char letraC; letraC = 67; printf ( %c %c , letraA , letraC) ;
4
Tabela ASCII
0
30 40 50 60 70 80 ( 2 < F P
Z d n x
2 sp ) * 3 4 = > G H Q R [ \ e f o p y z
3 ! + 5 ? I S ] g q {
4 5 6 # $ , . 6 7 8 @ A B J K L T U V ^ _ ` h i j r s t | } ~
7 8 % & / 0 9 : C D M N W X a b k l u v
9 1 ; E O Y c m w
5
Impresso de Caracteres
Podem ser impressos diferentes usando o printf:
char lc = 97 ; printf(%d %c,lc,lc);
de
duas
formas
Sada: 97 c
Sada: 95 a
Leitura de Caracteres
Leitura de caracteres com a funo scanf
char a ; scanf(%c,&a );
OU
char a ;
/* sem brancos */
scanf( %c,&a );
Leitura de Caracteres
Funo scanf e getchar obriga que a tecla <enter> seja pressionada aps a entrada dos dados Existem funes para ler dados sem esperar pelo <enter> em C para ambientes Windows:
Funo getche definida em conio.h
Diferena entre qualquer caracter minsculo e a letra a a mesma do equivalente maisculo e a letra A
10
11
Inicializao de Strings
Inicializao do vetor de caracteres na declarao
12
Declarando Strings
char s2[] = Rio de Janeiro;
Representa um vetor de no mximo, 80 elementos char s4[81] = Rio; Representa um vetor de no mximo 80 elementos, mas com um valor inicial j atribudo
13
\0
e
f i c e R
104
103 102 101 100
f
i
c
e R
Impresso de Strings
Especificador %s na funo printf deve ser utilizado
char cidade [81] = Recife; printf(%s, cidade );
Funo puts de stdio.h pode ser utilizado tambm para imprimir strings
char cidade [81] = Recife; puts(cidade);
17
Leitura de Strings
Especificador %s na funo scanf captura somente uma seqncia de caracteres no brancos
Limitao: somente nomes simples podem ser lidos
& no necessrio pois cidade j armazena um endereo (endereo inicial do vetor)
char cidade [81]; scanf (%s, cidade ); Um caracter branco pode ser um: espao ( ) caractere de tabulao ( \ t ) caractere de nova linha ( \ n )
18
A funo acima l uma seqncia de caracteres at que seja digitado um <enter> A incluso do espao antes de % descartam espaos em brancos que precedem o nome
19
21
Funo anloga
void imprime (char s[]) printf ("%s,s); printf (\n); } {
22
Equivalente a char[]
23
Copiando Strings
ERRADO char capital[7]; capital = Recife"; No se usa atribuio para copiar uma String na constante do tipo String capital
CORRETO char capital[7]; char cidade[7]; strcpy(capital,Recife); strcpy(cidade,capital); Para copiar Strings devese utilizar uma funo que faz a cpia!
Vetor de Strings
Vetor de Strings equivale a um vetor de vetores
Matriz Cada linha da matriz corresponde a uma string
28
29
Resumindo ...
Caracteres em C Entrada/Sada Funes que manipulam caracteres Vetores de caracteres (Strings) Inicializao Strings constantes Entrada/Sada Funes de Manipulao de Strings
30
Introduo Programao
Qualidade de Software
Quero que voc escreva rapidamente um sistema de folha de pagamento que funcione corretamente, que seja robusto e que seja rpido. Ah! Pretendo lanar uma outra verso deste mesmo programa, daqui a uns 6 meses.
Ferrou!
Sem problema, chefe.
Tpicos da Aula
Hoje aprenderemos qualidade de software alguns fatores de
Depois aprenderemos algumas tcnicas para melhorar alguns fatores de qualidade de um programa
Comentrios Padres de Codificao Papel da endentao em um programa Algumas dicas para melhorar a eficincia de um programa 3
O impacto na prtica
Competitividade das empresas Melhores produtos a um menor custo Atrao de novas empresas para a regio Investimentos na regio Arrecadao de impostos
Crise de Software
Nas 3 primeiras dcadas da Computao, a preocupao maior era hardware
Custo de processamento e armazenamento de dados
A produtividade dos profissionais da rea de software no tem acompanhado a demanda por seus servios
6
Essncias
Complexidade crescente dos sistemas Dificuldade e custos de formalizao Uma linha de cdigo do sistema de controle de lanamento do nibus espacial da NASA custa 1.000 dlares!
Dificuldade de Formalizao
Fatores Internos
Qualidades percebidas somente por profissionais de software que tm acesso ao cdigo do software Ex: modularidade, legibilidade, etc
10
Software est em constante mudana 70% de custo do software a fase de manuteno Mudanas de requisitos so responsveis por 50% das atividades de manuteno
Este uso pode ser de partes do software ou dele todo Grande impacto no tempo de desenvolvimento de software Menor tempo de desenvolvimento importante para sucesso do software
12
Facilidade de Uso uma qualidade que diz respeito a facilidade com que usurios com diferentes perfis conseguem aprender a utilizar o software e resolver os problemas desejados
Engloba tambm o aprendizado de instalao, operao e monitoramento Representa economia para a empresa que utiliza o software em relao aos custos de treinamento
13
14
Legibilidade de um programa a facilidade com que profissionais de software conseguem entender o cdigo do programa
Documentao importante Padres de codificao devem ser seguidos Legibilidade Reusabilidade e Extensibilidade
15
16
Cabe ao desenvolvedor avaliar quais fatores so mais importantes de acordo com a aplicao
17
Comentando um Programa
Um programa deve ser bem documentado
Documentao externa para usurios Documentao no prprio programa Aumenta a legibilidade Comentrio um mecanismo oferecido pelas linguagens de programao que permite que o programador expresse em linguagem natural a lgica pensada para escrever um programa ou um trecho de programa
18
Comentando um Programa
Usa-se o termo inline documentation para comentrios em um programa Devem ser includos para explicar o propsito do programa e algumas partes dele Comentrios no afetam o funcionamento do programa
So ignorados na hora da execuo Dica: Comente o cdigo enquanto o estiver escrevendo, seno h uma forte probabilidade de no o fazer depois
19
Comentrios em C
Em C para incluir comentrios:
Usa-se /* e */
Pode conter mltiplas linhas
/* Este tipo de comentrio s termina quando o asterisco barra encontrado */
de
20
Comentrios em C
Comentrios de uma linha usando // so aceitos pela maioria dos ambientes de programao (IDEs)
Precedido de // // Este um comentrio de uma linha
Isto ocorre porque a maioria das IDEs suportam C++ Este tipo de comentrio aceito em C++
21
Reuso de Cdigo
Reusabilidade um fator importante para acelerar o desenvolvimento de um sistema Reuso pode se dar de vrias formas:
Funo inteira Uma funo chama outra funo Trechos de programa ou funes
22
Reuso de Cdigo
Existem muitas tcnicas existentes para reutilizar cdigo ou pelo menos aumentar o potencial de reuso Uma tcnica infelizmente muito difundida o copy & paste
Soluo rpida e boa para quem no quer pensar Soluo pssima para a manuteno do sistema
Se uma alterao for requerida, esta tambm dever ser propagada por todos os trechos repetidos Se um bug for encontrado, ter de ser corrigido em todos os outros cdigos repetidos
Refactoring
Refactoring consiste em uma srie de tcnicas que reestruturam o cdigo do software, aumentando o potencial de reuso, extensibilidade e legibilidade
O comportamento do software continua o mesmo, s muda a estrutura Muito difundido entre metodologias de desenvolvimento de software orientadas a objetos Porm, muitas tcnicas podem ser aplicadas a programas desenvolvidas em linguagens como C Exemplos de refactoring: Generalizar uma funo com parmetros Transformar um trecho de codigo em uma funo
24
Padronizao de Codificao
Quanto mais fcil for o entendimento (legibilidade) do cdigo do sistema, mais produtiva ser a equipe de desenvolvimento Freqentemente as pessoas que escrevem o cdigo no so as mesmas que o mantm
Pode haver dificuldades de entendimento entre as diferentes pessoas que trabalham sobre o mesmo cdigo Atrasa o desenvolvimento do sistema
25
Padronizao de Codificao
Um padro de codificao visa minimizar esses problemas
Estabelece regras, definindo como o cdigo deve ser escrito para favorecer a impessoalidade do programa Facilita a integrao de novos desenvolvedores ao ambiente de desenvolvimento
Para nome de variveis locais que representam contadores, pode-se colocar apenas uma letra do alfabeto
for (i = 0; i < 5; i++) /*Aceitvel */
28
variavelQueArmazenaQuantidadeDeAutores /*Ruim*/
Nomenclatura de Funes
Identificadores no devem ser abreviados Recomenda-se colocar o nome comeando letra minscula
Se houver mais de uma palavra, as palavras seguintes devem comear com maiscula ou serem separadas com o caracter de underscore (_)
No se deve colocar nomes misturando palavras de lnguas diferentes Muitas vezes, coloca-se na primeira palavra um verbo no infinitivo representando a utilidade da funo
Ex: imprimirPrimos(int comeco, int fim)
Importncia da Endentao
Como sabemos, o compilador C ignora espaos e tabulaes Porm, para aumentar a legibilidade do cdigo muito importante se preocupar com sua endentao
Torna mais claro o que ser feito dentro de comandos condicionais e laos Torna mais claro o limite de funes if (total > MAX) printf ("Erro!!"); contador++;
31
No declarar variaveis que no sero utilizadas No declarar variveis com tipos que ocupam mais memria quando a aplicao no trabalha com valores muito grandes
Aritmtica de inteiros mais rpida do que aritmtica de ponto flutuante (reais)
33
34
int i, existe = 0;
for(i = inicio; i <= fim;i++){ /*Considere que exista uma funo que diz se um num primo*/ if (numeroPrimo(i) == 1) {
existe = 1;
} } return existe;
36
Quando o programa tiver muitos if testando uma mesma variavel, verificar se no melhor colocar alguns else para evitar testes desnecessrios
37
Referncias Adicionais
Crise do software
Softwares Chronic Crisis
http://www.cin.ufpe.br/~if669/files/MaterialDeEnsino/Referencias/SoftwareChronicsCrisis/SciAmSept1994.html
Fatores de Qualidade
Construction.
Otimizao de cdigo C
http://www.abarnett.demon.co.uk/tutorial.html#ARRAY
39
Resumindo ...
Fatores de qualidade de software
Fatores de qualidade externos Fatores de qualidade internos
40
Introduo a Programao
Tpicos da Aula
Hoje aprenderemos a manipular endereos de memria ou ponteiros
Variveis e Endereos Conceito de Ponteiro Operadores de Ponteiros Ponteiros e Funes Passagem de Argumentos por Referncia Importncia de uso de ponteiros Aritmtica de Ponteiros
Variveis e Endereos
Memria abstrata (Como vemos a memria): IdValor {x5, y9, za} Memria concreta: Associaes: {x13, y72, z00} IdEndereo Memria de fato: {00a,...,135, EndereoValor 729,...,99undefined}
Ponteiros
Toda varivel tem um endereo ou uma posio associados na memria Este endereo visto como um ponteiro (ou apontador), uma referncia para a posio de memria de uma varivel Ponteiros fornecem um modo de acesso varivel sem referenci-la diretamente Um endereo pode ser armazenado em uma varivel do tipo ponteiro (ponteiro varivel)
Ponteiro Varivel
Um ponteiro varivel uma varivel que contm o endereo de outra varivel
Memria
V
valor1
P = endereo da varivel V
Para declarar uma varivel do tipo ponteiro: Forma Geral: tipo* variavel int* p;
Declara uma varivel de nome p que pode armazenar um endereo de memria para um inteiro
Operador &
Operador unrio que fornece o endereo de uma varivel Forma Geral: &variavel
int *p; int v; p = &v;
Varivel p de tipo ponteiro para inteiro recebe endereo da varivel v de tipo inteiro
Operador de Indireo *
Quando aplicado a uma varivel do tipo ponteiro, acessa o contedo do endereo apontado por ela Forma Geral: *variavel
int *p; int v = 3; p = &v; *p = 4; endereo5 endereo4 endereo3 endereo2 endereo1
4 3
endereo4
Usando Ponteiros
int i, j; int *ip;
i = 12; O endereo de i armazenado em ip
O contedo da posio apontada por ip armazenado em j O contedo da posio apontada por ip passa a ser 21
Usando Ponteiros
1)
int i,j ; int *ip ; ip j i
12
3)
ip = &i ; ip j i 104 112 108 104
4)
j = *ip;
*ip = 21;
ip j i
12
104 12 12 21
Manipulando Ponteiros
int main () { /* funo int a , *p ; p = &a ; *p = 2 ; printf (%d,a); return 0 ; } principal */
Imprime o valor 2
/* funo principal*/
Funes e Ponteiros
Retorno explcito de valores no permite transferir mais de um valor para a funo que chama
# include <stdio.h> void somaprod(int a, int b, int c, int d) { c = a + b ; d = a * b ; } int main () { int s,p ; somaprod(3,5,s,p) ; printf(Soma = %d e Produto = %d \n,s,p); return 0 ; }
void swap(int* px, int* py){ int temp; temp = *px; *px = *py; *py = temp; }
3)
4)
16
Manipular vetores e strings - til para passar vetores como parmetro Criar estruturas de dados mais complexas, como listas encadeadas, rvores binrias etc.
18
Se px = 65488 e py = 65484
Sada ser: px - py = 1
A diferena entre dois ponteiros ser dada na unidade do tipo de dado apontado
Podemos utilizar operador de incremento com ponteiros Podemos fazer aritmtica de ponteiros
22
Resumindo...
Ponteiros
Conceito Operadores de Ponteiros Ponteiros e Funes Passagem de Argumentos por Referncia Quando usar ponteiros Operaes com Ponteiros
23
Introduo a Programao
Ponteiros e Vetores
Tpicos da Aula
Hoje aprenderemos que existe uma forte relao entre ponteiros e vetores
Associao entre ponteiros e vetores Ponteiros constantes x Ponteiros variveis Passagem de ponteiros invs de vetores para funes Comando sizeof
O smbolo v Representa o vetor uma constante que representa seu endereo inicial Aponta para o primeiro elemento do vetor
Ponteiros e Vetores
Como vimos, C permite aritmtica de ponteiros Se tivermos a declarao
int v [10] ;
Aponta para (igual ao endereo do) primeiro elemento do vetor Aponta para o segundo elemento do vetor
Aponta para o ltimo elemento do vetor v[i] *(v + i)
5
v + 9
Portanto: &v[i](v + i)
108 107
106
10
*v v[0] 6 v
&v[0] 100
Ponteiros e Vetores
Vetores podem ser tratados como ponteiros em C!
*pa a[0] pa[0] int a[10]; *(pa+i) a[i] int *pa; pa = &a[0]; pa[i] *(a+i) pa = a; a+i &a[i]
Expresses Equivalentes!
Tenta incrementar endereo armazenado na constante nums e atualizar a constante com novo endereo
9
Incrementa endereo armazenado na varivel pnums e atualiza a varivel com novo endereo
10
11
12
13
Resposta 1: No tem como saber Resposta 2: indiferente. Podemos considerar um ponteiro para uma varivel do tipo inteiro como um ponteiro para um vetor com um s elemento
14
Comando sizeof
Forma Geral:
sizeof(tipo) ou sizeof(variavel)
15
int main() { int num[ ]={1,2,3}; int numElementos = sizeof(num)/sizeof(int); printf ("Tamanho = %d\n", sizeof(num)); printf ("Num elementos = %d\n", numElementos); }
int main() { int num[ ]={1,2,3}; int* num2 = num; int numElementos = sizeof(num2)/sizeof(int); printf ("Tamanho = %d\n", sizeof(num2)); printf ("Num elementos = %d\n", numElementos); }
16
Resumindo ...
Relao entre ponteiros e vetores
Ponteiros constantes x Ponteiros variveis Passagem de ponteiros invs de vetores para funes Comando sizeof
17
Introduo a Programao
Tpicos da Aula
Hoje aprenderemos ponteiros e strings que a relao entre
Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros para strings Tambm veremos como alocar espao de memria em tempo de execuo Conceito de Alocao Dinmica Importncia Funes em C para alocao dinmica Usando alocao dinmica para criar vetores e matrizes dinmicas
2
Ponteiros e Strings
Uma string um vetor de caracteres
char s [10] ;
Vimos que s armazena o endereo inicial do vetor Portanto, podemos manipular strings com ponteiros
Ponteiros e Strings
ERRADO char capital[7]; capital = Recife";
Ponteiros e Strings
Declarao da constante do tipo vetor de caracteres capital Vetor de caracteres inicializado com as letras que fazem parte de Recife
CORRETO char capital[7] = Recife"; char* cidade; cidade = Recife; Atribuio do endereo da constante Recife varivel cidade
Estes dois cdigos executariam da mesma forma? Imprime audacoes (sem s): ponteiro varivel Erro de compilao: tentativa de modificar ponteiro constante
6
Podemos passar como argumentos, tanto ponteiros para strings ou vetores de caracteres(strings) int main() { char *salute=saudacoes; char saudacao[10]; strcpy(saudacao,salute); return 0; }
7
Alocao de Memria
Quando declaramos uma varivel, o compilador reserva (aloca) um espao na memria suficiente para armazenar valores do tipo da varivel
Alocao esttica (em tempo de compilao) int var ; char s1 [10]; char* s2; Aloca espao para 1 int Aloca espao para 10 char Aloca espao para 1 endereo
14
Alocao Dinmica
Modos de alocar espao em memria:
Estaticamente Variveis globais (e estticas): O espao reservado para a varivel existe enquanto o programa estiver sendo executado Variveis locais: O espao existe enquanto a funo, que declarou a varivel, estiver sendo executada. Dinamicamente Requisitar memria em tempo de execuo: O espao alocado dinamicamente permanece reservado at que seja explicitamente liberado pelo programa 15
Alocao Dinmica em C
Funo bsica para alocar memria malloc presente na biblioteca stdlib.h
void* malloc(unsigned qtdBytes); Recebe como argumento um nmero inteiro sem sinal que representa a quantidade de bytes que se deseja alocar Retorna o endereo inicial da rea de memria alocada.
16
Se a alocao for bem sucedida, v armazenar o endereo inicial de uma rea contnua de memria suficiente para armazenar 10 valores inteiros (4O bytes)
17
int *v ; v = malloc(10 * sizeof (int)) ; Funo malloc retorna um ponteiro genrico, para qualquer tipo, representado por *void
Faz-se a converso para o tipo apropriado usando o operador de molde de tipo (cast)
Erro na Alocao
Se no houver espao livre suficiente para realizar a alocao, a funo malloc retorna um endereo nulo
representado pelo smbolo NULL
uma boa prtica de programao testar se a alocao foi bem sucedida para evitar erros de execuo
19
*v ;
2) v=(int*)malloc(10*sizeof (int));
Reserva-se o espao de memria da rea livre e atribui o endereo v
Cdigo do programa Variveis Globais e Estticas 40 bytes Memria livre 504
Memria livre
504
21
Vetores Dinmicos
Declarao de vetores implicam em alocao esttica de memria
Com alocao dinmica, podemos criar algo como um vetor cujo tamanho decidido em tempo de execuo, ou seja um vetor dinmico Para tal, usaremos variveis do tipo ponteiro que recebero os endereos iniciais do espao alocado dinamicamente
Com o endereo inicial, podemos navegar pelo vetor
23
Funo Realloc
Podemos mudar o espao de memria alocado previamente de forma dinmica Para isso, podemos utilizar a funo realloc void* realloc(void* ptr,unsigned qtdBytes);
Recebe endereo do bloco de memria alocado previamente Recebe como argumento um nmero inteiro sem sinal que representa a quantidade de bytes que se deseja alocar Retorna o endereo inicial da rea de memria alocada Se endereo retornado for diferente do passado como parmetro, contedo do bloco original copiado para novo endereo
25
Usando Realloc
int main() { int qtdNumeros = 5,contador = 0; Vetor alocado char resposta; dinamicamente float media = 0.0; float* nums; nums = (float*) malloc(qtdNumeros*sizeof(float)); if (nums == NULL) { printf(Memoria insuficiente);exit(1); } printf(Programa calcula media de 5 numeros.); printf(Deseja mais/menos? (s/n)\n); scanf(%c,&resposta); Tamanho do vetor muda if (resposta == s) { dinamicamente do { printf(Quantidade de numeros?:\n); scanf(%d, &qtdNumeros); } while (qtdNumeros <= 0); nums = (float*) realloc(nums,qtdNumeros*sizeof(float)); /* continua */ 26 }
27
CERTO! Endereo alocado dinamicamente fica disponvel at que seja liberado explicitamente
28
30
6
7
10
11
Memria
m
100 107 106 105 104 103 102 101 100 300 408
412
408
11
Vetor Linha
300
304
10
int linhas, colunas,i,j; printf(Numero de linhas e colunas da matriz:\n"); scanf("%d %d",&linhas,&colunas); float** mat ; mat = (float**) malloc(linhas * sizeof(float*)); for (i = 0 ; i< linhas ; i++) { mat[i]= (float*) malloc(colunas * sizeof(float)) ; } printf("\n Digite os elementos da matriz:\n"); for(i=0; i< linhas; i++) { for(j=0; j< colunas; j++) { printf("Elemento [%d][%d] = ",i,j); scanf("%f",&mat[i][j]); Alocando vetor printf("\n"); } de ponteiros Alocando } vetores-linha /* continua */
Erro de Execuo!
Resumindo ...
Relao entre ponteiros e strings
Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros para strings Alocao Dinmica Uso Funes em C para alocao dinmica Usando alocao dinmica para criar vetores e matrizes dinmicas
37
Introduo a Programao
Tpicos da Aula
Hoje aprenderemos a trabalhar com tipos de dados mais complexos
Tipos Primitivos x Tipos Estruturados Conceito de Tipos Estruturados Importncia Tipos Estruturados em C (struct) Declarao de structs Variveis do tipo struct Operaes com estruturas Comando typedef Passando Estruturas para Funes Estruturas Aninhadas
Tipos Estruturados
C oferece tipos primitivos que servem para representar valores simples Reais (float, double), inteiros (int), caracter (char) C oferece tambm mecanismos para estruturar dados complexos nos quais as informaes so compostas por diversos campos
Tipos Estruturados !
Tipos Estruturados
Agrupa conjunto de tipos de dados distintos sob um nico nome Podemos criar varios objetos na memria de um determinado tipo estruturado Nome do tipo Estruturas ou Registros estruturado Cadastro Pessoal string Nome string Endereo inteiro Telefone Membro do tipo inteiro Idade estruturado inteiro Data de Nascimento float Peso float Altura
Peso Altura
}
6
float
float
};
y ;
precisa de parnteses
10
11
struct ponto alteraPonto(float x, float y){ struct ponto q; q.x = x; Funes podem q.y = y; usar o tipo return q; estruturado } declarado acima int main (){ struct ponto p ; printf(\nDigite as coordenadas do ponto (x,y)) ; scanf (%f %f, &p.x , &p.y ) ; p = alteraPonto(8,9); ... 12 }
Errado !
13
float
float } p;
x ;
y ;
14
Atribuio de Estruturas
A estrutura armazenada por uma varivel de um tipo estruturado pode ser atribuda a outra varivel deste mesmo tipo estruturado struct pessoa { Atribuio de uma char nome[60] ; estrutura para a int idade ; varivel p1 }; (Errado) int main() { struct pessoa p1,p2; p1 = {Ana, 30}; p2 = p1; ... } Atribuio da estrutura contida em p1 para p2
16
Usando typedef
O comando typedef permite criar novos nomes para tipos existentes
Criao de sinnimos para os nomes de tipos til para abreviar nomes de tipos ou tipos complexos Forma Geral:
19
Usando typedef
Aps a definio de novos nomes para os tipos, podese declarar variveis usando estes nomes
struct pessoa { char nome[60] ; Tipo existente int idade ; }; typedef struct pessoa Pessoa; int main() { Pessoa p = {Ana, 30}; ...
} Novo nome Simplificou declarao do tipo de varivel
20
Usando typedef
Podemos combinar typedef com declarao do tipo estruturado
typedef struct pessoa { char nome[60] ; int idade ; } Pessoa; int main() { Pessoa p = {Ana, 30};
... Criao de tipo e criao de sinnimo
21
Assim como podemos passar tipos primitivos como argumentos para uma funo, podemos passar estruturas
22
23
Retornando Estruturas
Considere a funo abaixo:
struct ponto alteraPonto(float x, float y ){ struct ponto q; q.x = x; q.y = y; return q; }
Assim como uma funo pode retornar um valor de um tipos primitivo, uma funo pode retornar uma estrutura
24
Retornando Estruturas
typedef struct ponto float x ; float y ; } Ponto; {
Ponto alteraPonto(float x, float y){ Ponto q; q.x = x; Varivel p recebe q.y = y; a estrutura return q; retornada por } alteraPonto int main (){ Ponto p ; printf(\nDigite as coordenadas do ponto (x,y)) ; scanf (%f %f, &p.x , &p.y ) ; p = alteraPonto(8,9); ... 25 }
y1 ) 2
Passa para distancia uma estrutura Ponto que membro da estrutura Circulo
27
Resumindo
Tipos Estruturados Structs Operaes com Estruturas Comando typedef Passando Estruturas para Funes Estruturas Aninhadas
28
Introduo a Programao
Tpicos da Aula
Hoje aprenderemos a trabalhar com ponteiros para estruturas
Ponteiros para estruturas Alocao dinmica de estruturas Passagem por referncia de estruturas Vetores de estruturas x Vetores de ponteiros para estruturas
outros
p->x = 7.0;
5
Aloca espao na memria para uma estrutura que contm um vetor de 32 caracteres (32 bytes), um inteiro (4 bytes) e um double (8 bytes)
int main() { struct pessoa* p; p = (struct pessoa*) malloc(sizeof(struct pessoa)); strcpy(p->nome,Ana); p->idade = 30; ... } 6
Aloca espao na memria para uma estrutura que contm um ponteiro para float (4 bytes), e uma estrutura pessoa (44 bytes)
Cpia da estrutura na pilha no eficiente mais conveniente passar apenas o ponteiro da estrutura 8
Vetores de Estruturas
Podemos utilizar vetores de estruturas Considere o clculo de um centro geomtrico de um conjunto de pontos
x
x
i 1
e y
y
i 1
struct ponto centrogeometrico(int n,struct ponto* v){ int i ; struct ponto p = { 0.0 , 0.0 } ; for ( i = 0 ; i < n ; i++ ){ p.x += v[i].x ; Endereo inicial do p.y += v[i].y ; vetor de pontos } p.x /= n ;p.y /= n ; return p ; Acessando coordenada x do i- 11 }
12
ALUNO;
void inicializa (int n,ALUNO** tab){ int i ; Todas as posies do for(i=0 ;i< n;i++) vetor de ponteiros tab [i] = NULL ; } guardam endereos
nulos
14
15
} else {
printf(Indice fora do limite do vetor\n); } }
16
17
18
19
20
enum dias_semana { domingo = 1, segunda, terca, quarta, quinta, sexta, sabado }; domingo == 1 segunda == 2 sabado == 7
23
Usando enums
enum dias_semana { domingo, segunda, terca, quarta, quinta, sexta, sabado }; typedef enum dias_semana DIAS; int dia_util(DIAS dia) { int ehUtil = 0; if (dia >= segunda && dia <= sexta) { ehUtil = 1; } return ehUtil; }
Apenas um nico membro de uma union pode estar armazenado em um determinado instante
A atribuio a um membro da union sobrescreve o valor anteriormente atribudo a qualquer outro membro
25
Union x Struct
struct pessoa { char nome[32]; int idade ; double peso; };
44 bytes na memria (soma do tamanho das variveis)
peso - 8 bytes idade -4 bytes
4 bytes
nome -32 bytes
29
Introduo a Programao
Arquivos
Tpicos da Aula
Hoje aprenderemos a persistir dados
Conceito de arquivos Importncia de persistncia Modos de acesso de arquivos em C Operaes em arquivos Funes de leitura/escrita em modo binrio
Arquivos
Um arquivo representa um elemento de informao armazenado em memria secundria (disco) Caractersticas:
Informaes so persistidas Atribui-se nomes aos elementos de informao (arquivos e diretrios),em vez de endereos de memria Acesso s informaes so mais lentos
Para melhorar velocidade de acesso, a cada acesso, transfere-se trechos maiores do arquivo para espaos da memria (buffers)
4
0 1 2 3 4
0 1 2 3 4
Inteiros
Modo Texto
interpretado como uma seqncia de caracteres agrupadas em linhas Linhas so separadas por um caractere de nova linha Vantagens:
Pode ser lido facilmente por uma pessoa Editado por editores de texto convencionais
Desvantagens
Codificao dos caracteres pode variar (ASCII, UTF8, ISSO-8859, etc) Arquivos tendem a ser maiores (todas os dados so convertidos para caracteres)
6
Modo Binrio
Dados so armazenados da mesma forma que so armazenados na memria principal
Vantagens:
Facilmente interpretados por programas Maior velocidade de manipulao Arquivos so, geralmente, mais compactos Difcil de serem entendidos por pessoas Dependentes da mquina onde foram gerados
Desvantagens:
Operaes em Arquivos
Abertura
Sistema Operacional (SO) encontra arquivo pelo nome Prepara buffer na memria
Leitura
SO recupera trecho solicitado do arquivo Parte ou todo trecho pode vir do buffer
Operaes em Arquivos
Escrita
SO altera contedo do arquivo Alterao feita primeiro no buffer para depois ser transferida para o disco
Fechamento
Informao do buffer atualizada no disco rea do buffer utilizada na memria liberada
Abertura de Arquivos em C
Operaes de manipulao de arquivos em C se encontram, geralmente, na stdio.h Funo de Abertura
FILE* fopen(char* nome,char* modo);
Nome Nome do arquivo FILE Tipo estruturado que representa uma abstrao do arquivo modo r - Indica leitura w Indica escrita a Indica escrita ao final do existente t Indica modo texto b Indica modo binrio
10
Abrindo arquivos
FILE *fptr; /* ponteiro para arquivo */ fptr = fopen(arqtext.txt, w);
nome do arquivo
Tipo de abertura
r Abrir arquivo texto para leitura. O arquivo deve estar presente no disco w Abrir arquivo texto para gravao. Se o arquivo existir ele ser destrudo e reinicializado. Se no existir, ser criado a Abrir um arquivo texto para gravao. Os dados sero adicionados no fim do arquivo existente, ou cria um novo
11
Abrindo arquivos
FILE *fptr; /* ponteiro para arquivo */ fptr = fopen(arqtext.txt, w+); Tipo de abertura
r+ Abrir arquivo texto para leitura e gravao. O arquivo deve existir e pode ser atualizado. w+ Abrir arquivo texto para leitura e gravao. Se o arquivo existir ele ser destrudo e reinicializado. Se no existir, ser criado. a+ Abrir um arquivo texto para atualizao e para adicionar dados no fim do arquivo existente, ou cria um novo
12
Abrindo arquivos
FILE *fptr; /* ponteiro para arquivo */ fptr = fopen(arqtext.txt, wb);
Tipo de abertura
rb Abrir arquivo binrio para leitura. O arquivo deve estar presente no disco wb Abrir arquivo binrio para gravao. Se o arquivo existir ele ser destrudo e reinicializado. Se no existir, ser criado ab Abrir um arquivo binrio para gravao. Os dados sero adicionados no fim do arquivo existente, ou cria um novo
13
Abrindo arquivos
FILE *fptr; /* ponteiro para arquivo */ fptr = fopen(arqtext.txt, wb+); Tipo de abertura
rb+ Abrir arquivo binrio para leitura e gravao. O arquivo deve existir e pode ser atualizado. wb+ Abrir arquivo binrio para leitura e gravao. Se o arquivo existir ele ser destrudo e reinicializado. Se no existir, ser criado. ab+ Abrir um arquivo binrio para atualizao e para adicionar dados no fim do arquivo existente, ou cria um novo
14
15
Fechamento de Arquivos
Aps leitura/escrita do arquivo, devemos fechlo Funo de fechamento
int fclose(FILE* fp); Retorna 0 se o arquivo foi fechado com sucesso
16
17
18
19
Gravando cada ponto entrado int main () { int i,n; pelo usuario usando fwrite Ponto p; FILE* fp = fopen(arquivo, wb); if (fp == NULL) { printf(Erro na abertura do arquivo.\n); exit(1); } printf(Digite numero de pontos a gravar\n); scanf(%d,&n); for (i = 0; i < n; i++) { scanf(%d %d,&p.x,&p.y); fwrite(&p, sizeof(Ponto), 1, fp); } fclose(fp); 20 }
21
Um dos parmetros indica qual a quantidade de dados de um determinado tipo a ser lido/escrito
Portanto podem ser teis para ler/escrever estruturas ou vetores em um arquivo numa nica chamada de funo
22
void salva (char* arquivo, int n, Ponto* vet) { FILE* fp = fopen(arquivo, wb); if (fp == NULL) { printf(Erro na abertura do arquivo.\n); exit(1); } fwrite(vet, sizeof(Ponto), n, fp); fclose(fp); } Funo que salva um vetor de pontos em um arquivo binrio
23
24
Introduo a Programao
Tpicos da Aula
Hoje aprenderemos funes de manipulao de arquivos texto
Funes de leitura em modo texto Funes de escrita em modo texto Consideraes sobre a utilizao de operaes de leitura/escrita em modo texto e binrio
Aprenderemos tambm algumas funes que servem para posicionar o cursor no arquivo
Exemplos de uso
L de um arquivo passado como parmetro em vez de somente da entrada padro (teclado) Pode ler tambm da entrada padro (arquivo stdin)
Constante EOF
A constante (simblica) EOF indica o fim de arquivo
Definida no arquivo stdio.h
Ela NO um caracter
um inteiro que indica fim de arquivo Geralmente um valor negativo
NO um valor presente no arquivo um valor retornado por funes de leitura indicando fim de arquivo ou erro de leitura
7
Similar a printf Escreve em um arquivo passado como parmetro em vez de somente na sada padro (monitor) Pode escrever tambm na sada padro (arquivo stdout)
11
12
13
15
17
da estrutura
18
L toda a estrutura
19
Funes Utilitrias
long ftell(FILE* fp);
Retorna a posio atual do cursor do arquivo Corresponde a distancia em bytes em relao ao comeo do arquivo
Devem ser utilizadas com cautela em arquivos no modo texto, pois nem sempre o posicionamento do cursor vai ser o desejado
Certas plataformas podem colocar caracteres de formatao no visveis que podem alterar o tamanho do arquivo (nmero de bytes)
20
Funes Utilitrias
long fseek(FILE* fp,long dist,int origem);
Utilizada para posicionamento do cursor em um arquivo dist o nmero de bytes em relao a origem origem uma posio do cursor do arquivo em bytes (SEEK_CUR posio corrente; SEEK_SET incio do arquivo; SEEK_END final do arquivo) Retorna a nova posio do cursor
21
Funes Utilitrias
Funo que recupera o i-simo ponto armazenado em um arquivo Ponto le_ponto (FILE* fp, int i) { Ponto p; fseek (fp, i*sizeof(Ponto), SEEK_SET); fread(&p, sizeof(Ponto), 1, fp); return p; } Funo que retorna o tamanho do arquivo em bytes int tamanho_arquivo (FILE *fp) { int tamanho; fseek (fp, 0, SEEK_END); tamanho =ftell (fp); return tamanho; }
22
Resumindo ...
Funes de leitura em modo texto fscanf fgets fgetc Funes de escrita em modo texto fprintf fputs fputc Quando utilizar operaes de leitura/escrita em modo texto e binrio Posicionamento dos cursores em arquivos
23
Introduo a Programao
Listas Encadeadas
Tpicos da Aula
Hoje aprenderemos que existem, alm de vetores, estruturas de dados dinmicas que podem armazenar colees de dados
Estruturas Dinmicas e Vetores Conceito de listas encadeadas Listas Encadeadas x Vetores Funes de manipulao de listas encadeadas Variaes de listas encadeadas
Vetores
Declarao de vetor implica na especificao de seu tamanho
No se pode aumentar ou diminuir tamanho
Outra alternativa no uso de vetores alocar dinamicamente o espao necessrio e guardar endereo inicial do vetor Porm, depois de determinado o tamanho do vetor, no podemos liberar posio de memria arbitrria Possvel desperdcio ou falta de memria!
3
Estruturas Dinmicas
Uma estrutura de dado dinmica consiste em uma estrutura que pode aumentar ou diminuir de tamanho de acordo com a necessidade da aplicao (do programador)
Evita desperdcio e/ou falta de memria
Listas Encadeadas
Uma lista encadeada uma estrutura dinmica que pode ser utilizada para armazenar um conjunto de dados Junto a cada elemento deve-se armazenar o endereo para o prximo elemento (elementos encadeados)
Elemento + ponteiro = n da lista Diferentemente de vetores, elementos geralmente no so armazenados em espaos contguos de memria Caso no exista prximo elemento, o ponteiro para o prximo elemento NULL
Listas Encadeadas
Para cada novo elemento inserido na lista, aloca-se um espao de memria para armazen-lo Para remover elemento deve-se liberar o endereo de memria reservado para armazenar o elemento O acesso aos elementos sempre seqencial
No se pode garantir que os elementos ocuparo um espao de memria contguo (no se pode localizar elementos com base em um deslocamento constante)
Vetores
+Simplicidade no acesso (manipulao) elementos da estrutura - Desperdcio ou falta de memria - Menor Flexibilidade aos
primeiro
info1
info2
info3
fim
struct lista { int info ; /* info pode ser de qualquer tipo */ struct lista* prox; } ; typedef struct lista Lista ;
8
inicio
100 128 124 120 116 112 108 104 100
Memria
112 info2
info1
inicio
p r o x
info2
p r o x
info3
10
inicio
info1 info2 info3 info4
/* insero incio da lista */ Lista* lst_insere(Lista* inicio,int i){ Lista* novo = (Lista*) malloc(sizeof(Lista)); novo->info = i ; novo->prox = inicio ; return novo ; Endereo do } comeo da Retorna endereo lista inicial atualizado
11
Variavel que armazena endereo inicial da lista deve ser inicializada com NULL! No esquecer de atualizar a varivel que guarda endereo inicial da lista a cada insero!
13
14
/* verso compacta da funo lst_vazia */ int lst_vazia ( Lista* inicio ){ return(inicio == NULL) ; }
15
inicio
info1 info2 info3 info4
Se os elementos testados forem iguais, deve-se ainda ver se p1 e p2 apontam para NULL (tamanhos das listas iguais)
20
22
Listas Circulares
Estrutura do n da lista idntica a da lista simplesmente endadeada No h noo de primeiro e ltimo n da lista Para saber se toda lista foi percorrida deve-se guardar o endereo do primeiro n a ser lido e comparar com o endereo do n que est sendo lido
lista
info1
info2
info3
23
info1
info2
info3
info4
25
fim
a n t
info1
a n t
info1
info1
Lista2 ;
26
info1
info2
info3
Lista2* lst2_insere (Lista2* inicio, int v) { Lista2* novo = (Lista2*) malloc(sizeof(Lista2)); novo->info = v; novo->prox = inicio; novo->ant = NULL; /* verifica se lista no est vazia */ if (inicio != NULL) inicio->ant = novo; return novo; }
27
novo
inicio
info1
info2
info3
inicio
info1 info2 info3 info4
inicio
info1 info2 info3 info4
31
info1
info2
info3
33
34
Podemos definir uma lista cujos ns contenham ou um retngulo ou um ponteiro para um retngulo
typedef struct lista { Retangulo info; struct lista *prox; } Lista; typedef struct lista { Retangulo* info; struct lista *prox; } Lista;
35
OU
36
37
Introduo a Programao
Abstrao
Abstrao o processo ou resultado de generalizao por reduo do contedo da informao de um conceito ou fenmeno observvel, normalmente para reter apenas a informao que relevante para um propsito particular. Fonte: Wikipedia
Tpicos da Aula
Hoje aprenderemos que existe uma forma de definir um tipo de dado pelas suas operaes
Conceito de Tipo Abstrato de Dado Dois Tipos Abstratos de Dados: Pilha e Fila Depois aprenderemos como implementar Pilhas e Filas Implementao de Pilha usando Vetor Implementao de Pilha usando Lista Implementao de Fila usando Lista
Um TAD definido indiretamente pelas operaes que podem atuar nele e os efeitos destas operaes
Operaes sobre Pilha (Livros) : insero no topo e remoo no topo Tipo definido pelo comportamento
Conjunto de operaes sobre o tipo
5
Remoo
TAD (Tipo Abstrato de Dados) a figura lgica dos dados e operaes que manipulam os elementos componentes dos dados Estrutura de Dados a implementao real dos dados e algoritmos que manipulam os elementos dos dados
TAD descrio das funcionalidades Estrutura de Dado implementao
7
Objetivos deTADs
Abstrair (esconder) de quem usa um determinado tipo, a forma concreta com que ele foi implementado
O cliente utiliza o TAD de forma abstrata, apenas com base nas funcionalidades oferecidas pelo tipo (interface)
Desacoplar a implementao do uso, facilitando a manuteno e aumentando o potencial de reuso do tipo criado
Implementando um TAD
Um cdigo implementa corretamente um TAD desde que obedea o que est sendo definido na interface do TAD
10
Implementando TADs em C
Geralmente a interface de um TAD descrita em C nos arquivos .h O cliente s precisa dar um include no .h que contm a interface do TAD
Esconde (Abstrai) a implementao
A interface de um TAD contm as assinaturas das funes que ele oferece e contm a definio do tipo de dado
Definio de Pilha
Pilha um tipo abstrato de dados onde:
Insero e remoo de elementos no topo da pilha O primeiro elemento que sai o ltimo que entrou (LIFO) Operaes bsicas: push (empilhar) e pop (desempilhar)
12
Funcionamento da pilha
empilha(a)
empilha(b) empilha(c) desempilha()
c b a topo a topo b a
topo
c b a topo
13
= %d \n ,
r ) ;
14
Pilha de Execuo
1 Incio do programa: pilha vazia 2 Declarao de variveis: n,r 3 Chamada da funo: empilha variveis
main>
main>
r n
n r n main>
fat>
5 5
f fat> n r n main>
120 0 5
fat>
r n main>
120 5 15
16
17
Desvantagens
Deve-se saber de antemo o nmero mximo de elementos Desperdcio de espao de memria
18
19
Remoo se d pelo decremento do nmero de elementos (prximo push sobrescrever antigo topo) 21
22
Desvantagem
Complexidade na manipulao de listas
24
25
26
27
28
Definio de Fila
Fila um tipo abstrato de dados onde: Insero de elementos se d no final e a remoo no incio O primeiro elemento que entra o primeiro que sai (FIFO) Ex de uso : fila de impresso
30
Funcionamento da Fila
1- insere(a)
fim
a incio
3- insere(c)
fim a
incio
2- insere(b)
fim a incio b
4- retira( )
fim a b incio c
31
32
typedef struct lista{ float info; struct lista *prox; } Lista; struct fila { Lista *ini; Lista *fim };
info1
info2
info3 33
Fila* fila_cria ( ) { Fila* f = (Fila*) malloc(sizeof(Fila)); f->ini = f->fim = NULL; return f; ini e fim so }
34
35
37
Introduo Programao
Tpicos da Aula
Aprenderemos fundamentos do paradigma orientado a objetos, mas antes veremos o que paradigma
Conceito de paradigma Diferentes paradigmas na computao
Paradigmas de Programao
Linguagens de programao so baseadas em vrios conceitos:
Tipos de dados, variveis e armazenamento, controle, abstrao de dados, abstrao procedural, sistema de tipos,etc
A forma como estes conceitos so agrupados em uma linguagem de programao definem que paradigma suportado por esta linguagem
Paradigmas de Programao
Podemos encontrar 6 grandes paradigmas suportados pelas linguagens de programao:
Imperativo Uso de comandos, variveis e procedimentos Primeiras linguagens de programao so deste paradigma Ex: Fortran, Pascal, C, etc Orientao a Objetos Uso de classes, objetos, herana, polimorfismo, maior abstrao de dados, encapsulamento (implementao) Evoluo do paradigma imperativo Ex: Smalltalk, C++, Eiffel, Java, C#, etc
Paradigmas de Programao
Funcional Uso de expresses e funes, ausncia de variveis e comandos Ex: ML, Haskell
-- Exemplo em Haskell -- type factorial :: Integer -> Integer -- using recursion factorial 0 = 1 factorial n = n * factorial (n - 1)
Paradigmas de Programao
Lgico Relaes lgicas entre asseres Ex: Prolog, Mercury
/* Exemplo em Prolog */ mother_child(trude, sally). /* fato */ father_child(tom, sally). father_child(tom, erica). sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). parent_child(X, Y) :- father_child(X, Y). /* clausula*/ parent_child(X, Y) :- mother_child(X, Y).
entradas
sadas,
Paradigmas de Programao
Concorrente Execuo concorrente de processos, abstrao de controle de sincronizao (inter-processos, acesso a recursos, etc) Ex: Occam, Java, Concurrent C, etc Scripting Sistema de tipos dinmica, abstrao de processamento de Strings, suporte a interfaces grficas Ex: Python, Java Script, Tcl, HTML
Objeto
Podemos definir objeto como uma entidade que possui:
Estado
Caractersticas ou propriedades do objeto
Comportamento
Operaes que o objeto pode realizar
Objeto DVD
As operaes que o DVD pode executar
Fonte: http://www.amazon.com
10
Crdito
Saldo
Nmero
Comportamento
875,32
21.342-7
Dbito
11
Crdito
Crdito
Crdito
Saldo
Saldo
Nmero
Nmero
Saldo
Saldo
Nmero
Nmero
875,32
875,32
21.342-7
21.342-7
895,32
875,32
21.342-7
21.342-7
Dbito
Dbito
12
Classe
Classe um agrupamento de objetos que tm propriedades comuns e podem realizar as mesmas operaes uma definio que descreve como objetos pertencentes classe so estruturados internamente (quais propriedades e operaes o objeto possui) Classe um conceito e o objeto uma instncia deste conceito Portanto, podemos ter vrios objetos pertencentes a mesma classe
13
Classe x Objeto
Mltiplos objetos podem ser criados partir da mesma classe Classe Conta
Saldo Nmero
Crdito
Objeto conta1
Crdito
Dbito
Objeto conta2
Crdito
Crdito
Nmero Saldo
Crdito
Nmero
Saldo
Saldo
Nmero
Saldo
Nmero
1000,32 11.056-x
875,32
875,32
21.342-7
875,32
21.342-7
21.342-7
14
Dbito
Dbito
Classe e Tipo
Tipo um conjunto de valores relacionados que so capazes de realizar as mesmas operaes
Ex: inteiro, caractere, Conta, Banco, etc
Uma classe define um tipo: o tipo cujos elementos so objetos com as mesmas propriedades e comportamento
15
Crdito
Saldo
Nmero
Comportamento
875,32
21.342-7
Atributos da conta
Dbito
17
18
Relao Cliente
Objeto do tipo Banco tm vrios objetos do tipo Conta Banco cliente de Conta
Objeto Banco1
Cria nova Conta
Objeto Conta1
Crdito
Crdito
Crdito
Nome
Saldo
Saldo
Nmero
Nmero
875,32
895,32
875,32
21.342-7
21.342-7
Transferncia
Dbito
19
Relao Herana
Classe Poupana uma verso especializada de Conta Mtodos e atributos so herdados Classe Conta
Saldo Nmero
Crdito
Dbito
Classe Poupana
Saldo Nmero Juros
Crdito
Dbito
20
OO facilita modular
programao
22
OO e Linguagens de Programao
Linguagens OO tm em objetos e classes seus elementos fundamentais para construo de programas
Estruturas da linguagem permitem mapeamento direto dos conceitos de OO
Linguagem C++
Criada por Bjarne Stroustrup em 1983 Pode ser vista quase como uma extenso da linguagem C para dar suporte a OO
Embora quase tudo escrito em C seja compatvel com C++, certos comandos podem ter comportamento diferente em C++
Ainda oferece suporte a tratamento de excees e tipos genricos Sintaxe da linguagem Java foi inspirada em C++
24
Um Programa Imperativo...
Contm
Uma funo principal, por onde comea a execuo do programa
Vrias funes auxiliares, para modularizar, dividir o cdigo em partes Importao de bibliotecas de funes
Um programa constitudo de uma ou mais classes Que podem ter sido importadas de uma biblioteca de classes
Uma classe contm um ou mais atributos e mtodos
26
Estrutura
Funo 1
Funo 2
Funo 3
Veremos depois!
28
29
30
31
32
33
36
Construtor
Tipo especial de mtodo que chamado no ato de criao de um objeto da classe desejada
Importante para fazer algumas inicializaes no objeto
Em C++, deve ter o mesmo nome da classe No possui tipo de retorno No obrigatrio definir um construtor
Existe em C++ um construtor default sem parmetros
37
38
39
new Conta(...);
Palavra reservada ordenando a criao de um objeto Construtor do objeto a ser criado
40
o computador...
new NomeDaClasse();
Cria um objeto da classe NomeDaClasse e armazena na sua memria Inicializa os atributos deste objeto usando o construtor desta classe Devolve como resultado da avaliao uma referncia (endereo da memria) para o objeto criado
41
12-3
11-2
12-3
11-2
id275
2. Inicializa o objeto
42
Construtores e new
Podemos ter mais de um construtor para um determinado objeto A escolha do construtor para inicializar os atributos determinada pela lista de argumentos, entre parnteses
new NomeDaClasse(argumentos)
O nmero, ordem e tipos dos argumentos determina o construtor
43
44
id305
12-3
11-2
id309
12-3
11-2
id312
11-5
12-4
46
Conta c(12-3,11-2);
Tipo da varivel c Conta Argumentos do construtor
47
Introduo Programao
Encapsulamento e Herana
Tpicos da Aula
Hoje, aprenderemos conceitos mais avanados de Orientao a Objetos
Encapsulamento Usando modificadores de acesso em C++ Herana Importncia Utilizao em C++ Herana mltipla
Mudanas no estado (atributos) de um objeto devem ser feitas pelos mtodos do objeto Para permitir uma maior independncia entre os objetos,o acesso direto aos atributos de um objeto por um outro objeto deve ser restrito ou quase impossvel
Cliente
Mtodos
Dados
Modificadores de Acesso
Em C++, o encapsulamento possvel atravs do uso apropriado de modificadores de acesso
Modificadores so palavras reservadas que especificam caractersticas particulares de um conjunto de mtodos ou de atributos
Modificadores de acesso variam de acordo com a visibilidade que se quer oferecer ao cliente Podem ser: public,protected ,private,friend
Modificadores de Acesso
Membros da classe que recebem o modificador public, podem ser acessados por qualquer outra classe
Devem ser utilizados para mtodos que definem a interface da classe No deve ser utilizado para os atributos, excetuando-se o caso onde queremos declarar uma constante
Membros que recebem o modificador private, s podem ser acessados por membros da classe ou classes (ou funes) amigas (friends)
Devem ser utilizados para atributos e mtodos auxiliares
Modificadores de Acesso
public Atributos Violam encapsulamento Fornecem servios para os clientes private Preservam encapsulamento Auxiliam outros mtodos da classe
Mtodos
Parte privada
public: void creditar (double valor); void debitar(double valor); double getSaldo(); string getNumero(); string getAgencia(); Conta(string num, string ag); protected: void setSaldo(double valor);
}
Parte pblica
Parte protegida
10
Modificadores de Acesso
Membros de uma superclasse que recebem o modificador private, no podem ser acessados nem pelas subclasses
Se colocar public e o membro for um atributo, o princpio do encapsulamento violado
Membros com o modificador protected so visveis pelas subclasses e pelas classes (ou funes) amigas
Modificadores de Acesso
Em C++, o modificador friend pode ser colocado antes de um mtodo ou (uma classe) declarado dentro de uma classe
O mtodo amigo (ou classe amiga) no pertence a classe na qual est declarado Informa que o mtodo amigo (ou classe amiga) pode acessar os membros privados e protegidos da classe na qual est declarado
Parte privada
public: void creditar (double valor); ... friend void creditarBonus(Conta* c,double v);
};
13
Modificadores de Acesso
Membros de uma classe, que no recebem modificador de acesso, tem visibilidade private
Na redefinio de mtodos herdados, o modificador de acesso no deve ser trocado por um mais restrito No entanto, podem ser trocados por modificadores menos restritos
16
Problemas
Duplicao desnecessria de cdigo:
A definio de PoupanaD uma simples extenso da definio de Conta Clientes de Conta que precisam trabalhar tambm com PoupanaD tero que ter cdigo especial para manipular poupanas
17
Conta
18
Herana
Necessidade de estender classes
Alterar classes j existentes e adicionar propriedades ou comportamentos para representar outra classe de objetos Criar uma hierarquia de classes que herdam propriedades e comportamentos de outra classe e definem novas propriedades e comportamentos
19
Herana
Herana permite que novas classes possam ser derivadas de classes existentes A classe existente chamada de classe pai (me) ou superclasse A classe derivada chamada de classe filha ou subclasse Subclasse herda as caractersticas da superclasse
Herda os atributos e mtodos
Estabelece a relao de - um
A subclasse uma verso especializada da superclasse
20
Importncia de Herana
Comportamento
Objetos da subclasse comportam-se como os objetos da superclasse
Substituio
Objetos da subclasse podem ser usados no lugar de objetos da superclasse
Reuso de Cdigo
Descrio da superclasse pode ser usada para definir a subclasse
Extensibilidade
algumas operaes da superclasse podem ser redefinidas na subclasse
21
Indica que o construtor de Poupanca utiliza o construtor de Conta para inicializar atributos
22
Herana e Construtores
Construtores no so herdados
Embora, freqentemente, precisamos do construtor da superclasse para a definio dos construtores das subclasses Necessrios para inicializar os atributos que so herdados da superclasse
24
Herana Mltipla
Herana mltipla permite que uma classe seja derivada de mais de uma classe
Carro
puxarFreiodeMao() acelerar()
Barco
jogarAncora() acelerar()
CarroAnfibio
25
26
Usando operador de resoluo de escopo para determinar qual verso do mtodo 27 acelerar deve ser usado
Introduo Programao
Tpicos da Aula
Hoje, aprenderemos conceitos mais avanados de Orientao a Objetos
Polimorfismo Conceito Obtendo polimorfismo atravs de Herana Cast Redefinio e sobregarga de mtodos Dynamic Binding (Ligao Dinmica)
Polimorfismo
A palavra polimorfismo significa assumir muitas formas
Uma referncia polimrfica uma varivel que pode armazenar referncias (ponteiros) para objetos de tipos diferentes em intervalos de tempo diferentes
Polimorfismo
Um mtodo chamado atravs de referncia polimrfica pode comportamentos diferentes entre chamada e outra uma ter uma
Subtipos: Substituio
Podemos cadastrar contas
Podemos cadastrar poupanas Mesmo mtodo pode ser aplicado a Conta e Poupanca
Subtipos: Substituio
Herana permite a substituio do supertipo pelo subtipo no cdigo
Onde permitido o supertipo, o subtipo pode ser utilizado ... Conta* conta; conta = new Poupanca(21.342-7,123-4); conta->creditar(500.87); conta->debitar(45.00);
...
Subtipos: Substituio
Substituio e Casts
Nos contextos onde objetos do tipo Conta so usados pode-se usar objetos do tipo Poupanca Nos contextos onde objetos do tipo Poupanca so usados pode-se usar variveis do tipo Conta que armazenam referncias (endereos) para objetos do tipo Poupanca, desde que se faa o uso explcito de casts dinmicos
10
Cast
11
Redefinio de Mtodos
Uma subclasse pode redefinir (override) um mtodo herdado da superclasse O novo mtodo deve ter a mesma assinatura do mtodo da superclasse, mas pode ter um corpo diferente Semntica dos mtodos redefinidos deve ser preservada
12
13
Redefinio de Mtodos
Visibilidade dos mtodos redefinidos deve ser preservada
Em C++, possvel aumentar a visibilidade de um mtodo
Diminuir a visibilidade pode gerar um erro de compilao
possvel acessar a definio dos mtodos da superclasse usando operador de resoluo de escopo
class Pai { public: void x(){ ... }; } class Filha:public Pai{ public: // Redefinindo x void x(){ Pai::x(); ... }; }
14
Sobrecarga de Mtodos
Sobrecarga (overloading) de mtodo o processo de dar a um mtodo mltiplas definies Isto quer dizer que somente o nome do mtodo no suficiente para determinar qual o mtodo que se deseja utilizar A assinatura de cada mtodo overloaded deve ser nica
O que vai diferenciar os mtodos o nmero, tipo e ordem dos parmetros
No podem somente ser diferenciados pelo tipo de retorno 15
Sobrecarga de Mtodos
Construtores so comumente overloaded
til para permitir vrias formas de inicializao de um objeto
O compilador checa qual o mtodo que est sendo chamado, analisando os parmetros
Chamada class Conta{ ... Conta* conta = new Conta(2,3, 50); public: Conta(string num, string ag, double valor); Conta(string num, string ag); } Conta::Conta(string num, string ag) { numero = num; agencia = ag; } Conta::Conta(string num,string ag, double valor) { numero = num; agencia = ag; saldo = valor; 16 }
Sobrecarga x Redefinio
Sobrecarga trata mltiplos mtodos com o mesmo nome, mas assinaturas diferentes Redefinio trata de dois mtodos, um na superclasse e outro na subclasse, que possuem a mesma assinatura Sobrecarga permite que se defina uma operao similar em diferentes formas para diferentes parmetros Redefinio permite que se defina uma operao similar em diferentes formas para diferentes tipos de objeto
17
Binding de Mtodos
... Conta* ca; ca = new ContaEspecial(21.342-7,123-4,1000); ca->creditar(500); Qual verso de ca->debitar(600); debitar cout << ca->getSaldo()<<endl; utilizada? ca = new Conta(21.111-7,123-4); ca->creditar(500); ca->debitar(600); cout << ca->getSaldo()<<endl; ...
19
Binding
Uma chamada de um mtodo dentro do cdigo deve ser ligada (associada) definio do mtodo chamado Associa-se o mtodo chamado ao endereo de memria que contm a definio do mtodo Se esta ligao (binding) feita em tempo de compilao, ento sempre a chamada do mtodo ser ligada ao mesmo mtodo
Static Binding
20
Dynamic Binding
Se a ligao da chamada de mtodo a sua definio correspondente for em tempo de execuo, ento o mtodo chamado depende do objeto referenciado
Dynamic Binding ou Late Binding
Portanto, se existir dois mtodos com o mesmo nome e tipo(definio e redefinio), em Java, o cdigo escolhido dinamicamente
Escolha feita com base na classe do objeto associado varivel destino da chamada do mtodo
Linguagens como Java, Eiffel e Smalltalk utilizam dynamic binding como padro 21
Binding em C++
C++, C# e Delphi utilizam static binding como padro
Para se utilizar dynamic binding deve-se informar explicitamente que um mtodo pode ser ligado em tempo de execuo
22
23
25