Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Exame de Computação e Programação, Provas de Matemática Computacional

Um exame de Computação e Programação do Departamento de Matemática do IST, com questões envolvendo programação em Matlab e Fortran, além de operações em listas. São apresentadas duas questões em Matlab, uma envolvendo a definição de uma função que recebe dois vetores e retorna um par de valores, e outra envolvendo a definição de uma função que recebe uma matriz e retorna um vetor e um número inteiro. A terceira questão envolve a definição de duas subrotinas em Fortran, uma que inverte uma lista e outra que separa os elementos ímpares dos pares, preservando a ordem. A última questão envolve a definição de uma função recursiva em Fortran que verifica se dois vetores são iguais.

Tipologia: Provas

2019

À venda por 05/12/2023

BeatrizCardoso
BeatrizCardoso 🇵🇹

9 documentos

1 / 8

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Computa¸ao e Programa¸ao
(LEMat, MEAmb, MEBiol, MEQ)
Departamento de Matem´atica, IST
Exame 1
22 de Janeiro de 2011, 9h00
Dura¸ao: 2h30
ao preencher
I
II
III
T:
Curso: umero: Nome:
Grupo I [3,0+3,0]
a) Defina em Matlab uma fun¸ao fque recebe como argumentos dois vectores uevde
umeros inteiros de igual comprimento, percorre-os posi¸ao a posi¸ao recorrendo a um
ciclo while e devolve o par [p,q] tal que:
p´e 1 se, para todas as posi¸oes i,u(i) for sempre maior do que v(i), e ´e 0 em
caso contr´ario;
q´e a diferen¸ca entre a soma dos elementos pares de ue a soma dos elementos
pares de v.
Resolu¸ao:
function r=f(u,v)
p=1;
q=0;
i=1;
while(i<=length(v))
if (u(i)<=v(i))
p=0;
end
if (mod(u(i),2)==0)
q=q+u(i);
end
if (mod(v(i),2)==0)
q=q-v(i);
end
i=i+1;
end
r=[p,q];
1
pf3
pf4
pf5
pf8

Pré-visualização parcial do texto

Baixe Exame de Computação e Programação e outras Provas em PDF para Matemática Computacional, somente na Docsity!

Computa¸c˜ao e Programa¸c˜ao

(LEMat, MEAmb, MEBiol, MEQ) Departamento de Matem´atica, IST Exame 1 22 de Janeiro de 2011, 9h Dura¸c˜ao: 2h

n˜ao preencher

I –

II –

III –

T:

Curso: N´umero: Nome:

Grupo I [3,0+3,0]

a) Defina em Matlab uma fun¸c˜ao f que recebe como argumentos dois vectores u e v de n´umeros inteiros de igual comprimento, percorre-os posi¸c˜ao a posi¸c˜ao recorrendo a um ciclo while e devolve o par [p,q] tal que:

  • p ´e 1 se, para todas as posi¸c˜oes i, u(i) for sempre maior do que v(i), e ´e 0 em caso contr´ario;
  • q ´e a diferen¸ca entre a soma dos elementos pares de u e a soma dos elementos pares de v.

Resolu¸c˜ao:

function r=f(u,v) p=1; q=0; i=1; while(i<=length(v)) if (u(i)<=v(i)) p=0; end if (mod(u(i),2)==0) q=q+u(i); end if (mod(v(i),2)==0) q=q-v(i); end i=i+1; end r=[p,q];

b) Defina em Matlab uma fun¸c˜ao g que recebe como argumento uma matriz de n´umeros inteiros, percorre essa matriz posi¸c˜ao a posi¸c˜ao recorrendo a dois ciclos while e devolve o par [v,m], em que v ´e um vector com tantos elementos como o n´umero de linhas e m ´e um n´umero inteiro, tais que

  • v cont´em na posi¸c˜ao i a soma dos n´umeros ´ımpares que ocorrem na linha i da matriz;
  • m ´e 1 se a matriz for constitu´ıda exclusivamente por n´umeros ´ımpares, e ´e 0 em caso contr´ario.

Resolu¸c˜ao:

function r=g(a) v=zeros(1,size(a,1)); m=1; i=1; while(i<=size(a,1)) j=1; while(j<=size(a,2)) if (mod(a(i,j),2)==0) m=0; else v(i)=v(i)+a(i,j); end j=j+1; end i=i+1; end r=[v,m];

  • comp(w,n): subrotina que recebe no parˆametro de entrada/sa´ıda w uma lista de inteiros e devolve no parˆametro de sa´ıda n o comprimento da lista.

a) Desenvolva uma implementa¸c˜ao para as opera¸c˜oes nil, insere, vazia, e comp.

Resolu¸c˜ao:

function nil() result(w) type(lista) :: w

w%prm=>null() w%ult=>null() end function nil

function vazia(w) result(b) type(lista),intent(in) :: w logical :: b

if (associated(w%prm)) then b=.false. else b=.true. end if end function vazia

subroutine comp(w,k) type(lista), intent(inout) :: w integer, intent(out) :: k type(cel), pointer :: a

a=>w%prm k= do if (.not.associated(a)) then exit end if k=k+ a=>a%seg end do end subroutine comp

subroutine insere(w,i,k) type(lista), intent(inout) :: w integer, intent(in) :: i,k integer :: j type(cel), pointer :: a, n

allocate(n) n%val=k if (.not.associated(w%prm)) then w%prm=>n w%ult=>n n%ant=>null() n%seg=>null() else if (i==1) then n%seg=>w%prm n%ant=>null() w%prm%ant=>n w%prm=>n else a=>w%prm do j=1,i- if (.not.associated(a)) then exit end if a=>a%seg end do if (associated(a)) then n%seg=>a n%ant=>a%ant a%ant%seg=>n a%ant=>n else n%ant=>w%ult n%seg=>null() w%ult%seg=>n w%ult=>n end if end if end if end subroutine insere

Grupo III [3,0+3,0]

a) Defina em Fortran uma fun¸c˜ao recursiva igual que recebe como argumentos dois vec- tores de n´umeros inteiros e devolve .true. se os vectores forem iguais, e devolve .false. em caso contr´ario. Nota: Pode, caso assim o entenda, definir uma ou mais fun¸c˜oes auxiliares.

Resolu¸c˜ao:

function igual(u,v) result(b) integer, dimension(:), intent(in) :: u,v logical :: b

if (size(u)/=size(v)) then b=.false. else b=igual_aux(u,v,size(u)) end if end function igual

recursive function igual_aux(u,v,i) result(b) integer, dimension(:), intent(in) :: u,v integer, intent(in) :: i logical :: b

if (i==0) then b=.true. elseif(u(i)/=v(i)) then b=.false. else b=igual_aux(u,v,i-1) end if end function igual_aux

b) Um vector p concorda com um vector s em n posi¸c˜oes se os n primeiros elementos de p ocorrerem em s pela mesma ordem em posi¸c˜oes consecutivas. O maior valor de n para o qual p concorda com s chama-se concordˆancia de p com s. Desenvolva em Fortran uma fun¸c˜ao concord que recebe como argumento dois vectores p e s de n´umeros inteiros e devolve a concordˆancia de p com s. Apresentam-se em seguida alguns exemplos:

  • a concordˆancia de [2, 4 , 6] com [ 2 , 4 , 6 , 3] ´e 3 (concordam em 3 elementos);
  • a concordˆancia de [2, 4 , 6] com [2, 4 , 2 , 4 , 6 ] ´e 3 (concordam em 3 elementos);
  • a concordˆancia de [2, 4 , 6] com [1, 2 , 4 , 5] ´e 2 (concordam em 2 elementos);
  • a concordˆancia de [2, 4 , 6] com [1, 5 , 4 , 6 , 9] ´e 0 (n˜ao concordam em nenhum ele- mento);
  • a concordˆancia de [2, 4 , 6] com [ 2 , 5] ´e 1 (concordam num elemento).

Resolu¸c˜ao:

function concord(p,s) result(max) integer, dimension(:), intent(in) :: p,s integer :: max,i,j,conta

max= do i=1,size(s) conta= do j=1,size(p) if (i+j>size(s)) then exit elseif (p(j)/=s(i+j-1)) then exit else conta=conta+ end if end do if (conta>max) then max=conta end if end do end function concord