Lógica De Programação

13,716 views
13,535 views

Published on

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

Published in: Technology
0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,716
On SlideShare
0
From Embeds
0
Number of Embeds
740
Actions
Shares
0
Downloads
200
Comments
0
Likes
14
Embeds 0
No embeds

No notes for slide
  • Introdução a Lógica de Programação Prof. Rodrigo Cesar Benaglia Piovesana Contato: [email_address] Bibliografia básica: Algorítimos – Person Makron Books, 1998. Dirceu Douglas Salvetti Lisbete Madsen Barbosa Linguagens de Programação – Java, C, C++ e outras – Campus, 2004. Flávio Varejão
  • 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 Pascal Estruturado – JC editora, 1999. Harry Farrer e outros.
  • Lógica De Programação

    1. 1. Lógica de programação Avançado [email_address] Antes tarde do que mais tarde… Estou muito bem obrigado…e vocês?
    2. 2. Quem sou eu? <ul><li>Rodrigo C ésar Benaglia Piovesana </li></ul><ul><li>Engenheiro de Computação - USF </li></ul><ul><li>Especialista em Telecomunicações - FGV </li></ul><ul><li>Aluno Mestrado - Unicamp </li></ul><ul><li>Especialidades: redes de computadores, segurança da informação, VoIP e PABX Híbridos. </li></ul><ul><li>Desenvolvimento em C/C++ para controlar dispositivos (drivers), Programação Orientada à objetos e UML. </li></ul><ul><li>Diversas certificações em Redes de dados, Voz, PABX, Contact Center e Segurança. </li></ul>
    3. 3. Corinthiano ROXO!
    4. 4. Rumo ao Bi-Mundial
    5. 5. Bibliografia básica <ul><li>Algorítmos – Person Makron Books, 1998. </li></ul><ul><li>Dirceu Douglas Salvetti e Lisbete Madsen Barbosa </li></ul><ul><li>Linguagens de Programação – Java, C, C++ e outras – Campus, 2004. Flávio Varejão </li></ul>
    6. 6. Bibliografia recomendada <ul><li>Ciência dos Computadores – Uma abordagem algorítmica – MacGraw-Hill, 1983. Jean Paul Tremblay e Richard B. Bunt </li></ul><ul><li>C programação – Campus, 1993. Steve Holzner e Peter Norton </li></ul><ul><li>Treinamento em Linguagem C – Curso completo 1 e 2 – McGraw-hill, 1990. Victorine Viviane (j á tem novas versão onde é unificado os livros) </li></ul>
    7. 7. Revisão básica <ul><li>Alguem aqui lembra a matéria? Pelo menos o título??? </li></ul><ul><li>Quais foram os principais tópicos estudados? </li></ul><ul><ul><li>Eee…eee..eee…eeee..hummmm…. Não! </li></ul></ul><ul><ul><li>Conversão decimal <-> binário <-> octal <-> hexadecimal </li></ul></ul><ul><ul><li>Algorítmos </li></ul></ul><ul><ul><li>Descrição narrativa / Fluxograma </li></ul></ul><ul><ul><li>Estruturas de decisão / Repetição </li></ul></ul><ul><ul><li>Linguagem de programação C (comandos b ásicos em laboratório) </li></ul></ul><ul><li>Quais foram os exercícios executados? </li></ul><ul><li>Quais foram os mais f á ceis e dif í ceis? Porque? </li></ul><ul><li>Qual a principal diferença entra executar um programa direto no computador e realizar um algor í tmo antes de ir para o “pega-pra-capar”? </li></ul>
    8. 8. O Que seria convers ão binário-décimal-octal-hexadecimal?? <ul><li>B ásicamente é representar a mesma informação em formatos diferentes. </li></ul><ul><li>Por exemplo: 10 em decimal possui uma representação diferente em binário, 1010. Já em octal seria 12 e em Hexadecimal A. </li></ul><ul><li>http://calculadoraonline.com.br/view/conversao-binario.php </li></ul>
    9. 9. Descri ção Narrativa <ul><li>É solução estruturada do problema </li></ul><ul><li>Se termo verdadeiro </li></ul><ul><ul><li>Repete at é termo ser falso </li></ul></ul><ul><ul><li>Se não escrever </li></ul></ul><ul><ul><ul><li>“ Já era! Perdeu Playboy! ” </li></ul></ul></ul><ul><ul><li>Fim </li></ul></ul>
    10. 10. Pseudo-c ódigo <ul><li>É a escrita do famoso “Portugol”, onde você irá escrever o código com palavras muito, MAS MUITO parecidas, com as utilizadas em algumas linguagens de programação. </li></ul><ul><li>Se a<100 </li></ul><ul><ul><li>Então faça ate a = 100 </li></ul></ul><ul><ul><ul><li>A= a+1 </li></ul></ul></ul><ul><ul><li>Senão </li></ul></ul><ul><ul><ul><li>Escrever “número já é maior pó” </li></ul></ul></ul><ul><li>fim </li></ul>
    11. 11. Linguagem C <ul><li>Aqui o bicho pega!!!!! </li></ul><ul><li>Temos N tipos de linguagens compat íveis com C ANSI. Algumas são proprietárias ou implatanções melhoradas de C. </li></ul><ul><li>http://en.wikipedia.org/wiki/ANSI_C </li></ul><ul><li>C++ (plus plus) é um C com classes(orientaçao a objetos, etc) </li></ul><ul><li>C# ISO/IEC 23270 </li></ul>
    12. 12. Como funfa as provas e trabalho de conclus ão de curso? <ul><li>Sim, teremos 1 prova com 5 quest ões </li></ul><ul><li>E sim …teremos um projeto de conclus ão de curso, onde o objetivo é desenvolver um aplicativo comercial… </li></ul><ul><li>… anos anteriores já foram produzidos: sistemas para farmácias, hotéis, livrarias, fábricas de transformação, etc, etc, etc… </li></ul><ul><li>… talvez esse ano o projeto ser á para administração escolar… </li></ul>
    13. 13. Então “Vamo manda bala!” Vetores e Matrizes <ul><li>São estruturas de dados indexados do mesmo tipo. Onde cada espaço será preenchido com um tipo único de dados. </li></ul><ul><li>Indexados???? O que é isso? É um í ndice para a posição onde será armazeda a informação. </li></ul><ul><li>Tem como finalidade criar uma capacidade de armazenamento do mesmo tipo. </li></ul><ul><li>Podemos ter vários í ndices. </li></ul><ul><ul><li>Por convenção o primeiro í ndice identifica a linha e o segundo identifica a coluna. Podemos ainda ter um terceiro indice que indicaria o plano. </li></ul></ul><ul><ul><li>Teste [limite1][limite2][limite3] </li></ul></ul><ul><ul><li>O incremento de í ndices requer mais capacidade de armazenamento limite1 X limite 2 x limite 3 = total de memória </li></ul></ul><ul><ul><li>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. </li></ul></ul>
    14. 14. Vetor ou Matriz unidimensional com 7 posições Caracter letras[7]; AHH..isso é um indice! E esse é o valor armazenado! G F E D C B A 6 5 4 3 2 1 0
    15. 15. Como ficaria a declara ção usando a linguagem dos algorítmos??!?!?!!?!? <ul><li>Caracter Letras[7]; </li></ul><ul><li>Letras[0]=‘A’; </li></ul><ul><li>Letras[1]=‘B’; </li></ul><ul><li>Letras[2]=‘C’; </li></ul><ul><li>… ou eu posso usar um laço para fazer o preenchimento desse vetor… afff…credo! </li></ul>
    16. 16. Vetor/Matriz unidimencional <ul><li>Exemplo </li></ul><ul><li>#define LIMITE 20 </li></ul><ul><li>Inicio (){ </li></ul><ul><li>Inteiro m, m1[LIMITE],i; </li></ul><ul><li>LER(“%d”,&m); </li></ul><ul><li>Se (m < LIMITE) </li></ul><ul><li>Para(i=0;i<m;i++){ </li></ul><ul><li>m1[i]=i; </li></ul><ul><li>escrever(“%d”,m1[i]); </li></ul><ul><li>} </li></ul><ul><li>Senão </li></ul><ul><li>Escreva(“Fora do limite”); </li></ul><ul><li>Fim </li></ul><ul><li>Definindo o tamanho do vetor </li></ul><ul><li>Iniciando o programa </li></ul><ul><li>Declarando variaveis </li></ul><ul><li>Atrinbuindo um valor para a variavel m </li></ul><ul><li>Realizando um teste para validação do vetor </li></ul><ul><li>Laço para preenchimento do vetor </li></ul><ul><li>Escrevendo o conteúdo do vetor </li></ul><ul><li>Se estiver fora do valor limite exibe mensagem </li></ul><ul><li>fim </li></ul>
    17. 17. Como ficaria em C? <ul><li>Exemplo </li></ul><ul><li>#define LIMITE 25 </li></ul><ul><li>main(){ </li></ul><ul><li>int m,m1[LIMITE],i; </li></ul><ul><li>scanf(&quot;%d&quot;,&m); </li></ul><ul><li>if(m<LIMITE){ </li></ul><ul><li>for(i=0; i<m; i++){ </li></ul><ul><li>m1[i]=i; </li></ul><ul><li>printf(&quot;%d&quot;,m1[i]); </li></ul><ul><li>} </li></ul><ul><li>}else </li></ul><ul><li>printf(“Fora do limite&quot;); </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul>
    18. 18. Vetor <ul><li>Mais um exemplo </li></ul><ul><li>main(){ </li></ul><ul><li>char str [7]; </li></ul><ul><li>int i; </li></ul><ul><li>for(i=0; i<7; i++){ </li></ul><ul><li>str[i]= 'A'+i; </li></ul><ul><li>printf(&quot;%c&quot;,str[i]); </li></ul><ul><li>} </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul><ul><li>OUUUU </li></ul><ul><li>main(){ </li></ul><ul><li>char str [7]; </li></ul><ul><li>gets(str); </li></ul><ul><li>printf(&quot;%s&quot;,str); </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul>
    19. 19. Exercício 1. Mas que diabos este programa esta fazendo? <ul><li>#include<stdio.h> </li></ul><ul><li>main(){ </li></ul><ul><li>int exemplo [10], i, media; </li></ul><ul><li>printf(&quot; Informe os números X[i] a medida que forem solicitados: &quot;); </li></ul><ul><li>for(i=0; i<10; i++){ </li></ul><ul><li>printf(&quot;X[%d]? &quot;,i); </li></ul><ul><li>scanf(&quot;%d&quot;, &exemplo[i]) ; </li></ul><ul><li>} </li></ul><ul><li>media=0; </li></ul><ul><li>for (i=0; i<10; i++) { </li></ul><ul><li>media = media+exemplo[i]; </li></ul><ul><li>} </li></ul><ul><li>printf(&quot;A media é %f &quot;,(float)media/10); </li></ul><ul><li>} </li></ul>
    20. 20. “ Perdeu Playboy! Tem mais exercício !” <ul><li>1. Dada uma seqüência de números, imprimir a ordem inversa da leitura. </li></ul><ul><li>2. Escrever um algorítmo que declare um vetor de reais e leia as notas de 20 alunos. </li></ul><ul><li>3. Altere o algoritmo para calcular a média. </li></ul><ul><li>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 </li></ul><ul><li>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. </li></ul><ul><li>Obs: Desenvolver somente o algorítmo! NO PAPEL MANO! </li></ul><ul><li>Obs2: Nada de C por enquanto! </li></ul>
    21. 21. Correção – Exercício 1 <ul><li>inicio (){ </li></ul><ul><li>inteiro m[3] [2], I , j ; </li></ul><ul><li>m[0][0]=1; m[0][1]=2; m[1][0]=3; m[1][1]=4; m[2][0]=5; m[2][1]=6; </li></ul><ul><li>PARA (I igual a 0 ; I menor que 3 ; I = I + 1){ </li></ul><ul><li>PARA (j igual a 0 ; j menor que 2 ; j = j + 1) </li></ul><ul><li>ESCREVA ( “ %2d “ , m [ I ] [ j ]); </li></ul><ul><li>} </li></ul><ul><li>ESCREVER (&quot; &quot;); </li></ul><ul><li>PARA ( I igual a 2; I maior e igual a 0 ; I = I -1 ){ </li></ul><ul><li>PARA (j igual a 1; j maior e igual a 0; j = j -1) </li></ul><ul><li>ESCREVER (“ %2d &quot;, m [ I ] [ j ] ); </li></ul><ul><li>} </li></ul><ul><li>ESCREVER (&quot; &quot;); </li></ul><ul><li>PAUSA </li></ul><ul><li>} </li></ul>
    22. 22. Exercício 2 <ul><li>inicio(){ </li></ul><ul><li>Real str [20]; </li></ul><ul><li>Inteiro i; </li></ul><ul><li>PARA (I igual a 0; I menor que 20; i=i+1){ </li></ul><ul><li>LER( “ %f &quot;, &str[i] ); </li></ul><ul><li>} </li></ul><ul><li>PAUSA; </li></ul><ul><li>} </li></ul>
    23. 23. Exercício 3 <ul><li>INICIO () { </li></ul><ul><li>REAL str [20], media; </li></ul><ul><li>INTEIRO I; </li></ul><ul><li>PARA (I igual a 0; I menor que 20; I = I + 1){ </li></ul><ul><li>LER( “ %f &quot;, &str[i] ); </li></ul><ul><li>} </li></ul><ul><li>media=0; </li></ul><ul><li>PARA (I igual a 0; I menor que 20; I = I + 1){ </li></ul><ul><li>media = media + str[i]; </li></ul><ul><li>} </li></ul><ul><li>media = media/20; </li></ul><ul><li>PAUSA </li></ul><ul><li>} </li></ul>
    24. 24. Exercício 4 <ul><li>INICIO ( ) { </li></ul><ul><li>inteiro A[100] , soma , i; </li></ul><ul><li>PARA ( I igual a ; I menor que 100; i++){ </li></ul><ul><li>A[i] = 1+A[i]; </li></ul><ul><li>} </li></ul><ul><li>soma=0; </li></ul><ul><li>PARA ( I igual a ; I menor que 100; i++){ </li></ul><ul><li>soma = soma + A[i]; </li></ul><ul><li>} </li></ul><ul><li>ESCREVER ( “ %d “ , soma); </li></ul><ul><li>PAUSA </li></ul><ul><li>} </li></ul>
    25. 25. Exercício 5 – Primeira solução <ul><li>INICIO ( ) { </li></ul><ul><li>inteiro A [ 30 ] , aux = 0 , I , posicao; </li></ul><ul><li>PARA ( I igual a 0 ; I menor que 30 ; I = I + 1 ) { </li></ul><ul><li>LER ( “ %d “ , & A [ I ] ) ; </li></ul><ul><li>} </li></ul><ul><li>PARA ( I igual a 0 ; I menor que 30 ; I = I + 1 ) { </li></ul><ul><li>SE ( A [ I ] == 24) { </li></ul><ul><li>aux = aux+1; </li></ul><ul><li>posicao=i; </li></ul><ul><li>} </li></ul><ul><li>SENÃO ESCREVER (&quot;Nada no indice A[%d] &quot;,i); </li></ul><ul><li>} </li></ul><ul><li>ESCREVER ( “ % d % d &quot;, aux , posicao); </li></ul><ul><li>PAUSA; </li></ul><ul><li>} </li></ul><ul><li>QUAIS SÃO AS LIMITAÇÕES DESSA SOLUÇÃO? </li></ul><ul><li>1 – Somente uma variavel pode ser encontrada </li></ul><ul><li>2 – Não possui memória para armazenar mais de uma posição </li></ul><ul><li>3 – Não escreve todas as posições caso encontre mais de um número 24 </li></ul>
    26. 26. 6 -Alterar o exercício anterior para armazenar quantos números forem necessários para dar uma solução completa!
    27. 27. Só um detalhe <ul><li>INICIO ( ) { </li></ul><ul><li>inteiro a,I; </li></ul><ul><li>LER (“ % d “ , &a); </li></ul><ul><li>inteiro matriz[a]; </li></ul><ul><li>Para ( I igual a 0; I menor que a ; i++) </li></ul><ul><li>Ler ( “ % d “ , &matriz[I]) ; </li></ul><ul><li>Para ( I igual a 0; I menor que a ; i++) </li></ul><ul><li>Ler ( “ %d “ , matriz[i]); </li></ul><ul><li>PAUSA; </li></ul><ul><li>} </li></ul>
    28. 28. Ordenação de um vetor <ul><li>Não é mágica e sim lógica! </li></ul>6 1 5 2 3 4 5 4 3 2 1 0 6 5 4 3 2 1 5 4 3 2 1 0
    29. 29. Como eu já disse em aula e repito…é mais f ácil do que ganhar do Palmeiras e Santos …esses times sem estruturas! SPFC=caf é com leite… <ul><li>Um algor í tmo de ordenação consiste na comparação de cada elemento com todos os elementos subseqüentes. O elemento será trocado com o outro a depender dele ser menor ou maior. </li></ul><ul><li>Esse é um dos tipos mais simples!!! </li></ul>
    30. 30. REALIZAR NO PAPEL “BRODI” A ORDENAÇÃO DE VETORES <ul><ul><li>Início </li></ul></ul><ul><ul><li>tipo vetor[LIMITE], I,J, AUX; </li></ul></ul><ul><ul><li>para (I=0; I < LIMITE; I++){ </li></ul></ul><ul><ul><li>ler (vetor[I]); </li></ul></ul><ul><ul><li> para (I=0; i<LIMITE;I++){ </li></ul></ul><ul><ul><li> para (J=i; J<LIMITE; J++){ </li></ul></ul><ul><ul><li> se (vetor [I] > vetor [J]) então { </li></ul></ul><ul><ul><li> AUX = vetor[I]; </li></ul></ul><ul><ul><li> vetor[I] = vetor[J]; </li></ul></ul><ul><ul><li> vetor [J] =AUX; </li></ul></ul><ul><ul><li> } </li></ul></ul><ul><ul><li> } // fim para </li></ul></ul><ul><ul><li>} //fim para </li></ul></ul>
    31. 31. E como fica a pesquisa em vetores? <ul><li>Para encontrar um valor em vetor você deve realizar uma “Pesquisa Sequencial” e testar esse valor. </li></ul><ul><li>Qual é o problema desta pesquisa? </li></ul><ul><li>Temos um outro modelo que se chama Pesquisa Binária . PESQUISAR! </li></ul>
    32. 32. Matriz Bidimensional X o ç o r t 5 X X E s s e 4 X X X X X E 3 X X O c a s 2 X X X E u q 1 X X X S a M 0 5 4 3 2 1 0
    33. 33. <ul><li>Caracter festas[6][6]; </li></ul><ul><li>Temos duas maneiras de inserir informações em matrizes com mais de um indice: </li></ul><ul><ul><li>Na mão: festas[5][3] = ‘ç’; </li></ul></ul><ul><ul><li>ou podemos utilizar dois laços: um para controlar as colunas e um para controlar as linhas. </li></ul></ul>
    34. 34. Exemplo <ul><li>Inicio </li></ul><ul><li>inteiro M[3][2], i,j; </li></ul><ul><li>M [0,0] =1; </li></ul><ul><li>M [0,1] = 2; </li></ul><ul><li>M [1,0] = 3; </li></ul><ul><li>M [1,1] = 4; </li></ul><ul><li>M [2,0] = 5; </li></ul><ul><li>M [2,1] = 6; </li></ul><ul><li>para (i igual 0; i menor que 3; i = i + 1 ) //linha </li></ul><ul><li>para(j igual 0; j menor que 2; j = j + 1) //coluna </li></ul><ul><li>escreva ( “ %d ”, M[ j, i ]); // ANALISAR ESTA LINHA!!! </li></ul><ul><li>Fim </li></ul>
    35. 35. Matrizes bidimensionais <ul><li>Define limite 5 </li></ul><ul><li>Inteiro I,j,mat[limite][limite]; </li></ul><ul><li>Para (i = 0; i < m; i = i + 1) </li></ul><ul><li>Para (j = 0; j < n; j = j + 1) </li></ul><ul><li>ler(&quot;%d&quot;, &mat[i][j]); </li></ul>
    36. 36. EXEMPLO <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>main(){ </li></ul><ul><li>int i,j,matriz[3][2]; </li></ul><ul><li>for(i=0; i<3;i++){ </li></ul><ul><li>for(j=0;j<2;j++){ </li></ul><ul><li>scanf(&quot;%d&quot;,&matriz[i][j]); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>for(i=0; i<3;i++){ </li></ul><ul><li>printf(&quot; &quot;); </li></ul><ul><li>for(j=0;j<2;j++){ </li></ul><ul><li>printf(&quot;[%d]&quot;,matriz[i][j]); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>system(&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    37. 37. O que esta faltando????? <ul><li>7. Analisar as linhas de comando do programa matriz2d.cpp </li></ul><ul><li>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. </li></ul><ul><li>9. Realizar o mesmo exercício acima só que deve realizar o produto entre as matrizes! </li></ul><ul><li>10. Dada uma matriz real  A m x n , verificar se existem elementos repetidos em A . </li></ul>
    38. 38. Extra Classe <ul><li>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. </li></ul><ul><li>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). </li></ul><ul><li>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. </li></ul>
    39. 39. Podemos ter ainda mais uma dimensão <ul><li>Caracter Matrix [5][9][3]; </li></ul><ul><li>Claro que teremos 3 laços para controlar esse tipo </li></ul>1 2 3 ‘ o’ ‘ h’ 1 2 3 4 5 1 2 3 4 5 6 7 8 9 ‘ a’
    40. 40. Strings – Não é bicho de 7 cabeças <ul><li>String nada mais é do que um conjunto de caracteres (ou um vetor, só isso). </li></ul><ul><li>C/C++ possui comando próprios para manipulação desse conjunto. </li></ul><ul><li>Uma &quot;string&quot; é definida como sendo constituida de um vetor de caracteres (tipo de dado char - 1 byte) que é terminada por um &quot;nulo&quot;. Um nulo é especificado usando-se '' que é zero. </li></ul><ul><li>Por exemplo, se quisermos declarar um vetor &quot;str&quot; que possa armazenar uma string de 10 caracteres, escrevemos: </li></ul><ul><li>caracter str [11]; </li></ul><ul><li>Não é necessario adicionar manualmente o nulo (“”) no final das constantes string - o compilador faz isso automaticamente. </li></ul>
    41. 41. Funções especificas para manipulação de strings <ul><li>getstr() – Recebe uma string - dev-cpp gets() </li></ul><ul><li>strcpy() – Copia uma string </li></ul><ul><li>strcat() – Concatena duas strings </li></ul><ul><li>strlen() – Retonar o comprimento de uma string </li></ul><ul><li>strcmp() – Compara a ordenação alfabética de uma string </li></ul><ul><li>Biblioteca <string.h> </li></ul>
    42. 42. Exemplo <ul><li>int main(){ </li></ul><ul><li>char produto[ ]={'a','b','a','c','a','x','i',''}; </li></ul><ul><li>printf(&quot;%s&quot;,produto); </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul><ul><li>Ou – Há autores que consideram esta forma ilegal! </li></ul><ul><li>int main(){ </li></ul><ul><li>char produto[ ]=“abacaxi”; </li></ul><ul><li>printf(&quot;%s&quot;,produto); </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul><ul><li>Inicio (){ </li></ul><ul><li>Caracter produto[ ]={a,b,a,c,a,x,i}; </li></ul><ul><li>Escrever (“%s”,produto); </li></ul><ul><li>} </li></ul>
    43. 43. Copiar uma string… <ul><li>Basta ler e copiar para uma variavel que recebe este valor. </li></ul><ul><li>strcpy(string_que_recebe,string_lida); </li></ul><ul><li>Inicio(){ </li></ul><ul><li>Caracter string_que_recebe[80],string_lida[80]; </li></ul><ul><li>Ler(string_lida); </li></ul><ul><li>strcpy(string_que_recebe,string_lida); </li></ul><ul><li>Escrever(“%s”,string_que_recebe); </li></ul><ul><li>} </li></ul>
    44. 44. Analisar as linhas do código abaixo <ul><li>#include <string.h> </li></ul><ul><li>main(){ </li></ul><ul><li>char string_que_recebe[80],string_lida[80],base[10]=&quot;teste&quot;; </li></ul><ul><li>char concatena[80]; </li></ul><ul><li>int r; </li></ul><ul><li>gets(string_lida); </li></ul><ul><li>strcpy(string_que_recebe,string_lida); </li></ul><ul><li>r=strlen(string_que_recebe); </li></ul><ul><li>if(strcmp(string_que_recebe,base)==0){ </li></ul><ul><li>strcat(string_lida,string_que_recebe); </li></ul><ul><li>printf(&quot;%s &quot;,string_que_recebe); </li></ul><ul><li>printf(&quot;%s &quot;,string_lida); </li></ul><ul><li>printf(&quot;%d &quot;,r); </li></ul><ul><li>}else printf (&quot; String diferente!&quot;); </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul>
    45. 45. EXERCÍCIO – NO LAB <ul><li>12. Verificar o funcionamento das seguintes funções escrevendo um programa para testar as funções. Verifique o exemplo string1.cpp </li></ul><ul><ul><li>strcpy() </li></ul></ul><ul><ul><li>strcat() </li></ul></ul><ul><ul><li>strlen() </li></ul></ul><ul><ul><li>strcmp() </li></ul></ul>
    46. 46. Fun ção??!?!?!?!?!?!? AFFFF…
    47. 47. Fun ção??!?!?
    48. 48. Fun ção?!?!?!?!? Esse é chic…
    49. 49. Funções - ahhh bom… <ul><li>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. </li></ul><ul><li>Portanto podemos “economizar” na digitação ou melhor ainda, deixar o algorítmo mais limpo, sendo este mais simples e fácil de entender. </li></ul>
    50. 50. Onde que entra e como fica? <ul><li>#Bibliotecas </li></ul><ul><li>Funcao teste( ); </li></ul><ul><li>Funcao teste2( ); </li></ul><ul><li>INICIO ( ) { </li></ul><ul><li>Programa… </li></ul><ul><li>teste( ); </li></ul><ul><li>teste2( ); </li></ul><ul><li>Programa… </li></ul><ul><li>} </li></ul><ul><li>Funcao teste( ){ </li></ul><ul><li>Programa… </li></ul><ul><li>} </li></ul><ul><li>Funcao teste2( ){ </li></ul><ul><li>Programa… </li></ul><ul><li>} </li></ul>
    51. 51. Exemplo <ul><li>#BIBLIOTECAS </li></ul><ul><li>funcao limpa_tela(); </li></ul><ul><li>INICIO ( ) { </li></ul><ul><li>limpa_tela( ); </li></ul><ul><li>ESCREVER (&quot;Vai ser impresso depois&quot;); </li></ul><ul><li>limpa_tela( ); </li></ul><ul><li>} </li></ul><ul><li>INICIO limpa_tela(){ </li></ul><ul><li>Sistema (&quot;cls&quot;); </li></ul><ul><li>ESCREVER (&quot;Teste&quot;); </li></ul><ul><li>Sistema (&quot;cls&quot;); </li></ul><ul><li>} </li></ul>
    52. 52. <ul><li>#include <stdio.h> </li></ul><ul><li>#include <conio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>void limpa_tela(); </li></ul><ul><li>main(){ </li></ul><ul><li>limpa_tela(); </li></ul><ul><li>printf(&quot;Vai ser impresso depois&quot;); </li></ul><ul><li>getch( ); </li></ul><ul><li>limpa_tela( ); </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul><ul><li>void limpa_tela(){ </li></ul><ul><li>system(&quot;cls&quot;); </li></ul><ul><li>printf(&quot;Teste&quot;); </li></ul><ul><li>getch( ); </li></ul><ul><li>system(&quot;cls&quot;); </li></ul><ul><li>} </li></ul>
    53. 53. E Quando quero realizar uma conta? <ul><li>Imagine que você terá que realizar N vezes um cálculo numérico para uma determinada atividade. Como realizar isto com uma função? </li></ul><ul><li>Quando realizarmos a “chamada da função” nos passamos as variaveis que serão utilizadas nesta parte do cálculo. </li></ul><ul><li>Ex: funcao(a); funcao2(b); … “a” e “b” são letras ou números que foram recebidos pelo computador. </li></ul><ul><li>E como fica a função??? Do mesmo jeito? Não! </li></ul><ul><li>No inicio do programa você tem que dizer quantas variaveis serão utilizadas e na função em si e qual o seu nome. </li></ul><ul><li>funcao (inteiro); </li></ul><ul><li>funcao2 (caracter); </li></ul><ul><li>Inicio funcao (inteiro a) ou </li></ul><ul><li>Inicio funcao2 (caracter b) </li></ul>
    54. 54. Exemplo <ul><li>#biblioteca <math.h> </li></ul><ul><li>real operador ( real x, real y); </li></ul><ul><li>INICIO ( ) { </li></ul><ul><li>real x,y,r; </li></ul><ul><li>ESCREVER (&quot; Digite um numero a ser elevado&quot;); </li></ul><ul><li>LER (&quot;%f,&quot;,&x); </li></ul><ul><li>ESCREVER (&quot; Digite o expoente&quot;); </li></ul><ul><li>LER(&quot;%f,&quot;,&y); </li></ul><ul><li>r= operador(x,y); </li></ul><ul><li>ESCREVER (&quot; Resultado %f&quot;,r); </li></ul><ul><li>&quot;PAUSA&quot;; </li></ul><ul><li>} </li></ul><ul><li>real operador( real x, real y){ </li></ul><ul><li>real resultado; </li></ul><ul><li>resultado=expoente ( log ( x ) * y ); </li></ul><ul><li>returna resultado; </li></ul><ul><li>} </li></ul>
    55. 55. 13. Lembra da ordenação? ANALISAR LINHA A LINHA
    56. 56. <ul><li>void limpa_tela(); </li></ul><ul><li>void ordena(char[]); </li></ul><ul><li>main(){ </li></ul><ul><li>char s[30]; char opcao='s'; limpa_tela(); </li></ul><ul><li>while (opcao=='s'){ </li></ul><ul><li>printf(&quot;Digite uma string&quot;); </li></ul><ul><li>gets(s); ordena(s); </li></ul><ul><li>printf(&quot;Caracteres ordenados&quot;); </li></ul><ul><li>printf(&quot;%s&quot;,s); </li></ul><ul><li>printf(&quot;Outra vez?&quot;); opcao=getch(); </li></ul><ul><li>} </li></ul><ul><li>system(&quot;PAUSE&quot;); </li></ul><ul><li>} </li></ul><ul><li>void limpa_tela(){ </li></ul><ul><li>system(&quot;cls&quot;); printf(&quot;Programa de ordenação de um vetor&quot;); </li></ul><ul><li>getch(); system(&quot;cls&quot;); </li></ul><ul><li>} </li></ul><ul><li>void ordena(char v[]){ </li></ul><ul><li>int i,j,aux; </li></ul><ul><li>for(i=0;i<strlen(v)-1;i++) </li></ul><ul><li>for (j=i+1;j<strlen(v);j++){ </li></ul><ul><li>if(v[i]>v[j]){ </li></ul><ul><li>aux=v[i]; v[i]=v[j]; v[j]=aux; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
    57. 57. AHHHH… Realizar os algorítmos abaixo <ul><li>14. Realizar uma função para troca de valores entre duas variaveis. </li></ul><ul><li>15. Realizar uma função para tirar a média de um vetor. </li></ul><ul><li>16. Realizar um função para verificar se a matriz é simétrica. </li></ul>
    58. 58. Ponteiros <ul><li>Um ponteiro proporciona um modo de acesso a variáveis sem referenciá-las diretamente </li></ul><ul><li>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. </li></ul><ul><li>Ponteiro = representação simbólica de um endereço </li></ul>
    59. 59. Por que usamos ponteiros? <ul><li>São usados situações em que a passagem de valores é dificil ou indesejável. </li></ul><ul><li>Razões: </li></ul><ul><ul><li>Fornecem maneiras com as quais funções podem realmente modificar os argumentos que recebem </li></ul></ul><ul><ul><li>Para passar matrizes e strings mais convenientemente de uma função para outra </li></ul></ul><ul><ul><li>Manipular matrizes mais facilmente através da movimentação de ponteiros para elas, em vez da própria matriz </li></ul></ul><ul><ul><li>Criar estruturas de dados complexas, como listas encadeadas e árvores binárias, onde uma estrutura referencia uma outra </li></ul></ul><ul><ul><li>Para comunicar informações sobre a memória (malloc) </li></ul></ul><ul><ul><li>O mais importante, códigos mais rápidos e eficientes. </li></ul></ul>
    60. 60. Mas e o algorítmo? <ul><li>Tem uma particularidade o “*” e o “&” </li></ul><ul><ul><li>* indica ao compilador que a variável não irá armazenar um valor e sim um endereço </li></ul></ul><ul><ul><li>& indica o endereço da variavel. </li></ul></ul><ul><ul><li>Inteiro contador=10; //inteiro com valor 10 </li></ul></ul><ul><ul><li>Inteiro *ponteiro; //ponteiro para um inteiro </li></ul></ul><ul><ul><li>ponteiro=&contador; //nos dá o endereço do contador que esta armazenando em ponteiro </li></ul></ul><ul><ul><li>*ponteiro=12; //o valor do contador agora é 12! </li></ul></ul>
    61. 61. Algorítmo de exemplo <ul><li>Inicio() </li></ul><ul><li>inteiro numero,valor; </li></ul><ul><li>inteito *p; </li></ul><ul><li>numero=55; </li></ul><ul><li>p=&num; </li></ul><ul><li>valor=*p; </li></ul><ul><li>escrever (valor); </li></ul><ul><li>escrever (p); </li></ul><ul><li>escrever (*p); </li></ul><ul><li>Pausa; </li></ul><ul><li>} </li></ul>
    62. 62. Em C <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>int main (){ </li></ul><ul><li>int num,valor; </li></ul><ul><li>int *p; </li></ul><ul><li>num=55; </li></ul><ul><li>p=&num; </li></ul><ul><li>valor=*p; </li></ul><ul><li>printf (&quot; %d &quot;,valor); </li></ul><ul><li>printf (&quot;Endereco para onde o ponteiro aponta: %p &quot;,p); </li></ul><ul><li>printf (&quot;Valor da variavel apontada: %d &quot;,*p); </li></ul><ul><li>system(&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    63. 63. Mais um exemplo <ul><li>Inicio (){ </li></ul><ul><li>inteiro numero,*p; </li></ul><ul><li>numero=55; </li></ul><ul><li>p=&num; </li></ul><ul><li>escrever(numero); </li></ul><ul><li>*p=100; </li></ul><ul><li>escrever(numero); </li></ul><ul><li>Pausa; </li></ul><ul><li>} </li></ul>
    64. 64. Em C <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>int main (){ </li></ul><ul><li>int num,*p; </li></ul><ul><li>num=55; </li></ul><ul><li>p=&num; </li></ul><ul><li>printf (&quot; Valor inicial: %d &quot;,num); </li></ul><ul><li>*p=100; </li></ul><ul><li>printf (&quot; Valor final: %d &quot;,num); </li></ul><ul><li>system(&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    65. 65. Acabou? <ul><li>Pesquisar: incremento e decremento de ponteiros. </li></ul>
    66. 66. E o que esta fazendo este código? <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>int main() </li></ul><ul><li>{ </li></ul><ul><li>int y, *p, x; </li></ul><ul><li>y = 0; </li></ul><ul><li>p = &y; </li></ul><ul><li>x = *p; </li></ul><ul><li>x = 4; </li></ul><ul><li>(*p)++; </li></ul><ul><li>x--; </li></ul><ul><li>(*p) += x; </li></ul><ul><li>printf (&quot;y = %d &quot;, y); </li></ul><ul><li>system(&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    67. 67. Estruturas <ul><li>Qual é o problema das matrizes quando queremos adicionar vários tipos diferentes? </li></ul><ul><li>Quando usamos dados desiguais usamos estruturas. </li></ul><ul><li>“ É 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)”. </li></ul><ul><li>Pode-se usar várias matrizes para armazenar diversos tipos de dados, não é a maneira mais recomendado pela dificuldade de manipulação. </li></ul>
    68. 68. Declarando uma estrutura <ul><li>Primeiro você deve definir o tipo de estrutura que você quer criar. </li></ul><ul><li>Uma estrutura pode conter qualquer número de membros de diferentes tipos. </li></ul><ul><li>Struct facil { </li></ul><ul><li>int numero; </li></ul><ul><li>char caracter; </li></ul><ul><li>} </li></ul><ul><li>Especificação do tipo de dado </li></ul><ul><ul><li>Struct </li></ul></ul><ul><li>Nome da estrutura </li></ul><ul><ul><li>Facil </li></ul></ul><ul><li>Membros da estrutura </li></ul><ul><ul><li>Int numero; </li></ul></ul><ul><ul><li>Char caracter; </li></ul></ul>
    69. 69. <ul><li>Acabamos que criar um novo tipo de dados chamado “Facil” </li></ul><ul><li>Composto por dois elementos: uma variavel chamada numero e outra caracter. </li></ul><ul><li>Tenha isso na cabeça: “uma estrutura é um tipo de dado cujo formato é definido pelo programador”. </li></ul>
    70. 70. Declarando variaveis <ul><li>Agora devemos declarar as variaveis. </li></ul><ul><li>Struct facil x; </li></ul><ul><ul><li>Struct – é uma estrutura </li></ul></ul><ul><ul><li>Facil – é o tipo de estrutura </li></ul></ul><ul><ul><li>X – é o nome da variavel. </li></ul></ul><ul><li>Acessando os membros da estrutura. </li></ul><ul><ul><li>x.numero =2; </li></ul></ul><ul><ul><li>x.caracter = ‘R’; </li></ul></ul><ul><li>O Ponto conecta o nome da variavel estrutura a um membro da estrutura. </li></ul>
    71. 71. Exemplo <ul><li>Inicio () { </li></ul><ul><li>estrutura tipo { </li></ul><ul><li>inteiro numero; </li></ul><ul><li>caracter letra; </li></ul><ul><li>}; </li></ul><ul><li>estrutura tipo x1; </li></ul><ul><li>estrutura tipo x2; </li></ul><ul><li>x1.numero =2; </li></ul><ul><li>x1.letra=‘R’; </li></ul><ul><li>x2.numero =3; </li></ul><ul><li>x2.letra=‘o’; </li></ul><ul><li>Escrever (“%d %d“, x1.numero, x2.numero); </li></ul><ul><li>Escrever (“%c %c“, x1.letra, x2.letra); </li></ul><ul><li>} </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>main () { </li></ul><ul><li>struct tipo { </li></ul><ul><li>int numero; </li></ul><ul><li>char letra; </li></ul><ul><li>}; </li></ul><ul><li>struct tipo x1; </li></ul><ul><li>struct tipo x2; </li></ul><ul><li>x1.numero =2; </li></ul><ul><li>x1.letra='R'; </li></ul><ul><li>x2.numero =3; </li></ul><ul><li>x2.letra='o'; </li></ul><ul><li>printf (&quot;%d %d&quot;, x1.numero, x2.numero); </li></ul><ul><li>printf (&quot;%c %c&quot;, x1.letra, x2.letra); </li></ul><ul><li>system (&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    72. 72. OU… <ul><li>Inicio () { </li></ul><ul><li>estrutura tipo { </li></ul><ul><li>inteiro numero; </li></ul><ul><li>caracter letra; </li></ul><ul><li>} x1,x2; </li></ul><ul><li>x1.numero =2; </li></ul><ul><li>x1.letra=‘R’; </li></ul><ul><li>x2.numero =3; </li></ul><ul><li>x2.letra=‘o’; </li></ul><ul><li>Escrever (“%d %d“, x1.numero, x2.numero); </li></ul><ul><li>Escrever (“%c %c“, x1.letra, x2.letra); </li></ul><ul><li>} </li></ul>
    73. 73. Exercício <ul><li>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?” </li></ul><ul><li>Título, autor, editora, número de páginas, registro, preço, etc… </li></ul>
    74. 74. <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h> </li></ul><ul><li>#include <conio.h> </li></ul><ul><li>main () { </li></ul><ul><li>struct tipo { </li></ul><ul><li>int registro; </li></ul><ul><li>char titulo[30]; </li></ul><ul><li>}; </li></ul><ul><li>struct tipo l1; </li></ul><ul><li>struct tipo l2; </li></ul><ul><li>fflush(stdin); </li></ul><ul><li>printf (&quot;Digite o número do livro:&quot;); </li></ul><ul><li>scanf(&quot;%d&quot;,&l1.registro); </li></ul><ul><li>printf (&quot; Digite o nome do livro:&quot;); </li></ul><ul><li>fflush(stdin); </li></ul><ul><li>gets(l1.titulo); </li></ul><ul><li>printf (&quot;%d&quot;, l1.registro); </li></ul><ul><li>printf (&quot; %s&quot;, l1.titulo); </li></ul><ul><li>system (&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    75. 75. <ul><li>main () { </li></ul><ul><li>struct tipo { </li></ul><ul><li>int registro; </li></ul><ul><li>char titulo[30]; </li></ul><ul><li>}; </li></ul><ul><li>struct tipo l1[5]; </li></ul><ul><li>int i; </li></ul><ul><li>for(i=0;i<5;i++){ </li></ul><ul><li>fflush(stdin); </li></ul><ul><li>printf (&quot; Digite o número do livro:&quot;); </li></ul><ul><li>scanf(&quot;%d&quot;,&l1[i].registro); </li></ul><ul><li>printf (&quot; Digite o nome do livro:&quot;); </li></ul><ul><li>fflush(stdin); </li></ul><ul><li>gets(l1[i].titulo); </li></ul><ul><li>} </li></ul><ul><li>for(i=0;i<5;i++){ </li></ul><ul><li>printf (&quot; %d&quot;, l1[i].registro); </li></ul><ul><li>printf (&quot; %s&quot;, l1[i].titulo); </li></ul><ul><li>} </li></ul><ul><li>system (&quot;pause&quot;); </li></ul><ul><li>} </li></ul>
    76. 76. Para casa <ul><li>Pesquisar os seguintes temas: </li></ul><ul><ul><li>Estruturas aninhadas </li></ul></ul><ul><ul><li>Estruturas para funções </li></ul></ul><ul><ul><li>Matrizes de estruturas </li></ul></ul><ul><ul><li>Ponteiros em estruturas </li></ul></ul>
    77. 77. Não acabou ainda… <ul><li>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. </li></ul>
    78. 78. Arquivos <ul><li>É 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. </li></ul><ul><li>Podemos ter dois tipos de arquivos em C – os Binários e os arquivos ASCII. </li></ul>
    79. 79. A estrutura FILE <ul><li>FILE é uma estrutura pré definida para compor o ponteiro para as ações com os arquivos. </li></ul><ul><li>Inicio () { </li></ul><ul><li>FILE *ponteiro; </li></ul><ul><li>… . </li></ul><ul><li>} </li></ul>
    80. 80. Como inserir dados nos arquivos??? <ul><li>Caracter – insere um a um no arquivo. Utiliza técnicas de Buffers para não ficar escrevendo toda a hora no HD. </li></ul><ul><li>Binário – Ideal quando estamos trabalhando com String, matrizes e estruturas. </li></ul>
    81. 81. Diferenças entre ASCII e Binários <ul><li>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. </li></ul><ul><li>O mesmo ocorre quando o SO abre este arquivo e procura dois caracteres CR (13) e LF (10). </li></ul><ul><li>O compilador converter o par CR/LF em um único caractere de nova linha um arquivo aberto de texto é lido. </li></ul><ul><li>Há ainda um indicador de final de arquivo chamado EOF (end of file). </li></ul><ul><li>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. </li></ul>
    82. 82. Tipos de acessos e operações com arquivos <ul><li>Podemos ter de baixo-nível, onde todas as informações são passadas de uma forma unitária. </li></ul><ul><li>Alto-nivel, executamos um comando para abrir/fechar/ler/gravar </li></ul>
    83. 83. fopen <ul><li>Função para abertura de um arquivo. </li></ul><ul><li>Fopen(“nome do arquivo”,”opção”); </li></ul><ul><li>Exemplo: </li></ul><ul><li>Inicio () { </li></ul><ul><li>FILE *ponteiro; </li></ul><ul><li>Se ((ponteiro = abrir (“teste.txt”,”w”)!=NULL)){ </li></ul><ul><li>escrever(“Escreve ai! ”); </li></ul><ul><li>fechar(ponteiro);} </li></ul><ul><li>Senão escrever (“Não foi possivel”); </li></ul><ul><li>} </li></ul>
    84. 84. Opções de Abertura de arquivos PROCURAR OUTROS CÓDIGOS!!!! Abrir arquivo binário para acrescimo ab Abrir arquivo binário para escrita wb Abrir arquivo binário para leitura rb Abrir arquivo para leitura e acrescimo (cria se necessário) a+ Criar e abrir arquivo para leitura e escrita w+ 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
    85. 85. Detalhes importantes <ul><li>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. </li></ul><ul><li>Quando abrimos um arquivo e NÃO foi bem sucessida a operação um NULL é retornado como valor. </li></ul><ul><li>NULL – constante pré-definida com valor 0. </li></ul>
    86. 86. Ponteiros entram na história??? SIM <ul><li>Quando criamos um arquivo teste.txt, por exemplo, o ponteiro para este arquivo estará apontando para a posição inicial do arquivo. SEMPRE!!!! </li></ul><ul><li>Ponteiro do arquivo </li></ul>teste.txt
    87. 87. Funções <ul><li>Fopen </li></ul><ul><ul><li>fopen (&quot;teste.dat&quot;,&quot;ab+&quot;) </li></ul></ul><ul><li>Fclose </li></ul><ul><ul><li>fclose(ponteiro); </li></ul></ul><ul><li>Fwrite </li></ul><ul><ul><li>fwrite(&l1,sizeof(l1),1,ponteiro); </li></ul></ul><ul><li>Fread </li></ul><ul><ul><li>fread(&l1,sizeof(l1),1,ponteiro); </li></ul></ul><ul><li>Fseek </li></ul><ul><ul><li>Fseek(ponteiro,offset,0); // 0 inicio, 1 corrente, 2 fim do arq. </li></ul></ul>
    88. 88. Exemplo Fopen <ul><li>if ((ponteiro = fopen (&quot;teste.dat&quot;,&quot;ab+&quot;))) </li></ul><ul><li>if (!ponteiro){ </li></ul><ul><li>printf (&quot;Não consegui abrir&quot;); </li></ul><ul><li>} </li></ul><ul><li>else { </li></ul><ul><li>fclose(ponteiro); </li></ul><ul><li>} </li></ul>
    89. 89. Exemplo Fread <ul><li>if ((ponteiro = fopen (&quot;teste.dat&quot;,&quot;ab+&quot;))) </li></ul><ul><li>if (!ponteiro){ </li></ul><ul><li>printf (&quot;Não consegui abrir&quot;); </li></ul><ul><li>} </li></ul><ul><li>else { </li></ul><ul><li>fread(&l1,sizeof(l1),1,ponteiro); </li></ul><ul><li>printf(&quot;%d&quot;,l1.registro); </li></ul><ul><li>printf(&quot;%s&quot;,l1.titulo); </li></ul><ul><li>fclose(ponteiro); </li></ul><ul><li>} </li></ul>
    90. 90. Exemplo Fwrite <ul><li>if ((ponteiro = fopen (&quot;teste.dat&quot;,&quot;ab+&quot;))) </li></ul><ul><li>if (!ponteiro){ </li></ul><ul><li>printf (&quot;Não consegui abrir&quot;); </li></ul><ul><li>} </li></ul><ul><li>else { </li></ul><ul><li>fwrite(&l1,sizeof(l1),1,ponteiro); </li></ul><ul><li>fclose(ponteiro); </li></ul><ul><li>} </li></ul>

    ×