Tipos de dados estruturados

Tamanho: px
Começar a partir da página:

Download "Tipos de dados estruturados"

Transcrição

1 Tipos de dados estruturados Tipos de dados intrínsecos em Fortran INTEGER REAL COMPLEX CHARACTER LOGICAL É possível definir tipos (estruturas) ou fichas. Ficha - armazena elementos de tipos diferentes Exemplo: ficha de aluno de IP contém: Nome (cadeia de caracteres) Número (inteiro) Nota exame (real) Nota projecto (real) Nota final (inteiro) João Miguel da Costa Sousa 248 Tipos estruturados Definição de tipos estruturados (fichas) Forma: TYPE nome_tipo declaracao 1 declaracao 2... declaracao k END TYPE nome_tipo O nome_tipo é um identificador em Fortran; Cada declaracao i declara um ou mais componentes da estrutura deste tipo. Objectivo: declara tipo estruturado (ficha) cujos componentes são declarados em declaracao 1,, declaracao k. Estas definições são efectuadas na zona de especificações do programa. João Miguel da Costa Sousa 249 1

2 Exemplos de fichas Exemplo 1: ficha de aluno TYPE Ficha_Aluno CHARACTER(20) :: Nome INTEGER :: Numero REAL :: Exame, Projecto INTEGER :: NotaFinal END TYPE Ficha_Aluno Aluno1 Nome Numero Exame Projecto NotaFinal Nome Numero Exame Projecto NotaFinal Aluno2 Exemplo 2: ponto no espaço 2-D TYPE Ponto2D REAL :: X, Y END TYPE Ponto2D João Miguel da Costa Sousa 250 Declaração de estruturas Declaração de estruturas Forma: TYPE(nome_tipo) :: lista_identificadores Objectivo: declara os identificadores que serão os nomes das estruturas cujos componentes são declarados na definição do tipo nome_tipo. Exemplo: estruturas dos tipos definidos no Ex. 1 e no Ex. 2 anteriores: ou: TYPE(Ficha_Aluno) :: Aluno1, Aluno2 TYPE(Ficha_Aluno), DIMENSION(50) :: Alunos TYPE(Ficha_Aluno):: Alunos(50) TYPE(Ponto2D) :: Ponto1, Ponto2 João Miguel da Costa Sousa 251 2

3 Construtores de fichas Forma: nome_tipo(lista_componentes) Exemplo 1: Ponto2D(2.5, 3.2) é um valor do tipo Ponto2D e pode ser atribuida a P: P = Ponto2D(2.5, 3.2) Declaração da constante Centro: TYPE(Ponto2D), PARAMETER :: Centro = Ponto2D(2.5, 3.2) Declaração da constante Centro: TYPE(Ponto2D), PARAMETER :: Centro = Ponto2D(2.5, 3.2)... A = 1.1 P = Ponto2D(A, 2*A) Exemplo 2: Aluno1 = Ficha_Aluno( J. Silva, 10000, 15., 17., 16) Alunos(1) = Aluno1 João Miguel da Costa Sousa 252 Acesso a componentes de fichas Componentes individuais são acedidos por variáveis qualificadas dadas por: Nome da estrutura e Nome do componente, juntos pelo selector de componente: % : Exemplos: nome_estrutura%nome_componente P%X é o primeiro componente da estrutura P do tipo Ponto2D, e P%Y é o segundo componente. Alunos(1)%Nome é o primeiro componente da estrutura Alunos(1) do tipo Ficha_Aluno, etc. Aluno1%Nome = Jose Silva READ(*, *) Aluno1%Nome PRINT(*, *) Aluno1%Nome Aluno1%Nome(1:1) = J João Miguel da Costa Sousa 253 3

4 Estruturas encadeadas Os componentes de um tipo podem ser de qualquer tipo; mesmo de outra estrutura. Exemplo: TYPE Ponto2D REAL :: X, Y END TYPE Ponto2D TYPE Circulo TYPE(Ponto2D) :: Centro REAL :: Raio END TYPE Circulo TYPE(Circulo) :: C declara C que é uma variável do tipo Circulo e tem dois componentes, onde o primeiro é do tipo Ponto2D, e o segundo do tipo REAL. C = Circulo(Ponto2D(2.5, 3.2), 10.0) representa um círculo de raio 10.0 e centrado em (2.5, 3.2). O valor de C%Centro%X é de 2.5. João Miguel da Costa Sousa 254 Processamento e atribuições E/S de estruturas tem de ser efectuada componente a componente Exemplos: leitura e escrita da variável Aluno do tipo Ficha_Aluno, e atribuição por componentes. READ(*, *) Aluno%Nome, Aluno%Numero, Aluno%Exame, & Aluno%Projecto, Aluno%NotaFinal WRITE(*, (1X, Nome:, A) ) Aluno%Nome WRITE(*, (1X, Numero:, I5) ) Aluno%Numero WRITE(*, (1X, Exame:, F6.1) ) Aluno%Exame WRITE(*, (1X, Projecto:, F6.1) ) Aluno%Projecto WRITE(*, (1X, Nota Final:, I4) ) Aluno%NotaFinal Aluno2%Nome = Aluno%Nome Aluno2%Numero = Aluno%Numero Aluno2%Exame = Aluno%Exame Aluno2%Projecto = Aluno%Projecto Aluno2%NotaFinal = Aluno%NotaFinal Atribuição: variavel_estrutura = expressao_estrutura Exemplo: Aluno2 = Aluno João Miguel da Costa Sousa 255 4

5 Estruturas como argumentos As estruturas podem ser usadas como argumentos de subprogramas. Os parâmetros actuais e formais devem ser do mesmo tipo! Exemplo: programa que dados dois pontos calcula a distância entre eles e a recta que passa pelos dois. Distância entre 2 pontos P 1 com coordenadas (x 1, y 1 ) e P 2 com coordenadas (x 2, y 2 ): 2 2 ( x2 x1) + ( y2 y1 ) Recta que passa nos pontos P 1 e P 2 : y = mx + b y2 y1 m =, x x b = y1 m x1 2 1 João Miguel da Costa Sousa 256 Programa: Pontos e linhas (1) PROGRAM Pontos_e_Linhas! ! Programa que le dois pontos P1 e P2 representados como estruturas, calcula a! distancia entre P1 e P2 e calcula a equacao da recta unindo os dois pontos.! Identificadores usados:! Ponto : ficha representada em 2 dimensoes! P1, P2 : dois pontos a ser processados! Distancia : funcao que calcula distancia entre pontos! EquacaoRecta : subrotina que calcula a equacao duma recta! Resposta : resposta do utilizador!! Entradas: Coordenadas dos pontos P1 e P2! Saidas: distancia entre 2 pontos e recta entre eles! IMPLICIT NONE TYPE Ponto REAL :: X, Y END TYPE Ponto TYPE(Ponto) :: P1, P2 CHARACTER(1) :: Resposta DO WRITE(*, (1X, A), ADVANCE = NO ) & Introduza as coordenadas dos pontos P1 e P2: READ (*, *) P1%X, P1%Y, P2%X, P2%Y WRITE(*, (1X,2(A, (,F5.2,,,F5.2, ) ), e, F5.2) ) & Distancia entre, P1%X, P1%Y, e, P2%X, P2%Y, & Distancia(P1, P2) CALL EquacaoRecta(P1, P2) João Miguel da Costa Sousa 257 5

6 Programa: Pontos e linhas (2) WRITE(*, (/ 1X, A), ADVANCE = NO ) & Mais pontos (S ou N)? READ(*, *) Resposta IF (Resposta /= S ) EXIT END DO CONTAINS!--Distancia ! Funcao que calcula a distancia entre os pontos P1 e P2!! Aceita: Estruturas P1 e P2 do tipo Ponto! Retorna: Distancia entre P1 e P2! FUNCTION Distancia(P1, P2) TYPE(Ponto), INTENT(IN) :: P1, P2 REAL :: Distancia Distancia = SQRT((P2%X - P1%X)**2 + (P2%Y - P1%Y)**2) END FUNCTION Distancia!--EquacaoRecta ! Subrotina que calcula a equacao da recta y = mx + b da! linha que passa nos pontos P1 e P2. Variaveis locais:! M : declive da recta! B : interseccao da recta com o eixo dos yy! Aceita: Estruturas P1 e P2 do tipo Ponto! Retorna: Escreve equacao da recta que passa em P1 e P2! João Miguel da Costa Sousa 258 Programa: Pontos e linhas (3) SUBROUTINE EquacaoRecta(P1, P2) TYPE(Ponto), INTENT(IN) :: P1, P2 REAL :: M, B IF (P1%X == P2%X) THEN WRITE (*, (1X, A, F5.2) ) Linha vertical x =, P1%X ELSE M = (P2%Y - P1%Y) / (P2%X - P1%X) B = P1%Y - M * P1%X WRITE (*, (1X, 2(A, F5.2)) ) Equacao da recta e y =, M, x +, B END IF END SUBROUTINE EquacaoRecta END PROGRAM Pontos_e_Linhas Exemplo de execução: > Introduza as coordenadas dos pontos P1 e P2: 0,0 1,1 > Distancia entre ( 0.00, 0.00) e ( 1.00, 1.00) e 1.41 > Equacao da recta e y = 1.00x > > Mais pontos (S ou N)? S > Introduza as coordenadas dos pontos P1 e P2: 1,1 1,5 > Distancia entre ( 1.00, 1.00) e ( 1.00, 5.00) e 4.00 > Linha vertical x = 1.00 > > Mais pontos (S ou N)? S > Introduza as coordenadas dos pontos P1 e P2: 3.1, ,7.2 > Distancia entre ( 3.10, 4.20) e (-5.30, 7.20) e 8.92 > Equacao da recta e y = -0.36x > > Mais pontos (S ou N)? N João Miguel da Costa Sousa 259 6

7 Exemplo: Tabela de utilizadores Pretende-se procurar um utilizador numa base de dados, e verificar a utilização dos seus recursos computacionais. Um dado ficheiro deverá conter o apelido, nome, número de identificação, recursos disponíveis e recursos utilizados, i.e.: Babbage Charles ADA Newton Isaac APPLE Leibnitz Gottfried CALC Fahreneit Freda FRZ Celsius Christine FRZ Tower Lean PISA VanderVan Henry VAN Yale Harvard IVY Dado um número de utilizador, pretende-se que o programa indique o seu nome, apelido e a percentagem dos recursos disponíveis já utilizados. João Miguel da Costa Sousa 260 Ex: Registo Utiliz. Computadores PROGRAM Registos_Utilizacao_Computadores! ! Este programa le numeros de identificacao do teclado,! e procura numa base de dados se esse numero existe, e! nesse caso retorna informacao sobre esse utilizador.! Os identificadores usados sao os seguintes:!! Tp_Registo_Utilizacao : nome do tipo com informacao! Nome_Ficheiro : nome do ficheiro com dados! Estado_Abertura : variavel de estado para OPEN! Estado_Leitura : variavel de estado para READ! Utilizadores : tabela do Tp_Registo_Utilizacao! Num_Utilizadores : numero de utilizadores! Numero_Procurado : numero de id a procurar! Localizacao : indice do utilizador procurado! Encontrado : indica se a id procurada foi! : ou nao encontrada! Entradas : Numero_Procurado(teclado), Utilizadores(fich.)! Saidas : Numero, nome e % de recursos computacionais! utilizados, ou uma mensagem indicando que o numero! nao foi encontrado.! IMPLICIT NONE TYPE Tp_Registo_Utilizacao CHARACTER(15) :: Nome, Apelido INTEGER :: Numero_Identificacao CHARACTER(6) :: Palavra_chave REAL :: Recursos_Usados, Limite_Recursos END TYPE Tp_Registo_Utilizacao João Miguel da Costa Sousa 261 7

8 Registo Utiliz. Computadores CHARACTER(20) :: Nome_Ficheiro TYPE(Tp_Registo_Utilizacao), DIMENSION(20) :: Utilizadores INTEGER :: Estado_Abertura, Estado_Leitura, i INTEGER :: Num_Utilizadores, Numero_Procurado, Localizacao LOGICAL :: Encontrado! Le o nome do ficheiro com os registos e abre-o WRITE(*,'(1X, A)',ADVANCE="NO") "Escreva o nome do ficheiro:" READ (*, *) Nome_Ficheiro OPEN (10, FILE = Nome_Ficheiro, STATUS = "OLD", & IOSTAT = Estado_Abertura) IF (Estado_abertura <= 0) THEN i = 0 DO i = i+1 READ(10,*,IOSTAT=Estado_Leitura) Utilizadores(i)%Apelido,& Utilizadores(i)%Nome, & Utilizadores(i)%Numero_Identificacao, & Utilizadores(i)%Palavra_chave, & Utilizadores(i)%Recursos_Usados, & Utilizadores(i)%Limite_Recursos IF (Estado_Leitura<0) EXIT! Fim do fiheiro END DO Num_Utilizadores = i-1 João Miguel da Costa Sousa 262 Registo Utiliz. Computadores DO! Procura numero identificacao WRITE(*,*) WRITE(*,'(1X,A)',ADVANCE="NO") "Escreva o numero de & &utilizador (0 para parar): " READ (*,*) Numero_Procurado IF (Numero_Procurado /= 0) THEN CALL Procura_Numero(Utilizadores(1:Num_Utilizadores), & Numero_Procurado,Encontrado,Localizacao) IF (Encontrado) THEN WRITE(*,'(1X, I5, 1X, 2A)') & Utilizadores(Localizacao)%Numero_Identificacao, & Utilizadores(Localizacao)%Nome, & Utilizadores(Localizacao)%Apelido WRITE(*,'(1X, "utilizou", F5.1, "% de recursos")') & * Utilizadores(Localizacao)%Recursos_Usados & / Utilizadores(Localizacao)%Limite_Recursos ELSE WRITE(*,*) Numero_Procurado, " nao encontrado." END IF END IF! Se utilizador indicar, acaba o ciclo. IF (Numero_Procurado == 0) EXIT END DO ELSE WRITE(*,*) "Erro na abertura de ficheiro!!" END IF João Miguel da Costa Sousa 263 8

9 Registo Utiliz. Computadores CONTAINS!-Procura_Numero (...) SUBROUTINE Procura_Numero(Utilizadores, NumProcurado, Encontrado, Local) TYPE(Tp_Registo_Utilizacao), DIMENSION(:) :: Utilizadores INTEGER,INTENT(IN) :: NumProcurado INTEGER,INTENT(OUT) :: Local LOGICAL,INTENT(OUT) :: Encontrado INTEGER :: NumUtilizadores NumUtilizadores = SIZE(Utilizadores) Local = 1 Encontrado =.FALSE. DO IF ((Local > NumUtilizadores).OR. Encontrado) EXIT IF (NumProcurado== & Utilizadores(Local)%Numero_Identificacao) THEN Encontrado =.TRUE. ELSE Local = Local + 1 END IF END DO END SUBROUTINE Procura_Numero END PROGRAM Registos_Utilizacao_Computadores João Miguel da Costa Sousa 264 Exemplo de execução > Escreva o nome do ficheiro: dados.dat > > Escreva o numero de utilizador (0 para parar): > Charles Babbage > utilizou 92.8% de recursos > > Escreva o numero de utilizador (0 para parar): > Gottfried Leibnitz > utilizou 26.7% de recursos > > Escreva o numero de utilizador (0 para parar): > Harvard Yale > utilizou 54.2% de recursos > > Escreva o numero de utilizador (0 para parar): > nao encontrado > > Escreva o numero de utilizador (0 para parar): > Isaac Newton > utilizou 65.8% de recursos > > Escreva o numero de utilizador (0 para parar): 0 João Miguel da Costa Sousa 265 9

10 Outros tipos de dados Tipos de dados parametrizados Inteiros em Fortran: 32 bits de a Reais em Fortran: 32 bits a aprox. (precisão simples) Estes limites podem ser inadequados; podem ser necessária maior ou menor precisão. Estas alterações são dadas por tipos de dados parametrizados. Tipo COMPLEX a + bi, onde a e b são números reais e i 2 = -1 Tipo CHARACTER processamento avançado de cadeias de caracteres João Miguel da Costa Sousa 266 Tipos de dados parametrizados Representação de números é aproximada Reais não são representados exactamente Exemplo: equação que retorna sempre 1: PROGRAM Demo_1 IMPLICIT NONE REAL :: A, B, C a f 2 2 A + B 2AB B 2 A 2 A = = 1 2 A READ (*, *) A, B C = ((A + B)**2-2.0*A*B - B**2) / A**2 WRITE (*,*) C END PROGRAM Demo_1 A B C e e e E e E+09 João Miguel da Costa Sousa

11 Declaração de tipos parametrizados Tipos parametrizados Forma: especificador_tipo(kind = numero-tipo) :: lista ou especificador_tipo(numero-tipo) :: lista o especificador_tipo é em geral: INTEGER REAL COMPLEX LOGICAL o numero-tipo é um inteiro positivo (constante) com valor positivo; os atributos são atributos opcionais; a lista é uma lista de identificadores. Declara que os identificadores na lista têm o tipo e o numero-tipo especificado. João Miguel da Costa Sousa 268 Tipos parametrizados (concl.) Os números-tipo dependem da máquina e do compilador. Reais mais utilizados: Exemplo: Tipo NúmeroTipo Descrição REAL 4 Valores com precisão simples com aproximadamente 7 dígitos significativos; armazanados em 32 bits REAL 8 Valores com precisão dupla com aproximadamente 14 dígitos significativos; armazanados em 64 bits REAL(KIND = 4) :: Z REAL(8), DIMENSION(5,5) :: Beta Inteiros em PowerStation: Tipo NúmeroTipo Descrição INTEGER 1 Inteiros de 8 bits: -2 7 até INTEGER 2 Inteiros de 16 bits: até INTEGER 4 Inteiros de 64 bits: até João Miguel da Costa Sousa

12 Tipo de dados COMPLEX Tipo COMPLEX a + bi, onde a e b são reais. Em Fortran: (a, b) Declarações de complexos COMPLEX :: A, B COMPLEX, DIMENSION(10,10) :: Rho Operações com complexos z = a + bi e w = c + di Soma z + w = ( a + c) + ( b + d) i Subtração z w = ( a c) + ( b d) i Produto Divisão z w = ( ac bd) + ( ad + bc) i z w = ac + bd bc ad + c + d c + d i João Miguel da Costa Sousa 270 Tipo complexo (exemplos) Exemplo de operações (C e Z variáveis complexas): C = (6.2, 2.4) Z = 4.0 * C / 2 retorna para Z o valor: (12.4, 4.8) Se for atribuída a X do tipo real: X = 4.0 * C/2, retorna o valor 12.4 Se for atribuída a N do tipo inteiro: N = 4.0 * C/2, retorna o valor 12 Funções complexas intrínsecas: ABS(z) CONJG(z) EXP(z) AIMAG(z) CMPLX(x, y) REAL(z) João Miguel da Costa Sousa

13 Entrada e saída de complexos Complexos são lidos como um par de reais ou 2 reais PROGRAM Demo_2 IMPLICIT NONE COMPLEX :: X, Y, W, Z, A READ(*, *) X, Y READ(*, (2F2.0) ) W WRITE(*, *) X, Y WRITE(*, *) W WRITE(*, 10) X, Y, W 10 FORMAT(1X, F5.2, +, F8.2, I ) Z = (X + Y) / (1.0, 2.2) A = X * Y WRITE(*, 10) Z, A END PROGRAM Demo_2 Entrada de dados: > (3,4), (0.75, -2.23) > 5 7 Saída produzida: > ( , ) ( , ) > ( , ) > I > I > I > I > I João Miguel da Costa Sousa 272 O tipo CHARACTER Cadeia de caracteres vazia ou Compilador associa cada variável a um endereço em memória. Nomes das variáveis são identificadores. ou Declaração de cadeias de caracteres CHARACTER(LEN = n) :: lista CHARACTER(n) :: lista Exemplo: CHARACTER(LEN = 15) :: Nome, Apelido CHARACTER(15) :: Nome Em subprogramas os argumentos formais podem ser prédefinidos: CHARACTER(*) :: lista_identificadores João Miguel da Costa Sousa

14 Operacões com caracteres Caracteres podem ser parametrizados: CHARACTER(LEN=n, KIND=num_tipo) :: lista CHARACTER(n, KIND=num_tipo) :: lista CHARACTER(n, num_tipo) :: lista CHARACTER(KIND=num_tipo, LEN=n) :: lista CHARACTER(KIND=num_tipo) :: lista onde o num_tipo especifica o esquema de codificação (ASCII, EBCDIC, etc.) e/ou o tipo de caracteres (Inglês, Português, Russo, etc.) Concatenação de caracteres: operador binário dado por // Exemplo 1 centi // metros produz: centimetros Exemplo 2 CHARACTER(7) :: UnidadeQuadrada UnidadeQuadrada = quadrados centi // metros // UnidadeQuadrada produz: centimetros quadrados João Miguel da Costa Sousa 274 Subcadeias de caracteres Exemplo: subcadeia dos caracteres 6 a 10 de Unidade = centimetros é dada por: Unidade(6:10) e tem o valor: metro As primeiras e últimas posições não necessitam de ser especificadas. Exemplo: CHARACTER(15) :: Curso, Nome*20 Curso = Engenharia Curso(:3) tem o valor Eng e Curso(8:) tem o valor ria, onde _ corresponde a um espaço em branco. A primeira posição deve ser positiva, e a última >= que a primeira, mas não maior que o comprimento da cadeia de caracteres. Podem ser efectuadas atribuições a sub-cadeias, modificando parte de uma cadeia de caracteres. João Miguel da Costa Sousa

15 Funções com caracteres Funções de cadeias para cadeias: ADJUSTL(cad_caracteres) ADJUSTR(cad_caracteres) REPEAT(cad_caracteres, n) TRIM(cad_caracteres) Exemplo: CHARACTER(10) :: Cadeia = ABCDE A saída produzida por: WRITE(*, *) ***, Cadeia, *** WRITE(*, *) ***, ADJUSTL(Cadeia), *** WRITE(*, *) ***, ADJUSTR(Cadeia), *** WRITE(*, *) ***, TRIM(Cadeia), *** WRITE(*, *) ***, REPEAT(Cadeia,3), *** é a seguinte: >*** ABCDE *** >***ABCDE *** >*** ABCDE*** >*** ABCDE*** >*** ABCDE *** >*** ABCDE ABCDE ABCDE *** João Miguel da Costa Sousa 276 Funções com caracteres (cont.) Funções de comprimento: LEN(cad_caracteres) LEN_TRIM(cad_caracteres) Exemplo: CHARACTER(10) :: Cadeia = ABCDE O valor retornado por: LEN(Cadeia) retorna 10, e LEN_TRIM(Cadeia) retorna 6. Funções de procura: INDEX(cadeia 1, cadeia 2 ) ou INDEX(cadeia 1, cadeia 2, atras) SCAN(cadeia 1, cadeia 2 ) ou SCAN(cadeia 1, cadeia 2, atras) VERIFY(cadeia 1, cadeia 2 ) ou VERIFY(cadeia 1, cadeia 2, atras) João Miguel da Costa Sousa

16 Exemplo com funções de procura Exemplo: CHARACTER(25) :: Unidades = centimetros e metros A saída produzida por: WRITE(*, *) INDEX(Unidades, metros ) WRITE(*, *) INDEX(Unidades, metros,.false.) WRITE(*, *) INDEX(Unidades, metros,.true.) WRITE(*, *) INDEX(Unidades, cents ) WRITE(*, *) SCAN( kilometro, Unidades) WRITE(*, *) SCAN( kilometro, Unidades,.FALSE.) WRITE(*, *) SCAN( kilometro, Unidades,.TRUE.) WRITE(*, *) SCAN( flora, Unidades) WRITE(*, *) VERIFY( kilometro, Unidades) WRITE(*, *) VERIFY( kilometro, Unidades,.FALSE.) WRITE(*, *) VERIFY( kilometro, Unidades,.TRUE.) WRITE(*, *) VERIFY( tenis, Unidades) é a seguinte: > 6 > 6 > 15 > 0 > 2 > 2 > 9 > 3 > 1 > 1 > 3 > 0 João Miguel da Costa Sousa 278 Gestão de memória em tabelas Instruções ALLOCATE e DEALLOCATE utilizam memória quando o programa corre. permitem utilizar apenas a memória necessária evitam desperdício de memória eficientes para tabelas com tamanho constante Para dados de diferentes tamanhos, quando se varia o tamanho da tabela efectuam-se as seguintes operações: Uma nova tabela é alocada. Os elementos da tabela antiga são copiados para a tabela nova. Os novos elementos são introduzidos na nova tabela. A tabela antiga é apagada da memória. Estas operações demoram bastante tempo! João Miguel da Costa Sousa

17 Ponteiros As tabelas (mesmo alocadas) são estruturas de dados estáticas. Estruturas de dados dinâmicas permitem expandir ou contrair a estrutura durante a execução. É constituída por uma colecção de elementos, chamados nós ligados entre si. Esta ligação associa a cada nó um ponteiro para o próximo nó da estrutura. Exige a necessidade de alocar e aceder à memória durante a execução dum programa. Variáveis que apontam para essas localizações em memória: ponteiros. Exemplo: Lista ligada Lista Dados Prox Dados Prox Dados Prox XXX YYY ZZZ João Miguel da Costa Sousa 280 Listas implementadas em tabelas Tabelas podem implementar listas. São ineficientes para: tamanhos variáveis durante a execução, inserir e retirar elementos na lista. Cada vez que elementos novos são inseri-dos dever-se-á mover elementos na tabela. Exemplo 1: Inserir 42 na lista 23, 25, 34, 48, 61, 89. Os elementos 4 a 6 devem ser deslocados para as posições 5 a 7, para o novo elemento ser introduzido em 4: ?...? ? Exemplo 2: Retirar 25 da lista: ? ?...? João Miguel da Costa Sousa

18 Listas ligadas Contém uma colecção de elementos chamados nós, que contêm: 1. um elemento da lista, 2. um ponteiro para o nó seguinte. O acesso ao nó inicial (1º elemento da lista) deve ser mantido. Exemplo: lista com nomes Silva, Fonseca e Castro Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro A variável Lista aponta para o primeiro nó da lista, e o Prox aponta para o próximo nó. O símbolo terra não aponta para nada, indicando assim o fim da lista (ponteiro vazio ou null pointer). João Miguel da Costa Sousa 282 Inserção de elementos em listas Nas listas ligadas não é necessário mover elementos quando se altera a lista. Para inserir um novo elemento na lista: 1. Criar um novo nó. Guardar o valor a inserir no elemento do nó (pressupõe-se que é possível obter nós duma dada fonte, e que estão nós disponíveis) 2. Ligar o novo nó à lista. Podem existir 2 casos: o nó é acrescentado no início da lista; o nó é inserido no meio da lista. João Miguel da Costa Sousa

19 Exemplo: inserção em listas Exemplo 1: inserir o nome Reis no início da lista Criar um nó com o nome Reis. O ponteiro NovoPont aponta para este nó. Lista NovoPont Dados Reis Prox Dados Prox Dados Prox Dados Prox Silva Fonseca Castro O nó é inserido na lista, com a sua ligação a apontar para o primeiro nó na lista; o Prox de NovoPont aponta para o mesmo que Lista: NovoPont Dados Reis Prox Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Ao ponteiro Lista é atribuído NovoPont: NovoPont Reis Dados Prox Dados Prox Dados Prox Lista Silva Fonseca Castro João Miguel da Costa Sousa 284 Exemplo 2: inserção em listas Exemplo 2: inserir nome Ramos após Fonseca, onde PontPred é o ponteiro predecessor: PontPred Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Criar um nó com o nome Ramos (como anteriormente): NovoPont Dados Ramos Prox PontPred Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro João Miguel da Costa Sousa

20 Exemplo 2: inserção em listas Prox de NovoPont igual a Prox de PontPred NovoPont Dados Prox Ramos PontPred Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Prox de PontPred igual a NovoPont: NovoPont Dados Prox Ramos PontPred Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro João Miguel da Costa Sousa 286 Apagar elementos de listas Tal como na inserção existem 2 casos: 1. apagar o primeiro elemento da lista; 2. apagar um elemento com um predecessor. Exemplo: para apagar o nome Silva no início da lista basta passar Lista para o segundo nó. Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Atribui a PontAux o ponteiro Lista. PontAux Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro João Miguel da Costa Sousa

21 Apagar elementos de listas Atribui a Lista o Prox de PontAux. PontAux Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Ponteiro PontAux enviado para pilha de livres. Lista PontAux Dados Prox Fonseca Dados Castro Prox João Miguel da Costa Sousa 288 Apagar elementos de listas Exemplo 2: apagar o nome Fonseca da lista inicial. Atribui ao ponteiro PontAux o ponteiro Prox de PontPred. PontPred Lista PontAux Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Atribui a Prox de PontPred o ponteiro Prox de PontAux. PontPred Lista Dados Prox Dados Prox Dados Prox Silva Fonseca Castro Coloca o ponteiro PontAux na pilha de ponteiros disponíveis. PontPred Lista PontAux Dados Prox Silva PontAux João Miguel da Costa Sousa 289 Dados Castro Prox 21

22 Ponteiros em Fortran Variáveis do tipo ponteiro Forma: tipo, lista-atributos, POINTER :: var_ponteiro Declara a variável var_ponteiro, usada para aceder a localizações em memória. A variável tem um dado tipo onde os atributos podem ser guardados. Exemplo 1: Um ponteiro para cadeias de caracteres é definido como: CHARACTER(10), POINTER :: PontCadeia Esta variável só pode ser utilizada para aceder a localizações em memória com 10 caracteres. Exemplo 2 TYPE :: Info_Inventario INTEGER :: Numero REAL :: Preco END TYPE Info_Inventario TYPE(Info_Inventario), POINTER :: PontInventario João Miguel da Costa Sousa 290 Criação de ponteiros Instrução ALLOCATE Forma: ALLOCATE(ponteiro) Exemplo: ALLOCATE(PontCadeia) O ponteiro PontCadeia aponta para uma localização em memória, chamada alvo, com uma cadeia de caracteres (e.g. computador ) PontCadeia Computador Estados de associação de ponteiros: 1. Indefinido - estado inicial após declaração. 2. Associado - quando aponta para um alvo. ponteiro? 3. Vazio - null pointer; não aponta para nada. ponteiro João Miguel da Costa Sousa

23 Associação de ponteiros Função de teste ASSOCIATED ASSOCIATED(ponteiro) Retorna.TRUE. se o ponteiro está associado e.false. caso contrário. O ponteiro não pode estar indefinido. Comando NULLIFY NULLIFY(ponteiro) Torna o ponteiro vazio. A localização em memória não é acessível. Programa dispõe de uma pilha de memória disponível. Instrução ALLOCATE executa: 1. Retira um bloco de memória livre da pilha. 2. Aloca esse espaço ao programa executável. Pilha de memória é limitada: ALLOCATE(lista, STAT = variavel-inteira) DEALLOCATE(lista, STAT = variavel-inteira) João Miguel da Costa Sousa 292 Atribuição de ponteiros Forma: ponteiro 1 => ponteiro 2 O ponteiro 1 tem a mesma associação do ponteiro 2. O valor anterior de ponteiro 1 não é acessível, a não ser que estivesse outro ponteiro a apontar para a mesma localização. Antes da atribuição: ponteiro1 ponteiro2 ponteiro3 Após a atribuição ponteiro 1 => ponteiro 2 : ponteiro1 ponteiro3 Exemplo: ponteiro2 CHARACTER(8), POINTER :: PontCadeia, PontTemp onde PontTemp aponta para software e PontCadeia aponta para hardware. Qual o resultado da instrução: PontTemp => PontCadeia? João Miguel da Costa Sousa

24 Expressões com ponteiros Regra básica: Quando um ponteiro associado aparece numa expressão, é utilizado directamente o valor para o qual está a apontar. Exemplo: CHARACTER(10), POINTER :: PontCadeia CHARACTER(10) :: Produto = Computador PontCadeia = Produto e PontCadeia = Computador retornam: PontCadeia Computador WRITE(*, *) PontCadeia e IF PontCadeia(2:4) == omp THEN WRITE(*, *) PontCadeia END IF imprimem: > Computador PontTemp = PontCadeia PontCadeia PontTemp Computador Computador João Miguel da Costa Sousa 294 Implementação de listas ligadas ListaNumeros Dados Prox Dados Prox Dados Prox é definida como: TYPE Lista_Nos INTEGER :: Dados TYPE(Lista_Nos), POINTER :: Proximo END TYPE Lista_Nos Construção de uma lista ligada TYPE(Lista_Nos), POINTER :: ListaNumeros, PontTemp ALLOCATE(PontTemp) PontTemp%Dados = 1550 PontTemp%Proximo => ListaNumeros ListaNumeros => PontTemp Para construir toda a lista, a primeira instrução seria: NULLIFY(ListaNumeros) João Miguel da Costa Sousa

25 Listas ligadas Percorrer uma lista ligada, escrevendo todos os seus elementos PontActual => ListaNumeros DO IF (.NOT. ASSOCIATED(PontActual)) EXIT! Fim da lista WRITE (*, *) PontActual%Dados PontActual => PontActual%Proximo END DO Inserir elemento no meio da lista ALLOCATE(PontTemp, STAT = EstadoAlocacao) PontTemp%Dados = ElementoNovo Inserir elemento entre PontPred e PontActual: PontTemp%Proximo => PontActual PontPred%Proximo => PontTemp João Miguel da Costa Sousa 296 Apagar elementos em listas ligadas Apagar elementos na lista Apagar elementos no início da lista PontActual => Lista Lista => PontActual%Proximo DEALLOCATE(PontActual) Apagar o elemento apontado porpontactual precedido porpontpred meio da lista PontPred%Proximo => PontActual%Proximo DEALLOCATE(PontActual) João Miguel da Costa Sousa

26 Aplicação: Endereços Internet Protocolos de comunicação TCP (Transmission Control Protocol) IP (Internet Protocol) TCP/IP identification endereços únicos na Internet. Exemplo: dem.ist.utl.pt endereço do Dep. Eng. Mecânica do IST Os 4 campos correspondem a: host.subdomain.subdomain.rootdomain Estes endereços são dados por inteiros: João Miguel da Costa Sousa 298 Problema: Acesso à Internet Uma porta de acesso é um sistema de ligação entre duas redes de computadores. Exemplo: ligação de uma Universidade com a Internet. Cada vez que um estudante acede à WWW o seu endereço TCP/IP é guardado num ficheiro. Problema: O administrador do sistema pretende verificar periodicamente quem e quantas vezes acedeu à Internet. Solução: Entrada: O ficheiro contendo os endereços TCP/IP Saída: Uma lista com os diferentes endereços e o número de vezes que aparecem no ficheiro Existem 2 32 possibilidades de endereços, logo uma estrutura estática, tal como uma tabela, não é eficiente. João Miguel da Costa Sousa

27 Algoritmo: Acesso à Internet Identificadores NomeFicheiro nome do ficheiro Endereco o endereço TCP/IP ListaEnderecos lista ligada de endereços Algoritmo Este algoritmo encontra endereços TCP/IP gravados num ficheiro e o número de vezes que ocorrem. Entrada: NomeFicheiro ficheiro contendo os endereços TCP/IP. Saída: Lista com os endereços e o número de vezes que aparecem no ficheiro. 1. Lê o nome do ficheiro e abre-o para leitura. Se o ficheiro não fôr aberto acaba o programa. 2. Inicializa a ListaEnderecos como lista vazia. João Miguel da Costa Sousa 300 Algoritmo: Acesso à Internet (2) 3. Repete o seguinte: a) Lê um endereço do ficheiro b) Se existe erro de leitura escreve mensagem de erro. c) Caso contrário: d) Se não há mais endereços termina o ciclo. e) Caso contrário: i. Procura na ListaEnderecos se Endereco está contido na lista. ii. Se endereço já existe Incrementa contador desse Endereco Caso contrário Insere novo endereço na lista, com contador a Atravessa ListaEnderecos e escreve cada TCP/IP e o valor do seu contador. João Miguel da Costa Sousa

28 Programa: Enderecos_Internet PROGRAM Enderecos_Internet! ! Este programa le enderecos TCP/IP de um ficheiro e produz uma lista de enderecos! distintos indicando quantas vezes esses enderecos aparecem no ficheiro.! Variáveis usadas:!! Nome_Ficheiro : nome do ficheiro com enderecos! Estado_Abertura : variavel de estado para OPEN! Estado_Leitura : variavel de estado para READ! Endereco : endereco lido do ficheiro! ListaEnderecos : ponteiro para o primeiro no da! Lista de enderecos!! Subrotinas utilizadas para processar listas:! Adiciona_Lista, Procura, Enderecos_saida!! Entradas : NomeFicheiro(teclado), Enderecos (ficheiro)! Saidas : Lista com enderecos distintos e numero de ocorrencias.! IMPLICIT NONE!Definicao do tipo no-endereco TYPE Lista_No CHARACTER(15) :: Endereco_TCP_IP!Dados endereco INTEGER :: Contador!Contador desse endereco TYPE(Lista_No), POINTER :: Prox!Ponteiro para prox. no END TYPE Lista_No João Miguel da Costa Sousa 302 Programa: Enderecos_Internet CHARACTER(15) :: Endereco, Nome_Ficheiro*20 INTEGER :: Estado_Abertura, Estado_Leitura TYPE(Lista_No), POINTER :: ListaEnderecos! Le o nome do ficheiro com os registos e abre-o WRITE(*,'(1X, A)',ADVANCE="NO") "Escreva o nome do ficheiro:" READ (*, *) Nome_Ficheiro OPEN (10, FILE = Nome_Ficheiro, STATUS = "OLD", & IOSTAT = Estado_Abertura) IF (Estado_abertura > 0) THEN WRITE(*, *) *** Ficheiro de enderecos invalido *** ELSE!Cria uma lista de enderecos vazia NULLIFY(ListaEnderecos)!Le enderecos do ficheiro ate ao fim do ficheiro DO READ(10,*,IOSTAT=Estado_Leitura) Endereco IF (Estado_Leitura<0) EXIT! Fim do ficheiro CALL Adiciona_a_Lista(ListaEnderecos,Endereco) END DO END IF CALL Escreve_Enderecos(ListaEnderecos) João Miguel da Costa Sousa

29 Subrotina: Adiciona_a_Lista CONTAINS! ! Esta subrotina verifica se Endereco ja se encontra na lista ligada (utilizando! Procura). Se nao, Endereco e acrescentado no inicio da lista. Se sim, o contador! e incrementado de 1 elemento. Variaveis locais:! EstadoAlocacao : estado da instrucao OPEN! PontLocal : pont. para o no com Endereco, ou vazio! Esta_na_Lista : indica se Endereco se encontra na! ListaEnderecos!! Recebe: ListaEnderecos e Endereco! Retorna: ListaEnderecos modificada! SUBROUTINE Adiciona_a_Lista(ListaEnderecos,Endereco) TYPE(Lista_No), POINTER :: ListaEnderecos CHARACTER(*), INTENT(IN) :: Endereco TYPE(Lista_No), POINTER :: PontLocal INTEGER :: EstadoAlocacao LOGICAL :: Esta_na_Lista IF (.NOT. ASSOCIATED(ListaEnderecos)) THEN!Lista vazia ALLOCATE(ListaEnderecos, STAT = EstadoAlocacao) IF (EstadoAlocacao /= 0) THEN WRITE(*, *) *** Nao ha memoria disponivel! *** ELSE ListaEnderecos%Endereco_TCP_IP = Endereco ListaEnderecos%Contador = 1 NULLIFY(ListaEnderecos%Prox) END IF João Miguel da Costa Sousa 304 Subrotinas de Enderecos_Internet ELSE!Lista nao vazia; determina se Endereco ja existe CALL Procura_em_Lista(ListaEnderecos,Endereco, & PontLocal,Esta_na_Lista) IF (Esta_na_Lista) THEN! Incrementa contador de um PontLocal%Contador = PontLocal%Contador + 1 ELSE!Cria um novo no e insere-o no inicio da lista ALLOCATE(PontLocal, STAT = EstadoAlocacao) IF (EstadoAlocacao /= 0) THEN WRITE(*, *) *** Nao ha memoria disponivel! *** ELSE PontLocal%Endereco_TCP_IP = Endereco PontLocal%Contador = 1 PontLocal%Prox => ListaEnderecos ListaEnderecos => PontLocal END IF ENDIF ENDIF END SUBROUTINE Adiciona_a_Lista! ! Esta subrotina procura na ListaEnderecos por um no contendo Endereco. Se este! endereco for encontrado, o ponteiro PontLocal aponta para o no com Endereco, e! Esta_na_Lista retorna verdadeiro; caso contrario PontLocal e vazio (NULL) e! Esta_na_Lista falso.!! Recebe: ListaEnderecos e Endereco! Retorna: PontLocal, Esta_na_Lista! SUBROUTINE Procura_em_Lista(ListaEnderecos, Endereco, PontLocal, Esta_na_Lista) João Miguel da Costa Sousa

30 Subrotina: Procura_em_Lista SUBROUTINE Procura_em_Lista(ListaEnderecos, Endereco, PontLocal, Esta_na_Lista) TYPE(Lista_No), POINTER :: ListaEnderecos, PontLocal CHARACTER(*), INTENT(IN) :: Endereco LOGICAL, INTENT(OUT) :: Esta_na_Lista PontLocal => ListaEnderecos Esta_na_Lista =.FALSE.! Percorre a lista ate encontrar endereco ou ate ao fim DO IF(Esta_na_Lista.OR..NOT. ASSOCIATED(PontLocal)) EXIT! Endereco nao encontrado ou fim da lista termina ciclo IF (PontLocal%Endereco_TCP_IP == Endereco) THEN Esta_na_Lista =.TRUE. ELSE! Procura no proximo elemento PontLocal => PontLocal%Prox END IF END DO END SUBROUTINE Procura_em_Lista João Miguel da Costa Sousa 306 Subrotina: Enderecos_Saida! ! Esta subrotina escreve o conteudo da lista ligada apontada por ListaEnderecos.! Imprime o endereco e o contador de cada no.! Variveis locais:! PontAux : ponteiro que percorre a lista!! Recebe: ListaEnderecos! Saida: Escreve endrecos e contador nos nos! SUBROUTINE Escreve_Enderecos(ListaEnderecos) TYPE(Lista_No), POINTER :: ListaEnderecos, PontAux PontAux => ListaEnderecos WRITE(*, *) WRITE(*, *) "Enderecos de Internet" WRITE(*, *) WRITE(*, *) " Endereco Contador " WRITE(*, *) " "! Escreve informacao nos nos ate ao fim da lista DO IF (.NOT. ASSOCIATED(PontAux)) EXIT WRITE(*, 1X, A, 4X, I4 ) PontAux%Endereco_TCP_IP, PontAux%Contador PontAux => PontAux%Prox END DO END SUBROUTINE Escreve_Enderecos END PROGRAM Enderecos_Internet João Miguel da Costa Sousa

31 Resultados Ficheiro exfic.dat: Exemplo de execução: > Escreva o nome do ficheiro: exfic.dat > > Endereco Contador > > > > > > > João Miguel da Costa Sousa

Introdução ao Fortran 90. Aula 3

Introdução ao Fortran 90. Aula 3 Introdução ao Fortran 90 Aula 3 Usando vetores e matrizes Definição Uma matriz ou vetor consiste de um conjunto retangular de elementos, todos do mesmo tipo e espécie do tipo. Uma matriz ou vetor é um

Leia mais

Programação com Funções. Subprogramas do tipo Função

Programação com Funções. Subprogramas do tipo Função Programação com Funções Problemas complexos divididos em subproblemas Subprogramas funções (function) subrotinas (subroutine) Fortran contém funções intrínsecas, ou de biblioteca. Exemplos de funções intrínsecas:

Leia mais

O que é uma variável?

O que é uma variável? Escopo, Ligação e Ambiente de Execução mleal@inf.puc-rio.br 1 O que é uma variável? Uma variável pode ser definida como uma tupla r nome é um string usado para

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

Programação de Computadores:

Programação de Computadores: Instituto de C Programação de Computadores: Introdução ao FORTRAN Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Introdução ao FORTRAN Cinco aspectos

Leia mais

Apostila de Fortran. É uma pseudo-linguagem a qual oferece recursos para que o programador possa codificar e testar os seus algoritmos.

Apostila de Fortran. É uma pseudo-linguagem a qual oferece recursos para que o programador possa codificar e testar os seus algoritmos. Apostila de Fortran Fortran Uma das linguagens de programação mais velhas, o FORTRAN foi desenvolvido por uma equipe de programadores conduzida por John Backus na IBM, e foi primeiramente publicada em

Leia mais

Métodos de Programação I (2005/2006) 1. Ficheiro (file)

Métodos de Programação I (2005/2006) 1. Ficheiro (file) Métodos de Programação I (2005/2006) 1 Ficheiro (file) O tipo estruturado file representa, em Pascal, uma estrutura de dados capaz de armazenar dados ou resultados de qualquer outro tipo É uma estrutura

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18 ÍNDICE MÓDULO 1 INTRODUÇÃO À ALGORITMIA 11 1.1 PROGRAMAS E ALGORITMOS 12 Fases da programação 12 Algoritmos e algoritmia 13 Algoritmos em linguagem informal, pseudocódigo e fluxogramas 14 Símbolos utilizados

Leia mais

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros Métodos Computacionais Funções, Escopo de Variáveis e Ponteiros Tópicos da Aula Hoje vamos detalhar funções em C Escrevendo funções Comando return Passagem de argumentos por valor Execução de uma função

Leia mais

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Trabalho de Desenho de Linguagens de Programação e de Compiladores. Mini Pascal

Trabalho de Desenho de Linguagens de Programação e de Compiladores. Mini Pascal Trabalho de Desenho de Linguagens de Programação e de Compiladores Mini Pascal (cod. 11482) Departamento de Informática Universidade da Beira Interior Ano lectivo 2015/2016 1 Introdução Este trabalho é

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4 Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para

Leia mais

IntCinco = 5 IntOito = 8

IntCinco = 5 IntOito = 8 1. Enuncie as várias partes de um programa em FORTRAN. 2. Identifique os tipos básicos de dados em FORTRAN. 3. Escreva a declaração de tipo para as variáveis: 3.1. NumeroAluno do tipo inteiro 3.2. NomeProprio,

Leia mais

Variáveis, Tipos de Dados e Operadores

Variáveis, Tipos de Dados e Operadores ! Variáveis, Tipos de Dados e Operadores Engenharias Informática Aplicada 2.o sem/2013 Profa Suely (e-mail: smaoki@yahoo.com) VARIÁVEL VARIÁVEL É um local lógico, ligado a um endereço físico da memória

Leia mais

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica de Junho de 6 º Semestre Exame sem consulta : 6: h Nome: Número: Escreva o seu número e nome em todas as folhas de exame. O exame

Leia mais

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz Sumário de Aula } Conceito de Memória } Variáveis e Tipos de Dados } Constantes 2 Conceito de Memória } A memória de um computador é

Leia mais

Capítulo 10. MATRIZES

Capítulo 10. MATRIZES Capítulo 10. MATRIZES OBJETIVOS DO CAPÍTULO Conceitos de: conjunto multidimensional (matriz), ciclo implícito, ciclo duplo Comandos do FORTRAN: DIMENSION(:,:), MATMUL 10.1 programa10a.f90 Para inicializar

Leia mais

Linguagem de Maquina II. Visão Geral

Linguagem de Maquina II. Visão Geral Linguagem de Maquina II Visão Geral Revisão A linguagem de máquina é composta de seqüências binárias (1's e 0's) São interpretadas como instruções pelo hardware A linguagem de montagem e a linguagem de

Leia mais

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito

Leia mais

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 8 Listas Encadeadas (c) Dept. Informática - PUC-Rio 1 Tópicos Principais Motivação Listas encadeadas Implementações recursivas Listas de tipos estruturados (c) Dept. Informática

Leia mais

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema ALGORITMIA Resolução De Problemas Em Informática Docente: Ana Paula Afonso 2000-2001 Resolução de Problemas 1. Analisar o problema Conhecer o bem o problema Descrever o problema: subdividir, detalhar 2.

Leia mais

Inteiro Os dados do tipo inteiro são quantidades numéricas inteiras. Os dados deste tipo podem ser constantes, variáveis, funções e expressões.

Inteiro Os dados do tipo inteiro são quantidades numéricas inteiras. Os dados deste tipo podem ser constantes, variáveis, funções e expressões. Inteiro Os dados do tipo inteiro são quantidades numéricas inteiras. Os dados deste tipo podem ser constantes, variáveis, funções e expressões. Real Idêntico ao anterior, as quantidades em vez de numéricas

Leia mais

4ª Lista de Exercícios de Programação I

4ª Lista de Exercícios de Programação I 4ª Lista de Exercícios de Programação I Instrução As questões devem ser implementadas em C. 1. Faça um algoritmo que leia 10 valores inteiros armazenando-os em um vetor e depois calcule a soma dos valores

Leia mais

Módulo 10 Listas Encadeadas

Módulo 10 Listas Encadeadas Estruturas de Dados Módulo 10 Listas Encadeadas 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus

Leia mais

Algoritmo e Programação Matemática

Algoritmo e Programação Matemática Algoritmo e Programação Matemática Fundamentos de Algoritmos Parte 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Dados A funcionalidade principal de um computador

Leia mais

Iniciação à Informática

Iniciação à Informática Iniciação à Informática Dr. Manuel Monteiro Conteúdo 5 Folha de Cálculo Conceitos básicos Os programas denominados de folhas de cálculo permitem aos seus utilizadores elaborar documentos com cálculos,

Leia mais

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1 Sumário Sobre as Autoras ix Introdução xi 1 Sub-rotinas 1 1.1 Variáveis Globais e Locais 1 1.2 Passagem de Parâmetro (por valor por referência) 1 2 Vetores e Matrizes 7 2.1 Vetores 7 2.2 Matrizes 8 2.2.1

Leia mais

Módulo 5 Vetores e Alocação Dinâmica

Módulo 5 Vetores e Alocação Dinâmica Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Introdução à Ciência da Computação Variáveis Conceitos Básicos Variáveis x Constantes a = x + 5 a, x e 5 são variáveis ou constantes? Variáveis As variáveis são recipientes de valores É um espaço reservado

Leia mais

Linguagem C: Introdução

Linguagem C: Introdução Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais

Leia mais

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza Algoritmos: Conceitos Fundamentais Slides de autoria de Rosely Sanches e Simone Senger de Souza DADOS E EXPRESSÕES Uso da Informação Computador manipula informações contidas em sua memória. Classificadas

Leia mais

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados Métodos Computacionais Operadores, Expressões Aritméticas e Entrada/Saída de Dados Tópicos da Aula Hoje aprenderemos a escrever um programa em C que pode realizar cálculos Conceito de expressão Tipos de

Leia mais

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é

Leia mais

Lista de Comandos: Arquivo texto e Binário

Lista de Comandos: Arquivo texto e Binário Lista de Comandos: Arquivo texto e Declaração de arquivo do tipo binário program sequencial; type endereco = record end; rua : string[40]; numero : integer; CEP : real; cadastro = record end; nome : string[30];

Leia mais

Pilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Pilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira Pilha SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Pilha O que é? Para que serve? 2 Problema: chamada de sub-rotinas Rotina A 1 print A 2 call C 3 call B 4 call D 5 return Rotina B 1 call

Leia mais

CFAC: Programação em FORTRAN - I

CFAC: Programação em FORTRAN - I Programação em FORTRAN - I João Manuel R. S. Tavares Bibliografia FORTRAN ANSI 77 e WATFIV-S Jorge Filho, Caetano Loiola Editora Campus Linguagem de Programação Estruturada FORTRAN 77 Maximilian Emil Hehl

Leia mais

Programação em FORTRAN - I. João Manuel R. S. Tavares

Programação em FORTRAN - I. João Manuel R. S. Tavares Programação em FORTRAN - I João Manuel R. S. Tavares Bibliografia FORTRAN ANSI 77 e WATFIV-S Jorge Filho, Caetano Loiola Editora Campus Linguagem de Programação Estruturada FORTRAN 77 Maximilian Emil Hehl

Leia mais

Introdução à linguagem C++

Introdução à linguagem C++ Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução à linguagem C++ Introdução à linguagem C++ Conceitos básicos: variáveis, tipos de dados, constantes, I/O, etc. Estruturas

Leia mais

Ambiente de desenvolvimento

Ambiente de desenvolvimento Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Escola Politécnica da Universidade de São Paulo Departamento de Engenharia de Computação e Sistemas Digitais. PCS 0014: Linguagens de Programação

Escola Politécnica da Universidade de São Paulo Departamento de Engenharia de Computação e Sistemas Digitais. PCS 0014: Linguagens de Programação Escola Politécnica da Universidade de São Paulo Departamento de Engenharia de Computação e Sistemas Digitais Prof. ISVega PCS 0014: Linguagens de Programação Apontamento#13 Abr/2001 Sistemas de Tipos Conteúdo

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

Estruturas de Dados I

Estruturas de Dados I Estruturas de Dados I Rodrigo Porfírio da Silva Sacchi rodrigosacchi@ufgd.edu.br 3410-2075 Aula 6: Listas Encadeadas e Alocação Dinâmica Listas Encadeadas e Alocação Dinâmica Alocação Seqüencial versus

Leia mais

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro. Ficheiros de texto 1 Ficheiros de texto 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro. 2. Implementar um programa que procure num ficheiro uma palavra lida do teclado.

Leia mais

Métodos Computacionais. Listas Encadeadas

Métodos Computacionais. Listas Encadeadas Métodos Computacionais Listas Encadeadas Vetores Declaração de vetor implica na especificação de seu tamanho Não se pode aumentar ou diminuir tamanho Outra alternativa no uso de vetores é alocar dinamicamente

Leia mais

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA SUMÁRIO Introdução Conceitos básicos Formato básico Tipos primitivos Variáveis Constantes Operadores Operações

Leia mais

Listas Lineares Ordenadas

Listas Lineares Ordenadas Listas Lineares Ordenadas Algoritmos e Estruturas de Dados I Nesta apresentação será apresentado o ADT lista linear ordenada Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre

Leia mais

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares Curso Profissional de Gestão e Programação de Sistemas Informáticos Programação e Sistemas de Informação Módulo 1 3ª Parte Prof. Sandra Pais Soares Fundamentos de Programação 1. Palavras Reservadas 2.

Leia mais

Função Fundamental do SO

Função Fundamental do SO Função Fundamental do SO Gestão do Hardware Uma das funções fundamentais do sistema operativo é gerir os recursos do hardware de um modo o mais transparente possível ao utilizador Recursos principais a

Leia mais

Capítulo 11 Sistemas de Arquivos

Capítulo 11 Sistemas de Arquivos Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo Sistemas de s Introdução O armazenamento e a recuperação de informações

Leia mais

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica. Computação L2 Linguagem C++ ovsj@cin.ufpe.br Observação: Material Baseado na Disciplina Computação Eletrônica. Alfabeto São os símbolos ( caracteres ) permitidos na linguagem: Letras (maiúsculas e minúsculas);

Leia mais

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento Hello World Linguagem C printf("hello world!\n"); main é a função principal, a execução do programa começa por ela printf é uma função usada para enviar dados para o vídeo Palavras Reservadas auto double

Leia mais

Memória virtual. Sistemas de Computação

Memória virtual. Sistemas de Computação Memória virtual Fundamentos Memória virtual separação da memória lógica do usuário da memória física somente uma parte do programa precisa estar na memória para execução espaço de endereçamento lógico

Leia mais

Microcontrolador Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk

Microcontrolador Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk Assembly 8051 Num sistema microprocessado, geralmente, não existe um sistema operacional; O programa desenvolvido pelo programador deve cuidar tanto da lógica do programa, bem como da configuração e acesso

Leia mais

Mini-Projecto Nº2 INTRODUÇÃO À PROGRAMAÇÃO 3ª feira das 12 às 14h

Mini-Projecto Nº2 INTRODUÇÃO À PROGRAMAÇÃO 3ª feira das 12 às 14h Mini-Projecto Nº2 INTRODUÇÃO À PROGRAMAÇÃO 3ª feira das 12 às 14h INSCRIÇÕES A realização e entrega deste trabalho por parte dos alunos carece de inscrição prévia. O trabalho é individual. PRAZOS - Este

Leia mais

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011 Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 26 de Outubro de 2013 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

Vetor de tamanho variável

Vetor de tamanho variável Vetor de tamanho variável Resumo O objetivo deste artigo é apresentar uma técnica utilizada nos sprites do MSX para utilização de um vetor de tamanho variável, através de strings. 1- Introdução Um vetor

Leia mais

Funções de Entrada e Saída

Funções de Entrada e Saída inicio Escrita no ecrã (Saída de dados) Escrever( introduza o valor do raio ) Raio Leitura do valor do raio S Raio < 0 N O utilizador insere o valor do raio (Entrada de dados do teclado) Escrita no ecrã

Leia mais

Departamento de Matemática Universidade de Coimbra

Departamento de Matemática Universidade de Coimbra Departamento de Matemática Universidade de Coimbra Ano Lectivo de 200x/200(x + 1) Introdução aos Computadores e Programação Exame Tipo Duração da prova: 2h30 1. (Pergunta (teórica) simples) Diga o que

Leia mais

Sequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente.

Sequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente. Sequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente. Com base numa condição Estruturas de decisão ou selecção Com base num selector ou de escolha múltipla Com contador

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações

Linguagens de Programação Conceitos e Técnicas. Amarrações Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador

Leia mais

Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos AutoLISP - VII Funções Geométricas, de Strings, de Listas e de João Manuel R. S. Tavares Joaquim Oliveira Fonseca Funções geométricas As funções geométricas do AutoLISP são: distance, angle, polar, inters,

Leia mais

Professora Jeane Melo

Professora Jeane Melo Professora Jeane Melo Roteiro Lista Encadeada Alocação: Estática x Dinâmica O que são Ponteiros? Ponteiros Variáveis que Armazenam Endereços de Memória Mas, toda variável não é armazenada na memória? Ponteiros

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

CAP. VI ANÁLISE SEMÂNTICA CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve

Leia mais

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos Programação com Objectos Processamento de Dados I 2. Classes, Atributos e Métodos 1 Classes, Atributos e Métodos Modificadores de acesso (visibilidade) Sobrecarga de métodos (method overloading) Variáveis

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

Trabalho Linguagem e Programação de Compiladores

Trabalho Linguagem e Programação de Compiladores Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:

Leia mais

Introdução à Computação. Programas Básicos. ISEP DEI, Angelo Martins 2006 Programas Básicos - 1

Introdução à Computação. Programas Básicos. ISEP DEI, Angelo Martins 2006 Programas Básicos - 1 Introdução à Computação Programas Básicos ISEP DEI, Angelo Martins 2006 Programas Básicos - 1 Conteúdo Exemplo de um programa Apresentação sumária da construção de um programa em VB. Objectos e o mecanismo

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de

Leia mais

Introdução a linguagem C. Introdução à Programação 06/07

Introdução a linguagem C. Introdução à Programação 06/07 Introdução a linguagem C Introdução à Programação 06/07 A LINGUAGEM DE PROGRAMAÇÃO C A linguagem C foi criada, na década de setenta, por Dennis M. Ritchie; Apesar de se considerar uma linguagem de alto

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 04 Alocação Dinâmica Edirlei Soares de Lima Vetores - Declaração e Inicialização Declaração de um vetor: int meu_vetor[10]; Reserva um espaço de memória

Leia mais

SSC510 Arquitetura de Computadores 1ª AULA

SSC510 Arquitetura de Computadores 1ª AULA SSC510 Arquitetura de Computadores 1ª AULA REVISÃO DE ORGANIZAÇÃO DE COMPUTADORES Arquitetura X Organização Arquitetura - Atributos de um Sistema Computacional como visto pelo programador, isto é a estrutura

Leia mais

Paradigmas de Linguagens

Paradigmas de Linguagens Paradigmas de Linguagens Aula 2: Tipos de dados Professora Sheila Cáceres Tipos de dados Dados são a matéria prima da computação junto com os programas. LPs precisam manipular dados. LPS utilizam os conceitos

Leia mais

MATLAB. Programação básica. Abordagem topo-base. Início. Definição das. Divisão em Sub-problemas. Divisão em Sub-problemas. Abordagem topo-base

MATLAB. Programação básica. Abordagem topo-base. Início. Definição das. Divisão em Sub-problemas. Divisão em Sub-problemas. Abordagem topo-base MATLAB Programação básica Abordagem topo-base Início Definição Definição do do problema problema Definição das entradas Definição entradas e das e saídas saídas Projecto Projecto do do algoritmo algoritmo

Leia mais

Prof. Adriano Maranhão COMPILADORES

Prof. Adriano Maranhão COMPILADORES Prof. Adriano Maranhão COMPILADORES LINGUAGENS: INTERPRETADAS X COMPILADAS Resumo: Linguagem compilada: Se o método utilizado traduz todo o texto do programa, para só depois executar o programa, então

Leia mais

CFAC: Exemplos de Programas em FORTRAN

CFAC: Exemplos de Programas em FORTRAN FA: Exemplos de Programas em FORTRAN Exemplos de Programas em FORTRAN João Manuel R. S. Tavares Joaquim O. Fonseca Exemplo I Programa simples de utilização do ciclo DO, com escrita não formatada: PROGRAM

Leia mais

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33

Leia mais

Análise Semântica: Verificação de Tipos

Análise Semântica: Verificação de Tipos Análise Semântica: Verificação de Tipos Introdução Verifica se as construções sintaticamente corretas possuem significado lógico dentro da linguagem Verifica a consistência da declaração e uso dos identificadores

Leia mais

<identificador>[<tamanho>]: <tipo>;

<identificador>[<tamanho>]: <tipo>; Vetores e Constantes Imagine uma situação na qual fosse necessário armazenar 100 valores para processamento. Por exemplo, pode ser necessário armazenar as notas de 100 provas de uma turma de alunos. Uma

Leia mais

Alocação Dinâmica em C

Alocação Dinâmica em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Conjunto de Instruções Slide 1 Sumário Características de Instruções de Máquina Tipos de Operandos Tipos de Operações Linguagem de Montagem Slide 2 Características

Leia mais

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 em Haskell 1 em Haskell Noções sobre Construção de por Compreensão Funções Sobre Processamento de Fundamentos em Haskell Noções

Leia mais

Objectivos. Introdução à programação Macros em Microsoft Excel Introdução ao Visual Basic para Aplicações (VBA)

Objectivos. Introdução à programação Macros em Microsoft Excel Introdução ao Visual Basic para Aplicações (VBA) Objectivos Introdução à programação Macros em Microsoft Excel Introdução ao Visual Basic para Aplicações (VBA) Vantagens da programação Eficiência em operações repetitivas Melhor clarividência na decomposição

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos: CAP. IX - MANIPULAÇÃO DE ARQUIVOS 9.1 Generalidades sobre arquivos 9.2 Abertura e fechamento de arquivos 9.3 Arquivos textos e arquivos binários 9.4 Leitura e escrita em arquivos binários 9.5 Procura direta

Leia mais

CONCEITOS DE ALGORITMOS

CONCEITOS DE ALGORITMOS CONCEITOS DE ALGORITMOS Fundamentos da Programação de Computadores - 3ª Ed. 2012 Editora Prentice Hall ISBN 9788564574168 Ana Fernanda Gomes Ascênsio Edilene Aparecida Veneruchi de Campos Algoritmos são

Leia mais

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados 3. Introdução Segundo alguns especialistas, qualquer programa de computador pode ser escrito utilizando apenas três estruturas básicas: Seqüência, Condição e Repetição. Isto significa que, na construção

Leia mais

Recursividade UFOP 1/48

Recursividade UFOP 1/48 BCC 201 - Introdução à Programação I Recursividade Guillermo Cámara-Chávez UFOP 1/48 Introdução I Recursividade: é um método de programação no qual uma função pode chamar a si mesma Muitas estruturas têm

Leia mais

Introdução a Programação de Jogos

Introdução a Programação de Jogos Introdução a Programação de Jogos Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição

Leia mais

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Aula 11 Pilha Dinâmica. prof Leticia Winkler Aula 11 Pilha Dinâmica prof Leticia Winkler 1 Pilha Dinâmica (Dynamic Stack) Pilha implementada através de uma lista linear encadeada. É uma lista linear encadeada em que as operações de inserção e retirada

Leia mais

Windows 95/98/Me/2000

Windows 95/98/Me/2000 Windows 95/98/Me/2000 Mais que um Sistema Operativo, o MS-Windows é um ambiente de trabalho que simula no ecrã o trabalho diário sobre uma secretária. A ideia base do MS-Windows foi a de esconder a organização

Leia mais

Apêndice A. Pseudo-Linguagem

Apêndice A. Pseudo-Linguagem Apêndice A. Pseudo-Linguagem Apostila de Programação I A.1 Considerações Preliminares Os computadores convencionais se baseiam no conceito de uma memória principal que consiste de células elementares,

Leia mais

CPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados

CPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados CPU CPU Unidade Central de Processamento Função: leitura, escrita e processamento de dados Constituída por: dispositivos que gerem a entrada (leitura) e saída (escrita) de dados; registos (memórias auxiliares)

Leia mais

LP II Estrutura de Dados Estruturas Heterogêneas e Listas Lineares Estáticas. Prof. José Honorato Ferreira Nunes

LP II Estrutura de Dados Estruturas Heterogêneas e Listas Lineares Estáticas. Prof. José Honorato Ferreira Nunes LP II Estrutura de Dados Estruturas Heterogêneas e Listas Lineares Estáticas Prof. José Honorato Ferreira Nunes eu@honorato.eu Estruturas (struct) Ao manusearmos dados muitas vezes deparamos com informações

Leia mais

Estruturas de Dados com Jogos. Capítulo 6 Listas Cadastrais

Estruturas de Dados com Jogos. Capítulo 6 Listas Cadastrais Estruturas de Dados com Jogos Capítulo 6 Listas Cadastrais 1 Seus Objetivos neste Capítulo 2 Entender o que é e para que serve uma estrutura do tipo Lista Cadastral; Desenvolver habilidade para manipular

Leia mais

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Introdução à Programação em C Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Linguagem C Criada em 1972 para uso no LINUX; Sintaxe base para diversas outras (Java, JavaScript, PHP, C++,

Leia mais

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia Calculo da área de um triângulo Algoritmo Área Var base,

Leia mais