1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Trabalho Matlab

Discussão em 'Programação' iniciada por PMourao, 20 de Novembro de 2012. (Respostas: 5; Visualizações: 1496)

  1. Boas, estou com algumas dúvidas na utilização do Matlab para a realização de um trabalho, que talvez para quem já tenha alguma experiência seja algo simples de se resolver, e espero que esses possam dar dicas pois muitas vezes isso basta para conseguir ver as coisas de outra maneira.

    ´´ O objectivo do trabalho é elaborar uma aplicação em Matlab que possibilite quantificar o número de horas mensais que os trabalhadores de uma empresa trabalham e daí concluir relativamente ao ordenado a auferir. Este trabalho é académico tendo como objectivo único a utilização de comandos do Matlab. A quantificação do número de horas de trabalho deverá obedecer às condições apresentadas em seguida:

    a. turno 1, das 8 às 16horas; quantificadas com peso 1 por cada hora de trabalho
    b. turno 2, das 16 às 24horas; quantificadas com peso 1,2 por cada hora de trabalho
    c. turno 3, das 0 às 8horas; quantificadas com peso 1,5 por cada hora de trabalho

    O operário ao chegar à empresa deverá ser informado da necessidade de ter cuidados com a segurança.

    O operário deverá ser identificado através de um código (pessoal e intransmissível) com quatro algarismos compreendidos entre 0 e 9.

    Após o código ser aceite começa a contagem do tempo de trabalho. Pode utilizar os comandos matlab now, clock ou etime. ´´


    Esta parte já fiz, da seguinte forma:

    clc
    clear all
    i=1;
    gest=[];
    seg=[1 0001;2 0002;3 0003];
    inh=input('Indique a hora de entrada (0-24) ->');
    inm=input('Indique o minuto de entrada (0-60) ->');
    date
    if (inh>=8)&(inh<=16)
    disp('Turno 1')
    gg=1;
    elseif (inh>=16)&(inh<=24)
    disp('Turno 2')
    gg=2;
    else
    disp('Turno 3')
    gg=3;
    end


    [seg1]=seguranca(gg);

    subprograma seguranca:

    function [seg1]=seguranca(gg)disp('Para a sua seguranca utilize o seu equipamento de proteccao individual. Obrigado!')
    code=input('\n Insira o codigo de identificacao -> ');
    seg1=[gg code];
    end


    ntr=length(seg(:,2)); % numero de operarios
    while i<=ntr
    if seg1(1,2)==seg(i,2)
    tb=1;
    fprintf('\n Operario nº %2.0f \n', seg(i,1)) % Numero do Operario
    nnt=i;
    i=ntr+1;
    else
    disp('Codigo de identificacao incorreto!')
    end
    i=i+1;
    end


    outh=input('\n Indique a hora de saida (0-24) ->');
    outm=input('\n Indique o minuto de saida (0-60) ->');
    date

    --- 2a Parte onde tenho dúvida de como fazer e de que tipo de função utilizar:

    ´´Em cada semana o operário deverá trabalhar 35 horas. Caso não trabalhe as 35 horas da semana em curso o número de horas em falta passam para a semana seguinte com um acréscimo de 2 horas por cada hora em atraso, consecutivamente até à última semana com o aumento de 2 horas sobre o acréscimo contabilizada na primeira semana em atraso. Caso uma hora em atraso na 1º semana do mês não seja reposta na semana seguinte e apenas o seja na 4ª semana, essa hora terá como consequência um acréscimo de 6 horas de trabalho.Quando o número de horas semanal é ultrapassado, essas horas apenas poderão ser consumidas no mês seguinte. O número de horas em excesso deve considerar a quantificação apresentada para cada turno.´´

    Espero que alguém possa ter a paciência de ler tudo e dar alguma luz ... desde já agradecido.
     
    Última edição: 21 de Novembro de 2012
  2. Boas...estudas em q universidade?
    E já agora, só por curiosidade qual é a cadeira em causa?

    Manda-me o teu e-mail q eu tento fazer algo.
     
  3. Nenhuma ajuda...

    Não pedi ninguém para fazer, apenas pensei que existisse pessoas no fórum capazes de darem uma dica, facilitando ou até mesmo fazendo com que outras ideias surgissem.

    Fica aqui a resolução encontrada.

    Agradecido,

    clc
    clear all
    i=1;
    gest=[];
    seg=[1 0001;2 0002;3 0003]; % codigos dos trabalhadores
    inh=input('Indique a hora de entrada (0-23) ->'); % Servira apenas para selecção dos turnos
    inm=input('Indique o minuto de entrada (0-60) ->');
    % seleccao do turno atraves do input inserido.
    if (inh>=8)&(inh<=16)
    disp('Turno 1')
    gg=1;
    elseif (inh>=16)&(inh<=23)
    disp('Turno 2')
    gg=2;
    else
    disp('Turno 3')
    gg=3;
    end
    % cdg=1;
    % while cdg==1
    date
    [seg1]=seguranca(gg);
    ntr=length(seg(:,2));
    while i<=ntr
    if seg1(1,2)==seg(i,2)
    tb=1;
    fprintf('\n Operário nº %2.0f \n', seg(i,1)) % Numero do Operario
    nnt=i;
    i=ntr+1;
    else
    disp('Código de identificação incorreto!')
    % cdg=input(' \n Deseja tentar novamente? (S/1-N/0)');
    end
    i=i+1;
    end
    % cdg=cdg+1;
    % end


    outh=input('\n Indique a hora de saída (0-23) ->');
    outm=input('\n Indique o minuto de saída (0-60) ->');
    date
    toth=outh-inh;
    totm=outm-inm;


    gg; % Turno 1,2 ou 3
    inh; % Hora de entrada
    inm; % Minuto de entrada
    outh; % Hora de saida
    outm; % Hora de entrada
    toth; % Total de horas de trabalho
    totm; % Total de minutos de trabalho
    % gest=[gest;seg(nnt,1) gg inh inm outh outm toth totm];


    %Transformar horas em minutos


    tothm=toth*60;


    %tempo total de trabalho em minutos


    tttrab=tothm+totm;


    % Com o proximo passo o tempo ,em minutos, total de trabalho deixa de ter
    % utilidade no programa, pois as horas efectuadas passam a ser escolhidas
    % de forma random atraves de uma matriz. Simplificando e trazendo maior
    % objectividade ao trabalho proposto.


    %%
    % VERIFICAR QUANTIDADE DE HORAS DE TRABALHO E FALTAS


    % SEMANA 1


    hsem1=[35 34 35 34 35 33 35 35]; % Matriz de horas de trabalho
    i1=randi(8,1); % Escolha random de coluna da matriz hsem1
    for i=1
    for j=i1
    w1=hsem1(i,j); % Horas de trabalho da semana 1 atraves da matriz
    y=35-w1; %horas em falta Sabendo que 35horas e o ideal
    fprintf('Trabalhou %2.0f horas na semana 1 \n %2.0f horas em falta',w1,y)
    end
    end


    % ACRESCIMO DE HORAS EM RELACAO AS HORAS EM FALTA


    if y>0
    acre=y+2*y; %Por cada hora em falta acrescimo de 2 horas
    else
    acre=0; % Acrescimo igual a 0 se faltas igual a 0
    end

    % SEMANA 2

    i2=randi(8,1); % Escolha random de coluna da matriz hsem1
    for i=1
    for j=i2
    w2=hsem1(i,j); % Horas de trabalho da semana 2
    y=35-w2; %horas em falta
    yt=(acre+y)*2; %horas em falta total , com acrescimo de horas em falta
    fprintf('\n\nTrabalhou %2.0f horas na semana 2 \n %2.0f horas em falta',w2,yt)
    end
    end

    % SEMANA 3

    i3=randi(8,1);
    for i=1
    for j=i3
    w3=hsem1(i,j);
    y=35-w3;
    ytt=(yt+y)*2;
    fprintf('\n\nTrabalhou %2.0f horas na semana 3 \n%2.0f horas em falta', w3,ytt)
    end
    end


    % SEMANA 4


    i4=randi(8,1);
    for i=1
    for j=i4
    w4=hsem1(1,j);
    y=35-w4;
    yttt=(ytt+y)*2;
    fprintf('\n\nTrabalhou %2.0f horas na semana 4 \n %2.0f horas em falta \n \n', w4,yttt)
    end
    end
    yttt;
    htm=w1+w2+w3+w4; %hora total mensal de trabalho
    hfalta=yttt; %hora total mensal de falta
    hfalta1=y; %horas de falta semana 1
    hfalta2=yt; %horas de falta semana 2
    hfalta3=ytt; %horas de falta semana 3
    hfalta4=yttt; %horas de falta semana 4
    ww=[w1 w2 w3 w4];
    htma=[ww ww-1 ww-2 ww ww-3 ww ww-1 ww ww-2 ww-3 ww ww-5];
    save w1 w2 w3 w4 htm

    %%

    % QUANTIFICACAO DE HORAS POR TURNO
    %gg= Turno 1,2 ou 3

    if gg==1
    ggt=1;
    elseif gg==2
    ggt=1.2;
    else % gg=3
    ggt=1.5;
    end


    %%

    % ORDENADOS
    % DESCONTOS
    % Ordenado Base = 580
    % yttt=Horas tota mensal de faltas

    ord=580;
    % ct=0; %Contador para processo de averiguacao

    if yttt==0
    ordd=(0.003*ord); % Desconto do ordenado de 0.3%
    ordt=ord-ordd;

    elseif yttt==1
    ordd=(0.003*ord); % Desconto do ordenado de 0.3%
    ordt=ord-ordd;

    elseif yttt==2
    ordd=(0.007*ord); % Desconto do ordenado de 0.7%
    ordt=ord-ordd;

    elseif yttt==3
    ordd=(0.015*ord); % Desconto do ordenado de 0.15%
    ordt=ord-ordd;

    elseif yttt<5
    ordd=(0.020*ord); % Desconto do ordenado de 0.20%
    ordt=ord-ordd; % Valor do ordenado total apos desconto

    else % yttt>=5
    ordd=(1*ord);
    ordt=ord-ordd;
    disp('Operário encontra-se em Processo de Averiguação')
    end
    orddd=[ordd ordd+1 ordd ordd+2];
    % pause
    % PROCESSO DE AVERIGUACAO=3

    % if pavg==3
    % disp('Operario transferido para TURNO 3')
    % end

    % VALOR DE ORDENADO TOTAL COM QUANTIFICACAO DE TURNOS
    %gg=quantificacao por turno

    ordtt=ordt*ggt;

    ordttt=[ordtt ordtt-20 ordtt ordtt-15];

    %%
    %GRAFICOS

    g=input('\n\nDeseja visualizar os gráficos? (S/1-N/0)->');
    while g==1
    disp('n\Gráficos disponíveis')
    disp('1- Número de Horas de Trabalho (Semanal e Mensal)')
    disp('2- Valor Total de Ordenado e Descontos')
    disp('3- Número de Horas por turno (Semanal e Mensal)')
    disp('4- Número de Horas em Excesso')
    % disp('5- Dias onde sao utilizadas as Horas em excesso') nao sera
    % utilizada por falta de informacao do programa.


    opc=input('\n\nInsira a opção pretendida (1-4) -> ');

    if opc==1
    % NUMERO DE HORAS DE TRABALHO (SEMANAL/MENSAL)


    subplot(1,2,1),bar(ww), xlabel('Semana 1 Semana 2 Semana 3 Semana4'),ylabel('Horas'), title('Horas de Trabalho Semanal')
    subplot(1,2,2),bar(htma), xlabel('MES1 MES2 MES3 MES4 MES5 MES6 MES7 MES8 MES9 MES10 MES11 MES12'),ylabel('Horas'), title('Horas de Trabalho Mensal')

    elseif opc==2
    %ORDENADO TOTAL E DESCONTOS


    subplot(1,2,1),bar(ordttt), xlabel('Operario 1 Operario 2 Operario 3 Operario 4'),ylabel('Euros'), title('Ordenado')
    subplot(1,2,2),bar(orddd), xlabel('Operario 1 Operario 2 Operario 3 Operario 4'),ylabel('Euros'), title('Descontos')


    elseif opc==3
    %NUMERO DE HORAS POR TURNO (SEMANAL/MENSAL)


    else opc==4
    %NUMERO DE HORAS EM EXCESSO (SEMANAL/MENSAL)
    end


    % else
    %DIAS ONDE SAO UTILIZADAS AS HORAS EM EXCESSO


    gg=input('Deseja visualizar outro gráfico? (S/1-N/0)->');
    if gg==1
    g=1;
    else
    g=0;
    end


    end
    disp('Obrigado!')
     
  4. Mach4_PT

    Mach4_PT Power Member

    O problema, pelo menos o que evitou não ter dito nada, foi não teres colocado nenhuma duvida concreta.
    Se tivesses colocado 2 linhas a explicar o problema possivelmente terias tido mais respostas, mas colocaste o enunciado todo o que torna bastante aborrecido tentar perceber o teu problema.
     
  5. ...

    Percebo que seja chato ler aquilo, mas a primeira parte estava feita, minha duvida era na 2a e a diante , são 8linhas de enunciado, não nenhum livro, a falta de vontade existe e é normal, já estava a espera. Obrigado pela resposta, mas já vens tarde.
     
  6. Mach4_PT

    Mach4_PT Power Member

    Eu respondi-te a dizer o problema que senti quando colocaste a tua pergunta. Não foste suficientemente explicito.

    Agora, se respondes dessa forma agressiva já é problema teu, estou a ver que gastei o meu tempo em ter-te respondido da 1ª vez sequer.
     

Partilhar esta Página