Usuários online

segunda-feira, 31 de outubro de 2011

Sistemas de Apoio à Decisão - Aula 31/10/2011 (Trabalho Prático - 30 pontos)

Trabalho Prático - 30 pontos



Problema 1 - 10 pontos
Pesquisar e comentar ao menos 2 (dois) usos da Teoria das Probabilidades na resolução de conflitos entre apostadores. Para você se inteirar de um famoso problema envolvendo jogo de dados clique aqui. Interessante para esse problema seria a elaboração de uma apresentação em Powerpoint para que possa ser publicada.

Problema 2 - 20 pontos
Pesquisar sobre a Teoria dos Jogos Algorítmica. Depois, desenvolver uma simulação em Monte Carlo para resolver o problema de decidir qual melhor partilha entre o jogo de dados interrompido de que trata o Problema 1. Se a abordagem Monte Carlo não for satisfatória para a resolução do problema, desenvolver um software em Algoritmo Genético, Algoritmo Guloso ou outro tipo de algoritmo com o mesmo objetivo.

Sistema de Apoio à Decisão - Aula 31/10/2011 (Teoria dos Jogos 2)

Uso de Probabilidades e Teoria dos Jogos
Na aula passada falamos sobre Teoria dos Jogos, Cooperação e Conflito. Vejamos nesta aula algumas aplicações da teoria dos jogos.

História da Teoria das Probabilidades
Cartas entre Pascal e Férmat

Teoria dos Jogos 1
Aplicação da Teoria dos Jogos no Apoio à Decisão

Teoria dos Jogos 2
Aplicação da Teoria dos Jogos no Apoio à Decisão



Segurança da Informação - Aula 31/10/2011 (Intrusão, Vírus e Vermes)

Intrusão, Vírus e Vermes

Hoje discutiremos sobre essas pragas do mundo moderno. Pequenos programas que invadem e ficam escondidos em nossas máquinas e, quando falamos em máquinas, queremos dizer quaisquer máquinas, pois hoje tudo é informatizado, desde nossos relógios digitais (pesquise LiveView, ou acesse aqui), computadores de bolso (os handhelds, pockets etc.), smartphones, tablets, netbooks, notebooks, ATM etc. Todo cuidado é pouco e, mesmo assim, ainda corremos grave risco com estas pragas virtuais.


Detecção de Intrusos
http://www.dei.isep.ipp.pt/~andre/documentos/deteccao-intrusos.html

Vírus
http://pt.wikipedia.org/wiki/V%C3%ADrus_de_computador

Vermes (Worms)
http://pt.wikipedia.org/wiki/Worm

O celular vira token no acesso aos serviços do Google

Fique atento, para melhorar sua segurança, Google pode usar telefones fixos ou móveis para autenticar o acesso a seus diversos serviços. Leia na íntegra clicando no link

O celular vira token no acesso aos serviços do Google - Senhas - Dicas - INFO Online:

domingo, 30 de outubro de 2011

Notas 3º bimestre 2011 - Introdução a Algoritmos - Turma 1ºE


Olá alunos,

Finalmente, após avaliar todos os trabalhos enviados e receber as respostas da aplicação de 2ª chamada de um aluno, o bimestre está "fechado".

As notas constantes na imagem ao lado são as que estão no diário, já entregue na secretaria. Não houve recuperação neste bimestre.










Atenciosamente,

Segurança da Informação - Provas do pré-teste do Enem foram fotografadas

Provas do pré-teste do Enem foram fotografadas

Olá alunos,

Observem nesta reportagem como a obtenção de informações em grupos sociais organizados através de sites (como disse em aulas anteriores, é a inteligência do governo monitorando as redes sociais) apontou um professor como suposto responsável pelo vazamento das provas do ENEM 2011.

Repito: como eu disse em sala de aula, os órgãos de controle governamentais (não só no Brasil) estão monitorando todas as redes sociais. Órgãos como ABIN e Polícia Federal (no Brasil), FBI e CIA (Estados Unidos), e, por que não dizer, quaisquer órgãos de segurança ligados a um governo qualquer, estão de olho nos encontros e desencontros que as redes sociais propiciam.

Leia as matérias (links a seguir) e tirem suas próprias conclusões:

Ainda pensa que está seguro? Melhor rever seus conceitos.

sexta-feira, 28 de outubro de 2011

Matemática Computacional - Aula 28/10/2011 (Trabalho Prático - 30 pontos)



Trabalho Prático - Valor 30 pontos - Entrega 10/11/2011

Os trabalhos são individuais e deverão ser entregues à mão. Cada problema vale 10 pontos.

Usando o método Simplex e o princípio da Dualidade (se aplicável), resolver os problemas seguintes:

Problema 1
Em uma situação de gerenciamento de recursos hídricos para a geração de energia elétrica, o problema a ser resolvido tem por objetivo minimizar o custo de produção de energia elétrica no horário de operação das 8 às 16h em uma rede de duas usinas.

A descrição geográfica consiste em um rio, com uma barragem e usina hidrelétrica UA a montante, e uma barragem com usina hidrelétrica UB a jusante. Existe uma ramificação afluente B ao rio principal, como mostra a figura abaixo.


Os fluxos de afluência de água às barragens são 60 m³/s para a ramificação A e 20 m³/s para B. A potência elétrica gerada pela usina A é calculada por PA = 0,98ΦA, expressa em kW, e ΦAj é o fluxo de água turbinada, em m³/s. Para B, vale PB = 0,93ΦB. O consumo de energia é dividido em dois períodos: das 8 às 12h e das 12 às 16h. Para cada usina -- que funciona também como ponto de distribuição -- valem os consumos de energia da tabela a seguir.


onde 1 kWh é a medida de energia correspondente ao consumo de 1 kWh de potência durante um período de 1 hora. A saber, energia = potência x tempo.

O que não é possível suprir com a energia hidrelétrica deve ser suprido com energia proveniente de usinas térmicas. Porém, 1 kWh de energia elétrica gerada por hidrelétricas custa 18 u.m. (unidades monetárias), e a energia proveniente de termoelétricas custa 50 u.m. por kWh.

Às 8 horas, a barragem da usina A dispõe de 216000 m³ e a barragem B dispõe de 72000 m³. Suponha que a água não turbinada fique represada na barragem e que as perdas por infiltrações e evaporação sejam desprezíveis. As barragens são grandes o suficiente para evitar que água em excesso possa vir a verter. Variáveis de decisão sugeridas para a formulação:
  • Φij = fluxo de água turbinada na usina hidrelétrica i (i = A, B) durante o período j (j = 1 no horário das 8 às 12h; j = 2 no horário das 12 às 16h);
  • Tij = energia gerada pelas termoelétricas em i (i = A ou B) durante o período j para suprir eventuais carências de energia não supridas pelas geradoras hidrelétricas.

    Solução

    Análise do período das 8 às 12 horas:

    USINA A
    Nas 4 horas iniciais, o volume total de água, em m³, à montante seria, se nada fosse turbinado: 216000 m³ + 60 m³/s x 14400 s = 1080000 m³.

    Assim, o volume que pode ser turbinado deve ser <= a isto: 14400ΦA1 <= 1080000 => ΦA1 <= 75 m³/s.

    Em energia: energia hidrelétrica + energia termoelétrica >= 400 => 4 horas x 0,98ΦA1 + TA1 >= 400.


    USINA B
    Nestas 4 horas, o volume total de água, em m³, à montante seria (se nada fosse turbinado): 72000 m³ + 20 m³/s x 14400 s + 14400ΦA1 = 360000 + 14400ΦA1.

    Assim, o volume que pode ser turbinado deve ser <= a isto: 14400ΦB1 <= 360000 + 14400ΦA1 => ΦB1 - ΦA1 <= 25 m³/s.

    Em energia: energia hidrelétrica + energia termoelétrica >= 250 => 4 horas x 0,93ΦB1 + TB1 >= 250.



    Análise do período das 12 às 16 horas:

    USINA A
    Volume turbinado <= volume que chega + volume não utilizado no período anterior:
    14400ΦA2 <= 14400 x 60 + (1080000 - 14400ΦA1) => ΦA1 + ΦA2 <= 135.

    Em energia: energia hidrelétrica + energia termoelétrica >= 330:
    4 x 0,98ΦA2 + TA2 >= 330.


    USINA B

    14400ΦB2 <= 14400 x 20 + 14400ΦA2 + (360000 + 14400ΦA1 - 14400ΦB1) => -ΦA1 - ΦA2 + ΦB1 + ΦB2 <= 45.

    Em energia: 4 x 0,93ΦB2 + TB2 >= 485.

    Assim, o modelo consiste em 8 restrições estruturais.




    Função objetivo
    Lembre-se que a função objetivo é minimizar o custo total de energia, que é obtido pelo produto entre tempo, potência e custo/kWh.

    Cada custo é obtido por tempo (4h) x potência (kW) x custo/kWh. O objetivo é minimizar o custo total de energia, expresso por meio de

    Min Z = 4 x (0,98ΦA1 + 0,98ΦA2 + 0,93ΦB1 + 0,93ΦB2) x 18 + 4 x (TA1 + TA2 + TB1 + TB2) x 50.



    Problema 2
    Min Z = 5 x1 + 10 x2 + x3
    sujeito a
    3 x1 + 2 x2 + 0,8 x3 >= 40
    x1 + x2 + 0,5 x3 >= 25
    x1 - 2 x3 >= -1
    x1, x3 >= 0

    Solução (sugestão inicial)
    A colocação na forma padrão de minimização necessita a restrição x2 >= 0, pois não pode haver variável negativa na minimização.

    Forma padrão da minimização:
    Necessitamos trocar x2 por xa - xb. O modelo final de minimização na forma padrão ficará assim:

    Min Z = 5 x1 + 10 xa - 10 xb + x3
    sujeito a
    3 x1 + 2 xa - 2 xb + 0,8 x3 >= 40
    x1 + xa - xb + 0,5 x3 >= 25
    x1 - 2 x3 >= -1
    x1, xa, xb, x3 >= 0

    Falta agora aplicar a dualidade, transformando o problema de minimização em um problema de maximização, aplicar o método Simplex e dar a solução final da minimização.


    Problema 3

    Min Z = 2 x1 ‐ 10 x2 + x3 + 4 x4
    sujeito a
    3 x1 + 6 x2 + 3 x4 <= 100
    4 x1 + 10 x4 >= 50
    ‐3 x1 + x2 + 6 x3 >= 30
    x1, x2, x3, x4 >= 0


    Solução (sugestão inicial)
    O Mathaeus esboçou um princípio de solução, que parece-me estar correta.



    Boa sorte!

    Matemática Computacional - Aula 28/10/2011 (Princípio da Dualidade)

    Princípio da Dualidade

    O princípio da dualidade se aplica a problemas de minimização, os quais podem ser transformados em problemas de maximização, onde podemos aplicar o método Simplex para resolvê-los como sendo de maximização e, posteriormente, obtermos a resposta da minimização.

    Você pode acompanhar as páginas do livro abaixo que contém exemplos muito simples e fáceis de compreender.














    quinta-feira, 27 de outubro de 2011

    Exercícios Método Simplex

    Método Simplex

    Resolva usando o método Simplex:

    Questão 1)
    Maximizar: Z = 9x1 + 3x2
    Sujeito a:
    2x1 + x2 < 14
    2x1 + 3x2 < 24
    x1, x2 >0

    Questão 2)
    Maximizar Z = 5x1 + 5x2
    Sujeito a:
    8x1 + 4x2 < 32
    x1 + 2x2 < 8
    x1, x2 > 0

    Questao 3)
    Maximizar Z = 16x1 + 12x2
    Sujeito a:
    2x1 < 8
    2x1 + 3x2 < 12
    2x1 + x2 < 8
    x1, x2 > 0

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-f

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-f



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    //S = 3/4 + 5/5 + 7/6 + … + (2n + 1) / (n + 3)

    double calculaS(double);

    int main(int argc, char *argv[])
    {
        double a;
     
        printf("Calcula somas do tipo S = 3/4 + 5/5 + 7/6 + ... + (2n + 1) / (n + 3)\n\n");
        printf("Forneca n: ");
        scanf("%lf", &a);
     
        printf("Soma S = %0.20lf\n\n", calculaS(a));
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    double calculaS(double n) {
        double numerador;
        double denominador;
        double soma = 0.0;
        double i = 1.0;
     
        while(i<=n) {
            numerador = 2*i + 1;
            denominador = i + 3;
            soma += numerador/denominador;
            i+=1.0;
        }
        return soma;
    }

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-e

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-e



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    //S = 1 + 1/1! + 1/2! + 1/3! + 1/N!

    double calculaS(double);
    double calculaFatorial(double);

    int main(int argc, char *argv[])
    {
        double a;
     
        printf("Calcula somas do tipo S = 1 + 1/1! + 1/2! + 1/3! + 1/N!\n");
        printf("Para N > 1000 a soma S se aproxima do numero \'e\', base dos logaritmos naturais.\n");
        printf("Alias, numeros como e, sen(x), cos(x), tan(x), log(x) etc. sao calculados assim.\n\n");
        printf("Forneca N: ");
        scanf("%lf", &a);
     
        printf("Soma S = %0.20lf\n\n", calculaS(a));
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    double calculaS(double n) {
        double denominador = 0.0;
        double soma = 0.0;
     
        while(denominador<=n) {
            soma += 1.0/calculaFatorial(denominador);
            denominador+=1.0;
        }
        return soma;
    }

    double calculaFatorial(double n) {
        double fat = 1.0;
        double i = 1.0;
     
        if((n==0.0) || (n==1.0)) return 1.0;

        while(i<=n)
            fat*=i++;
        return fat;
    }

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-d

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-d



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    //S = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/N

    double calculaS(double);

    int main(int argc, char *argv[])
    {
        double a;
     
        printf("Calcula somas do tipo S = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/N\n");
        printf("Forneca N: ");
        scanf("%lf", &a);
     
        printf("Soma S = %lf\n\n", calculaS(a));
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    double calculaS(double n) {
        double denominador = 1.0;
        double soma = 0.0;
     
        while(denominador<=n) {
            soma += 1.0/denominador;
            denominador+=1.0;
        }
        return soma;
    }

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-c

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-c



    #include <cstdlib>
    #include <iostream>
    #include <stdbool.h>

    using namespace std;

    bool numPositivo(int);

    int main(int argc, char *argv[])
    {
        int a;
     
        printf("Verificar se um numero e positivo ou negativo.\n");
        printf("\tDigite um numero inteiro: ");
        scanf("%d", &a);
        putchar('\n');
        if(numPositivo(a))
            printf("E positivo!\n\n");
        else printf("Nao e positivo!\n\n");
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    bool numPositivo(int n) {
        return n>=0;
    }

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-b

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-b



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int numPerfeito(int);

    int main(int argc, char *argv[])
    {
        int a;
     
        printf("Verificar se um numero e perfeito.\n");
        printf("\tDigite um numero inteiro: ");
        scanf("%d", &a);
        putchar('\n');
        if(numPerfeito(a))
            printf("E perfeito!\n\n");
        else printf("Nao e perfeito!\n\n");
     
        system("PAUSE");
        system("CLS");

        printf("Verificando os primeiros 200 naturais.\n");
        for(a=1;a<=200;a++) {
            if(a%5==0) {
                system("PAUSE");
                system("CLS");
            }
            if(numPerfeito(a))
                printf(" >>>> E perfeito!\n");
            else printf(" >>>> Nao e perfeito!\n");
        }
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    int numPerfeito(int n) {
        int i;
        int soma = 0;
     
        printf("\nDivisores: ");
        for(i=1;i<=n;i++) {
            if(n%i==0) {
                printf("%d; ", i);
                if(i<n) soma += i;
            }
        }
        printf("\n\nSoma dos divisores de %d, exceto %d = %d\n\n", n, n, soma);
        return soma==n;
    }

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-a

    Solução do exercício proposto Tutorial Dev-C++ 015 - 5-a



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    float fazOp(float, char, float);

    int main(int argc, char *argv[])
    {
        float a, b;
     
        printf("Numero 1: ");
        scanf("%f", &a);
        putchar('\n');
     
        printf("Numero 2: ");
        scanf("%f", &b);
        putchar('\n');
     
        printf("\nResultados para %f e %f:\n", a, b);
        printf("\tsoma.............: %f\n", fazOp(a, '+', b));
        printf("\tdiferencao.......: %f\n", fazOp(a, '-', b));
        printf("\tproduto..........: %f\n", fazOp(a, '*', b));
        printf("\tdivisao..........: %f\n", fazOp(a, '/', b));

        printf("\n\nTentando o operador \'@\':\n");
        printf("\toperacao invalida: %f\n", fazOp(a, '@', b));
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    float fazOp(float n1, char op, float n2) {
        switch(op) {
             case '+': return n1 + n2; break;
             case '-': return n1 - n2; break;
             case '*': return n1 * n2; break;
             case '/': return n1 / n2; break;
             default:
                  printf("\tERRO: Operador %c invalido!\n\n", op);
                  return 0;
                  break;
        }
    }

    Tutorial Dev-C++ 015 - Funções 2


    Olá alunos,


    15º tutorial aqui.

    Nunca é demais lembrar, mas todas as nossas aulas de C/C++ serão realizadas de forma prática usando a série de tutoriais que estão sendo publicados aqui. Desse modo, você não perde conteúdo e pode seguir no mesmo ritmo que o restante da turma.

    próximo tutorial (em breve)

    Atenciosamente,

    segunda-feira, 24 de outubro de 2011

    Segurança da Informação - Aula 24/10/2011 (Segurança de sistemas: e mail, IP e Web seguros)

    Segurança de sistemas: e mail, IP e Web seguros

    1. Segurança de e-mail

    Cartilha de segurança de email

    2. Segurança de IP

     

    Problemas de segurança com o protocolo IP

    Sem segurança, as redes públicas e privadas estão sujeitas a monitoramento e acesso não autorizados. Ataques internos podem ser resultado de ínfima segurança de intranet, ou até de nenhuma. Os riscos externos à rede privada são provenientes de conexões com a Internet e extranets. Os controles de acesso do usuário com base em senhas não podem por si só proteger os dados transmitidos em uma rede.

    Tipos comuns de ataques de rede

    Sem o uso de medidas de segurança e controles, os seus dados podem estar sujeitos a ataques. Alguns ataques são passivos, pois efetuam apenas um monitoramento de informações. Outros são ativos e as informações são alteradas com a intenção de corromper ou destruir os dados ou até a própria rede. Se você não tiver um plano de segurança em execução, suas redes e dados estarão vulneráveis a quaisquer tipos de ataques.

    Bisbilhotando

    Em geral, a maior parte das comunicações de rede ocorre com texto direto (não criptografado), o que permite a um invasor que tenha obtido acesso aos caminhos de dados de uma rede monitorar e interpretar (ler) o tráfego. Quando um invasor está bisbilhotando as comunicações, diz-se que ele está farejando ou espionando. A capacidade de monitoramento da rede por parte desse tipo de invasor é geralmente o maior problema de segurança que os administradores enfrentam em uma empresa. Sem o uso de serviços de criptografia seguros, os dados poderão ser lidos por outras pessoas ao percorrerem a rede.

    Modificação de dados

    Depois de um invasor ter lido os dados, geralmente a próxima etapa lógica será modificá-los. Um invasor pode modificar os dados contidos em um pacote sem o conhecimento do remetente ou do receptor. Mesmo que não necessite de confidencialidade para todas as comunicações, ninguém deseja que suas mensagens sejam modificadas quando estiverem em trânsito. Por exemplo, ao enviar requisições de compra, ninguém quer que sejam alteradas informações sobre itens, quantidades ou cobrança.

    Falsificação de identidade (falsificação de endereço IP)

    A maior parte das redes e sistemas operacionais utilizam o endereço IP para identificar um computador como válido em uma rede. Em alguns casos, é possível que um endereço IP seja utilizado de maneira falsa. Isso é conhecido como falsificação de identidade. Um invasor poderá usar programas especiais para construir pacotes IP que pareçam ser provenientes de endereços válidos na intranet de uma organização.

    Após obter acesso à rede com um endereço IP válido, o invasor poderá modificar, excluir ou encaminhar novamente os dados. O invasor também poderá efetuar outros tipos de ataques, conforme está descrito nas seções a seguir.

    Ataques com base em senhas

    Um fato comum nos planos de segurança da maioria das redes e sistemas operacionais é o controle do acesso com base em senhas. O acesso aos recursos das redes e dos computadores é determinado pelo uso de um nome de usuário e senha.

    Historicamente, muitas versões dos componentes dos sistemas operacionais nem sempre protegiam as informações sobre identidade quando eram transmitidas através da rede para serem validadas. Isso pode permitir que uma pessoa que esteja bisbilhotando a rede determine um nome de usuário e senha válidos e os utilize para obter acesso à rede fazendo logon como um usuário válido.

    Quando um invasor localiza e acessa uma conta de usuário válida, ele tem os mesmos direitos que o usuário real. Por exemplo, se o usuário tiver direitos administrativos, o invasor pode criar contas adicionais para acessar a rede posteriormente.

    Após obter acesso a uma rede com uma conta válida, um invasor poderá fazer o seguinte:

    • Obter listas de nomes de computadores e usuários válidos e de informações da rede. 
    • Modificar configurações de rede e servidor, incluindo controles de acesso e tabelas de roteamento. 
    • Modificar, excluir ou reencaminhar dados. 

    Ataque de negação de serviço

    Diferentemente de um ataque com base em senha, o ataque de negação de serviço impede que um usuário válido use normalmente o computador ou a rede.

    Após obter acesso a uma rede, um invasor poderá fazer o seguinte:

    • Distrair a equipe de trabalho dos sistemas de informações para que a intrusão não seja detectada imediatamente. Isso dá ao invasor a oportunidade de fazer ataques adicionais. 
    • Enviar dados inválidos para aplicativos ou serviços da rede, fazendo com que eles sejam fechados ou não funcionem de forma normal. 
    • Enviar um fluxo de tráfego até que um computador ou uma rede inteira seja desligada. 
    • Bloquear o tráfego, o que restringirá o acesso de usuários autorizados aos recursos da rede. 

    Ataque com interceptação de terceiros

    Como o nome indica, um ataque com interceptação de terceiros ocorre quando uma pessoa, entre dois usuários que estejam se comunicando, está monitorando, capturando e controlando a comunicação sem o conhecimento dos usuários. Por exemplo, um invasor pode negociar chaves de criptografia com os dois usuários. Cada usuário pode enviar dados criptografados para o invasor, que poderá descriptografá-los. Quando os computadores estiverem se comunicando em níveis baixos da camada da rede, talvez eles não possam determinar com que computadores estão trocando dados.

    Ataque de chave comprometida

    Uma chave é um número ou código secreto exigido para criptografar, descriptografar ou validar informações protegidas. Embora a determinação de uma chave seja um processo difícil e que exija o uso de muitos recursos por parte de um invasor, ele é possível. Depois de o invasor determinar uma chave, ela será conhecida como chave comprometida.

    O invasor usa a chave comprometida para obter acesso a uma comunicação protegida sem que o destinatário ou o receptor tenham conhecimento do ataque. Com a chave comprometida, o invasor poderá descriptografar ou modificar dados. O invasor também poderá tentar usar a chave comprometida para descobrir outras chaves, o que pode permitir o acesso a outras comunicações protegidas.

    Ataque de farejadores

    Um farejador é um aplicativo ou dispositivo que pode ler, monitorar e capturar pacotes e trocas de dados de rede. Se os pacotes não estiverem criptografados, o farejador permitirá que os dados contidos no pacotes sejam totalmente visualizados. Até pacotes encapsulados poderão ser lidos e abertos se não estiverem criptografados.

    Ao usar um farejador, um invasor poderá fazer o seguinte:

    • Analisar uma rede e as informações de acesso, fazendo com que a rede, por fim, pare de responder ou fique corrompida. 
    • Ler comunicações privadas. 

    Ataque de camada de aplicativo

    Um ataque de camada de aplicativo atinge servidores de aplicativos ocasionando uma falha nos aplicativos ou no sistema operacional do servidor. Isso permite que o invasor possa deixar de ser submetido a controles de acesso normais. O invasor se beneficiará dessa situação, obtendo o controle de um aplicativo, sistema ou rede, e poderá fazer o seguinte:

    • Ler, adicionar, excluir ou modificar dados ou um sistema operacional. 
    • Introduzir um vírus que utilize computadores e aplicativos de software para se reproduzir por toda a rede. 
    • Introduzir um programa farejador para analisar a rede e obter informações que poderão, por fim, ser usadas para fazer com que a rede pare de responder ou fique corrompida. 
    • Fechar os aplicativos de dados ou sistemas operacionais de forma anormal. 
    • Desativar outros controles de segurança para possibilitar futuros ataques. 

     

    3. Segurança na Web

    Sistemas de Apoio à Decisão - Aula 24/10/2011 (Incerteza e Risco)

    Incerteza e Risco

    Representação de Incertezas:
      Em estatística, uma distribuição de probabilidade descreve a chance que uma variável pode assumir ao longo de um espaço de valores. Ela é uma função cujo domínio são os valores da variável e cuja imagem são as probabilidades de a variável assumir cada valor do domínio. O conjunto imagem deste tipo de função está sempre restrito ao intervalo entre 0 e 1.

      Uma distribuição de probabilidade pode ser discreta (como em um jogo de dados) ou contínua. É comum o uso de funções que se ajustem à distribuição de probabilidade.
    Um processo estocástico é uma família de variáveis aleatórias indexadas por elementos t pertencentes a determinado intervalo temporal. Intuitivamente, se uma variável aleatória é um número real que varia aleatoriamente, um processo estocástico é uma função temporal que varia aleatoriamente.
    De forma simplificada, podemos dizer que processos estocásticos são processos aleatórios que dependem do tempo.
    Mais genericamente, seguindo Kac (M. Kac & J. Logan, in Fluctuation Phenomena, eds. E.W. Montroll & J.L. Lebowitz, North-Holland, Amsterdam, 1976) e Nelson (E. Nelson, Quantum Fluctuations, Princeton University Press, Princeton, 1985), qualquer tipo de evolução temporal (determinística ou essencialmente probabilística) que seja analisável em termos de probabilidade pode ser chamada de processo estocástico.
    A lógica difusa ou lógica fuzzy é uma extensão da lógica booleana que admite valores lógicos intermediários entre o FALSO (0) e o VERDADEIRO (1); por exemplo o valor médio 'TALVEZ' (0,5). Isto significa que um valor lógico difuso é um valor qualquer no intervalo de valores entre 0 e 1. Este tipo de lógica engloba de certa forma conceitos estatísticos principalmente na área de Inferência.
    As implementações da lógica difusa permitem que estados indeterminados possam ser tratados por dispositivos de controle. Desse modo, é possível avaliar conceitos não-quantificáveis. Casos práticos: avaliar a temperatura (quente, morno, médio etc.), o sentimento de felicidade(radiante, feliz, apático, triste...), a veracidade de um argumento (correctíssimo, correto, contra-argumentativo, incoerente, falso, totalmente errôneo etc.)
    A lógica fuzzy deve ser vista mais como uma área de pesquisa sobre tratamento da incerteza, ou uma família de modelos matemáticos dedicados ao tratamento da incerteza, do que uma lógica propriamente dita. A lógica difusa normalmente está associada ao uso da teoria de conjuntos fuzzy proposto por Lukasiewicz.
    Ao trabalhar com a lógica fuzzy é comum chamar a lógica booleana de lógica nítida.
    Muitos pesquisadores de versões booleanas de lógica não aceitam a lógica fuzzy como uma verdadeira lógica, no sentido em que aceitam, por exemplo, a lógica modal. Isso pode ser associado a diferentes fatos, entre eles o fato de muitos modelos permitirem soluções aproximadas que não correspondem a uma "verdade" lógica.

    Técnicas para o tratamento de incertezas:
    Não deixe de dar uma olhada também na excelente página http://www.puc-rio.br/marco.ind/.

    Professores denunciam “lista negra” nos institutos federais em greve, assessor de Fernando Haddad nega | Viomundo - O que você não vê na mídia

    Professores denunciam “lista negra” nos institutos federais em greve, assessor de Fernando Haddad nega | Viomundo - O que você não vê na mídia:

    'via Blog this'

    sexta-feira, 21 de outubro de 2011

    Solução do exercício proposto Tutorial Dev-C++ 014 4-e


    // Solução do exercício proposto Tutorial 14 4-e

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    void imprimeVetor(float v[], int n);
    void leVetor(float v[], int n);
    void insert(float v[], int n, int valor, int pos);

    const int MAXTAM = 10;
    int TAM = 5;

    int main(int argc, char *argv[])
    {
        int dup;
        float vet[MAXTAM];
       
        leVetor(vet, TAM);
        imprimeVetor(vet, TAM);
        putchar('\n');
        insert(vet, TAM, -10, 3);
        imprimeVetor(vet, TAM);
        putchar('\n');
        insert(vet, TAM, -20, 1);
        imprimeVetor(vet, TAM);
        putchar('\n');
       
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    void leVetor(float v[], int n) {
         int i;
       
         printf("Lendo %d valores...\n", n);
         for(i=0;i<n;i++) {
             printf("vetor[%d]= ", i);
             scanf("%f", &v[i]);
         }
    }

    void imprimeVetor(float v[], int n) {
         int i;
       
         printf("Imprimindo %d valores...\n", n);
         for(i=0;i<n;i++)
             printf("%2d: %0.3f  ", i, v[i]);
         putchar('\n');
    }
       
    void insert(float v[], int n, int valor, int pos) {
         int i;

         // desloca valores
         for(i=n;i>pos;i--)
             v[i]=v[i-1];
           
         // insere valor
         v[pos]=valor;
       
         TAM += 1;

         printf("Inserido valor %d na posicao %d...\n", valor, pos);
    }

    Solução do exercício proposto Tutorial Dev-C++ 014 4-a


    // Solução do exercício proposto Tutorial 14 4-a

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    const int MAX = 10;

    int main(int argc, char *argv[])
    {
        int vet[MAX];
        int i;
        int valor;
        int diff;
       
        for(i=0;i<MAX;i++) {
            printf("vet[%d]= ",i+1);
            scanf("%d", &vet[i]);
            putchar('\n');
        }
        printf("\n\nValor procurado: ");
        scanf("%d", &valor);
        putchar('\n');
       
        // encontra menor diferença
        diff = abs(vet[0] - valor);
        for(i=1;i<MAX;i++)
            if(abs(vet[i]-valor)<diff)
                diff = abs(vet[i]-valor);
       
        // mostra vetor
        for(i=0;i<MAX;i++)
            printf("%2d: %2d ", i+1, vet[i]);
        printf("\n\n");

        // procura valor
        for(i=0;i<MAX;i++)
            if(abs(vet[i]-valor)==diff)
                printf( "___^__ ");
            else printf("       ");
        printf("\n\n");
           
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    Solução do exercício proposto Tutorial Dev-C++ 014 4-b


    // Solução do exercício proposto Tutorial 14 4-b

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    const int MAX = 10;

    int qtdRepeticoes(int v[], int n);

    int main(int argc, char *argv[])
    {
        int vet[MAX];
        int i;
     
        for(i=0;i<MAX;i++) {
            printf("vet[%d]= ", i+1);
            scanf("%d", &vet[i]);
            putchar('\n');
        }
        printf("\n\n");

        printf("Vetor: todos os elementos\n");
        for(i=0;i<MAX;i++)
            printf("%d ", vet[i]);
        putchar('\n');

        printf("Vetor: nao repetidos\n");
        for(i=0;i<MAX;i++)
            if(qtdRepeticoes(vet, vet[i])<2)
                printf("%d ", vet[i]);
        printf("\n\n");
         
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    int qtdRepeticoes(int v[], int n) {
        int rep = 0;
        int i;
     
        for(i=0;i<MAX;i++)
            if(v[i]==n) rep++;
        return rep;
    }

    Solução do exercício proposto Tutorial Dev-C++ 014 4-c


    // Solução do exercício proposto Tutorial 14 4-c

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    const int MAX_A = 5;
    const int MAX_B = 5;
    const int MAX_C = 5;

    void leVetor(int v[], int t);
    void imprimeVetor(int v[], int t);
    void multiplicaVetores(int v1[], int v2[], int v3[], int t);

    int main(int argc, char *argv[])
    {
        int A[MAX_A];
        int B[MAX_B];
        int C[MAX_C];
       
        printf("Vetor A\n");
        leVetor(A, MAX_A);
        printf("\nVetor B\n");
        leVetor(B, MAX_B);
        multiplicaVetores(A, B, C, MAX_C);
        printf("\nVetor A\n");
        imprimeVetor(A, MAX_A);
        printf("\nVetor B\n");
        imprimeVetor(B, MAX_B);
        printf("\nVetor C\n");
        imprimeVetor(C, MAX_C);
       
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    void leVetor(int v[], int t) {
         int i;
       
         printf("\nInforme valores do vetor\n");
         for(i=0;i<t;i++) {
             printf("%d: ", i+1);
             scanf("%d", &v[i]);
             putchar('\n');
         }
    }

    void imprimeVetor(int v[], int t) {
         int i;
       
         printf("\nValores do vetor\n");
         for(i=0;i<t;i++) {
             printf("%d: %d ", i+1, v[i]);
         }
         putchar('\n');
    }
       
    void multiplicaVetores(int v1[], int v2[], int v3[], int t) {
         int i;
       
         for(i=0;i<t;i++)
             v3[i] = v1[i] * v2[i];
    }

    Solução do exercício proposto Tutorial Dev-C++ 014 4-d


    // Solução do exercício proposto Tutorial 14 4-d

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    void imprimeVetor(float v[], int n);
    void leVetor(float v[], int n);
    int remove_dup(float v[], int n);
    void ordenaVetor(float v[], int n);

    int MAX = 10;

    int main(int argc, char *argv[])
    {
        int dup;
        float vet[MAX];
       
        leVetor(vet, MAX);
        ordenaVetor(vet, MAX);
        imprimeVetor(vet, MAX);
        if(!(dup=remove_dup(vet, MAX)))
            printf("Nao ha valores duplicados...\n\n");
        else
        {
            printf("Encontrados %d duplicatas. Duplicatas removidas...\n", dup);
            imprimeVetor(vet, MAX);
        }
       
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    void leVetor(float v[], int n) {
         int i;
       
         printf("Lendo %d valores...\n", n);
         for(i=0;i<n;i++) {
             printf("vetor[%d]= ", i+1);
             scanf("%f", &v[i]);
             //putchar('\n');
         }
    }

    void imprimeVetor(float v[], int n) {
        int i;
       
         printf("Imprimindo %d valores...\n", n);
         for(i=0;i<n;i++)
             printf("%2d: %0.3f  ", i+1, v[i]);
         putchar('\n');
    }
       
    int remove_dup(float v[], int n) {
        float temp;
        int i;
        int dup = 0;
        int tam;
        float v_temp[n]; // vetor temporario
       
        tam = n;
        temp = v[0]; // guarda ultimo valor lido
        v_temp[0] = temp; // guarda valor nao repetido
       
        // guarda somente valores nao repetidos em v_temp
        for(i=1;i<n;i++) {
            if(v[i]!=temp) { // valor atual é diferente do guardado
                v_temp[i]=v[i]; // transfere valor para v_temp
                temp=v[i]; // atualiza temp
            }
            else
            {
                temp=v[i]; // atualiza temp
                tam--; // v_temp ficará menor
                dup++; // quantidade de duplicatas aumenta
            }
        }
       
        // atualiza vetor sem as repetições
        MAX = tam;
        for(i=0;i<n;i++)
          v[i]=v_temp[i];
       
        return dup;
    }

    void ordenaVetor(float v[], int n) {
         float temp;
         int i;
         int j;
       
         printf("Ordenando vetor...\n", n);
         for(i=0;i<n-1;i++)
           for(j=i+1;j<n;j++)
              if(v[i]>v[j]) {
                  temp = v[i];
                  v[i] = v[j];
                  v[j] = temp;
              }
         printf("Vetor ordenado...\n", n);
    }

    segunda-feira, 17 de outubro de 2011

    Segurança da Informação - Aula 17/10/2011 (Segurança de Redes)

    Segurança de Redes

    Para nossa aula de hoje acessar e ler a Cartilha de Segurança Para Internet, em especial a Parte I, dos itens 1 a 7.

    Sistemas de Apoio à Decisão - Aula 17/10/2011 (Teoria da Decisão)

    Teoria da Decisão

    A teoria da decisão baseia-se em diversos critérios. Podemos adotar uma solução estatística, matemática, usar programação linear etc. Vamos tentar resolver alguns casos de estudo e verificar qual a melhor solução para cada um deles.

    Alguns casos de estudo:


    Caso 1: Lavanderia
    O sr. Branco vai abrir uma nova lavanderia, para a qual pretende comprar várias máquinas de lavar. Já fez um estudo prévio sobre 33 tipos de máquina disponíveis, recolhendo dados sobre os atributos que considera mais importantes: preço, tempo de lavagem e consumo de água e eletricidade (tabela 1). O sr. Branco gostaria de pré-selecionar um conjunto de máquinas (não mais que cinco) para uma análise mais aprofundada que lhe permita fazer a escolha final, atendendo a outros atributos dificilmente quantificáveis.
    [adaptado de Zeleny (1982), pg 210]


    Tabela 1: Máquinas de lavar


    Máquina   Preço US$   Lavagem (T.min)   kWh   Água (L)
     1        509         74                1.5   114
     2        425         80                1.5   110
     3        446         72                1.6   135
     4        564         65                1.6   ll8
     5        547         53                1.8   140
     6        450         68                1.6   135
     7        473         65                1.6   130
     8        484         56                1.7   115
     9        456         68                1.6   130
    10        488         72                1.6   114
    11        530         55                1.7   135
    12        477         76                1.5   110
    13        589         53                1.6   130
    14        534         61                1.4   122
    15        536         57                1.7   110
    16        494         71                1.5   135
    17        425         65                1.5   120
    18        555         53                1.7   125
    19        543         57                1.6   120
    20        515         68                1.5   130
    21        452         76                1.5   112
    22        547         68                1.5   120
    23        421         76                1.4   130
    24        498         68                1.6   120
    25        467         65                1.7   130
    26        595         50                1.8   135
    27        414         68                1.7   125
    28        431         66                1.7   110
    29        452         72                1.5   115
    30        408         77                1.6   119
    31        478         59                1.8   110
    32        395         76                1.5   120
    33        543         57                1.5   135



    Caso 2: Bonecas
    A fábrica de brinquedos "Mestre Ado" produz uma boneca de qualidade para exportação ("Mafalda") , e uma outra, normal, para consumo interno ("Sandra"). A Mafalda ocasiona um lucro de 400 reais por unidade, contra 300 da Sandra. Por restrições de material, a fábrica só consegue produzir 400 bonecas por dia (independentemente do tipo). Se só produzisse Mafaldas, a fábrica poderia fabricar apenas 250 por dia, devido ao seu tempo de produção, que é o dobro do da Sandra. A firma quer maximizar o lucro, mas privilegiando a exportação.
    [adaptado de Hwang  e Masud (1979), pg 23]

    Caso 3: America
    A tabela 2 foi publicada no The New York Times, em Outubro de 1973, quando a Sra. Emmy Grant estava tentando escolher uma área metropolitana para viver, no seu regresso do estrangeiro.
    [adaptado de Zeleny (1982), pg 181]

    Tabela 2: Indicadores socio-económicos

































    Caso 4: Editora
    Uma editora vai lançar um novo livro, ao preço de 1500 reais. O custo de produção é de 300 reais, mais 300 reais por cada exemplar produzido. Um estudo de mercado permitiu estimar as probabilidades de venda do livro, constantes da tabela 3. A editora quer decidir quantos milhares deve ter a  edição.
    [adaptado de Zeleny (1982), pg 35]


    Tabela 3: Estudo de mercado


    vendas  0   1000 2000 3000 4000 5000 6000>
    prob.  0.05 0.15 0.30 0.25 0.15 0.10 0.00





    LinkWithin

    Related Posts Plugin for WordPress, Blogger...

    NOSSO OBJETIVO

    OBJETIVO

    Este blog será usado para divulgação de minhas ideias, notícias sobre tecnologia, disponibilização de links para download de materiais diversos (incluindo materiais didáticos -- que poderão ser usados em minhas aulas e/ou cursos). Gostaria de DEIXAR BEM CLARO que quaisquer materiais disponibilizados através deste blog são, tão somente, para acompanhamento de aulas e/ou cursos, e não constituem de modo algum, aulas na modalidade "ensino à distância" (EAD). Alunos têm total acesso aos materiais disponíveis, mas somente como tutoriais passo a passo. Apostilas disponibilizadas através deste blog não são materiais obrigatórios em disciplinas cursadas ou cursos ministrados.

    RESPONSABILIDADE

    O autor deste blog não é responsável pelo mau uso, intencional ou não, de qualquer código de programa disponibilizado aqui. Os códigos de programas disponíveis neste blog para download é e serão sempre, e tão somente, para uso didático durante o aprendizado. Seja bem-vindo.