(2010/2011 - 1º semestre) - técnico lisboa - autenticação .2º exame: 12.2.2011 duraÇÃo: 2

Download (2010/2011 - 1º Semestre) - Técnico Lisboa - Autenticação .2º Exame: 12.2.2011 DURAÇÃO: 2

Post on 21-Sep-2018

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 1/14 Nmero:________ Primeiro e ltimo Nome:______________________________________________

    MEMec - LEAN

    Computao e Programao (2010/2011 - 1 Semestre)

    2 Exame: 12.2.2011

    DURAO: 2 horas

    Leia com ateno os pontos que se seguem:

    Identifique todas as folhas deste enunciado. Comece por escrever o seu nome completo e nmero de aluno nesta folha. Nas folhas seguintes escreva apenas o primeiro e ltimo

    nome, e o nmero de aluno.

    No desagrafe as folhas.

    Leia todo o enunciado antes de comear a responder s perguntas.

    Responda primeiro s perguntas que considerar mais acessveis.

    A prova sem consulta.

    Escreva as suas respostas nos espaos indicados.

    Pode utilizar as pginas em branco como rascunho.

    Inicie a prova apenas quando o docente der indicao.

    No se tiram dvidas durante a realizao da prova.

    Nome

    Nmero

    borgesRectangle

  • 2/14

  • 3/14 Nmero:________ Primeiro e ltimo Nome:______________________________________________

    P1 Anlise e depurao de cdigo em MATLAB (7 valores)

    NOTA: utilize o smbolo para indicar mudana de linha e o smbolo para indicar tabulao

    horizontal.

    1.a) Apresente o(s) resultado(s) enviado(s) para o ecr em cada um dos seguintes casos?

    Vectores + Formatao Entrada/Sada

    vector = [2.44 5.28 1.33];

    fprintf('\t %3.1f \n', vector);

    RESPOSTA: [0,5 val]

    Repetio + Seleco

    vec = [2 -3 -1 -2 0 -2 1];

    for k = 1:2:length(vec)

    if vec(k) > 0

    fprintf('x = %d \n', vec(k)*2);

    elseif vec(k) < 0

    fprintf('x = %d \n', -vec(k)*2);

    else

    fprintf('x zero \n');

    end

    end

    RESPOSTA: [0,5 val]

    Manipulao de strings

    frase = 'Secreta';

    chave = 1;

    codigo = frase + chave;

    fprintf('Palavra: %s \n', frase)

    fprintf('Cdigo: %s \n', char(codigo))

    RESPOSTA: [0,5 val]

    2.4

    5.3

    1.3

    x = 4

    x = 2

    x zero

    x = 2

    Palavra: Secreta

    Cdigo: Tfdsfub

  • 4/14

    Manipulao de Arrays de Estruturas

    cromos(5) = struct('dataInicio', 19181214,...

    'dataFim', 19191005,...

    'nome', ' Joo do Canto e Castro',...

    'notas', 'Partido Nacional Republicano');

    cromos(1) = struct('dataInicio', 19110824,...

    'dataFim', 19150525,...

    'nome',' Manuel Jos de Arriaga',...

    'notas', 'Partido Republicano Portugus');

    for k = 1:4:5

    fprintf('Nome: %s\n', cromos(k).nome)

    end

    RESPOSTA: [0,5 val]

    Funes + Passagem de argumentos + Cell Arrays

    a = myFun1(2, 1, 5)

    b = myFun1(2, 2, 1, 3)

    c = a * b

    RESPOSTA: [0,5 val]

    myFun1.m

    function res = myFun1(varargin)

    res = 1;

    for i = 1:nargin,

    res = res * varargin{i};

    end

    Tpicos Avanados

    fprintf('res = %d \n',myFun2(4))

    RESPOSTA: [0,5 val]

    myFun2.m

    function res = myFun2(n)

    if (n < 0 || round(n)~=n)

    error('n deve ser inteiro >=0.');

    elseif (n == 0)

    res = 1;

    else

    res = n * myFun2(n-1);

    end

    Nome: Manuel Jos de Arriaga

    Nome: Joo do Canto e Castro

    a =

    10

    b =

    12

    c =

    120

    res = 24

  • 5/14 Nmero:________ Primeiro e ltimo Nome:______________________________________________

    1.b) Pretende-se pesquisar por palavra-chave num array de estruturas denominado por cromos. O contedo

    deste array de estruturas a informao lida a partir de 18 ficheiros com dados dos presidentes da Repblica

    Portuguesa. Cada estrutura contm a seguinte informao relativa a um presidente:

    Nome;

    Data(s) de incio de mandato(s);

    Data(s) de fim de mandato(s);

    Notas gerais.

    Os ficheiros so identificados com o nome cromoK.dat, onde K representa o ndice do ficheiro entre 1 e

    18. A Figura 1 exibe o caso de um Presidente que cumpriu dois mandatos: o primeiro entre 06 de Agosto de

    1915 e 02 de Dezembro de 1917 e o segundo entre 11 de Dezembro de 1925 e 31 de Maio de 1926.

    Figura 1: exemplo do ficheiro cromo3.dat.

    Cada um dos seguintes programas tem cinco situaes de erro e cinco de omisso de comentrios. Em cada

    caso complete os comentrios em falta, bem como corrija as situaes de erro detectadas.

    EXEMPLO DE RESPOSTA PARA 3 ERROS (Na sua resposta deve apenas assinalar situaes para as quais

    o cdigo est incorrecto, ou faltam comentrios, devendo identificar a linha e a respectiva alterao.)

    1:

    2:

    3:

    4:

    5:

    6:

    7:

    8:

    letra = input('Resposta(S/N): ',s);

    %

    if letra == 's' || letra == 'S'

    disp('Continuar')

    elseif letra == 'n' | letra == 'N'

    disp('Parar')

    else

    disp('Erro')

    end

    RESPOSTAS

    1: letra = input('Resposta(S/N): ','s');

    2: % Estrutura de seleco que apresenta mensagem mediante carcter introduzido

    4: elseif letra == 'n' || letra == 'N'

    NOTA: o primeiro comentrio da funo serve para descrever o que esta faz em termos genricos. Os

    comentrios seguintes explicam as instrues, ou blocos de cdigo, que lhes seguem.

  • 6/14

    funo selecciona.m

    1:

    2:

    3:

    4:

    5:

    6:

    7:

    8:

    9:

    10:

    11:

    12:

    13:

    14:

    15:

    16:

    17:

    18:

    19:

    20:

    21:

    22:

    function indice = selecciona(varargin)

    %

    if nargin = 1

    %

    if isempty(varargin{1})

    error(O argumento de entrada est vazio.);

    else

    %

    cromosIn == varargin{1};

    end

    else

    %

    error('A funo recebe 1, e s 1, argumento de entrada.');

    end

    indice = [];

    nLin, nCol = size(cromosIn);

    %

    for k = 1:nLin

    if cromosIn(k,2) ~= 0

    indice = [indice ];

    end

    end

    [2,0 val] RESPOSTAS

    2: % Funo que selecciona do argumento de entrada as linhas cuja coluna dois

    % diferente de zero. Argumentos de entrada: varargin. Argumentos de sada:

    % vector com os ndices correspondentes segunda coluna diferente de zero

    3: if nargin == 1

    4: % Teste de robustez que verifica se o argumento de entrada est vazio

    6: error('O argumento de entrada est vazio.');

    8: % Caso contrrio, ento atribui o contedo da clula 1 varivel cromosIn

    9: cromosIn = varargin{1};

    12: % Devolve erro se a funo for chamada com mais do que um argumento de entrada

    16: [nLin, nCol] = size(cromosIn);

    17: % Percorre todas as linhas de cromosIn e guarda as que tm contedo na 2 coluna

    20: indice = [indice; k];

  • 7/14 Nmero:________ Primeiro e ltimo Nome:______________________________________________

    funo pesquisa.m

    1:

    2:

    3:

    4:

    5:

    6:

    7:

    8:

    9:

    10:

    11:

    12:

    13:

    14:

    15:

    16:

    17:

    18:

    19:

    20:

    21:

    22:

    23:

    function pesquisa(cromos,coleccao,palavraChave)

    %

    indice = selecciona;

    campos = fields(cromos); % Devolve um cell array

    for k = 1:1:length(indice)

    for m = 1:size(campos)

    %

    texto = eval(sprintf('cromos(indice(%d)).%s',k,campos{m}));

    %

    if isnumeric(texto)

    texto = num2str[texto];

    end

    %

    ocorrencias = strfind(texto,palavraChave);

    %

    if isempty(ocorrencias)

    fprintf('Encontradas: ');

    fprintf(%d ocorrncias ',length(ocorrencias));

    fprintf('no campo ''%s'' ',campos{m});

    fprintf('do cromo n %d \n',k);

    end

    end

    [2,0 val] RESPOSTAS

    2: % Funo que "pesquisa por palavra chave" nos campos da estrutura cromos

    % Argumentos de entrada: cromos,coleccao,palavraChave

    % Argumentos de sada: no tem

    3: indice = selecciona(coleccao);

    7: % Devolve o contedo do campo e estrutura especificados

    8: % Se o contedo do campo for numrico, ento converte para string

    11: texto = num2str(texto);

    13: % Determina as ocorrncias da palavra chave no texto do campo e estrutura dados

    15: % Apresenta informao relativa s ocorrncias da palavra chave

    16: if ~isempty(ocorrencias)

    18: fprintf('%d ocorrncias ',length(ocorrencias));

    20: end

  • 8/14

    P2 Anlise de Problema e Algoritmo (5 valores)

    Pretende-se implementar um programa, tipo mquina de Multibanco, que decomponha uma determinada

    quantia a levantar em notas dos tipos 200, 100, 50, 20, 10 e 5. Inicialmente o programa pede ao

    utilizador a quantia a levantar, de seguida calculado e apresentado no ecr o nmero mnimo de notas de

    cada tipo que perfazem essa quantia. Por exemplo, assumindo que a quantia solicitada 95, ento,

    95 = 0 200 + 0 100 + 1 50 + 2 20 + 0 10 + 1 5

    A quantia a levantar deve ser um valor mltiplo de 5 e menor ou igual a 200. Assume-se, por

    simplificao, qu