Professional Documents
Culture Documents
Departamento de Informtica
Algoritmos e Programao
Departamento de Informtica
15.2.1 Declarao Tipo IDENTIFICADOR = registro tipo1 : campo1; tipo1 : campo2; tipon : campo n; Fim_registro; Var IDENTIFICADOR : lista de variveis; Exemplo: Tipo REGPASSAGEM = registro inteiro : NUMERO; lgico : GESTANTE; caracter : ORIGEM[20], DESTINO[20]; caracter : DATA[08], HORARIO[6]; inteiro : POLTRONA; real : DISTANCIA; Fim_registro; Var REGPASSAGEM : Passagem; 15.2.2 Manipulao Leia Passagem.NUMERO; Escreva Passagem.DESTINO; Passagem.DATA = "10102010"; 15.3 REGISTRO DE CONJUNTOS Os registros podem ser compostos de outros tipos de dados definidos pelo programador. Exemplo: Registro de estoque de um produto, contendo como um de seus campos um valor numrico que indica as baixas por dia til da semana.
Algoritmos e Programao
Departamento de Informtica
| | | | | 1 | 2 | 3 | 4 | 5 | 6
Tipo vetor_dias = inteiro : vetor [6]; Tipo REGPROD= registro inteiro : CODIGO; caracter : DESCRICAO [30]; real : PRECO; vetor_dias : BAIXA; Fim_registro; Var REGPROD : PRODUTO; /*varivel do tipo definido */ 15.3.1 Manipulao Leia PRODUTO.DESCRICAO; ....... Para i de 1 at 6 faa Leia PRODUTO.BAIXA[I]; Fim_para; Exemplo: Se quiser manter as baixas para todas as semanas de um ms: Tipo MS_DIAS = inteiro : matriz[4][6]; Tipo REGPROD2 = registro caracter : DESCRICAO[30]; inteiro : CODIGO; real : PRECO; MS_DIAS : BAIXA; Fim_registro; Var REGPROD2 : PRODUTO2; Para acessar quanto foi vendido do produto no terceiro dia da quarta semana: PRODUTO2.BAIXA[4][3];
Algoritmos e Programao
Departamento de Informtica
Escrever o nome do produto, o cdigo, o preo e as baixas da segunda semana: Escreva PRODUTO2.DESCRIO; Escreva PRODUTO2.CODIGO; Escreva PRODUTO2.PREO; Para i de 1at 6 faa Escreva PRODUTO2.BAIXA[2][i]; Fim_para; Totalizar por dia da semana todos os dias do ms: Para J de 1 at 6 faa SOMA = 0; Para I de 1 at 4 faa SOMA = SOMA + PRODUTO2.BAIXA[I][J]; Fim_para; Escreva "Dia ",J, " totalizou ", SOMA, " baixas"); Fim_para;
Exemplo: Registro contendo um campo do tipo registro. Nome: Endereo Rua N. Cidade: Salrio:
CEP Estado
Tipo ENDER = registro caracter : RUA[30]; real : NUM, CEP; caracter : CIDADE[20],ESTADO[2]; Fim_registro; Tipo DADOS_FUNCIONARIOS = registro caracter : NOME[30]; ender : ENDEREO; real : SALARIO; Fim_registro; Var DADOS_FUNCIONARIOS : Empregado;
Algoritmos e Programao
Departamento de Informtica
Manipulao: Empregado.NOME = "Joo da Silva"; Empregado.ENDERECO.RUA = "Rua Vicente Machado"; Empregado.ENDERECO.NUM = 100; Empregado.ENDERECO.CEP = 84100970; Empregado.ENDEREO.CIDADE = "Ponta Grossa"; Empregado.ENDEREO.ESTADO = "PR"; Empregado.SALARIO = 1500; 15.4 CONJUNTO DE REGISTROS Quando necessrio armazenar um conjunto de registros. Exemplo: Informaes sobre todos os lugares de um nibus 1 2 3 : : 44 Nmero: Origem: Data: Poltrona: Gestante: Destino: Horrio: Distncia:
Tipo REGPASSAGEM = registro inteiro : NUMERO; lgico : GESTANTE; caracter : ORIGEM[20], DESTINO[20]; caracter : DATA[08], HORARIO[6]; inteiro : POLTRONA; real : DISTANCIA; Fim_registro; Tipo VETPASSAGEM = REGPASSAGEM : vetor [44]; ou
Algoritmos e Programao
Departamento de Informtica
Para verificar quantos passageiros do nibus so gestantes: Para i de 1 at 44 faa Se onibus[i]. GESTANTE = .V. ento num_gestantes = num_ gestantes + 1; Fim_se; Fim_para; Exemplo: Vetor com 500 produtos Tipo MS_DIAS = inteiro : matriz[4][6];
Tipo REGPROD = registro caracter : DESCRICAO[30]; inteiro : CODIGO; real : PRECO; MS_DIAS : BAIXA; Fim_registro; Var REGPROD : PRODUTOS[500]; Mostrar a baixa do dcimo produto, do quarto dia da terceira semana: Escreva PRODUTOS[10].BAIXA[3][4]; Imprimir o total de movimentao do estoque para cada um dos 500 produtos: Para N de 1 at 500 faa SOMA = 0; Para I de 1 at 4 faa Para J de 1 at 6 faa SOMA = SOMA + PRODUTO[N].BAIXA[I][J]; Fim_para; Fim_para; Escreva PRODUTO[N].DESCRIO, SOMA; Fim_para;
Algoritmos e Programao
Departamento de Informtica
16 ARQUIVOS
Um arquivo corresponde a um conjunto de informaes (exemplo: uma estrutura de dados-registro), que pode ser armazenado em um dispositivo de memria permanente, exemplo disco rgido. As operaes bsicas para manipulao de arquivos so: abertura e fechamento do arquivo, leitura, gravao e excluso de dados (exemplo registros). 16.1 TIPOS DE ARQUIVOS Os dados dos arquivos podem ser armazenados/acessados basicamente de dois modos: sequencial ou direto (randmico). 16.1.1 Sequencial Os dados so gravados no arquivo de forma contnua, um aps o outro. A localizao de qualquer um dos dados indeterminada, para ter acesso a um dado especfico necessrio percorrer todos os que o antecedem e para gravar um novo dado necessrio encontrar o final do arquivo. 16.1.2 Direto (Randmico) Neste tipo de arquivo os dados (registros) so acessados de forma direta, ou seja, atravs de algum de seus campos definido como chave, pode-se ento acessar os dados (demais campos do registro), sem a necessidade de processar os registros que esto fisicamente antes dele no arquivo. 16.1.2.1 Arquivo Indexado (Arquivo sequencial de acesso direto)
Normalmente composto por mais de um arquivo: um arquivo de ndices (chaves) que contm a posio (endereo) de cada registro no outro arquivo de dados.
Algoritmos e Programao
Departamento de Informtica
16.2 TRATAMENTO DE ARQUIVOS EM LINGUAGEM C 16.2.1 Leitura e Gravao em Disco 1) Caracter: os dados so lidos e escritos caracter a caracter. getc(file); putc(char, file); 2) string: os dados so lidos e escritos como strings. fgets(string, tam-max, file); fputs(string, file); 3) Formatado: os dados so lidos e escritos de modo formatado. fscanf(ptr_file, formato, var_ destino); fprintf(ptr_file, formato, var_destino); 4) Bloco: os dados so lidos e escritos num formato chamado registro ou bloco. Este um grupo de dados de tamanho fixo e usado para armazenar uma sequncia de dados com itens similares, como matrizes e estruturas. fread(estrutura, tam-estrutura, qtde, ptr_file); fwrite(estrutura, tam-estrutura, qtde, ptr_file);
16.3 FORMAS DE ABERTURA 16.3.1 Modo texto Sequncias de caracteres agrupadas em linhas. Nmeros so guardados como cadeias de caracteres. Linhas so separadas por: UNIX: nico caractere chamado de nova linha (LF), de cdigo ASCII 10 decimal. DOS: cada linha separada por dois caracteres, o caracter 13 decimal (CR) e o caracter 10 decimal (LF). Compilador C: Converte CR/LF para LF quando um arquivo lido Converte de LF para CR/LF quando o arquivo gravado. Indicao de fim de arquivo enviada pelo DOS e reconhecida pelo compilador C. Nmeros so armazenados como esto na memria (2 bytes para inteiro, 4 para float, 8 para double). Nenhuma converso feita. Qualquer caractere lido ou gravado sem alterao. Indicao de fim de arquivo no reconhecida, sendo interpretada como outro caracter qualquer.
Algoritmos e Programao
Departamento de Informtica
Obs: Principais diferenas entre modo texto e modo binrio: caracter de nova linha e fim de arquivo, e forma de representar os nmeros. 16.4 ABRINDO ARQUIVOS EM DISCO Arquivo stdio.h define a estrutura FILE que ser usada para declarar arquivos. Contm informaes sobre o arquivo a ser usado: seu tamanho atual, localizao de seus buffers de dados, se o arquivo est sendo lido ou gravado. Funo fopen: executa duas tarefas: 1) Preenche a estrutura FILE com as informaes necessrias para o programa e para o sistema operacional; 2) Retorna um ponteiro do tipo FILE que aponta para a localizao na memria da estrutura.
Sintaxe: fopen("nome_do_arquivo","modo"); Exemplo de abertura e tratamento: FILE *fptr; fptr = fopen("arqlivro.arq","w"); ou FILE *fptr; if ((fptr = fopen("arqlivro.arq","w")) == NULL { printf("No possvel abrir o arquivo"); exit(0); } NULL - corresponde a uma macro definida em STDIO.H, que detecta qualquer erro na abertura do arquivo (exemplo: disco protegido contra gravao, cheio, etc.) caso contrrio fopen retorna o ponteiro (endereo) para a estrutura do arquivo na memria; exit() - esta funo faz com que haja um terminao imediata do programa no importando de onde chamada. Por conveno, um valor retornado ao SO significa trmino com sucesso, qualquer outro indica que o programa terminou por causa de algum problema.
Algoritmos e Programao
Departamento de Informtica
16.4.1 Tipo de abertura dos arquivos: "r": abre arquivo texto para leitura (o arquivo deve existir). "w": abre arquivo texto para gravao. Se o arq. j existe ele destrudo, seno, um novo criado. "a": abre arquivo texto para gravao. Os dados sero adicionados ao final do arquivo existente ou um novo arquivo ser criado. "r+": abre um arquivo texto para leitura e gravao. O arquivo deve existir e pode ser atualizado. "w+": abre um arquivo texto para leitura e gravao. Se o arquivo existir ele ser destrudo e reinicializado, seno ser criado. "a+": abre um arquivo texto para atualizaes e para adicionar novos dados no final do arquivo existente ou um novo arquivo ser criado. "a+b": Abre um arquivo binrio para leitura e gravao. Se o arquivo existir, os dados sero adicionados no seu final, caso o arquivo no exista ele ser criado. mesmos para arquivos binrios com a letra "rb", "wb", "ab", "rb+", "wb+".
16.5 LEITURA E ESCRITA Funes fwrite e fread permitem ler e escrever blocos de dados (estruturas, matrizes) em arquivos de disco; Sintaxe: fwrite(&informao, num_bytes, itens, file) fread(&informao, num_bytes, itens, file) &informao - ponteiro para a informao que ser escrita/lida (arquivo/memria); num_bytes - o nmero de bytes (tamanho) para ler/escrever; itens - quantidade de itens (estruturas) - (cada um tendo num_bytes de tamanho); file - ponteiro para o arquivo previamente aberto; fread - retorna o nmero de itens lidos; fwrite - retorna o nmero de itens escritos;
Algoritmos e Programao
Departamento de Informtica
Exemplos: if (fwrite(&livro, sizeof(livro), 1, fptr) !=1){ printf ("Erro de escrita no arquivo"); fclose(fptr); }
if (fread(&livro, sizeof(livro), 1, fptr) !=1) { if (feof(fptr)) { fclose(fptr); } } Observao: sizeof - operador que usado para computar o tamanho de qualquer varivel ou tipo de dado; fclose - usado para fechar um arquivo (fluxo) aberto pela funo fopen() - um valor de retorno diferente de <zero> indica problemas no arquivo. feof - encontra final do arquivo - retorna verdadeiro (> zero) se o final do arquivo tiver sido encontrado, caso contrrio retorna zero; 16.6 APAGANDO ARQUIVOS A funo remove() apaga o arquivo especificado. Exemplo: remove("arqlivro.arq");
Algoritmos e Programao
Departamento de Informtica
Algoritmos e Programao
Departamento de Informtica
17.4 OUTROS CONCEITOS DA TEORIA DOS OBJETOS 17.4.1 Classe Agrupamento de objetos similares que apresentam os mesmos atributos e operaes. Ex: [rvores], caracterizando as rvores existentes em uma floresta. 17.4.2 Subclasse Caracterstica particular de uma classe. Exemplo: Classe [rvore] Subclasses [Ip], [Jacarand], [Eucalipto], etc. 17.4.3 Instncia de Classe Uma ocorrncia especfica de uma classe. o mesmo que objeto. Exemplo: uma pessoa, uma organizao, um equipamento, etc. 17.4.4 Atributo Caracterstica particular de uma ocorrncia da classe. Exemplo: [Indivduo Brasileiro], possui nome, sexo, data de nascimento, etc. 17.4.5 Mensagem Uma solicitao entre objetos para invocar certa operao. Exemplo: Informar a idade da pessoa "Fulano de Tal". 17.4.6 Estado Situao de um objeto em um dado instante de tempo. Exemplo: Emitindo uma Nota Fiscal. 17.4.7 Evento Uma ocorrncia significativa no mundo real que deve ser tratada. Exemplo: Pedido tomado, entrega efetuada, ponto de solicitao de material atingido. 17.4.8 Generalizao Atributos e operaes comuns compartilhados por classes.
Algoritmos e Programao
Departamento de Informtica
17.5 PROGRAMAO ORIENTADA A OBJETO EM C++ Para que os programas sejam compilados em C++ a extenso padro dos nomes dos programas fontes CPP. 17.5.1 Construindo Classes e Objetos Para criar um objeto, deve-se primeiro, definir a sua forma mais geral (classe) usando-se a palavra reservada class, que similar a uma estrutura. Sintaxe: class nome_da_classe { dados_e_funes_privados; public: dados_e_funes_pblicos; } lista_de_objetos; Exemplo: // Programa Obj_fila.cpp // Exemplo de construo de objetos do tipo fila // com suas respectivas variveis e funes membros #include <stdio.h> #include <conio.h> #include <iostream.h> // criao da classe fila class fila { int fila_int[100]; int inicio, final; public: void inicializa(void); void insere(int i); int retira(void); }; // Definio das funes membros da classe <fila> void fila::inicializa(void) // :: operador escopo de resoluo { inicio = final = 0; } void fila::insere(int i) { if (final==100) { printf("\n A fila esta cheia \n"); return; } final++; fila_int[final] = i; }
_________________________________________________________________________________ Professor: Ivo Mrio Mathias 74
Algoritmos e Programao
Departamento de Informtica
int fila::retira(void) { if (inicio==final) { printf(" * Fila corrompida *"); return 0; } inicio++; return fila_int[inicio]; } main() { fila a, b; // cria dois objetos fila a.inicializa(); b.inicializa(); a.insere(100); b.insere(200); a.insere(250); b.insere(350); printf(" printf(" printf(" printf(" printf(" printf(" getch(); } 17.5.2 Polimorfismo Uma maneira pelo uso de sobrecarga de funes. Em C++ duas ou mais funes podem compartilhar o mesmo nome, contanto que as suas declaraes de parmetros sejam diferentes. Contedo Contedo Contedo Contedo Contedo Contedo da da da da da da fila fila fila fila fila fila a a a b b b %d %d %d %d %d %d \n",a.retira()); \n",a.retira()); \n",a.retira()); \n",b.retira()); \n",b.retira()); \n",b.retira());
Algoritmos e Programao
Departamento de Informtica
Exemplo: // Programa Obj_poli.cpp // Exemplo da construo de objetos do tipo operaes // c/polimorfismo. #include <stdio.h> #include <conio.h> #include <iostream.h> // criao da classe operaes class operacoes { public: int quadrado(int i); float quadrado(float f); }; int operacoes::quadrado(int i) { return i*i; } float operacoes::quadrado(float f) { return f*f; } main() { int num_int,res_int; float num_float,res_float; operacoes calculo; // cria o objeto calculo printf(" Digite um nmero inteiro: "); scanf(" %d",&num_int); res_int = calculo.quadrado(num_int); printf(" \nO quadrado de %d %d", num_int, res_int); printf(" \n\nDigite um nmero real: "); scanf(" %f",&num_float); res_float = calculo.quadrado(num_float); printf(" \nO quadrado de %f %f", num_float, res_float); getch(); }
Algoritmos e Programao
Departamento de Informtica
17.5.3 Herana Em C++ a herana suportada por permitir a uma class incorporar outra class na sua declarao. Exemplo: // Programa Obj_hera.cpp // Exemplo da construo de objetos com o uso de herana #include <stdio.h> #include <conio.h> #include <iostream.h> // criao da classe veiculos_na_estrada class veiculos_na_estrada { int rodas; int passageiros; public: void fixa_rodas(int num); int obtem_rodas(void); void fixa_passageiros(int num); int obtem_passageiros(void); }; //criao da subclasse <caminho> que herda alguns atributos //e funes membros da classe <veiculos_na_estrada> class caminhao : public veiculos_na_estrada { int carga; public: void fixa_carga(int tamanho); int obtem_carga(void); void exibe(void); }; enum tipo {carro, furgao, pick_up, van}; //criao da subclasse <automvel> que herda alguns atributos //e funes membros da classe <veiculos_na_estrada> class automovel : public veiculos_na_estrada { enum tipo tipo_de_carro; public: void fixa_tipo(enum tipo t); enum tipo obtem_tipo(void); void exibe(void); };
_________________________________________________________________________________ Professor: Ivo Mrio Mathias 77
Algoritmos e Programao
Departamento de Informtica
//Definio das funes membros/mtodos void veiculos_na_estrada::fixa_rodas(int num) { rodas = num; } int veiculos_na_estrada::obtem_rodas(void) { return rodas; } void veiculos_na_estrada::fixa_passageiros(int num) { passageiros = num; } int veiculos_na_estrada::obtem_passageiros(void) { return passageiros; } void caminhao::fixa_carga(int num) { carga = num; } int caminhao::obtem_carga(void) { return carga; } void caminhao::exibe(void) { printf("Rodas: %d \n",obtem_rodas()); printf("Passageiros: %d \n",obtem_passageiros()); printf("Capacidade de carga: %d \n\n",carga); } void automovel::fixa_tipo(enum tipo t) { tipo_de_carro = t; } enum tipo automovel::obtem_tipo(void) { return tipo_de_carro; }
_________________________________________________________________________________ Professor: Ivo Mrio Mathias 78
Algoritmos e Programao
Departamento de Informtica
void automovel::exibe(void) { printf("Rodas: %d \n",obtem_rodas()); printf("Passageiros: %d \n",obtem_passageiros()); printf("Tipo: "); switch(obtem_tipo()) { case furgao: printf ("Furgao \n"); break; case carro: printf ("Carro \n"); break; case van: printf ("Van \n"); break; case pick_up: printf ("Pick up \n"); } } main() { caminhao furgao,camionete; automovel van; furgao.fixa_rodas(18); furgao.fixa_passageiros(2); furgao.fixa_carga(3200); camionete.fixa_rodas(6); camionete.fixa_passageiros(3); camionete.fixa_carga(1200); furgao.exibe(); camionete.exibe(); van.fixa_rodas(4); van.fixa_passageiros(6); van.fixa_tipo(carro); van.exibe(); getch(); }
Algoritmos e Programao
Departamento de Informtica
Qual o problema a ser resolvido? Quais as caractersticas do programa utilizado para resolver o problema? Como o programa ser construdo? Qual abordagem que ser usada para descobrir erros cometidos no projeto e construo do programa? Como o programa ir suportar a ao do tempo, quando correes, adaptaes e melhorias so requisitadas pelo usurio? Anlise Projeto Fase de definio Implementao Teste Fase de desenvolvimento Manuteno Fase de manuteno
18.1 FASE DE DEFINIO (O QUE?) Esta fase do desenvolvimento procura identificar: Requisitos do sistema; Informaes a serem processadas; Funes, comportamento esperado e as interfaces; Restries de projeto existentes.
Algoritmos e Programao
Departamento de Informtica
18.2 FASE DE DESENVOLVIMENTO (COMO?) Os seguintes tpicos so abordados: Definio das estruturas de dados e arquitetura do software; Definio das funes que sero implementadas; Caracterizao das interfaces do sistema; Traduo do projeto em uma linguagem de programao; Como os testes sero realizados.
Trs tarefas ocorrem: projeto do software, gerao de cdigo e teste de software. 18.2.1 Teste de Software Definio de teste e depurao; Teste uma anlise dinmica do produto; Limitaes da atividade de teste; Etapas da Atividade de Teste: - planejamento; - projeto de casos de teste; - execuo do programa com os casos de teste; - anlise dos resultados; Tcnicas e Critrios de Teste de Software.
18.3 FASE DE MANUTENO (MUDANA) Podem ser realizadas modificaes no software para: Correo de erros; Adaptaes; Evolues; Prevenes.
Nessa fase so reaplicados os passos das fases de definio e desenvolvimento no contexto de um programa j existente.