Lógica de Programação Prof. Márcio Soussa Centro Universitário Jorge Amado.

Apresentações semelhantes


Apresentação em tema: "Lógica de Programação Prof. Márcio Soussa Centro Universitário Jorge Amado."— Transcrição da apresentação:

1 Lógica de Programação Prof. Márcio Soussa Centro Universitário Jorge Amado

2 Referências Bibliográficas FORBELLONE, André L.V., EBERSPACHER, H.F. Lógica de Programação – A construção de Algoritmos e Estruturas de Dados. Pearson Brasil. MANZANO, José Augusto N.G., OLIVEIRA, Jair Figuereido de. Algoritmos – Lógica para Desenvolvimento de Programação de Computadores. Érica. São Paulo. SCHILDT, Herbert, C Completo e Total, Ed. Makron Books DEITEL – H.M. – P.J., C++ Como Programar – Bookman 2001 – Porto Alegre Obs.: Agradecimento ao Prof. Arleys pelo material cedido

3 O que é Lógica ?

4 Exemplo Dia-a-Dia João é mais velho que Maria Maria é mais velha que Carlos João é mais velho que Carlos

5 Exemplo Dia-a-Dia Todo mamífero é um animal Todo cachorro é um mamífero Todo cachorro é um animal

6 Exemplo Dia-a-Dia Seria possível trocar uma lâmpada dessa forma? 1.Pegar uma escada 2.Posicionar a escada embaixo da lâmpada 3.Buscar uma lâmpada nova 4.Colocar a lâmpada nova 5.Retirar a lâmpada velha 6.Subir na escada

7 Definições Básicas “É a arte de pensar corretamente” Ensina a usar corretamente o Pensamento “Coloca Ordem no Pensamento”

8 Definições Básicas “A ciência das leis ideais do pensamento e a arte de aplicá-los à demonstração da verdade”

9 Importância A lógica é necessária para pessoas que desejam trabalhar com informática (analistas, programadores, suporte) Ela permite definir a sequência lógica para a solução de um problema com eficiência e eficácia.

10 Importância Se aplica a qualquer linguagem de programação; Agiliza a codificação da escrita e da programação; Facilita a depuração da leitura do mesmo; Permite a verificação de possíveis falhas; Facilita as alterações e atualizações dos programas.

11 Definições Básicas Lógica de Programação “É a contextualização da lógica na programação de computadores, buscando a melhor sequência de ações para solucionar determinado problema. Essa sequência de ações é chamada de algoritmo”

12 Algoritmo Exemplo de um Algoritmo para trocar uma lâmpada 1.Pegar uma escada 2.Posicionar a escada embaixo da lâmpada 3.Buscar uma lâmpada nova 4.Subir na escada 5.Retirar a lâmpada velha 6.Colocar a lâmpada nova

13 Algoritmo Outros Exemplos do dia-a-dia: 1.Manual de um aparelho eletrônico 2.Tutorial de utilização de um software 3.Forma de cálculo de uma hora extra 4.Uma receita para o preparo de uma moqueca ▫Qual é a sua receita? 5.Passos para realizar uma ligação telefônica

14 Descrição narrativa do Algoritmo Exemplo: Receita de Bolo: 1.Providencie manteiga, ovos, 2 Kg de massa, etc. 2.Misture os ingredientes 3.Despeje a mistura na fôrma de bolo 4.Leve a fôrma ao forno 5.Espere 20 minutos 6.Retire a fôrma do forno 7.Deixe esfriar 8.Prove

15 Algoritmo “É uma sequência de passos que visa atingir um objetivo definido” “Um conjunto finito de regras que provê uma sequência de operações para resolver um tipo de problema específico” “Sequência ordenada, e não ambígua, de passos que levam à solução de um dado problema” “Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, as regras formais para a obtenção do resultado ou da solução do problema” [AURÉLIO]

16 Algoritmo Propriedades de um algoritmo: Ações Simples e bem definidas (não ambíguas) Sequência ordenada de ações Sequência finita de passos

17 Algoritmo Deve ser composto por quatro passos fundamentais: ▫Escrever as instruções em sequência ligadas entre si por apenas estruturas sequenciais; ▫Escrever instruções em grupos pequenos e combina- las; ▫Distribuir os módulos do programa entre os diferentes programadores; ▫Revisar o trabalho executado.

18 Representação Descrição Narrativa: ▫Representações textuais que expressam uma ordem do fluxo dos pensamentos a serem executados 1-Ler Salário 2-Ler Horas Mensais 3-Ler tipo da H Extra 4-Ler quantidade de H. extras realizadas 5-Calcular o valor da hora extra 6-Informar o valor da hora extra calculada

19 Representação Gráfica: ▫Representações gráficas que expressam uma ordem do fluxo dos pensamentos a serem executados

20 Representação Gráfica Fluxograma ▫Geralmente usada por profissionais de análise de sistema, bem como profissionais de Organização e Métodos. Diagrama de Blocos ▫Ferramenta usada basicamente por profissionais que estão envolvidos diretamente com a programação.

21 Diagrama de Bloco S N

22 Simbologia Básica Formas de representação gráfica: Terminal Seta de Fluxo Processamento Entrada manual de dados Entrada e Saída de dados Decisão Conectores Display

23 Princípios de Resolução Problemas Problema ▫É uma proposta duvidosa, que pode ter numerosas soluções. ▫Questão não resolvida e que é objeto de discussão

24 Problema a ser resolvido No final do ano de uma determinada escola, é necessário saber se o aluno foi aprovado ou não. O cálculo da média é realizado através de 4 notas bimestrais. O aluno é considerado aprovado se tiver média maior ou igual a 7.

25 Técnicas Básicas de Programação A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita, entendimento, validação e manutenção de programas. Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar a complexidade”. Procura reduzir o nível de complexidade em três níveis: a)desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down); b)decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico; c)uso de um número limitado de estruturas básicas de fluxo de controle dentro de cada módulo.

26 Técnicas Básicas de Programação Estruturada SN S N

27 Técnicas Básicas de Programação Um programa de computador é composto por dos tipos básicos de informações: dados e instruções

28 Técnicas Básicas de Programação Dados São representados pelas informações a serem tratadas (processadas) pelo computador. Caracteriza-se por três tipos de dados: ▫Dados numéricos ▫Dados caracteres ▫Dados lógicos

29 Técnicas Básicas de Programação Tipos inteiros: ▫Números inteiros, positivos ou negativos:  35, 0, -35..... Tipos Reais: ▫Abrangem inteiros, negativos, positivos e fracionários:  35, 0, -35, 1.25, -45.1245547...... s

30 Técnicas Básicas de Programação Tipos Caracteres: ▫Sequência de textos e letras, válida quando estiver entre (“”) aspas:  “oi.. Tudo bem”, “Telefone: 5555-4444”.... Tipos Lógicos: ▫Assumem apenas dois valores:  Verdadeiro ou Falso.  Podendo ser representado como:  Sim ou Não  True ou False .V. ou.F.  Etc...

31 Técnicas Básicas de Programação Uso de variáveis: ▫Variável: Tudo aquilo que é sujeito a variações, que é incerto, instável ou inconstante. Uso de constantes: ▫É tudo aquilo que é fixo ou estável;  O valor do PI = 3,14156

32 Técnicas Básicas de Programação

33 Expressões aritméticas ou fórmulas matemáticas ÁREA=PI. RAIO 2 ÁREA = PI * RAIO^2 X = 43. 55 30+2 X = (43*(55/(30+2)))

34 Técnicas Básicas de Programação Operadores matemáticos OperadoresOperação +Soma -Subtração *Multiplicação /Divisão ^Exponenciação %Resto da Divisão

35 Técnicas Básicas de Programação Operadores lógicos OperadoresOperação =Atribuição ==Igualdade !=Diferença >Maior Que <Menor Que >=Maior e Igual <=Menor e Igual

36 Técnicas Básicas de Programação Operadores de incremento OperadoresOperação ++Incremento --Decremento

37 Técnicas Básicas de Programação Instruções ▫São representadas pelo conjunto de palavras- chave de uma linguagem de programação ▫Português estruturado (Portugol)  Inicio, fim, var, programa, enquanto, se, então, para, escreva, leia, faça, repita e até que.

38 Técnicas Básicas de Programação Regras básicas: ▫Todo problema a ser resolvido será previamente entendido, passado para uma descrição narrativa, para depois ser representado graficamente; ▫Toda tarefa feita a uma instrução será escrita em letra minúscula em formato negrito. As instruções não serão indicadas dentro dos diagramas de blocos; ▫Qualquer valor atribuído a uma variável será feito com símbolo = (igual) tanto no diagrama de blocos quanto em código português estruturado.

39 Técnicas Básicas de Programação Problema: ▫Ler dois valores, efetuar a soma e apresentar o resultado em tela. Descrição narrativa: 1 – Ler dois valores, no caso variáveis A e B; 2 – Efetuar a soma das variáveis A e B, implicando o seu resultado na variável SOMA; 3 – Apresentar o valor da variável SOMA após a operação de soma dos dois valores fornecidos. Início Fim A SOMA = A + B SOMA B

40 Técnicas Básicas de Programação programa SOMA_DOIS_NUMEROS var SOMA : inteiro A : inteiro B : inteiro início leia A leia B SOMA = A + B escreva SOMA fim Português estruturado

41 Técnicas Básicas de Programação Problema: ▫Ler dois valores, efetuar a soma e verificar se é maior que 10. Se for, apresentar o resultado na tela. Pede-se: ▫Descrição Narrativa ▫Diagrama de Bloco ▫Português Estruturado

42 Estrutura de Controle – Tomada de Decisões Desvio condicional Simples. ▫Ajuda a tomada de decisões ▫Verifica uma condição. Se for verdadeira, serão executadas todas as instruções que estiverem entre a instrução Se... Então. ▫Trabalharemos com uma instrução na codificação em português estruturado a seguir:  se... então... fim_se

43 Estrutura de Controle – Tomada de Decisões ▫São utilizadas as letras S e N no diagrama de tomada de decisão. ▫O S representa Sim conseqüentemente a proposição Verdadeira e o N representa o Não. ▫Além das linhas com setas indicando a direção do processamento. Condição Verdadeira Condição SN Condição Falsa

44 Estrutura de Controle – Tomada de Decisões se ( ) então fim_se Português estruturado

45 Estrutura de Controle – Tomada de Decisões Problema: ▫Ler dois valores numéricos, efetuar a adição e apresentar o seu resultado caso o valor somado seja maior que 10. Descrição Narrativa: ▫1 – Ler dois valores respectivamente nas variáveis A e B ▫2 – efetuar a soma dos valores das variáveis A e B implicando o valor da soma na variável X ▫3 – Verificar se o valor de X é maior que 10 ▫3.1 – Se valor de X for maior que 10, apresentar o valor de X em tela. X > 10 SN Início A, B X = A + B X Fim

46 Estrutura de Controle – Tomada de Decisões Português estruturado programa SOMA_NUMEROS var X : inteiro A : inteiro B : inteiro início leia A, B X = A + B se ( X > 10 ) então escreva X fim_se fim

47 Técnicas Básicas de Programação Problema: ▫Ler dois valores numéricos, efetuar a adição e caso o valor somado seja menor ou igual a 10 apresentar o resultado somando-se 5 e se o resultado for maior que 10, apresentar o resultado subtraído 7. Pede-se: ▫Descrição Narrativa ▫Diagrama de Bloco ▫Português Estruturado

48 Estrutura de Controle – Tomada de Decisões Desvio condicional Composto. ▫Ajuda a tomada de decisões ▫Verifica uma condição. Se for verdadeira, serão executadas todas as instruções que estiverem entre a instrução Se... Então. Se for falsa, serão executadas todas as instruções que estiverem entre senão... Fim_se ▫Trabalharemos com uma instrução na codificação em português estruturado a seguir:  se... então... fim_se

49 Estrutura de Controle – Tomada de Decisões Diagrama de Bloco. Condição Verdadeira Condição SN Condição Falsa

50 Estrutura de Controle – Tomada de Decisões Português Estruturado se ( ) então senão Fim_se

51 Estrutura de Controle – Tomada de Decisões Problema: Reajuste salarial, obter o salário e calcular o reajuste do salário sendo: ▫Salário < que 500, reajuste será de 15%; ▫Salário >= a 500 mais <= 1000, reajuste será de 10%; ▫Salário > 1000, reajuste será de 5%. Pede-se: ▫Algoritmo ▫Diagrama de Bloco ▫Português Estruturado

52 Estrutura de Controle – Tomada de Decisões Desvio condicional Encadeado. ▫Quando é necessário se estabelecer verificações de condições sucessivas, para determinada ação, e que ocorra em um conjunto anterior de instruções ou condições para que se estabeleça satisfatória a proposição.

53 53 Diagrama de blocos Instrução executada quando a Condição 1 Verdadeira Condição 1 SN Condição 2 SN Instrução executada quando a Condição 1 for Falsa e a Condição 2 Verdadeira Instrução executada quando a Condição 1 for Falsa e a Condição 2 Falsa Estrutura de Controle – Tomada de Decisões

54 54 Português estruturado se ( ) então senão se ( ) então senão fim_se Estrutura de Controle – Tomada de Decisões

55 55 Reajuste salarial, obter o salário e calcular o reajuste do salário sendo: ▫Salário < que 500, reajuste será de 15%; ▫Salário >= a 500 mais <= 1000, reajuste será de 10%; ▫Salário > 1000, reajuste será de 5%. Descrição Narrativa ▫1 – Definir uma variável para o salário reajustado como NOVO_SALARIO; ▫2 – Ler um valor para a variável SALARIO; ▫3 – Verificar se o valor de SALARIO < 500, se sim reajustar em 15%; ▫4 – Verificar se o valor de SALARIO <= 1000, se sim reajustar em 10% ▫5 – Verificar se o valor de SALARIO > 1000, se sim reajustar em 5%; ▫6 – Apresentar o valor reajustado implicando na variável NOVO_SALARIO. Estrutura de Controle – Tomada de Decisões

56 56 Diagrama de blocos NOVO_SALARIO = SALARIO * 1.15 SALARIO < 500 SALARIO <= 1000 SN NOVO_SALARIO = SALARIO * 1.10NOVO_SALARIO = SALARIO * 1.05 Início SALARIO SN NOVO_SALARIO Fim Estrutura de Controle – Tomada de Decisões

57 57 Operador Lógico (para tabela verdade) ▫Pode ser que necessitemos utilizar em algum momento, com o relacionamento de duas ou mais condições ao mesmo tempo na mesma condição SE.  Neste caso aplicaremos os seguintes operadores lógicos. .e. (and, &&) .ou. (or, ||) .não. (not, !)  Em português estruturados está sempre entre os pontos (.). Estrutura de Controle – Tomada de Decisões

58 58 Operador Lógico.e. (and, &&) CONDIÇÃO 1 RESULTADO Falso VerdadeFalso VerdadeFalso Verdade Estrutura de Controle – Tomada de Decisões

59 59 Operador Lógico.e. (and, &&) ▫Diagrama de Blocos Instrução executada se ambas as condições forem verdadeiras Condição 1.e. Condição 2 S N Estrutura de Controle – Tomada de Decisões

60 60 Operador Lógico.e. (and, &&) ▫Português estruturado se ( ).e. ( ) então fim_se Estrutura de Controle – Tomada de Decisões

61 61 Operador Lógico.ou. (or, ||) CONDIÇÃO 1 RESULTADO Falso VerdadeFalsoVerdade FalsoVerdade Técnicas Básicas de Programação

62 62 Operador Lógico.ou. (or, ||) ▫Diagrama de Blocos Instrução executada se pelo menos uma das condição for verdadeira Condição 1.ou. Condição 2 S N Estrutura de Controle – Tomada de Decisões

63 63 Operador Lógico.ou. (or, ||) ▫Português estruturado se ( ).ou. ( ) então fim_se Estrutura de Controle – Tomada de Decisões

64 64 Operador Lógico.não. (not, !) CONDIÇÃO 1RESULTADO FalsoVerdade Falso Estrutura de Controle – Tomada de Decisões

65 65 Operador Lógico.não. (not, !) ▫Diagrama de Blocos Instrução executada se condição for falsa.não. Condição S N Estrutura de Controle – Tomada de Decisões

66 66 Operador Lógico.não. (not, !) ▫Português estruturado se.não. ( ) então fim_se Estrutura de Controle – Tomada de Decisões

67 67 Exercício: O índice de Massa Corporal (IMC) é uma fórmula que indica se um adulto está acima do peso, se está obeso ou abaixo do peso ideal considerado saudável. A fórmula para calcular o Índice de Massa Corporal é: IMC = peso / (altura) 2. Desenvolva a descrição narrativa, Diagrama de blocos e codificação em português estruturado, para o seguinte problema: ▫ Ler dois valores, peso e altura em seguida calcular o índice de massa corporal (IMC) e apresentar em tela se a pessoa está abaixo do peso, no peso normal, acima do peso ou obeso obedecendo a tabela da Organização Mundial de Saúde. CondiçãoIMC em adultos Abaixo do pesoAbaixo de 18.5 No peso normalEntre 18.6 e 25 Acima do pesoEntre 25.1 e 30 ObesoAcima de 30 Tabela da Organização Mundial de Saúde Estrutura de Controle – Tomada de Decisões

68 68 Desenvolva um programa que leia cinco vezes um determinado valor e que este valor seja multiplicado por três e apresentado o resultado em tela. Como solucionar este problema ? Estrutura de Controle de Laços

69 69 Repetição do tipo: Teste lógico no início do Looping. ▫Caracteriza-se por uma estrutura que efetua um teste lógico no início do looping, verificando se é permitido executar o trecho de instruções subordinado ao looping. ▫A estrutura e denominada de enquanto.  enquanto... faça.... fim_enquanto Estrutura de Controle de Laços

70 70 Diagrama de blocos Instrução executada Enquanto a condição é verdadeira Condição S N Estrutura de Controle de Laços

71 71 Português estruturado enquanto ( ) faça fim_enquanto Estrutura de Controle de Laços

72 72 Resolvendo o nosso problema anterior: ▫Descrição narrativa:  1 – Criar uma variável para servir como contador com o valor inicial igual a um;  2 – Enquanto o valor do contador for menor ou igual a 5, processar os passos 3, 4 e 5;  3 – Ler um valor para a variável X;  4 – Efetuar a multiplicação da variável X por 3 implicando na variável R;  5 – Apresentar o valor calculado contido na variável R;  6 – Quando o contador for maior que 5, encerrar o processamento. Estrutura de Controle de Laços

73 73 Diagrama de blocos Cont <= 1 R = X * 3 Cont = Cont + 1 Início S N R Cont = 1 X Cont ++ Estrutura de Controle de Laços

74 74 Português estruturado programa LOOPING_1A var X, R, CONT : inteiro início CONT = 1 enquanto ( CONT < = 5 ) faça leia X R = X * 3 escreva R CONT = CONT + 1 /// ou CONT ++ fim_enquanto fim Estrutura de Controle de Laços

75 75 Exercício: ▫Desenvolva um programa que leia cinco vezes um determinado valor e que este valor seja multiplicado por três e apresentado o resultado em tela. ▫Alterar o problema sendo que só sairá do looping quando o usuário queira, efetuando uma pergunta em tela se deseja continuar ? Estrutura de Controle de Laços

76 76 Repetição do tipo: Teste lógico no fim do Looping. ▫Caracteriza-se por uma estrutura que efetua um teste lógico no fim do looping ▫A estrutura e denominada de repita.  repita... até_que Estrutura de Controle de Laços

77 77 Resolvendo o nosso problema anterior: ▫Descrição narrativa:  1 – Criar uma variável contador;  2 – Ler um valor para a variável X;  3 – Efetuar a multiplicação da variável X por 3 implicando na variável R;  4 – Apresentar o valor calculado contido na variável R;  5 – Acrescentar um ao contador;  6 – Repetir os passos 2, 3, 4 e 5 até que o contador seja maior que 5. Estrutura de Controle de Laços

78 78 Diagrama de blocos R = X * 3 Cont = Cont + 1 Início S N R Fim Cont = 1 X Cont ++ Cont > 5 Estrutura de Controle de Laços

79 79 Português estruturado programa LOOPING_2A var X, R, CONT : inteiro início CONT = 1 repita leia X R = X * 3 escreva R CONT = CONT + 1 /// ou CONT ++ até_que ( CONT > 5 ) fim Estrutura de Controle de Laços

80 80 Repetição do Tipo: Variável de controle. ▫Possibilita o uso de contadores finitos, sem o uso das condições anteriores. ▫Os loopings que possuem um número finito de execução poderão ser executados através de estrutura de laços contados para, sendo conseguida com a utilização do conjunto de instruções: para... de... até... faça... fim_para Estrutura de Controle de Laços

81 81 Diagrama de blocos Variável = Início, Fim, Incremento Instruções Estrutura de Controle de Laços

82 82 Português estruturado para de até passo fim_para Estrutura de Controle de Laços

83 83 Exemplo: ▫Pedir a leitura de um valor para a variável X, multiplicar este valor por 3 implicando-o à variável de resposta R e apresentar o valor obtido, repetindo esta seqüência por cinco vezes. Estrutura de Controle de Laços

84 84 Descrição narrativa: ▫1 – Definir um contador variando de 1 a 5; ▫2 – Ler um valor para a variável X; ▫3 – Efetuar a multiplicação do valor de X por 3, implicando o resultado na variável R; ▫4 – Apresentar o valor calculado contido na variável R; ▫5 – Repetir os passos 2, 3, 4 e 5 até que o contador seja encerrado. Estrutura de Controle de Laços

85 85 Diagrama de blocos R = X * 3 Início R Fim X Cont = 1, 5, 1 Estrutura de Controle de Laços

86 86 Português estruturado programa LOOPING_2A var X, R, CONT : inteiro início para CONT de 1 até 5 passo 1 leia X R = X * 3 escreva R fim_para fim Estrutura de Controle de Laços

87 87 Após desenvolver um algoritmo ele deverá sempre ser testado. Este teste é chamado de TESTE DE MESA, que significa, seguir as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correto ou não. Exercício

88 88 programa LOOPING_2A var X, R, CONT : inteiro início para CONT de 1 até 5 passo 1 leia X R = X * 3 escreva R fim_para fim PassoCONT XR 1133 * 3 = 9 2222 * 3 = 6 3311 * 3 = 3 4499 * 3 = 27 5544 * 3 = 12 Exercício

89 Introdução a C A linguagem “C” foi criada na década de 70 por Dennis M. Ritchie a partir de uma outra linguagem: o “B”, criada por Ken Thompson. O “B”, por sua vez, veio da linguagem BCPL, inventada por Martin Richards. A linguagem “C” tornou-se muito importante e popular por possuir tanto características de “alto nível” quanto de “baixo nível” sendo considerada uma linguagem de programação de “nível médio “. Outra característica muito importante é ser portável, isto é, poder ser usada em várias máquinas de portes e sistemas operacionais diferentes. Alto nível : comandos com sintaxe próxima a linguagem humana e tipos de dados inteiro, real, caracter e string. Exemplo de linguagens de alto nível: Pacal, Delphi, Basic, Visual Basic, Clipper, etc. Baixo nível: manipulação de bits, bytes e endereços. Exemplo: Assembler. Nível médio: combina elementos das linguagens de alto nível com a funcionalidade das de baixo nível. Exemplo: Linguagem “C”.

90 Um programa em “C” consiste em uma ou mais funções, sendo que a única função que necessariamente precisa estar presente é a denominada main() (principal), que é a primeira função a ser executada quando o programa se inicia. As outras funções podem proceder ou suceder a função main(). Estrutura básica de um programa em “C”

91 main(){ // corpo da função – bloco de comandos } Os parênteses após a palavra “main()”, indica que é uma função. O nome das demais funções desenvolvidas em C, pode ser qualquer um, menos “main”. Estrutura básica de um programa em “C”

92 A linguagem “C” é “Case Sensitive”, isto é, maiúsculas e minúsculas fazem diferença. Se for declarada uma variável com o nome soma ela será diferente de Soma, SOMA, SoMa ou sOmA. Da mesma forma que os comandos em “C” devem ser sempre escritos com letras minúsculas. Estrutura básica de um programa em “C”

93 Os comentários e as observações do programa podem aparecer em qualquer lugar desde que colocados entre os delimitadores /* comentário */ ou // comentário. Em “C” as instruções são sempre encerradas por “; “. Estrutura básica de um programa em “C”

94 Tipos Básicos de dados Estrutura básica de um programa em “C” TipoBitByteEscala char81-128 a 127 int162-32768 a 32767 float3243.4E-38 a 3.4E+38 double6481.7E-308 a 1.7E+308 void00sem valor

95 Modificadores de tipo ▫ Exceto o void, os tipos de dados básicos podem ter vários modificadores precedendo-os. Um modificador é usado para alterar o significado de um tipo básico para adaptá-lo mais precisamente às necessidades de diversas situações: signed (com sinal) unsigned (sem sinal) long (máxima precisão) short (menor precisão) Estrutura básica de um programa em “C”

96 Modificadores de tipo Estrutura básica de um programa em “C” TIPOTAM.(bytes)ESCALA Char1-127 a 127 Unsigned char10 a 255 Signed char1-127 a 127 Int2-32767 a 32767 Unsigned int20 a 65535 Signed int2-32767 a 32767 Short int2-32767 a 32767 Unsigned short int10 a 65535 Signed short int1-32767 a 32767 Long int4-2147483647 a 2147483647 Signed long int4-4294967295 a 4294967295 Unsigned long int40 a 4294967295 Float43.4 *(10 -38 ) a 3.4 * (10 +38 ) Double81.7*(10 -308 ) a 1.7*(10 +308 ) Long double163.4*(10 -4983 ) a 3.4*(10 +4983 )

97 IDENTIFICADORES ▫ São usados para dar nomes às variáveis, constantes, tipos e ou funções. Para a criação desses identificadores deverá ser consideradas as informações a seguir:  Podem ser formados por letras, números ou sublinhado(_);  Tem que começar por letra ou sublinhado;  Letras maiúsculas e minúsculas são caracteres distintos;  Não podem ser palavras reservadas;  Podem conter qualquer tamanho porém somente os 31primeiros caracteres são significativos. Estrutura básica de um programa em “C”

98 VARIÁVEL ▫ É uma posição de memória com um nome, que é usada para armazenar uma informação de um tipo específico que pode ser modificada pelo programa. Forma Geral : tipo lista_de variáveis; Exemplo:int a,b,d; float x,y; unsigened int w; Estrutura básica de um programa em “C”

99 Inicialização de variáveis: ▫ As variáveis podem ser inicializadas no mesmo momento em que elas são declaradas, colocando um sinal de igual e a informação desejada. Exemplo: char op=‘S’; /* as informações do tipo caracter são envolvidas por aspas simples */ int primeiro=0; char mensagem[20]=”Bom Dia !!”; /* as strings são envolvidas por aspas */ Estrutura básica de um programa em “C”

100 MODIFICADORES DE TIPO DE ACESSO Constantes : Não podem ser modificadas pelo programa. Forma Geral: const tipo identificador; Exemplo: const int max=10; const float taxa1=0.7,taxa2=0.5; Estrutura básica de um programa em “C”

101 Bibliotecas de funções.h Existem bibliotecas com funções que auxiliam a manipulação dos comando de entrada e saia e também de manipulação de telas. Elas são descritas no início do programa C: #include

102 FUNÇÕES DE TELA ▫ Biblioteca #include Nela encontramos as seguintes funções mais usadas:  clrscr() - limpar a tela; Linux : printf("\033[2J");  clreol() - limpa a linha;  gotoxy(coluna,linha) - posiciona o cursor;  window(coluna incial,linha inicial,coluna final, linha final) - cria uma janela na tela;  textcolor(cor) - seleciona a cor dos caracteres de texto;  textbackground(cor) – seleciona a cor do fundo da tela; Bibliotecas de funções.h

103 TABELA DE CORES: Bibliotecas de funções.h 0PRETO 1AZUL 2VERDE 3CIANO 4VERMELHA 5MAGENTA 6MARROM 7CINZA CLARO 8CINZA ESCURO 9AZUL CLARO 10VERDE CLARO 11CIANO CLARO 12ALARANJADO 13MAGENTA CLARO 14AMARELO 15BRANCO

104 FUNÇÕES DE ENTRADA E SAÍDA DE DADOS ▫ Biblioteca #include getchar() - entrada de um caracter individual; getch() - entrada de um caracter. O caracter não é exibido na tela não é necessário teclar ; getche() - entrada de um caracter. O caracter é exibido na tela não é necessário teclar ; putchar - exibe um caracter na tela; gets() - entrada de string; puts() - saída de string; scanf() - entrada de dados formatada com string de controle de acordo com o tipo da variável; printf() - saída de dados formatada com string de controle de acordo com o tipo da variável; cprintf() - saída de dados formatada colorida com string de controle de acordo com o tipo da variável; Bibliotecas de funções.h

105 CONSTANTES BARRA INVERTIDA São utilizadas para controlar a exibição de dados na tela e na impressora. CÓDIGOSIGNIFICADO \nnova linha (line feed) \bretrocesso (backspace) \ttabulação horizontal \vtabulação vertical \aalerta(beep) \”para exibir aspas \\para exibir barra invertida \fsalto de folha (form fee) \rretorna ao início da linha (return) \0nulo Estrutura básica de um programa em “C”

106 COMANDOS DE FORMATO ▫ São constantes que definem o tipo e o formato dos dados a serem exibidos. Comando Formato %ccaracter %dinteiros decimais com sinal %iinteiros decimais com sinal %fdecimais com ponto flutuante %sstring %enotação científica %ooctal %xhexadecimal %linteiro longo %lfdouble %udecimal sem sinal Estrutura básica de um programa em “C”

107 Utilização das funções C. A função printf( ) ▫ A função printf serve para exibir uma informação no vídeo ou na impressora e possui a seguinte estrutura. Forma Geral: printf(“expressão de controle”, lista de argumentos); Exemplo1: int i=4; float j=5.5; printf(“%d\n”, i); printf(“Este numero e inteiro: %d e este e real: %f”, i, j); Resultado: 4 Este número é inteiro: 4 e este é real: 5.5

108 A Função scanf() ▫ A função scanf() é outra das funções de E/S implementadas em todos os compiladores C. Ela é o complemento de printf() e nos permite ler dados formatados da entrada padrão (teclado). Forma Geral: scanf(“expressão de controle”, lista de argumentos) Utilização das funções C.

109 A lista de argumentos deve consistir nos endereços das variáveis. C oferece um operador para tipos básicos chamado operador de endereço e referenciado pelo símbolo & que retorna o endereço do operando. Na função scanf() cada nome de variável deve ser precedida por um ampersand(&) ou E- comercial. Somente strings não devem conter & na frente. Utilização das funções C.

110 Exemplo1: O programa a seguir exibe a idade em dias de uma pessoa. # include void main() { int anos, dias; printf(“Digite sua idade em anos: “); scanf(“%d”,&anos); dias = anos*365; printf(“Sua idade em dias é %.d\n”,dias); getchar(); } Resultado: Digite sua idade em anos: 4 Sua idade em dias é 1460 Utilização das funções C.

111 Exercício: Calcula a média aritmética de duas notas de um aluno. #include void main() { float media,nota1,nota2; clrscr(); printf(“\t Digite a 1ª nota: “); scanf(“%f",&nota1); printf("\t Digite a 2ª nota: "); scanf("%f",&nota2); media=(nota1 + nota2)/2; printf(“\t A média é: %5.2f”, media); getch(); } Utilização das funções C.

112 112 Comandos em C Comandos de Seleção if (x>9) y=100; else y=200; if ((x == 2) && (x!=1)) { a=10; b=20; c=30; } else { a=1; b=c=0; } if((x == 2) && (x!=1)){ a=10; b=20; c=30; } else a=b=c=0;

113 113 Comando de Seleção Múltipla Comandos em C char ch; switch (ch){ case ‘1’ : printf(“Inclusão”); break; case ‘2’ : printf(“Consulta”); break; default : printf(“Fim”); } int num,a,b; switch (num) { case 1,2 : a=2*2; b=-1; break; case 3,4,5 : a=2*3; b=0; break; }

114 114 Comandos de Repetição – while - do Comandos em C while (ch!=’A’){ c=a+b; printf(“%d”,c); scanf(“%c”,&ch); } while ((a>0) || (b>0)){ c+=b; --a; --b; } do{ a++ printf(“%d”,a); } while (a<100); do{ scanf(“%f”,&a); scanf(“%d”,&b); } while ((a<=0) || (b<=0));

115 115 Comandos de Repetição - for Comandos em C for ( x=1;x<=100;x++ ) printf(“%d”,x); for (x=0,y=0;x<10;x++,y--) printf(“%d %d”,x,y); for (x=100;x!=65;x-=5) { z = x*x; printf(“O quadrado de %d e %d”,x,z); } for(x=0; ;x++) { printf(“%d”,x); if (x==10) break; }

116 116 Estrutura de Dados – Matriz ou Vetor Matrizes ou vetores (Tabelas em memória) são do tipo de dados que podem ser “Construídos” à medida que se fazem necessário. Ilustração de uma matriz ou vetor (1x5) 534879 notas[4] ou notas[1..4] Significa dizer que a variável notas na posição 0 ou 1 (a depender qual sintaxe utilize) valerá 5 notas[0] = 5, notas[1] = 3......... notas[4] = 9

117 117 Diagrama de blocos de uma matriz / vetor SOMA = SOMA + MD[i] Início Média Fim MD[i] i = 1, 8, 1 Estrutura de Dados – Matriz ou Vetor Somará um vetor chamado MD[1..8] MD[1] = 4.5 MD[2] = 6.5 MD[3] = 8.0 MD[4] = 3.5 MD[5] = 6.0 MD[6] = 7.0 MD[7] = 6.5 MD[8] = 6.0 SOMA = 0 Média =SOMA/8

118 118 Português estruturado programa Média var MD : conjunto[1..8] de real SOMA, Média : real i : inteiro início SOMA = 0 para i de 1 até 8 passo 1 leia MD[i] SOMA = SOMA + MD[i] fim_para Média = SOMA/8 escreva Média fim Estrutura de Dados – Matriz ou Vetor

119 119 STRING ▫Em linguagem “C” não existe o tipo string. A utilização desse tipo de variável se dá através da utilização de um cadeia de caracteres, isto é um vetor de caracteres terminados por um nulo (\0). Para implementar esse tipo de dado deve-se ter sempre um caracter a mais para armazenar o terminador nulo Para declarar um tipo string: char nome[11]; 012345678910 Paulo\0 Estrutura de Dados – Matriz ou Vetor

120 120 Para manipular as informações armazenadas em uma string podemos utilizar as funções string ou utilizamos as funções caracter, já que uma string é um vetor de caracteres. Estrutura de Dados – Matriz ou Vetor arquivo de cabeçalho para funções de string arquivo de cabeçalho para funções caracter

121 121 Algumas Funções de Manipulação de Strings usando a biblioteca Estrutura de Dados – Matriz ou Vetor FunçãoDescriçãoForma Geral strcpy()copia uma string em outra.strcpy (s1,s2); // copia o conteúdo de s2 em s1 e termina com nulo. strcmp()compara duas strings.x=strcmp(s1,s2); // x==0 se as strings forem iguais ou x!=0 se forem diferentes. strcat()junta o conteúdo de duas strings. strcat(s1,s2); // s1 irá conter o resultado da junção das 2 strings. strlen()fornece o tamanho de uma string. x=strlen(s1); // x vai conter o número de caracteres ocupados na string. strchr()verifica se um caracter pertence a string. x=strschr(s1,ch); // x !=0 se existir o caracter ou x==0 se não existir. strstr()verifica se uma string existe dentro da outra string. x=strstr(s1,s2); // x !=0 se s2 existir em s1 ou x==0 se não existir.

122 122 Algumas Funções de Manipulação de caracter usando a biblioteca Estrutura de Dados – Matriz ou Vetor FunçãoDescriçãoForma Geral isdigit()verifica se o caracter é um número de 0-9. isdigit(a); // !=0 é número; =0 não é número. isalpha()verifica se o caracter é uma letra isalpha(a); // !=0 é letra; =0 não é letra. isupper()verifica se um caracter está em maiúscula isupper(a); // !=0 é maiúscula =0 não é. ispunct()verifica se um caracter é pontuação. ispunct(a); // !=0 é pontuação; =0 não é. isspace()verifica se um caracter é espaço. isspace(a); // !=0 é espaço; =0 não é. toupper()transforma um caracter em letra maiúscula. a=toupper(a); // o conteúdo de a em maiúscula. tolower()transforma um caracter em letra minúscula. a=tolower(a); // o conteúdo de a em minúscula.

123 123 Uma matriz é um tipo de dado usado para representar uma certa quantidade de variáveis de valores homogêneos. Imagine o seguinte problema: ler a média final de 5 alunos e calcular a media geral. Você poderia declarar: Estrutura de Dados – Matriz ou Vetor

124 124 void main() { float notas[7],media=0; int i; for (i=0; i<7; i++) { pritf(“Digite a nota do aluno %d: “,i); scanf(“%f”, &notas[i]); media+=notas[i]; } media=media/8; printf(“A média Geral= %5.2f”,media); } Estrutura de Dados – Matriz ou Vetor

125 125 #include void main(){ char nome[20],op='S'; float va,rl; do { clrscr(); printf("\t\tAPLICACOES\n"); printf("\t Nome.....: "); gets(nome); printf("\t Valor....: "); scanf("%f",&va); if (va<=10000.00) rl=va*0.014-0.002*va; else rl=va*0.018-0.002*va; printf("\t Rendimento.. : %8.2f\n\n",rl); printf("Deseja Continuar %s ? ",nome); do { gotoxy(50,6); clreol(); scanf("%c",&op); op=toupper(op); } while ((op!='S') && (op!='N')); getchar(); } while (op=='S'); } Exemplos – usando Matriz ou Vetor

126 126 #include void main(){ int j,i,num[4][4]; clrscr(); for(j=0;j<4;++j){ for(i=0;i<4;++i){ num[j][i] = (j*4)+i+1; printf("%2.0d ",num[j][i]); } printf("\n"); } getchar(); } Exemplos – usando Matriz ou Vetor Matriz multidimensional: j / i 0123 01234 15678 29101112 313141516 Resultado: Agora efetue a soma da Diagonal principal da Matriz e apresente na tela.

127 127 Função Função é um seguimento independente do programa que executa uma tarefa específica. Todo o programa em “C” é formado por uma ou mais funções.

128 128 Função Forma Geral: tipo nomeDaFunção (lista de parâmetros){ corpo da função; } Toda função deverá ter seu protótipo declarado no início do programa, ou em um arquivo de cabeçalho.h

129 129 Função Em “C” podemos ter dois tipos de parâmetros: passagem de parâmetros por valor e passagem de parâmetros por referência. Na passagem de parâmetros por valor as informações dos parâmetros são copiadas para a função receptora. As alterações nesses parâmetros não tem nenhum efeito na função de origem da informação. Na passagem de parâmetros por referência, é enviado o endereço do parâmetro para a função receptora, dessa forma o endereço é usado para acessar as informações originais. Isto significa que qualquer alteração efetuada no parâmetro estará modificando o conteúdo original da informação enviada.

130 130 Função Passagem por Valor e Referência #include void calculo (int *a,int *b); float sqr (float num); void main(){ int num1=100,num2=200; float num,sq; calculo (&num1,&num2); printf("\n Os valore atuais de num1= %d e num2 = %d",num1,num2); printf ("\n\n\nEntre com um numero: "); scanf ("%f",&num); sq=sqr(num); printf ("\n\nO numero original e: %f\n",num); printf ("O seu quadrado vale: %f\n",sq); } void calculo (int *a, int *b){ *a = *a * 2; *b = *b - 50; } float sqr (float num){ num=num*num; return num; } Observe os resultados. Por referência Por Valor

131 131 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. “Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente a posição de uma outra variável na memória. Se uma variável contém o endereço de uma outra, então diz-se que a 1ª variável aponta para a segunda”.

132 132 Ponteiros 30 Variável X Ponteiro a Ponteiro ‘a’ aponta para o endereço da variável X Operadores Associados a Ponteiros ▫& - operador unário que devolve o endereço da memória do seu operando; ▫* - operador unário que devolve o conteúdo da variável localizada no endereço de memória do seu operando, que é uma variável ponteiro. Ponteiros também tem tipos. Quando declaramos um ponteiro nós informamos ao compilador para que tipo de variável o ponteiro está apontando. Forma Geral : tipo *identificador;

133 133 Ponteiros Exemplo: int *px,*py; Para atribuir valores as variáveis ponteiro e para acessar as informações usamos: *px=3; *py=5; Na declaração, o símbolo * indica o tipo apontado (o ponteiro) em outras situações indica o conteúdo da variável apontada. O ponteiro deve ser inicializado (apontado para algum lugar conhecido) antes de ser usado. Ponteiros são sempre inicializados com o valor 0 ou NULL então antes de usá-los devemos atribuir algum endereço válido a eles.

134 134 Ponteiros #include void main(){ int x=5,y=6; int *px,*py; px=&x; py=&y; printf(“px=%p, *px=%d, &px=%p\n”, px,*px,&px); printf(“py=%p, *py=%d, &py=%p\n”, py,*py,&py); } O resultado será: px=65488, * px=5, &px=65492 py=65490, * py=6, &py=65494 OBS: O formato %p no printf indica que vai ser exibido um endereço.

135 135 Ponteiros X Y 5 6 6548865490 pX pY 65488 65490 6549265494 Onde: px => retorna o endereço para o qual o ponteiro aponta; &px => retorna o endereço do ponteiro; *px => retorna o conteúdo da variável apontada.

136 136 Ponteiros Podemos fazer algumas operações aritméticas com ponteiros. A primeira, e mais simples, é a de igualar dois ponteiros p1=p2, assim p1 aponta para o mesmo lugar que p2. Se quisermos que a variável apontada por p1 tenha o mesmo conteúdo da variável apontada por p2 devemos fazer *p1=*p2. Outras operações com ponteiros também bastante usadas são o incremento e o decremento. Quando incrementamos um ponteiro ele passa a apontar para o próximo valor do mesmo tipo para o qual o ponteiro aponta (avança um número de bytes na memória) como por exemplo: int *p; p++; // avança dois bytes na memória p--; // decrementa dois bytes na memória Para incrementar o conteúdo da variável apontada pelo ponteiro p temos: *p++; Outras operações podem ser efetuadas com ponteiros como a adição e subtração de inteiros com ponteiros, bem como os operadores de (==, !=, >, =,<=). Exemplos: p=p+15; // desloca o ponteiro 15 posições; *(p+15); // utiliza o conteúdo do ponteiro 15 posições adiante; p1>p2; // compara qual dos dois ponteiros está mais adiante na memória. Existem operações que não podem ser efetuadas com ponteiros, como por exemplo dividir ou multiplicar ponteiros

137 137 Ponteiros #include void main(){ int num,valor; int *p; num=70; p=&num; // recebe o endereço de num valor=*p; // valor recebe o mesmo conteúdo de num printf(“\n\n %d \n”,valor); printf(“Endereço para onde o ponteiro aponta: %p \n”,p); printf(“Valor da variável apontada: %d \n”,*p); *p=100; // modifica o conteúdo da variável num indiretamente printf(“Valor da variável modificada %d \n”,*p); }

138 138 Ponteiros e Matrizes Uma das aplicações mais importantes com ponteiros e a varredura seqüencial de uma matriz, isto é, quando temos que percorrer todos os elementos de uma matriz de uma forma seqüencial, podemos usar um ponteiro incrementando-o até o final da matriz.

139 139 Ponteiros e Matrizes Em uma matriz o próprio nome da matriz é o endereço do primeiro elemento da matriz. Se x é uma matriz unidimensional, então, o endereço do primeiro elemento da matriz pode ser expresso &x[0] ou simplesmente x. Além disso o endereço do segundo elemento da matriz pode ser expresso por &x[1] ou (x + 1), e assim por diante até o enésimo elemento da matriz &x[ i ] ou (x + i). Podemos então ter 2 modos diferentes de acessar os elementos de uma matriz

140 140 Ponteiros e Matrizes Na expressão (x + i) x representa o endereço e i representa uma quantidade inteira que significa i elementos depois do primeiro (deslocamento). Como &x[ i ] e (x + i) representam o endereço do inésimo elemento de x, x[ i ] e *(x + i) representam o conteúdo desse endereço.

141 141 Ponteiros e Matrizes #include void main(){ int x[10], i; clrscr(); for (i=0;i<=9;i++){ scanf(“%d”,&x[i]); printf(“\n i= %d x[i]= %d *(x+i) = %d &x[i] = %p x+1 = %p”,i, x[i], *(x+i), &x[i], x+i); } getchar(); } Exemplo: Resultado i = 0 x[ i ]= 10 *(x+i) = 10 &x[ i ] = 72 x + i=72 i = 1 x[ i ]= 11 *(x+i) = 11 &x[ i ] = 74 x + i=74 i = 2 x[ i ]= 12 *(x+i) = 12 &x[ i ] = 76 x + i=76 i = 3 x[ i ]= 13 *(x+i) = 13 &x[ i ] = 78 x + i=78 i = 4 x[ i ]= 14 *(x+i) = 14 &x[ i ] = 7A x + i=7A

142 142 Ponteiros e Matrizes #include void main() { int vet1[10],vet2[10],x; clrscr(); for(x=0;x<10;x++) { scanf("%d",(vet1+x));//não prec. & *(vet2+x)=pow(*(vet1+x),2); printf("%d\n",*(vet2+x)); } getchar(); } Exercício: ▫Desenvolver um programa que dado um vetor de 10 elementos numéricos inteiros calcular um outro vetor que deverá conter os elementos do 1º vetor elevados ao quadrado. Usar aritmética de ponteiros. void main() { int vet1[10],vet2[10],x,*pt; clrscr(); pt=vet1; // não precisa & porque o //Nome de uma matriz é um ponteiro for(x=0;x<10;x++) { scanf("%d",(pt+x)); *(vet2+x) = pow (*(pt+x),2); printf("%d\n",*(vet2+x);} getchar(); }

143 143 Estruturas, Uniões, Tipos Definidos e Enumerações A Linguagem “C” permite que se crie vários tipos diferentes de dados que possam ser agrupados de formas definidas. Essas formas são um tipo de dado definido pelo programador e são conhecidas como: ▫Estruturas e Uniões.

144 144 Estruturas, Uniões, Tipos Definidos e Enumerações ESTRUTURA Uma estrutura é uma coleção de tipos diferentes referenciadas por um nome, isto é, a estrutura é uma forma de se ter informações agrupadas. Forma Geral: struct nome { tipo nome_da_variável; tipo nome_da_variável;  elem. da estrutura.... } variáveis da estrutura; OBS: A struct é um tipo de dado, não existe um espaço reservado na memória para ela até que seja declarada uma variável para armazenar o tipo definido.

145 145 Estruturas, Uniões, Tipos Definidos e Enumerações Exemplo: struct veículo { char modelo[25]; char marca[15]; float custo; }; veículo carro; // onde vaículo e o tipo e carro a variável Outra forma de declarar uma estrutura pode ser: struct veículo { char modelo[25]; char marca[15]; float custo; } carro; struct xy { int x; float y; } a,b; // Duas variáveis com // mesmo tipo de struct

146 146 Estruturas, Uniões, Tipos Definidos e Enumerações Para referenciar cada elemento da estrutura utiliza-se o operador ponto. Forma Geral: nome_da_variável  nome_do_elemento; ▫Exemplo:- a.x =10; b.x =5; a.y =2.5; b.y = 0.5; gets(carro.modelo); scanf(“%f”,&carro.custo);

147 147 Estruturas, Uniões, Tipos Definidos e Enumerações É possível também ter-se uma matriz de estruturas. Exemplos: struct veículo { char modelo[20]; char marca[15]; float custo; } carro[100]; /* isto cria 100 conjuntos de variáveis que estão organizadas com os elementos acima */. Para referenciar cada elemento da estrutura utiliza-se: float aux; gets(carro[0].marca); gets(carro[0].modelo); scanf(“%f”, &aux);} carro[x].custo = aux;.... Para simplificar esta estrutura poderíamos ter: float aux; for (x=0;x<100;x++){ gets(carro[x].marca); gets(carro[x].modelo); scanf(“%f”, &aux);} carro[x].custo = aux;

148 148 Exercício Elaborar um programa que contenha uma estrutura que armazena o número da conta e o saldo de 5 clientes. O programa calcula o saldo médio dos 5 clientes e exibe na tela quais os clientes que possuem saldo acima ou igual a média

149 149 Solução #include void main(){ struct cliente{ char conta[20]; float saldo; } cli[5]; float saldo_medio=0,aux; int x; for (x=0;x<5;x++){ clrscr(); printf("\t\t\t CONTROLE BANCARIO \n"); printf("\t Nr da Conta.........: ");gets(cli[x].conta); printf("\t Saldo..............: ");scanf("%f",&aux); cli[x].saldo=aux; saldo_medio += cli[x].saldo; getchar(); } saldo_medio=saldo_medio/5; clrscr(); printf("\t\t CLIENTES COM SALDO ACIMA DA MEDIA \n\n\n"); printf("\t Nr da conta \t Saldo \n\n"); for (x=0;x<5;x++){ if (cli[x].saldo >=saldo_medio) printf("\t %s \t\t %8.2f \n", cli[x].conta,cli[x].saldo); } getchar(); }

150 150 Exercício Vamos supor que várias pedras do jogo de xadrez estão no tabuleiro. Para facilitar a indicação das peças, vamos convencionar: ▫1 – peões 2 – cavalos ▫3 – torres 4 – bispos ▫5 – reis 6 – rainhas ▫0 – ausência de peças 13054021 10100100 00001060 10011001 01040010 00310011 10660010 10501106 a)Construa um programa que determine a soma total entre peões e bispos e a quantidade de posições com ausência de peças; b) Escreva outro programa que determine qual a quantidade de cada tipo de peça no tabuleiro. O tabuleiro

151 151 Solução #include void main(){ int tabuleiro[8][8] = { {1,3,0,5,4,0,2,1}, {1,0,1,0,0,1,0,0}, {0,0,0,0,1,0,6,0}, {1,0,0,1,1,0,0,1}, {0,1,0,4,0,0,1,0}, {0,0,3,1,0,0,1,1}, {1,0,6,6,0,0,1,0}, {1,0,5,0,1,1,0,6} }; int i,j; int branco=0, peao=0, cavalo=0, torre=0, bispo=0, rei=0, rainha=0; printf("\tApresentação do tabuleiro\n"); for (i=0;i<8;i++){ for (j=0;j<8;j++){ printf("%2.0d",tabuleiro[i][j]); } printf("\n"); } // Continua …..

152 152 Solução --- Continuação ---- for (i=0;i<8;i++){ for (j=0;j<8;j++){ switch (tabuleiro[i][j]){ case 0: branco++; break; case 1: peao++; break; case 2: cavalo++; break; case 3: torre++; break; case 4: bispo++; break; case 5: rei++; break; case 6: rainha++; break; } printf("\n"); printf("Soma de Peoes ou bispos e brancos =%d\n",(peao + bispo + branco)); printf("Peoes =%d, cavalos=%d, torres=%d, bispos=%d, reis=%d, rainhas=%d, branco=%d",peao, cavalo, torre, bispo, rei, rainha, branco); }

153 153 Arquivos ARQUIVO : É um conjunto de registros logicamente organizados armazenados em um dispositivo de memória secundária (disco rígido, disquetes, fitas magnéticas, cd, etc), onde cada registro compreende um conjunto de informações denominadas campos. Em um arquivo é possível armazenar um volume grande de dados. Arquivo Registro Campo

154 154 Arquivos ARQUIVO : É um conjunto de registros logicamente organizados armazenados em um dispositivo de memória secundária (disco rígido, disquetes, fitas magnéticas, cd, etc), onde cada registro compreende um conjunto de informações denominadas campos. Em um arquivo é possível armazenar um volume grande de dados. Arquivo Registro Campo

155 155 Acesso a disco “Linguagem C” divide as categorias de acesso a disco em dois grupos. ▫Alto nível, ou leitura e gravação bufferizada ▫Baixo nível, ou leitura e gravação não bufferizada. Iremos estudar a categoria do grupo de alto nível por possuir algumas vantagens sobre a de baixo nível. “facilidade para ler e gravar qualquer tipo de dado e a portabilidade”

156 156 É possível classificar os arquivos conforme a forma como eles são abertos: ▫Modo texto ▫Modo binário Um arquivo aberto em modo texto é interpretado em “C” como sendo uma seqüência de caracteres agrupados em linhas que devem ser separadas por um caracter de nova linha, as informações numéricas também são armazenadas em cadeias de caracteres, enquanto que, no modo binário tudo é muito mais simples. ▫Não há necessidade de nenhuma conversão de tipos. Para os tipos numéricos na forma binária eles são armazenados como estão na memória, nem mesmo a indicação de final de arquivo é necessária pois acaba sendo interpretada automaticamente. Sendo assim estaremos utilizando leitura e gravação em alto nível com modo de acesso binário Acesso a disco

157 157 OPERAÇÕES BÁSICAS COM ARQUIVO Abrir Fechar Apagar Copiar Renomear

158 158 ABRIR O ARQUIVO: Para podermos utilizar as informações contidas no arquivo ou para guardá-las nesse arquivo devemos primeiramente abrir o arquivo: ▫É necessária a declaração de uma estrutura do tipo FILE que receberá um ponteiro para o arquivo que está sendo aberto. Para que o S.O. possa abrir o arquivo três informações devem ser fornecidas: o nome do arquivo, o tipo de abertura (se o arquivo está sendo lido ou gravado) e onde guardar as informações sobre o arquivo. ▫Usando a função fopen(). ▫A estrutura FILE contêm informações sobre o arquivo tais como: seu tamanho atual, a localização de seus buffers de dados, se o arquivo está sendo lido ou gravado, etc. OPERAÇÕES BÁSICAS COM ARQUIVO

159 159 OPERAÇÕES BÁSICAS COM ARQUIVO Programa em “C” S.O. Disco Nome do arquivo e tipo de abertura Ponteiro para estrutura FILE MODOSIGNIFICADO r Abre um arquivo texto para leitura. O arquivo deve existir. w Cria um arquivo texto para escrita. Se o arquivo exitir será recriado por cima caso não exista será criado. a Abre um arquivo texto para gravação.Se o arquivo existir os dados serão anexados no final do arquivo se não existir será criado um novo. r+ Abrir um arquivo texto para leitura e gravação. O arquivo tem que existir. w+ Abre um arquivo texto para leitura e gravação. Se o arquivo existir será recriado por cima. Se não existir será criado. a+ Abre um arquivo texto para atualização e para adicionar dados no fim do arquivo se ele existir se não cria-se um novo arquivo rb Abre um arquivo binário para leitura. O arquivo deve existir. wb Cria um arquivo binário para escrita. Se o arquivo exitir será recriado por cima caso não exista será criado. ab Abre um arquivo binário para gravação.Se o arquivo existir os dados serão anexados no final do arquivo se não existir será criado um novo. rb+ Abre um arquivo binário para leitura e gravação. O arquivo deve existir e pode ser atualizado. wb+ Abrir um arquivo binário para leitura e gravação. Se o arquivo existir ele será destruído e reinicializado. Se não existir será criado. ab+ Abrir um arquivo binário para atualização e para adicionar dados ao fim do arquivo existente ou um novo arquivo será criado.

160 160 Exemplo.: #include void main(){ struct aluno { char ra[9]; char nome[20]; }teste; FILE *ARQ; int x; long N; gets(teste.ra); gets(teste.nome); ARQ=fopen ("curso.dat","ab+"); fseek(ARQ,sizeof(teste),SEEK_END); N=(ftell(ARQ)/sizeof(teste)-1); fseek(ARQ,N*sizeof(teste),SEEK_CUR); fwrite(&teste,sizeof(teste),1,ARQ); fclose(ARQ); } FECHAR ARQUIVO: Todo arquivo aberto deverá ser fechado para garantir a integridade dos dados armazenados, caso isso não ocorra poderá haver perda de informações. ▫ fclose(). OPERAÇÕES BÁSICAS COM ARQUIVO A função ftell() retorna um número inteiro longo que representa o número de bytes do começo do arquivo até a posição atual.

161 161 OPERAÇÕES BÁSICAS COM ARQUIVO APAGAR ARQUIVO: Deleta um arquivo existente. Todo arquivo antes de ser apagado deve ser fechado. Forma Geral: remove(nome físico do arquivo); RENOMEAR ARQUIVO: Permite mudar o nome do arquivo existente para um outro nome diferente. Antes de renomear o arquivo deve ser fechado. Forma Geral: rename(nome físico do arquivo,novo nome físico do arquivo); onde: Nome dado ao arquivo de dados e o novo nome que será dado

162 162 OPERAÇÕES BÁSICAS COM ARQUIVO LER REGISTRO DO ARQUIVO: quando lemos um registro de um arquivo estamos transferindo os dados do registro do arquivo, armazenados em memória secundária, para a memória principal do computador (memória RAM). Para isto utilizamos a seguinte instrução: Forma Geral: fread(&estrutura,sizeof(estrutura),1,ponteiro); Onde: &estrutura - é o endereço na memória onde os dados serão lidos; sizeof(estrutura) – operador que retorna o tamanho da estrutura; 1: quantidade de estruturas a ser lida (normalmente 1); ponteiro: o nome do ponteiro da estrutura FILE.

163 163 OPERAÇÕES BÁSICAS COM ARQUIVO ESCREVER UM REGISTRO NO ARQUIVO (GRAVAR) : quando escrevemos (gravamos) um registro num arquivo, estamos transferindo os dados do registro, armazenados em memória principal, para a memória secundária do computador (disquete, disco rígido, CD, etc). Utilizamos a seguinte instrução: Forma Geral: fwrite(&estrutura,sizeof(estrutura),1,ponteiro); Onde:&estrutura-é o endereço na memória onde os dados serão armazenados; sizeof(estrutura) – operador que retorna o tamanho da estrutura; 1: quantidade de estruturas a ser gravada (normalmente 1); ponteiro: o nome do ponteiro da estrutura FILE.

164 164 ORGANIZAÇÃO DE ARQUIVOS Existem duas formas diferentes de acesso aos registros de um arquivo: ▫O acesso seqüencial, ▫O acesso direto (também conhecido como randômico) “Existem outras formas de acesso que são variações destas que não serão tratadas.”

165 165 ORGANIZAÇÃO DE ARQUIVOS Acesso Seqüencial: ▫Quando desejamos ter acesso aos dados de um determinado registro mas não sabemos a localização desse registro no arquivo devemos vasculhar o arquivo desde o início em busca do registro desejado até o final do arquivo se necessário. Esta operação deverá ser repetida seqüencialmente, isto é, avançando pelos registros armazenados até que se encontre o registro procurado. Isto significa que para acessar um registro específico precisamos obedecer a ordem com que os registros foram armazenados no arquivo, o que implica em percorrer todos os registro que o antecedem.

166 166 ORGANIZAÇÃO DE ARQUIVOS Acesso Direto ou Randômico: ▫Neste caso para acessarmos o registro desejado é necessário que saibamos a sua posição física (posição do registro no arquivo no instante da gravação). Dessa forma é possível se posicionar instantaneamente no registro desejado sem ter que percorrer todos os registros que o antecedem. Para isto, é necessário conhecer o número da posição física do registro dentro do arquivo. A posição física de um registro é um número único, pois nunca dois registros diferentes poderão ter a mesma localização.

167 167 COMANDOS E FUNÇÕES PARA MANIPULAÇÃO DE REGISTROS Para posicionar o ponteiro de arquivo para o registro: fseek(ponteiro,sizeof(estrutura),deslocamento); Onde: ponteiro: é o nome do ponteiro da estrutura FILE. sizeof(estrutura) – operador que retorna o tamanho da estrutura; Deslocamento também chamado de modo : posição especificada para o ponteiro do arquivo; DESCRIÇÃOPode ser uma macroMODO Pode ser um número Começo do arquivoSEEK_SET0 Posição corrente do ponteiroSEEK_CUR1 Final do arquivoSEEK_END2

168 168 COMANDOS E FUNÇÕES PARA MANIPULAÇÃO DE REGISTROS Para indicar o final do arquivo usamos a função feof( ) que retorna um número inteiro enviado pelo S.O que indica final de arquivo. Forma Geral: feof(ponteiro); Onde: ponteiro é o nome da variável do tipo FILE; No DOS a função feof() retorna –1 caso seja final de arquivo e 0 caso contrário. Exemplo: while ( !feof(ponteiro)) fread(&estrutura,sizeof(estrutura),1,ponteiro);

169 169 COMANDOS E FUNÇÕES PARA MANIPULAÇÃO DE REGISTROS Para posicionar o ponteiro de arquivo no início do arquivo, isto é, no 1º registro temos: Forma Geral: rewind(ponteiro); Onde: Ponteiro é o nome da variável do tipo FILE. A função ftell() retorna um número inteiro longo que representa o número de bytes do começo do arquivo até a posição atual. Forma Geral: ftell(ponteiro); Onde: Ponteiro é o nome da variável do tipo FILE. Se o número que retornou dessa função for dividido pelo tamanho da estrutura teremos o número da posição física do registro.

170 170 Exemplo prático #include struct veiculo { char modelo[20]; char marca[20]; float preco; }reg; FILE *parq; void menu(); void abre_arquivo1(); void abre_arquivo2(); void inclusao(); void consulta_s(); void consulta_d(); void alteracao(); void exclusao(); void reorganizar(); void tela1(); void tela2(); char resposta(); void main(){ abre_arquivo1(); menu(); fclose(parq); } void abre_arquivo1(){ parq=fopen("t3.dad","ab+"); if (parq==NULL){ printf("Ocorreu um erro o arquivo nao pode ser aberto\n"); delay(1000); exit(1); } void abre_arquivo2(){ parq=fopen("t3.dad","rb+"); if (parq==NULL){ printf("Ocorreu um erro o arquivo nao pode ser aberto\n"); delay(1000); exit(1); }

171 171 void menu(){ int op; do{ clrscr(); gotoxy(20,2);printf(" >>"); gotoxy(30,6);printf("1 - INCLUSAO "); gotoxy(30,8);printf("2 - CONSULTA SEQUENCIAL"); gotoxy(30,10);printf("3 - CONSULTA DIRETA"); gotoxy(30,12);printf("4 - ALTERACAO"); gotoxy(30,14);printf("5 - EXCLUSAO"); gotoxy(30,16);printf("6 - FIM "); gotoxy(25,18);printf("Digite a opcao ?"); do{ gotoxy(47,18);clreol();scanf("%d",&op); } while (op 6); if (op!=6){ switch (op){ case 1:inclusao();break; case 2:consulta_s();break; case 3:consulta_d();break; case 4:alteracao();break; case 5:exclusao();break; } }while (op!=6); } Exemplo prático... Continuação

172 172 void inclusao(){ char op; int x; long N; fseek(parq,sizeof(reg),SEEK_END); N=(ftell(parq)/sizeof(reg)-1); do { tela1(); getchar(); gotoxy(10,6);printf("O NUMERO DO REGISTRO: %ld",N); gotoxy(40,8);gets(reg.modelo); gotoxy(40,10);gets(reg.marca); gotoxy(40,12);scanf("%f",&reg.preco); fseek(parq,N*sizeof(reg),SEEK_CUR); fwrite(&reg,sizeof(reg),1,parq); op=resposta(); N++; }while(op!='N'); } Exemplo prático... Continuação

173 173 void consulta_s(){ int num,lin=8; tela2(); rewind(parq); fread(&reg,sizeof(reg),1,parq); while (!feof(parq)){ gotoxy(10,lin);printf("%s",reg.modelo); gotoxy(40,lin);printf("%s",reg.marca); gotoxy(60,lin);printf("%10.2f",reg.preco); fread(&reg,sizeof(reg),1,parq); lin++; } getch(); } Exemplo prático... Continuação

174 174 void consulta_d(){ int num; long tam; char op; fseek(parq,sizeof(reg),SEEK_END); tam=(ftell(parq)/sizeof(reg))-2; do{ tela1(); gotoxy(10,6);printf("QUAL REGISTRO DESEJA CONSULTAR ?"); do{ gotoxy(45,6);clreol();scanf("%d",&num); }while (num tam); fseek(parq,num*sizeof(reg),SEEK_SET); fread(&reg,sizeof(reg),1,parq); gotoxy(40,8);printf("%s",reg.modelo); gotoxy(40,10);printf("%s",reg.marca); gotoxy(40,12);printf("%10.2f",reg.preco); op=resposta(); }while(op!='N'); } Exemplo prático... Continuação

175 175 void alteracao(){ int num; long tam; char op, resp[20]=""; fclose(parq); abre_arquivo2(); fseek(parq,sizeof(reg),SEEK_END); tam=(ftell(parq)/sizeof(reg))-2; do{ tela1(); gotoxy(10,6);printf("QUAL REGISTRO DESEJA ALTERAR ?"); do{ gotoxy(45,6);clreol();scanf("%d",&num); }while (num tam); fseek(parq,num*sizeof(reg),SEEK_SET); fread(&reg,sizeof(reg),1,parq); gotoxy(40,8);printf("%s",reg.modelo); gotoxy(40,10);printf("%s",reg.marca); gotoxy(40,12);printf("%10.2f",reg.preco); getchar(); gotoxy(40,8);gets(resp); if (strcmp(resp,"") !=0){ strcpy(reg.modelo,resp); gotoxy(40,8);clreol();printf("%s",reg.modelo); } // Continua……………………………………………………………………………… Exemplo prático... Continuação

176 176 // Continuação………………………………………………… gotoxy(40,10);gets(resp); if (strcmp(resp,"") !=0){ strcpy(reg.marca,resp); gotoxy(40,10);clreol();printf("%s",reg.marca); } do{ gotoxy(40,12);gets(resp); if (strcmp(resp,"") !=0){ reg.preco=atof(resp); gotoxy(40,12);clreol();printf("%8.2f",reg.preco); } }while (reg.preco <=0); fseek(parq,num*sizeof(reg),SEEK_SET); fwrite(&reg,sizeof(reg),1,parq); op=resposta(); }while(op!='N'); fclose(parq); abre_arquivo1(); } Exemplo prático... Continuação

177 177 void exclusao(){ int num,cont=0; long tam; char op; fclose(parq); abre_arquivo2(); fseek(parq,sizeof(reg),SEEK_END); tam=(ftell(parq)/sizeof(reg))-2; do{ tela1(); gotoxy(10,6);printf("QUAL REGISTRO DESEJA CONSULTAR ?"); do{ gotoxy(45,6);clreol();scanf("%d",&num); }while (num tam); fseek(parq,num*sizeof(reg),SEEK_SET); fread(&reg,sizeof(reg),1,parq); if (strcmp(reg.modelo,"***") == 0){ gotoxy(20,22);printf("Registro ja excluido !!"); delay(1000); } else // Continuação …………………………………………………… Exemplo prático... Continuação

178 178 // Continuação …………………………………………………… { gotoxy(40,8);printf("%s",reg.modelo); gotoxy(40,10);printf("%s",reg.marca); gotoxy(40,12);printf("%10.2f",reg.preco); gotoxy(40,19);printf("Confirma Exclusao ?"); op=resposta(); if (op=='S'){ strcpy(reg.modelo,"***"); fseek(parq,num*sizeof(reg),SEEK_SET); fwrite(&reg,sizeof(reg),1,parq); cont++; gotoxy(40,19);printf("Registro Excluido !!");delay(1000); } gotoxy(40,19);clreol(); op=resposta(); }while(op!='N'); fclose(parq); abre_arquivo1(); if (cont > 0) reorganizar(); } Exemplo prático... Continuação

179 179 void reorganizar(){ FILE *parq2; parq2=fopen("t3.bak","wb+"); fclose(parq); abre_arquivo2(); rewind(parq); while (! feof(parq)){ if (fread(&reg,sizeof(reg),1,parq) >=1) if (strcmp(reg.modelo,"***") !=0) fwrite(&reg,sizeof(reg),1,parq2); } fclose(parq); fclose(parq2); remove("t3.dad"); rename("t3.bak","t3.dad"); abre_arquivo1(); } Exemplo prático... Continuação

180 180 void tela2(){ clrscr(); gotoxy(30,3); printf("CADASTRO DE VEICULOS "); gotoxy(10,5);printf("MODELO \t\t\t MARCA \t\t\t PRECO R$\n"); } void tela1(){ clrscr(); gotoxy(40,2);printf("CADASTRO DE VEICULOS"); gotoxy(10,8);printf(" MODELO............: "); gotoxy(10,10);printf(" MARCA.............: "); gotoxy(10,12);printf(" PRECO.............: R$"); } char resposta(){ char op; gotoxy(40,20);printf("Deseja Continuar ?"); do{ gotoxy(65,20);clreol();scanf("%c",&op); op=toupper(op); }while (op!='N' && op !='S'); return(op); } Exemplo prático... final


Carregar ppt "Lógica de Programação Prof. Márcio Soussa Centro Universitário Jorge Amado."
Anúncios Google