79

Click here to load reader

Lógica De Programação

Embed Size (px)

DESCRIPTION

Apresentação Lógica de Programação Avançado - FAAT 2009

Citation preview

Page 1: Lógica De Programação

Lógica de programação Avançado

[email protected]

Antes tarde do que mais tarde…Estou muito bem obrigado…e vocês?

Page 2: Lógica De Programação

[email protected]

Bibliografia básica

Algorítimos – Person Makron Books, 1998.Dirceu Douglas Salvetti e Lisbete Madsen

Barbosa

Linguagens de Programação – Java, C, C++ e outras – Campus, 2004. Flávio Varejão

Page 3: Lógica De Programação

[email protected]

Bibliografia recomendada

Ciência dos Computadores – Uma abordagem algorítmica – MacGraw-Hill, 1983. Jean Paul Tremblay e Richard B. Bunt

C programação – Campus, 1993. Steve Holzner e Peter Norton

Treinamento em Linguagem C – Curso completo 1 e 2 – McGraw-hill, 1990. Victorine Viviane

Page 4: Lógica De Programação

[email protected]

Revisão básica

Alguem lembra a matéria? Pelo menos o título??? Quais foram os principais tópicos estudados?

Eee…eee..eee…eeee..hummmm…. Não! Conversão decimal <-> binário <-> octal <-> hexadecimal Algorítmos Descrição narrativa / Fluxograma Estruturas de decisão / Repetição Linguagem de programação C

Quais foram os exercícios executados? Quais foram os mais faceis e dificeis? Porque? Qual a principal diferença entra executar um programa direto no

computador e realizar um algoritmo antes de ir para o “pega-pra-capar”?

Page 5: Lógica De Programação

[email protected]

Então “Vamo manda bala!”Vetores e Matrizes São estruturas de dados indexados do mesmo tipo. Onde cada

espaço será preenchido com um tipo único de dados. Indexados???? O que é isso? É um indice para a posição onde

será armazeda a informação. Tem como finalidade criar uma capacidade de armazenamento

do mesmo tipo. Podemos ter vários indices.

Por convenção o primeiro indice identifica a linha e o segundo identifica a coluna. Podemos ainda ter um terceiro indice que indicaria o plano.

Teste [limite1][limite2][limite3] O incremento de indices requer mais capacidade de

armazenamento limite1 X limite 2 x limite 3 = total de memória 1 caracter = 1 byte - > 10 x 10 = 100 bytes de memória para

armazenar 100 caracteres diferentes. Caso fosse do tipo inteiro duplo seriam 200 bytes.

Page 6: Lógica De Programação

[email protected]

Vetor ou Matriz unidimensional com 7 posições

Caracter letras[7];

GFEDCBA

6543210

AHH..isso é um indice!

E esse é o valor armazenado!

Page 7: Lógica De Programação

[email protected]

Caracter Letras[7]; Letras[0]=‘A’; Letras[1]=‘B’; Letras[2]=‘C’; … ou eu posso usar um laço para fazer o

preenchimento desse vetor… afff…

Page 8: Lógica De Programação

[email protected]

Vetor/Matriz unidimencional

Exemplo#define LIMITE 20Inicio (){Inteiro m, m1[LIMITE],i;LER(“%d”,&m);Se (m < LIMITE)

Para(i=0;i<m;i++){m1[i]=i;escrever(“%d”,m1[i]);

}Senão

Escreva(“Fora do limite”);Fim

Definindo o tamanho do vetorIniciando o programaDeclarando variaveisAtrinbuindo um valor para a

variavel mRealizando um teste para

validação do vetorLaço para preenchimento do

vetorEscrevendo o conteúdo do vetorSe estiver fora do valor limite

exibe mensagemfim

Page 9: Lógica De Programação

[email protected]

Como ficaria em C?

Exemplo#define LIMITE 25main(){int m,m1[LIMITE],i;scanf("%d",&m); if(m<LIMITE){

for(i=0; i<m; i++){ m1[i]=i; printf("%d",m1[i]); } }else printf(“Fora do limite"); system("PAUSE");}

Page 10: Lógica De Programação

[email protected]

Vetor

Mais um exemplomain(){char str [7]; int i; for(i=0; i<7; i++){

str[i]= 'A'+i;printf("%c",str[i]);

}system("PAUSE");}

OUUUUmain(){char str [7];gets(str); printf("%s",str);system("PAUSE");}

Page 11: Lógica De Programação

[email protected]

Exercício1. Mas que diabos este programa esta fazendo?#include<stdio.h>main(){ int exemplo [10], i, media; printf("\nInforme os números X[i] a medida que forem solicitados:\n\n"); for(i=0; i<10; i++){ printf("X[%d]? ",i); scanf("%d", &exemplo[i]) ; } media=0; for (i=0; i<10; i++) { media = media+exemplo[i]; }printf("A media é %f\n",(float)media/10);}

Page 12: Lógica De Programação

[email protected]

“Perdeu Playboy! Tem mais exercício !”

1. Dada uma seqüência de números, imprimir a ordem inversa da leitura.

2. Escrever um algorítmo que declare um vetor de reais e leia as notas de 20 alunos.

3. Altere o algoritmo para calcular a média. 4. Escrever um algorítmo que calcule e escreva o somatório dos

valores armazenados numa variável composta unidimensional A de 100 elementos numéricos

5. Escrever um algorítmo que leia um vetor de 30 elementos numéricos e verifique se existem valores iguais a 24, se existirem escrever quantas vezes aparecem e quais as posições em que estão armazenados.

Obs: Desenvolver somente o algorítmo! NO PAPEL MANO!

Obs2: Nada de C por enquanto!

Page 13: Lógica De Programação

[email protected]

Correção – Exercício 1inicio (){ inteiro m[3] [2], I , j ; m[0][0]=1; m[0][1]=2; m[1][0]=3; m[1][1]=4; m[2][0]=5; m[2][1]=6; PARA (I igual a 0 ; I menor que 3 ; I = I + 1){ PARA (j igual a 0 ; j menor que 2 ; j = j + 1) ESCREVA ( “ %2d “ , m [ I ] [ j ]); }

ESCREVER ("\n\n\n\n"); PARA ( I igual a 2; I maior e igual a 0 ; I = I -1 ){ PARA (j igual a 1; j maior e igual a 0; j = j -1) ESCREVER (“ %2d ", m [ I ] [ j ] ); } ESCREVER ("\n\n\n\n"); PAUSA }

Page 14: Lógica De Programação

[email protected]

Exercício 2

inicio(){Real str [20];Inteiro i; PARA (I igual a 0; I menor que 20; i=i+1){ LER( “ %f ", &str[i] );} PAUSA;}

Page 15: Lógica De Programação

[email protected]

Exercício 3

INICIO () {REAL str [20], media;INTEIRO I; PARA (I igual a 0; I menor que 20; I = I + 1){ LER( “ %f ", &str[i] );} media=0; PARA (I igual a 0; I menor que 20; I = I + 1){ media = media + str[i]; } media = media/20; PAUSA}

Page 16: Lógica De Programação

[email protected]

Exercício 4

INICIO ( ) {inteiro A[100] , soma , i;

PARA ( I igual a ; I menor que 100; i++){ A[i] = 1+A[i]; } soma=0; PARA ( I igual a ; I menor que 100; i++){ soma = soma + A[i]; }

ESCREVER ( “ %d “ , soma);PAUSA}

Page 17: Lógica De Programação

[email protected]

Exercício 5 – Primeira soluçãoINICIO ( ) {inteiro A [ 30 ] , aux = 0 , I , posicao;

PARA ( I igual a 0 ; I menor que 30 ; I = I + 1 ) { LER ( “ %d “ , & A [ I ] ) ; } PARA ( I igual a 0 ; I menor que 30 ; I = I + 1 ) { SE ( A [ I ] == 24) { aux = aux+1; posicao=i; } SENÃO ESCREVER ("Nada no indice A[%d]\n",i); } ESCREVER ( “ % d % d ", aux , posicao);PAUSA;}

QUAIS SÃO AS LIMITÇÕES DESSA SOLUÇÃO? 1 – Somente uma variavel pode ser encontrada2 – Não possui memória para armazenar mais de uma posição3 – Não escreve todas as posições caso encontre mais de um número 24

Page 18: Lógica De Programação

[email protected]

6 -Alterar o exercício anterior para armazenar quantos números forem necessários para dar uma solução completa!

Page 19: Lógica De Programação

[email protected]

Só um detalhe

INICIO ( ) { inteiro a,I; LER (“ % d “ , &a); inteiro matriz[a]; Para ( I igual a 0; I menor que a ; i++) Ler ( “ % d “ , &matriz[I]) ; Para ( I igual a 0; I menor que a ; i++) Ler ( “ %d “ , matriz[i]); PAUSA;}

Page 20: Lógica De Programação

[email protected]

615234

543210

Ordenação de um vetor

Não é mágica e sim lógica!

654321

543210

Page 21: Lógica De Programação

[email protected]

Como eu já disse em aula e repito…é mais do que ganhar do Palmeiras e São Paulo…esses times sem estruturas!

Um algoritmo de ordenação consiste na comparação de cada elemento com todos os elementos subsequentes. O elemento será trocado com o outro a depender dele ser menor ou maior.

Esse é um dos tipos mais simples!!!

Page 22: Lógica De Programação

[email protected]

REALIZAR NO PAPEL “BRODI” A ORDENAÇÃO DE VETORES

Iníciotipo vetor[LIMITE], I,J, AUX;

para (I=0; I < LIMITE; I++){ ler (vetor[I]);

para (I=0; i<LIMITE;I++){ para (J=i; J<LIMITE; J++){

se (vetor [I] > vetor [J]) então { AUX = vetor[I]; vetor[I] = vetor[J]; vetor [J] =AUX;

} } // fim para

} //fim para

Page 23: Lógica De Programação

[email protected]

E como fica a pesquisa em vetores?

Para encontrar um valor em vetor você deve realizar uma “Pesquisa Sequencial” e testar esse valor.

Qual é o problema desta pesquisa?

Temos um outro modelo que se chama Pesquisa Binária. PESQUISAR!

Page 24: Lógica De Programação

[email protected]

Matriz Bidimensional

Xoçort5

XXEsse4

XXXXXE3

XXOcas2

XXXEuq1

XXXSaM0

543210

Page 25: Lógica De Programação

[email protected]

Caracter festas[6][6]; Temos duas maneiras de inserir informações

em matrizes com mais de um indice: Na mão: festas[5][3] = ‘ç’; ou podemos utilizar dois laços: um para controlar

as colunas e um para controlar as linhas.

Page 26: Lógica De Programação

[email protected]

Exemplo

Inicio inteiro M[3][2], i,j;

M [0,0] =1;M [0,1] = 2;M [1,0] = 3;M [1,1] = 4;M [2,0] = 5;M [2,1] = 6;para (i igual 0; i menor que 3; i = i + 1 ) //linha

para(j igual 0; j menor que 2; j = j + 1) //coluna escreva ( “ %d ”, M[ j, i ]); // ANALISAR ESTA LINHA!!!

Fim

Page 27: Lógica De Programação

[email protected]

Matrizes bidimensionais

Define limite 5

Inteiro I,j,mat[limite][limite];

Para (i = 0; i < m; i = i + 1) Para (j = 0; j < n; j = j + 1) ler("%d", &mat[i][j]);

Page 28: Lógica De Programação

[email protected]

EXEMPLO#include <stdio.h>#include <stdlib.h>

main(){int i,j,matriz[3][2]; for(i=0; i<3;i++){ for(j=0;j<2;j++){ scanf("%d",&matriz[i][j]); } } for(i=0; i<3;i++){ printf("\n"); for(j=0;j<2;j++){ printf("[%d]",matriz[i][j]); } } system("pause"); }

Page 29: Lógica De Programação

[email protected]

O que esta faltando?????

7. Analisar as linhas de comando do programa matriz2d.cpp 8. Dada duas matrizes de inteiros com m linhas e n colunas

calcular soma dos elementos. Dica: Você tem que ler as duas matrizes e somar em uma terceira.

9. Realizar o mesmo exercício acima só que deve realizar o produto entre as matrizes!

10. Dada uma matriz real A m x n, verificar se existem elementos repetidos em A.

Page 30: Lógica De Programação

[email protected]

Extra Classe

Faça um programa que leia a idade de 50 pessoas e apresente a média de todas, além de identificar a mais velha e a posição que em que ela se encontra na matriz.

Escrever um programa que solicite e leia letra por letra o nome completo de uma pessoa. O caractere sustenido “#” indica o fim do nome. Depois apresentar o nome limpo (sem o “#”, no centro da tela).

Escrever um programa que leia uma matriz 4x4, multiplique os elementos da sua diagonal principal por uma constante K , também lida, e escreva a matriz resultante.

Page 31: Lógica De Programação

[email protected]

Podemos ter ainda mais uma dimensão

Caracter Matrix [5][9][3]; Claro que teremos 3 laços para controlar

esse tipo

‘o’

‘h’

1

2

3

4

5

1 2 3 4 5 6 7 8 9

‘a’

12

3

Page 32: Lógica De Programação

[email protected]

Strings – Não é bicho de 7 cabeças

String nada mais é do que um conjunto de caracteres (ou um vetor, só isso).

C/C++ possui comando próprios para manipulação desse conjunto.

Uma "string" é definida como sendo constituida de um vetor de caracteres (tipo de dado char - 1 byte) que é terminada por um "nulo". Um nulo é especificado usando-se '\0' que é zero.

Por exemplo, se quisermos declarar um vetor "str" que possa armazenar uma string de 10 caracteres, escrevemos:

caracter str [11]; Não é necessario adicionar manualmente o nulo (“\0”) no final

das constantes string - o compilador faz isso automaticamente.

Page 33: Lógica De Programação

[email protected]

Funções especificas para manipulação de strings getstr() – Recebe uma string - dev-cpp gets() strcpy() – Copia uma string strcat() – Concatena duas strings strlen() – Retonar o comprimento de uma

string strcmp() – Compara a ordenação alfabética

de uma string Biblioteca <string.h>

Page 34: Lógica De Programação

[email protected]

Exemplo

int main(){char produto[ ]={'a','b','a','c','a','x','i','\0'}; printf("%s",produto); system("PAUSE");}

Ou – Há autores que consideram esta forma ilegal!

int main(){char produto[ ]=“abacaxi”; printf("%s",produto); system("PAUSE");}

Inicio (){Caracter produto[ ]={a,b,a,c,a,x,i};

Escrever (“%s”,produto);

}

Page 35: Lógica De Programação

[email protected]

Copiar uma string…

Basta ler e copiar para uma variavel que recebe este valor.

strcpy(string_que_recebe,string_lida);Inicio(){Caracter string_que_recebe[80],string_lida[80];Ler(string_lida);strcpy(string_que_recebe,string_lida);Escrever(“%s”,string_que_recebe);}

Page 36: Lógica De Programação

[email protected]

Analisar as linhas do código abaixo

#include <string.h>

main(){char string_que_recebe[80],string_lida[80],base[10]="teste\0";char concatena[80];int r;gets(string_lida);strcpy(string_que_recebe,string_lida);r=strlen(string_que_recebe);if(strcmp(string_que_recebe,base)==0){

strcat(string_lida,string_que_recebe);printf("%s\n",string_que_recebe);printf("%s\n",string_lida);printf("%d\n",r);

}else printf ("\nString diferente!");system("PAUSE");}

Page 37: Lógica De Programação

[email protected]

EXERCÍCIO – NO LAB

12. Verificar o funcionamento das seguintes funções escrevendo um programa para testar as funções. Verifique o exemplo string1.cpp strcpy() strcat() strlen() strcmp()

Page 38: Lógica De Programação

[email protected]

Funções

São expressões para auxiliar na programação, onde são executados repetidamente uma série de passos, podemos ter funções para qualquer tipo de objetivo.

Portanto podemos “economizar” na digitação ou melhor ainda, deixar o algorítmo mais limpo, sendo este mais simples e fácil de entender.

Page 39: Lógica De Programação

[email protected]

Onde que entra e como fica?

#BibliotecasFuncao teste( );Funcao teste2( );INICIO ( ) { Programa… teste( ); teste2( ); Programa…}Funcao teste( ){ Programa… }Funcao teste2( ){ Programa… }

Page 40: Lógica De Programação

[email protected]

Exemplo

#BIBLIOTECAS

funcao limpa_tela();

INICIO ( ) { limpa_tela( ); ESCREVER ("Vai ser impresso depois"); limpa_tela( ); }INICIO limpa_tela(){ Sistema ("cls"); ESCREVER ("Teste"); Sistema ("cls"); }

Page 41: Lógica De Programação

[email protected]

#include <stdio.h>#include <conio.h>#include <stdlib.h>

void limpa_tela();

main(){ limpa_tela(); printf("Vai ser impresso depois"); getch( ); limpa_tela( ); system("PAUSE"); }void limpa_tela(){ system("cls"); printf("Teste"); getch( ); system("cls"); }

Page 42: Lógica De Programação

[email protected]

E Quando quero realizar uma conta?

Imagine que você terá que realizar N vezes um cálculo numérico para uma determinada atividade. Como realizar isto com uma função?

Quando realizarmos a “chamada da função” nos passamos as variaveis que serão utilizadas nesta parte do cálculo.

Ex: funcao(a); funcao2(b); … “a” e “b” são letras ou números que foram recebidos pelo computador.

E como fica a função??? Do mesmo jeito? Não! No inicio do programa você tem que dizer quantas variaveis

serão utilizadas e na função em si e qual o seu nome. funcao (inteiro); funcao2 (caracter); Inicio funcao (inteiro a) ou Inicio funcao2 (caracter b)

Page 43: Lógica De Programação

[email protected]

Exemplo#biblioteca <math.h>

real operador ( real x, real y);

INICIO ( ) { real x,y,r; ESCREVER ("\nDigite um numero a ser elevado"); LER ("%f,",&x); ESCREVER ("\nDigite o expoente"); LER("%f,",&y); r= operador(x,y); ESCREVER ("\nResultado %f",r); "PAUSA";}real operador( real x, real y){ real resultado; resultado=expoente ( log ( x ) * y ); returna resultado;}

Page 44: Lógica De Programação

[email protected]

13. Lembra da ordenação? ANALISAR LINHA A LINHA

Page 45: Lógica De Programação

[email protected]

void limpa_tela();void ordena(char[]);main(){ char s[30]; char opcao='s'; limpa_tela(); while (opcao=='s'){ printf("Digite uma string"); gets(s); ordena(s); printf("Caracteres ordenados"); printf("%s",s); printf("Outra vez?"); opcao=getch(); } system("PAUSE");}void limpa_tela(){ system("cls"); printf("Programa de ordenação de um vetor"); getch(); system("cls"); }void ordena(char v[]){ int i,j,aux; for(i=0;i<strlen(v)-1;i++) for (j=i+1;j<strlen(v);j++){ if(v[i]>v[j]){ aux=v[i]; v[i]=v[j]; v[j]=aux; } }}

Page 46: Lógica De Programação

[email protected]

AHHHH… Realizar os algorítmos abaixo

14. Realizar uma função para troca de valores entre duas variaveis.

15. Realizar uma função para tirar a média de um vetor.

16. Realizar um função para verificar se a matriz é simétrica.

Page 47: Lógica De Programação

[email protected]

Ponteiros

Um ponteiro proporciona um modo de acesso a variáveis sem referenciá-las diretamente

O mecanismo usado para isto é o endereço da variável, que age como intermediário entre a variável e o programa que a acessa.

Ponteiro = representação simbólica de um endereço

Page 48: Lógica De Programação

[email protected]

Por que usamos ponteiros?

São usados situações em que a passagem de valores é dificil ou indesejável.

Razões: Fornecem maneiras com as quais funções podem realmente

modificar os argumentos que recebem Para passar matrizes e strings mais convenientemente de uma

função para outra Manipular matrizes mais facilmente através da movimentação de

ponteiros para elas, em vez da própria matriz Criar estruturas de dados complexas, como listas encadeadas e

árvores binárias, onde uma estrutura referencia uma outra Para comunicar informações sobre a memória (malloc) O mais importante, códigos mais rápidos e eficientes.

Page 49: Lógica De Programação

[email protected]

Mas e o algorítmo?

Tem uma particularidade o “*” e o “&” * indica ao compilador que a variável não irá

armazenar um valor e sim um endereço & indica o endereço da variavel.

Inteiro contador=10; //inteiro com valor 10Inteiro *ponteiro; //ponteiro para um inteiroponteiro=&contador; //nos dá o endereço do contador

que esta armazenando em ponteiro*ponteiro=12; //o valor do contador agora é 12!

Page 50: Lógica De Programação

[email protected]

Algorítmo de exemplo

Inicio()inteiro numero,valor;inteito *p;numero=55;p=&num; valor=*p; escrever (valor);escrever (p);escrever (*p);Pausa;

}

Page 51: Lógica De Programação

[email protected]

Em C

#include <stdio.h>#include <stdlib.h>int main (){

int num,valor;int *p;num=55;p=&num; valor=*p; printf ("\n\n%d\n",valor);printf ("Endereco para onde o ponteiro aponta: %p\n",p);printf ("Valor da variavel apontada: %d\n",*p);system("pause");

}

Page 52: Lógica De Programação

[email protected]

Mais um exemplo

Inicio (){inteiro numero,*p;numero=55;p=&num;escrever(numero);*p=100; escrever(numero);

Pausa;}

Page 53: Lógica De Programação

[email protected]

Em C

#include <stdio.h>#include <stdlib.h>int main (){

int num,*p;num=55;p=&num;printf ("\nValor inicial: %d\n",num);*p=100; printf ("\nValor final: %d\n",num);

system("pause");}

Page 54: Lógica De Programação

[email protected]

Acabou?

Pesquisar: incremento e decremento de ponteiros.

Page 55: Lógica De Programação

[email protected]

E o que esta fazendo este código?

#include <stdio.h>#include <stdlib.h>

int main() { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x--; (*p) += x; printf ("y = %d\n", y); system("pause");}

Page 56: Lógica De Programação

[email protected]

Estruturas

Qual é o problema das matrizes quando queremos adicionar vários tipos diferentes?

Quando usamos dados desiguais usamos estruturas. “É uma coleção de uma ou mais variáveis,

possivelmente de tipos diferentes, colocadas juntas sob um único nome. (estruturas são chamadas de registro em algumas linguagens)”.

Pode-se usar várias matrizes para armazenar diversos tipos de dados, não é a maneira mais recomendado pela dificuldade de manipulação.

Page 57: Lógica De Programação

[email protected]

Declarando uma estrutura Primeiro você deve definir o tipo de estrutura que você quer criar. Uma estrutura pode conter qualquer número de membros de

diferentes tipos.

Struct facil {int numero;char caracter;

} Especificação do tipo de dado

Struct Nome da estrutura

Facil Membros da estrutura

Int numero; Char caracter;

Page 58: Lógica De Programação

[email protected]

Acabamos que criar um novo tipo de dados chamado “Facil”

Composto por dois elementos: uma variavel chamada numero e outra caracter.

Tenha isso na cabeça: “uma estrutura é um tipo de dado cujo formato é definido pelo programador”.

Page 59: Lógica De Programação

[email protected]

Declarando variaveis

Agora devemos declarar as variaveis. Struct facil x;

Struct – é uma estrutura Facil – é o tipo de estrutura X – é o nome da variavel.

Acessando os membros da estrutura. x.numero =2; x.caracter = ‘R’;

O Ponto conecta o nome da variavel estrutura a um membro da estrutura.

Page 60: Lógica De Programação

[email protected]

Exemplo

Inicio () {estrutura tipo {

inteiro numero;caracter letra;

};estrutura tipo x1;estrutura tipo x2;x1.numero =2;x1.letra=‘R’;x2.numero =3;x2.letra=‘o’;Escrever (“%d %d“, x1.numero, x2.numero);Escrever (“%c %c“, x1.letra, x2.letra);}

#include <stdio.h>#include <stdlib.h>

main () {struct tipo {

int numero;char letra;

};struct tipo x1;struct tipo x2;x1.numero =2;x1.letra='R';x2.numero =3;x2.letra='o';printf ("%d %d", x1.numero, x2.numero);printf ("%c %c", x1.letra, x2.letra);system ("pause");}

Page 61: Lógica De Programação

[email protected]

OU…

Inicio () {estrutura tipo {

inteiro numero;caracter letra;

} x1,x2;

x1.numero =2;x1.letra=‘R’;x2.numero =3;x2.letra=‘o’;Escrever (“%d %d“, x1.numero, x2.numero);Escrever (“%c %c“, x1.letra, x2.letra);}

Page 62: Lógica De Programação

[email protected]

Exercício

Elaborar uma estrutura para armazenar uma lista de livros. Antes de realizar a estrutura você deve perguntar: “Quais são as caracteristicas de um livro?”

Título, autor, editora, número de páginas, registro, preço, etc…

Page 63: Lógica De Programação

[email protected]

#include <stdio.h>#include <stdlib.h>#include <conio.h>

main () {struct tipo {

int registro;char titulo[30];

};struct tipo l1;struct tipo l2;fflush(stdin);printf ("Digite o número do livro:");scanf("%d",&l1.registro);printf ("\nDigite o nome do livro:");fflush(stdin);gets(l1.titulo);

printf ("%d", l1.registro);printf ("\n%s", l1.titulo);system ("pause");}

Page 64: Lógica De Programação

[email protected]

main () {struct tipo {

int registro;char titulo[30];

};struct tipo l1[5];int i;

for(i=0;i<5;i++){ fflush(stdin); printf ("\nDigite o número do livro:"); scanf("%d",&l1[i].registro); printf ("\nDigite o nome do livro:"); fflush(stdin); gets(l1[i].titulo);}for(i=0;i<5;i++){printf ("\n%d", l1[i].registro);printf ("\n%s", l1[i].titulo);}system ("pause");}

Page 65: Lógica De Programação

[email protected]

Para casa

Pesquisar os seguintes temas: Estruturas aninhadas

Estruturas para funções

Matrizes de estruturas

Ponteiros em estruturas

Page 66: Lógica De Programação

[email protected]

Não acabou ainda…

Criar uma estrutura para descrever restaurantes. Os membros devem armazenar o nome, endereço, preço médio e tipo de comida. Criar uma matriz de estruturas e escrever uma função que imprima todos os restaurantes de um certo tipo de comida.

Page 67: Lógica De Programação

[email protected]

Arquivos

É a capacidade de produzir informações que estão sendo executadas em determinados momentos e transformar em informações permanentes. Mesmo após que nos desligamos o computador. Chamamos isso de arquivos.

Podemos ter dois tipos de arquivos em C – os Binários e os arquivos ASCII.

Page 68: Lógica De Programação

[email protected]

A estrutura FILE

FILE é uma estrutura pré definida para compor o ponteiro para as ações com os arquivos.

Inicio () { FILE *ponteiro; ….}

Page 69: Lógica De Programação

[email protected]

Como inserir dados nos arquivos???

Caracter – insere um a um no arquivo. Utiliza técnicas de Buffers para não ficar escrevendo toda a hora no HD.

Binário – Ideal quando estamos trabalhando com String, matrizes e estruturas.

Page 70: Lógica De Programação

[email protected]

Diferenças entre ASCII e Binários

Um arquivo aberto em modo texto é interpretado em C como sequências de caracteres agrupadas em linhas. As linhas são separadas por um único caractere chamado caractere de nova linha ou LF (linefeed). ASCII 10.

O mesmo ocorre quando o SO abre este arquivo e procura dois caracteres CR (13) e LF (10).

O compilador converter o par CR/LF em um único caractere de nova linha um arquivo aberto de texto é lido.

Há ainda um indicador de final de arquivo chamado EOF (end of file).

Binário é mais simples, não há conversão. Não é reconhecida a indicação de fim de linha. Um outra diferença é como os binários interpretam os números. No arquivo texto os números são gravados como caractere e em binário são gravados como estão na memória.

Page 71: Lógica De Programação

[email protected]

Tipos de acessos e operações com arquivos

Podemos ter de baixo-nível, onde todas as informações são passadas de uma forma unitária.

Alto-nivel, executamos um comando para abrir/fechar/ler/gravar

Page 72: Lógica De Programação

[email protected]

fopen

Função para abertura de um arquivo. Fopen(“nome do arquivo”,”opção”); Exemplo:Inicio () {FILE *ponteiro;Se ((ponteiro = abrir (“teste.txt”,”w”)!=NULL)){ escrever(“Escreve ai!\n”); fechar(ponteiro);}Senão escrever (“Não foi possivel”);}

Page 73: Lógica De Programação

[email protected]

Opções de Abertura de arquivos

PROCURAR OUTROS CÓDIGOS!!!!

Abrir arquivo binário para acrescimoab

Abrir arquivo binário para escritawb

Abrir arquivo binário para leiturarb

Abrir arquivo para leitura e acrescimo (cria se necessário)

a+

Criar e abrir arquivo para leitura e escritaw+

Abrir arquivo para leitura e escrita (existente)r+

Abrir arquivo para acrescimo (idem)a

Abrir arquivo para escrita (cria se necessário)w

Abrir arquivo para leitura (existente)r

Page 74: Lógica De Programação

[email protected]

Detalhes importantes

Quanto tentamos abrir um arquivo nos devemos testar para verificar se o programa conseguiu realizar a operação, pois se podemos ter um programa travado por causa de uma falha de programação.

Quando abrimos um arquivo e NÃO foi bem sucessida a operação um NULL é retornado como valor.

NULL – constante pré-definida com valor 0.

Page 75: Lógica De Programação

[email protected]

Ponteiros entram na história??? SIM

Quando criamos um arquivo teste.txt, por exemplo, o ponteiro para este arquivo estará apontando para a posição inicial do arquivo. SEMPRE!!!!

Ponteiro do arquivoteste.txt

Page 76: Lógica De Programação

[email protected]

Funções

Fopen fopen ("teste.dat","ab+")

Fclose fclose(ponteiro);

Fwrite fwrite(&l1,sizeof(l1),1,ponteiro);

Fread fread(&l1,sizeof(l1),1,ponteiro);

Fseek Fseek(ponteiro,offset,0); // 0 inicio, 1 corrente, 2 fim do arq.

Page 77: Lógica De Programação

[email protected]

Exemplo Fopen

if ((ponteiro = fopen ("teste.dat","ab+"))) if (!ponteiro){ printf ("Não consegui abrir"); } else { fclose(ponteiro); }

Page 78: Lógica De Programação

[email protected]

Exemplo Fread

if ((ponteiro = fopen ("teste.dat","ab+"))) if (!ponteiro){ printf ("Não consegui abrir"); } else { fread(&l1,sizeof(l1),1,ponteiro); printf("%d",l1.registro); printf("%s",l1.titulo); fclose(ponteiro); }

Page 79: Lógica De Programação

[email protected]

Exemplo Fwrite

if ((ponteiro = fopen ("teste.dat","ab+"))) if (!ponteiro){ printf ("Não consegui abrir"); } else { fwrite(&l1,sizeof(l1),1,ponteiro); fclose(ponteiro); }