A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Fundamentos de Programação

Apresentações semelhantes


Apresentação em tema: "Fundamentos de Programação"— Transcrição da apresentação:

1 Fundamentos de Programação
Alexandre Carlos Brandão Ramos

2 01/08/2001 Ementa Fornecer os principais conceitos de linguagens de programação e explorar esses conceitos a partir de uma linguagem algorítmica (Português Estruturado) bem como sua implementação a partir do conhecimento da linguagem C.

3 Objetivos 1. Fornecer conhecimentos básicos sobre Álgebra binária;
2.      Introduzir conceitos sobre Representação de Dados, de modo a facilitar o entendimento da lógica de programação; 3.      Fornecer conhecimentos básicos sobre o funcionamento de Computadores Digitais (hardware e software); 4.      Introduzir ao conhecimento da Programação Estruturada, permitindo a criação (Análise e Projeto) de algoritmos. 5.      Fornecer subsídios para a implementação de programas utilizando a Linguagem de programação C.

4 Critérios de Avaliação
60% da nota do bimestre = prova 30% da nota do bimestre = trabalho individual a ser realizado em laboratório 10% trabalhos em grupo (máximo de 4 alunos) a ser entregue no dia da prova teórica. Datas de Provas: B1: Teórica 30/09/2014 Laboratorio 01/10/2014 B2: Teórica 18/11/2014 Laboratório 19/11/2014

5 Pré-história Pré-história das calculadoras
O primeiro dispositivo de cálculos foi o ábaco, originário da China em 2000 AC.

6 Régua de cálculo No início do século XVII, o escocês John Napier inventou um dispositivo chamado Ossos de Napier que são tabelas de multiplicação gravadas em bastão, o que evitava a memorização da tabuada, e que trouxe grande auxílio ao uso de logaritmos, em execução de operações aritméticas como multiplicações e divisões longas. Hoje, o dispositivo aperfeiçoado é empregado freqüentemente pelos engenheiros, através da régua de cálculo.

7 Calculadoras A primeira calculadora somente somava e subtraía e foi inventada por Blaise Pascal na França em 1642, para ajudar o seu pai. A máquina contém como elemento essencial uma roda dentada construída com 10 "dentes". Cada "dente" corresponde a um algarismo, de 0 a 9. A primeira roda da direita corresponde às unidades, a imediatamente à sua esquerda corresponde às dezenas, a seguinte às centenas e sucessivamente.

8 A máquina de Leibniz Cerca de 30 anos após a construção da máquina de Pascal, Gottfried Wilhem Von Leibniz inventou um dispositivo constituído por um conjunto com dez "dentes", cada um dos quais mais comprido que o anterior, que permitiu efetuar de modo automático a multiplicação e divisão.

9 Alan Turing Alan Turing imaginou uma máquina “universal” que pudesse realizar cálculos automaticamente, demonstrando que um conjunto de estruturas simples podia resolver qualquer problema complexo. Esta máquina não chegou a ser montada. Entretanto ele e a sua equipe desenvolveram o Colossus, um dos primeiros computadores do mundo, visto aqui em operação durante a Segunda Guerra Mundial. Essa máquina enorme continha válvulas, e sempre alguma se queimava em alguns minutos. O Colossus era capaz de processar caracteres por segundo, e foi responsável pela decodificação das mensagens alemãs "Enigma".

10 John Von Neumann Matemático brilhante, fugiu da Alemanha nazista para os Estados Unidos, professor em Princeton, participou do projeto para a construção da bomba atômica. Foi convidado para o projeto ENIAC (Electronic Numeric Integrator And Calculator). O trabalho estava sob a orientação de engenheiros eletrônicos mas, como matemático, analisou o problema de modo diferente e redigiu um relatório que estruturou a arquitetura dos modernos computadores. Ele e sua equipe desenvolveram o EDVAC (Electronic Discrete Variable Computer) onde, foi aplicada a idéia de programação interna que trata do armazenamento de programas, codificados de acordo com certos critérios na memória do computador e não em dispositivos externos, como ocorria até então. Esse procedimento aumenta a operacionalidade dos programas, pois grupos de instruções podem ser executados várias vezes e na ordem que se fizer necessária.

11 Computadores modernos
Mudanças tecnológicas: vacuum tube -> transistor -> IC -> VLSI Nanocircuitos dobram a cada 1.5 anos: capacidade de memória velocidade do processador (devido a avanços tecnológicos e organização)

12 Problemas Nos anos 60/70: Problema atual:
minimizar espaço em memória melhora o desempenho Problema atual: hierarquia de memórias paralelismo dos processadores otimização dos compiladores sistema operacional...

13 O que é um computador? entrada (mouse, teclado)
Componentes: entrada (mouse, teclado) saída (monitor, impressora) memória (discos, DRAM, SRAM, CD) rede

14 Sistemas de Numeração Pré-história Introdução
Existem várias regras que permitem ler e escrever qualquer número, usando poucas palavras e poucos símbolos. O conjunto de tais regras constitui um Sistema de Numeração. Estes sistemas, têm variado com as épocas e com os povos. Pré-história

15 Base de um Sistema É o número de elementos necessários para formar um conjunto padrão que auxilie a contagem de objetos. Assim, quando falamos em base 10, estamos pensando na formação de conjuntos com dez elementos, isto é, dada uma coleção de objetos, procuramos saber quantos conjuntos de 10 podem ser formados. A base 10 é usada desde a antigüidade, dada a correspondência com os dedos das duas mãos. Se tivéssemos 8 e não 10 dedos nas mãos qual seria a nossa base de numeração?

16 Outras bases Um sistema de base 12, é aquele que forma conjuntos de doze elementos. É nessa base que costumeiramente se contam as (em dúzias) as frutas, os ovos etc. A contagem do tempo, desde os antigos babilônios, é feita na base sessenta (o conjunto de sessenta segundos constitui um minuto) A civilização Maia, da América Central, usava a base vinte para a contagem de seus objetos Os computadores utilizam a base dois...

17 Base decimal Principais características: é de base dez;
usa somente os dez numerais indo-arábicos (algarismos) 1,2,3,4,5,6,7,8,9 e 0 para escrever todos os números. Obedece ao Princípio da Posição Decimal. “Todo algarismo escrito imediatamente à esquerda de outro representa unidades de ordem imediatamente superior (dez vezes) à desse outro” exemplo: 33 o primeiro 3 “vale” trinta (3x10) e o segundo 3 “vale” três mesmo!

18 Sistemas antigos - Egípcio
Há anos eles utilizavam um sistema decimal (dez cajados valem um osso, dez ossos valem uma corda etc.) porém não conheciam o Princípio da Posição, razão porque se tornava difícil a representação de números grandes.

19 Exemplos

20 Sistemas antigos - Babilônio
Há anos atrás eles utilizavam um sistema de base sessenta com símbolos cuneiformes. Números usados: Regras para escrever: Para números menores que sessenta obedece ao mesmo princípio da justaposição usado pelos egípcios.

21 Sistemas antigos - Babilônio
Para números maiores que sessenta usa-se (e pela primeira vez na história!) o Princípio da Posição de base sessenta (Princípio Sexagesimal). Exemplos:

22 Sistemas antigos - Romano
Há anos atrás os romanos utilizavam os seguintes numerais: I : um V: cinco X: dez L: cinqüenta C: cem D: quinhentos M : mil Regras para escrever: Somente os numerais I, X, C e M podem ser repetidos no máximo 3 vezes consecutivas. Se um numeral (ou mais) está à direita de outro de igual ou maior valor, somam-se os seus valores (princípio aditivo da justaposição) e se está (com exceção de V, L, D e M) à esquerda de outro de valor imediatamente superior, subtraem-se (princípio subtrativo da justaposição).

23 Sistemas antigos - Romano
Para aumentar o valor do número vezes, coloca-se um traço horizontal sobre o numeral (com exceção do I); para aumenta-lo um milhão de vezes colocam-se dois traços e assim sucessivamente. Exemplos: 3 = III = IX = XXI = CCVI 1.969 = MCMLXIX Nos sistemas antigos, não existia o ZERO que foi introduzido pelos hindus há 1500 anos atrás.

24 Sistemas modernos Os vários sistemas de numeração que
07/08/2001 Sistemas modernos Os vários sistemas de numeração que hoje prevalecem, se valem do Princípio da Posição, que varia de acordo com a base adotada, que em várias aplicações não é mais a base 10. Os computadores utilizam a base dois (Sistema de Numeração Binário), usando somente dois numerais: 0 e 1, para descrever qualquer número.

25 Mudança de base Ou decomposição, é conversão de um número escrito em uma determinada base para uma outra qualquer, exemplo: Base 10: ( ) 5.386 = 5 x x x = 5 x 10³ + 3 x 10² + 8 x 10¹ + 6 x 10º Base 8: ( ) 12348 = 1 x 8³ + 2 x 8² + 3 x 8¹ + 4 x 8º 12348 = 1 x x x x 1 12348 = 12348 =  Transformação para a base 10. Base 16: ( A B C D E F) 1A2F = 1 x 16³ + A x 16² + 2 x 16¹ + F x 16°

26 Mudança de base Base 16: ( A B C D E F) 1A2F16 = 1 x 16³ + A x 16² + 2 x 16¹ + F x 16º = 1 x 16³ + 10 x 16² + 2 x 16¹ + 15 x 16º = =

27 Mudança de base Da base10 para a base 2: 3010 = 111102
= 1 x x x x x 20 = = 3010

28 Mudança de base Da base 10 para a base 4: 3010 =1324
= 1 x 4² + 3 x 4¹ + 2 x 4º = 1324 = 3010

29 Operações Aritméticas
08/08/2001 Operações Aritméticas Adição Regra 1: = 0 Regra 2: = 1 Regra 3: = 1 Regra 4: = e vai 1 = 10 Exemplos:

30 Operações Aritméticas
Subtração Regra 1: = 0 Regra 2: = 1 e empresta 1 Regra 3: = 1 Regra 4: = 0 Exemplos: Lembrar que a subtração começa da direita para a esquerda

31 Operações Lógicas Todos os sistemas digitais são construídos usando apenas 3 operações lógicas básicas, também chamadas de portas lógicas, quais sejam: E (and) Ou (or) Não (not)

32 Operação lógica E Gráficamente B A Y A . B = Y 0 0 0 0 1 0 1 0 0 1 1 1
Tabela Verdade

33 Operação lógica OU Gráficamente B A Y A + B = Y 0 0 0 0 1 1 1 0 1

34 Operação lógica NÃO Gráficamente A Y A = 

35 Expressões e circuitos
Pode-se escrever uma expressão lógica (booleana) que seja executada por qualquer circuito lógico, exemplo: Divide-se o circuito lógico em partes Colocar na saída de cada bloco a expressão correspondente Juntam-se as expressões

36 Exercícios Escrever a expressão lógica executada pelo circuito abaixo:
Dada a expressão lógica, desenhar o circuito: S = (A + B) . (C + D) S = (A + B) + C + (C . D) Representar as tabelas-verdade dos exercícios anteriores.

37 Algoritmos

38 Resolução de Problemas
Podemos identificar duas grandes estratégias de resolução de problemas: 1. Estratégias algorítmicas, generalistas, por exemplo, os métodos numéricos, os sistemas de bancos de dados, as planilhas etc. 2. Estratégias baseadas em conhecimento (especialistas) por exemplo, sistemas especialistas, sistemas de reconhecimento de voz, tutores inteligentes etc;

39 Exercícios Represente algorítmicamente a solução dos seguintes problemas: 1. Sejam 2 vasilhames d’água, um de 4 litros e outro de 3 litros. Nenhum deles possui qualquer marcação de medida. Há uma torneira que pode ser utilizada para encher os vasilhames de água. Como você poderá colocar exatamente 2 litros d’água dentro do vasilhame de 4 litros?

40 Exercícios 2. Três missionários e três canibais se encontram em um lado do rio. Todos concordam que precisam chegar do outro lado. Mas os missionários não confiam nos canibais. Assim, os missionários querem atravessar o rio de modo tal que o número de missionários em qualquer das margens nunca seja inferior ao número de canibais que estiver do mesmo lado. O único barco disponível só carrega 2 pessoas por vez. Como todos poderão chegar ao outro lado, sem que os missionários arrisquem suas vidas? Trabalho 1, para ser entregue no dia 19/08/2014 prova, impresso em folha de papel Almaço (pode ser a mesma da primeira série de exercícios) os passos numerados e em língua portuguesa.

41 Fluxogramas Corresponde a uma forma gráfica muito comum utilizada para representar um algoritmo, indicando a seqüência em que as primitivas devem ser executadas.

42 Primitivas Gráficas Início/Fim do programa Processamento Decisão

43 Montando um fluxograma
Em um fluxograma as operações primitivas aparecem envolvidas por retângulos, com exceção da primitiva Decisão, a qual é envolvida por um losango. As operações são interligadas por SETAS (-->).

44 Exemplo Dados dois números inteiros positivos A e B, calcular o valor absoluto de A - B. Resposta em forma de texto: nesse caso devemos realizar os seguintes passos: 1. Obter os valores de A e B; 2. Verificar qual deles é o maior; 3. Subtrair o número menor do número maior; e 4. Apresentar o valor resultante.

45 Gráficamente Início Obtenha A,B A < B C <-- B - A C <-- A - B
Forneça C Fim

46 Exercício Início PROD <-- 10*7 Forneça PROD Fim
1. Calcular o produto de 10 por 7. Início PROD <-- 10*7 Forneça PROD Fim

47 Estruturas de Dados

48 Programa Estruturas básicas: listas, árvores e suas generalizações. Manipulação de ponteiros. Algorítmos e manipulação de estruturas de dados. Inserção, eliminação, busca e percurso. Aplicações. Bibliografia Estruturas de dados. Paulo Veloso, Clésio Veloso dos Santos e outros. Ed. Campus. Algorítmos e Estruturas de dados. Guimarães Lages. Ed. LTC. Estruturas de dados Fundamentais: conceitos e aplicações. Silvio do Lago. Ed. Érica

49 Desenvolvimento de Programas
O processo de solução de problemas por meio de computador pode ser descrito a partir das seguintes etapas: 1. Especificação do problema 2. Projeto em alto nível 3. Análise de alternativas 4. Refinamento e codificação 5. Verificação do comportamento Nesta descrição devemos ressaltar 3 pontos: 1. Estruturas de dados, que retratam as relações lógicas existentes entre os dados, de modo análogo ao uso de um modelo matemático para espelhar alguns aspectos de uma realidade física.

50 2. Operações, manipulam as estruturas de dados transformando-as.
3. Estruturas de Representação, que são formas de armazenar na memória os dados, isto é, as estruturas de dados manipuladas pelas operações, que devem: 3.1 Preservar as relações lógicas existentes entre os dados. 3.2 Permitir que as operações sejam descritas por procedimentos simples e eficientes.

51 Tipos de dados

52 Tipos de Dados Para descrever os algorítimos e procedimentos durante o curso, vamos utilizar uma linguagem de descrição muito parecida com as linguagens ALGOL e PASCAL. A noção do tipo de dados ocorre na maioria das linguagens de programação. O tipo da variável delimita o conjunto de valores que ela pode tomar e as operações que podemos efetuar com elas. Geralmente uma linguagem de programação oferece 2 tipos de Tipos de dados: Tipos Primitivos: São tipos básicos pré definidos Tipos construídos: tipos criados a partir de mecanismos presentes na linguagem.

53 Exemplos 5 div 2 = 2 5 mod 2 = 1 Tipos primitivos Operações aceitas
inteiro - int * div mod real - real * / lógico - log e ou não (.e. & .ou. V ) caracter- car =  Exemplos: Tipos inteiro ? Real ? Lógica ? Caracter ? V= F e F = V

54 Funções de Transferência
São operações especiais que manipulam variáveis de tipos primitivos, diferentes entre si, por exemplo: Xi sendo X real e inteiro. Comparações também podem ser consideradas funções de transferência, por exemplo:X < i sendo X real e i inteiro e o resultado lógico F(V) Trunc, converte um numero real em inteiro trunc (75.37)=75 Tier, converte inteiro em real tier (75)= 75.0 Ord, transforma car em int que é seu numero de ordem no conjunto de caracteres ASCII ord (‘0’) <...< ord (‘9’)<...< ord(‘A’)<...< ord(‘a’). Mais funções de transferência podem ser obtidas nos tipos construídos.

55 Mecanismo para construção de tipos
Utilizados para construir tipos novos a partir de tipos primitivos, segundo a definição: Tipos nome_do_tipo: definição_do_tipo a ser utilizada com os seguintes mecanismos: Tipos construídos forma Geral Vetor - Vet Vet (limite inferior...limite superior) de tipo registro - reg reg (seletor1: tipo1, seletor2: tipo2,...,seletorn: tipon) seqüência- seq seq de tipo p/ ex: tipo cadeia:: seq car referência - ref ref a tipo p/ ex: tipo matricula:: ref int alternativa - alt alt (tipo1 | tipo2 |...| tipon ) p/ ex: tipo questão:: alt (int | car)

56 Exemplos: Vetor= tipo dia :: vet [0...30] de int [1,2,3,4,...31]
onde dia[2] = dia [i] = 31 então i= 30 Registro= tipo inscrição::reg (disciplina: int, turma: car) Se matricula: inscrição “Se matricula é uma variável do tipo inscrição, então matricula (103, ‘a’) daí temos: matricula.turma= a matricula.disciplina= 103 O elemento da turma”a”, quer inscrever-se na disciplina 103

57 Seqüência= tipo cadeia:: seq car
Se x: cadeia e x< ‘r’, ‘a’, ‘m’> Seq. De comprimento 3 y: cadeia e y<‘e’, ‘m’, ‘i’, ‘g’, ‘r’, ‘a’> Seq. De comprimento 6 Então princ x = ‘r’ cont x = < ‘a’, ‘m’> yconc x = < ‘e’, ‘m’, ‘i’, ‘g’, ‘r’, ‘a’, ‘r’, ‘a’, ‘m’> Se Z: cadeia e Z< ’a ’> Então princ Z=‘a’ cont z=<> Seqüência nula de comprimento 0

58 Referência Tipo de matricula :: ref int
Este mecanismo permite uma modalidade dinâmica de alocação, ao contrário dos mecanismos anteriores (vet, seq, etc.) cuja alocação é contínua. Se geografia: matrícula o espaço necessário para a variável geografia compreende 2 partes: 1° parte do valor: armazena um valor do tipo int; 2° parte de posição: armazena uma indicação de posição da localização da parte de valor.

59 a) após a declaração da variável b)após a execução do comando alouque
Sejam os comandos: Aloque geografia a) após a declaração da variável b)após a execução do comando alouque Desaloque geografia c)após a execução do comando (Na memória) Parte de posição (geografia) Parte de posição Parte de valor geografia Parte de posição

60 Alternativa= tipo questão:: alt ( int | car ) Se resposta : questão
Permite que uma mesma variável possa, em momentos diferentes, ter valores e tipos diferentes Alternativa= tipo questão:: alt ( int | car ) Se resposta : questão Então resposta? tem valor igual a 1 (int) ou 2 (car) Enumeração Permite definir tipos de dados por meio dos valores que os dados daquele tipo podem tomar. Tipo mês= (jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez) seja mês_nasc: mês Se mês_nasc= dez Então Processo qualquer jan<fev<mar<...<dez

61 Variáveis, Declarações e Expressões
Nomes (identificadores) podem ser usados para denotar variáveis, do seguinte modo: var nome: tipo; ou nome1, nome2,...,nome3: tipo; Todas as variáveis existentes no programa fonte devem ser declaradas uma vez ( e somente uma vez) no seu cabeçalho, exemplos: Tipos Variáveis matr10:: vet [0..9] de vet [0..9] de real; adj, custo: matr10; status:: reg (no: int, ferias: log, dia: int); folha: seq de status; nome:: seq car; alfa: vet [ ] de nome; celula:: ref int; onde : celula

62 Comandos Básicos

63 São utilizados para manipular as variáveis, são eles:
Atribuição variável expressão Entrada Leia ( lista_de_variáveis) Saída Escreva ( lista_de_variáveis) Se condição então comando Condicionais Se condição então comando senão comando Interação Enquanto condição faça comando Repita comando até (que) condição para variável de valor_inicial incr valor_do_incremento até valor_inicial. Faça comando Escape de malha Saída ou escape Seleção Conforme variável, Faça lista_dos_casos

64 Atribuição V  e (e precisa ser do mesmo tipo de V)
X  (Y+Z)/ x,y e z: real; “O valor de X depois da avaliação será média aritmética dos valores de Y e Z antes” i  i exemplo comum para contagens Variáveis de tipo contruído: var custo: vet[1..5] de real; custo[1]  custo[2] var matr: reg(disc: int, turma: car); matr  (2015, ‘ a’ ); Exemplos:

65 Entrada de Dados Leia (V1, V2, V3, ... , Vn); Neste caso todas as variáveis listadas recebem vetores do dispositivo de entrada. Por exemplo: var x: real; i: int; a: vet [1..3] de int; Início leia (x,a,i) Fim. Causará a leitura do dispositivo de entrada para x, a e i de um real, um vetor e um inteiro. Exemplos:

66 Saída de Dados Escreva (V1, V2, V3, ...Vn); Neste caso todas as variáveis listadas serão escritas no dispositivo de saída, por exemplo: var i: int; a: vet [1..5] de int; x: real; Início x  2.1; i  i+ 2; a[2]  i; escreva(i,a,x); Fim. Exemplos:

67 Condicional Se L Então A Senão B
var x,y,z: real; {Calcula o menor de 2 nos.} Se x < y Então z  x {comando simples} Senão Início {comando composto} z  y; Se x < z Então z  x; Fim; A avaliação da condição não altera o valor de nenhuma variável mesmo que ela contenha expressões como: Se (2.0*y < x/3.2) .e. (z<>0) Então... Exemplos:

68 Iteração - Enquanto Enquanto L Faça A Var x, y: int; Início
Enquanto x =< y Faça x  2*y; Enquanto x <> y Faça Se x > y Então x  x - y Senão y  Y - x; Fim. Causa a repetição do comando até que x=y. Caso o sejam no início o programa termina após o primeiro teste.

69 Iteração - Repita Repita A até L Var x,y: int; Início
Se x >< y Então Repita Se x > y Então x  x-y Senão y  y-x; Até x=y; Fim.

70 Iteração - Para Para V de i incr P até F Faça A Var i, soma: int;
valor: vet [1..10] de int; Início Soma  0.0; Para i  1 até 10 Faça soma  soma+valor[i]; Fim.

71 Seleção Caso V Faça (V1:C1, V2:C2,...,Vn:Cn) ou
Senão Faça (V1:C2, V2:C3,...,Vn:Cn+1) Onde Vi são valores e Ci são comandos, exemplo: Var Ch: car; Início Caso Ch Faça ‘A’..’Z’,’a’..’z’: Escreva (‘Letra’); ‘0’..’9’: Escreva(‘Digito’); ‘+’,’-’,’*’,’/’: Escreva (‘Operador’); Senão Escreva (‘Caracter especial’); Fim; Fim.

72 Vetores

73 Variáveis Indexadas - Vetores
A utilização de vetores em computação é uma técnica muito útil para a otimização de tempo e memória e torna um programa mais elaborado e eficiente. Forma geral: Tipo vetor:: vet[1..3] de int; Var A, B, C: vetorz;

74 Leitura e Escrita de Vetor
Exemplo: Leitura Var x: vet[1..4] de int; Início Para i:= 1 até 4 Faça leia(x[i]); Fim. Exemplo: Escrita Para i:=1 até 4 Faça Escreva(x[i]); É bom lembrar que poderíamos usar os comandos Repita e Enquanto, tanto na leitura quanto na escrita.

75 Matrizes

76 Variáveis Indexadas - Matrizes
Uma matriz é uma variável indexada que possui 2 dimensões e portanto precisa de 2 índices para marcação de valor. Sua representação matemática é: dimensão: m - linhas representação: Amxn n - colunas Forma geral: Tipo matriz:: vetor[1..3,1..3] de int; Var A, B, C: matriz;

77 Leitura e Escrita de uma Matriz
Faz-se necessário 2 varreduras, uma com a variável “j” percorrendo as colunas e outra com a variável “i” percorrendo as linhas: Exemplo: Leitura Para i:= 1 até m Faça Para j:= 1 até n Faça Leia(A[i,j]); Exemplo: Escrita Para j:= 1 até n Faça Escreva(A[i,j]);

78 Exemplo Fazer um algoritmo para ler e imprimir a matriz:
Algoritmo matriz; var A: vet[1..3,1..3] de int; i,j: int; Inicio Para i:= 1 ate 3 Faça Para j:= 1 ate 3 Faça Leia(A[i,]); Fim.

79 Registros

80 Registros São conjuntos de dados logicamente relacionados, mas de tipos diferentes (inteiro, real, car etc.); Utilizamos registros, quando vetores ou matrizes possuem diferentes componentes dentro de um mesmo campo, por exemplo: Como criar uma matriz desse tipo, onde existem 2 tipos de variáveis (int e car)? Percebe-se que é impossível a utilizaçãode matrizes, pois na mesma declaração só pode conter um tipo de elemento. Por isso utiliza-se “reg”.

81 Forma Geral de Registro
Tipo pagantes:: reg (cadast: int, nome: caract, bandeira: caract, pagamento: caract); Pode-se utilizar vetor composto por reg ou matriz composta por reg, exemplo: Escreva um algoritmo que dados 10 codigos de profissão, emita o nome da profissão correspondente.

82 Tipo lista: reg(codigo: int,
nome:caract); Var Tab: lista; cod,i,k: int; Inicio Para i:= 1 ate 10 Faça leia(tab[i].codigo, tab[i].nome); Leia (cod); {recebe o codigo para comparar} Repita i:= 1; Enquanto(tab[i].cod<>cod) e (i=<10) Faça i:=i+1; Se (i>10) Então Escreva(‘Codigo invalido’) Senão Escreva(‘Cod. Desejado ‘,tab[i].nome); Ate(cod=0); Fim

83 Linguagem C

84 Linguagem C Principais Características Entrada e saída de dados
Bases numéricas Estruturas de seleção Estruturas de repetição Matrizes/vetores Operadores lógicos Funções internas e subprogramas

85 Ambiente de programação
Para a edição de programas, compilação e execução utilizaremos o ambiente Turbo C, especificamente a IDE (Integrated Design Environment) que funciona a partir dos sistemas operacionais DOS e WindowsXX. A IDE é uma interface de desenvolvimento prática e eficiente que vai facilitar bastante o desenvolvimento dos programas em C. Maiores detalhes do funcionamento da IDE, principais menus e comandos de edição e compilação estão disponíveis em Turbo C - Guia do Usuário.

86 Identificadores Usados para nomear as variáveis, as funções e os rótulos dos programas. A linguagem C: reconhece os 31 primeiros caracteres do nome; e diferencia as maiúsculas e as minúsculas. O identificador sempre começa por letra Normalmente: maiúsculas  constantes minúsculas  variáveis Exemplo: Corretos Errados cont cont teste alô! Alto_balanco alto..balanço

87 Palavras reservadas O nome deve ser diferente das seguintes palavras reservadas: int char float void enum short long signed unsigned double struct union typedef sizeof auto register static extern const volatile goto if else switch case default break while do for continue return

88 Tipos e tamanhos Tipos simples: char: caracter (1 byte)
int: inteiro (>= 2 bytes dependendo da máquina) float: ponto flutuante, precisão simples (>= 6 bytes, dep. Máq.) Qualificadores: short: se aplica ao tipo int long: se aplica a int e float signed: se aplica a char e int unsigned: idem char e int Variáveis Tipos simples: char, int, float e double Tipos compostos: estruturas, tabelas, uniões etc. Domínio de validade: auto, static, extern e register. Sintaxe: [classe] [qualificador] tipo nome_variavel [=valor];

89 Constantes Declaração simples: # define NUM_MAX_CARACT 100
# define MENSAGEM “alo, alo, Terezinha” # define CR ‘\n’ # undef MENSAGEM Qualificadores tipo “double” f ou 4.14F tipo “float” 1.3e-3 ou 1.3E-3 tipo double tipo inteiro, em octal 3l ou 3L tipo inteiro longo u ou 255U tipo inteiro, sem sinal 3.14l ou 3.14L tipo d”double” longo 0x3b ou 0X”b tipo inteiro, hexadecimal

90 Constantes Domínio de validade:
da definição da constante até o final do arquivo ou até encontrar a diretiva #undef da constante Constantes do tipo caracter devem ser escritas entre apóstrofos (por exemplo: `l`, `a`, `x`, `\n`, `\t`) Representação de caracteres ASCII não imprimíveis: nova linha = `\n` tabulação = `\t` espaço p/trás = `\b` retorno do carro = `\r` página segui nte = `\f ` barra de fração revertida = `\\` apóstrofo = `\’` null = `\0` bell = ‘\a’ formfeed = `\f ` haspas = `\” ` interrogação = `\?` caracter definido pelo seu valor ASCII (em octal) = `\ddd`, ex.: `121` caracter definido pelo seu valor ASCII (em hexa] = `\xdd`, ex.: `\x2a`

91 Operadores Operadores aritméticos (multiplicativos e aditivos):
+, -, *, /, % (resto de divisão inteira) Operadores bit a bit: & (e), | (ou), ^ (ou-exclusivo) Operadores de deslocamento: << (esquerda), >> (direita) Operadores relacionais: <,<=, >, >= Operadores de igualdade: ==, != Operadores lógicos: && (e), || (ou) Operadores unários: *p : conteúdo de p &v : endereço de v -e : menos e !e : negação (booleana) de e ~e : complemento bit a bit de e ++v : v = v + 1 -v : v = v v++ : retorna v e depois v = v + 1 v- : etorna v e depois v = v (tipo)v : converte v para o tipo sizeof(e) : numero de bytes ocupado por e sizeof(tipo) : n° de bytes ocupado por um objeto do tipo definido

92 Operadores Operadores de atribuição:
=, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= Operador vírgula: x = y++, z; equivale a y = y + 1; x = z Operador condicional: exp ? exp1 : exp2 Exemplo: x = (a > b) ? a : b; equivale a: Se a é maior que b, então x = a; senão x = b

93 Precedência e ordem de avaliação
Operador Avaliação ( ) [ ] -> esq->dir ! ~ ++ --(tipo) * & sizeof dir->esq * / % esq->dir esq->dir <<>> esq->dir < <=> >= esq->dir == != esq->dir & esq->dir ^ esq->dir | esq->dir && esq->dir || esq->dir ? : dir -> esq = += -= etc. dir -> esq , esq-> dir

94 Instruções de controle
Observações preeliminares: uma instrução é sempre terminada por “ ; “ comentários: /* isto é um comentário */ as chaves { e } são usadas para agrupar declarações e instruções em um bloco, o qual é sintaticamente equivalente a uma única instrução, exemplo: While (n != 2) { /* bloco*/ x = y + z; n = n / 2; } um bloco nunca termina com }; variáveis podem ser declaradas dentro de qualquer bloco (e tem validade só dentro do bloco).

95 Instrução if Caso mais simples: if (expressão) instrução
Caso completo: if (expressão) instrução; else if (expressão) instrução; ..... else instrução;

96 Instrução switch Sintaxe: switch (expressão) {
case expr-constante: instr; instr; break; default: instr; }

97 Instrução while Caso mais simples: while (expressão) instr;
Caso geral: while (expressão) { instr; instr; } A instrução “break” faz sair da malha “while”. Exemplo: while (i++ != 10) { soma += x[i]; if (soma >= 100.) break; } A instrução “continue” faz com que a iteração seguinte da malha seja realizada imediatamente, exemplo: while (i++ < 10) {if (x[i] == ‘\n’) continue; y[i] = y[i]; }

98 Instrução do/while Caso simples: do instrução; while (expressão);
Caso geral: do { instrução; ..... } As instruções break e continue também são aplicáveis ao do/while.

99 Instrução for Sintaxe: for (expr1; expr2; expr3) { instr; ... instr; }
A instrução “for” é equivalente a: expr1; while (expr2) { .... expr3; } As instruções “break” e “continue” também são aplicáveis a malha for.

100 Instrução goto Sintaxe: goto rotulo ... Rotulo: instr; instr;

101 Funções Generalidades
A linguagem C é baseada no conceito de blocos de construção, que são chamados de funções. O nome de uma função sofre as mesmas restrições que o nome de uma variável. Como também ocorre com as variáveis, um tipo é sempre associado a uma função (tipo do valor de retorno) tipos básicos: void, char, int, float, double qualificadores: short, long, signed, unsigned, exemplo: short int func () Retorno de valor: return expr; Declaração de uma função: float calc (int, float); definição de uma função: foat calc (n, x) int n; float x; {corpo da função} não se pode definir uma função no interior de um bloco {.....}

102 Função main O programa principal é uma função cujo nome é “main”
A função “main” pode ser do tipo: main () { } Ou do tipo: main (argc, argv) int argc; char *argv; { } O valor contido em “argc” corresponde ao número de argumentos recebido da linha de comando Por sua vez, “argv” corresponde à tabela de argumentos da linha de comando, exemplo: cp arq1 arq2 cp: nome do programa arq1 e arq2 : argumentos argc = 3 argv = [ “cp”, “arq1” , “arq2”]

103 Alocação do espaço de memória
Classe auto alocação por “default” alocação feita no momento da declaração liberação no final do bloco (variável local) ou no final do programa (variável global) Classe static alocação feita na declaração liberação no final do programa uma variável local, declarada “static”, guarda seu valor de uma chamada a outra da função (conceito de permanência do valor) uma variável global, declarada “static” , só é acessível por funções contidas dentro do arquivo onde foi declarada (conceito de privacidade) Classe extern a variável é alocada em um outro arquivo

104 Alocação de espaço de memória
Classe register deve ser empregado somente com as variáveis automáticas (“auto”) classe de alocação normalmente empregadas para as variáveis utilizadas de maneira intensiva o compilador é livre de atribuir um registrador do processador à variável ou de ignorar a solicitação não se pode, evidentemente, tentar obter o endereço de uma variável do tipo “register” como regra geral, as variáveis de classe “register” são do tipo “char” ou “int”

105 Definição de tabelas (arrays)
Uma tabela é um conjunto de elementos de mesmo tipo. Declaração: [classe] [qualificador] tipo tabela [n° elementos]; Inicialização: tipo tabela[ ] = {val1, val2, ...} Exemplos: char v[10]; static double x[20]; int stat[ ] = { -1, -1, 0, 1}; Acesso a um elemento de uma tabela, exemplos: y = x[10]; ss = stat [2*i-3]; Tabelas multidimensionais int tab[2] [3] [4]; ou double pos[3] [3];

106 Estruturas Uma estrutura corresponde a um conjunto de uma ou mais variáveis, eventualmente de tipos diferentes e agrupadas sob um mesmo nome Exemplos de declarações de estruturas (“struct” define o tipo estrutura) declara a estrutura “x” (tipo “num_complexo”), alocando para a mesma 2 campos do tipo double: struct num_complexo { double parte_real; double parte_imag; } x; declara a estrutura “data”, alocando para a mesma inteiros: struct { int dia; int mês; int ano; } data; Acesso aos membros de uma estrutura: data.dia = 18;


Carregar ppt "Fundamentos de Programação"

Apresentações semelhantes


Anúncios Google