Jump to content
Matheus Bispo

[Resolvido] NÃO RECONHECE DADOS DO VETOR

Recommended Posts

Olá FÓRUM, boa noite.

 

Estou tentando desenvolver um pequeno código de KNN, para minha aula de IA, mas estou com um pequeno problema na hora de exibir o sexo da pessoa. 

 

No comando IF, ele não reconhece o valor do 2° item dentro do código.

 

if(valores[ i ] < valores[ j ])

 

o vetor com o i, ele consegue trazer os dados corretos, mas o com j, ele não traz o valor correto, traz o valor de 0.

 

Mas, quando o i, dando um incremento, passando a assumir o valor de j da rodada passada, aí ele consegue trazer o valor que está naquela casa correto. E o j continua trazendo valor 0.

 

Já tentei também com i+1 lá dentro e não resolve. 

 

O que estaria acontecendo ? 

 

Segue abaixo o meu código:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace bispoKNN
{
    class Program
    {
        static void Main(string[] args)
        {
           
            List<Pessoa> pessoas = new List<Pessoa>();

            pessoas.Add(new Pessoa("Mulher", 1.56, 48, 20));
            pessoas.Add(new Pessoa("Mulher", 1.50, 45, 22));
            pessoas.Add(new Pessoa("Mulher", 1.65, 55, 16));
            pessoas.Add(new Pessoa("Homem", 1.75, 65, 7));
            pessoas.Add(new Pessoa("Homem", 1.80, 75, 8));
            pessoas.Add(new Pessoa("Homem", 1.90, 80, 5));

            double[] desconhecido = {1.60, 60, 13};

            Classifier(pessoas, desconhecido);

            Console.ReadKey();
        }

        private static void Classifier(List<Pessoa> pessoas, double[] features)
        {
            int i = 0;
            int j = i+1;
            double[] valores = new double[10];
            string genero = pessoas.Nome;

            while (i < pessoas.Count)
            {
               valores = Distance(pessoas.Features, features);
               Console.WriteLine("Distância {0}  do Gênero {1}", valores, pessoas.Nome);
               if (i < (pessoas.Count - 1))
               {
                 if (valores < valores[j])
                 {
                    genero = pessoas.Nome;
                 }
                 else
                 {
                    genero = pessoas[j].Nome;
                 }
               }
               else
               {
                 j = i - 1;
                 if (valores < valores[j])
                 {
                   genero = pessoas.Nome;
                 }
                 else
                 {
                   genero = pessoas[j].Nome;
                 }
               }
     
            i++;
            }
            Console.WriteLine("");
            Console.WriteLine("É do Sexo "+ genero +".");
        }

        private static double Distance(double[] a, double[]b)
        {
            double sum = 0.0;

            int i = 0;

            while (i < a.Length)
            {
                sum += Math.Pow(a - b, 2);
                i++;
            }

            return Math.Sqrt(sum);
        }
    }

    public class Pessoa
    {
        public double[] Features;
        public string Nome;
        public Pessoa(string nome, double altura, double peso, double tamcabelo)
        {
            Features = new double[3];
            this.Nome = nome;
            Features[0] = altura;
            Features[1] = peso;
            Features[2] = tamcabelo;
        }
    }
}

Share this post


Link to post
Share on other sites

vlw cara, utilizei o foreach e consegui pegar os valores do vetor.

 

Aí pra fazer a comparação de valores do vetor, utilizei o método bubblesort, desse modo eu sei qual é o valor de maior aproximação entre os vizinhos, e assim descobrindo a qual grupo pertence o dado informado. 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Felipe Nobre
      boa noite galera
      Alguém sabe como corrigir esse erro? Eu consigo gerar o PDF normalmente quando o texto não inclui caracteres especiais ou 
      caracteres comuns como acentos etc..
      No app config pensei que fosse o UTF mas está como padrão UTF-8
      Creio que deve ser alguma renderização. PS: Estou utilizando a fonte padrão ARIAL no design do meu report. Minhas referencias com versão mais atual são essas


    • By lucas9
      Com base nos conceitos de reutilização de código e flexibilidade, você deve planejar uma classe de faturamento com o método faturar. Lembre-se que não é permitido reescrever métodos; no entanto, deve ser considerado que cada perfil de cliente tem uma regra de faturamento diferente. Veja:
      Cliente pessoa física recebe um desconto de 15% e tem 30 dias para pagar. Cliente pessoa jurídica recebe um desconto de 20% e tem 60 dias para pagar. Cliente governo não recebe desconto e deve pagar à vista. Use os comandos try e catch para tratar as possíveis exceções (por exemplo, tentar ler mais clientes do que existem).
    • By Estevão Alves Avelino
      Estou com duvidas de como pegar os dados digitados no DataGridView e jogar dentro de variáveis, se alguém souber uma maneira de fazer isso ficarei muito grato!
    • By Estevão Alves Avelino
      Estou com duvidas de como pegar os dados digitados no DataGridView e jogar dentro de variáveis, se alguém souber uma maneira de fazer isso ficarei muito grato!
    • By QBAX
      #include <iostream>
      #include <stdio.h>
      #include <stdlib.h>

      int main()
      {
          float alt, massa, IMC;
           printf("Digite sua Altura (Metros): ");
          scanf("%f",&alt);
           printf("Digite sua Massa (Kg): ");
          scanf("%f",&massa);
          IMC = (alt*alt);
          IMC = (massa/IMC);
          
          printf("-----------------------------------\n");
          printf("Seu IMC e: %0.2f\n",IMC);
          if(IMC<=17)
          {
              printf("Muito abaixo do peso.\n");
          }
          else
          {
              if(IMC>17 && IMC<=18.49)
              {
                  printf("Abaixo do peso.\n");
              }
              else
              {
                  if(IMC>=18.5 && IMC<=24.99)
                  {
                      printf("Peso normal.\n");
                  }
                  else
                  {
                      if(IMC>=25 && IMC<=29.99)
                      {
                          printf("Acima do peso.\n");
                      }
                      else
                      {
                          if(IMC>=30 && IMC<=34.99)
                          {
                              printf("voce esta Obeso.\n");
                          }
                          else
                          {
                              if(IMC>=35 && IMC<=39.99)
                              {
                                  printf("Obesidade Severa.\n");
                              }
                              else
                              {
                                  if (IMC>=40)
                                  {
                                      printf("voce esta em Obesidade MORBIDA.\n");
                                  }
                              }
                          }
                      }
                  }
              }
          }
          return 0;
      }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.