Привет, Хабр!

В Сети можно найти тонны самого разного софта для астрологических и нумерологических расчетов. Решил и я написать свой вариант. Моя программка не строит натальные карты, но умеет рассчитывать числа рождения и имени, квадрат Пифагора, а также вычислять знаки по нескольким гороскопам. Ниже рассматриваются интерфейс и код программы.

Интерфейс приложения

Вот так программа выглядит:

Интерфейс программы состоит из двух страниц. На первой странице пользователь вводит свое имя и дату рождения:

А на второй уже получает результат:

Есть возможность сохранять результаты в виде текстового файла. Иерархия компонентов в редакторе Glade выглядит так:

Теперь о том, как это все работает.

Числа имени и рождения

Исходный код программы можно посмотреть здесь. Для расчета числа имени применялась вот такая таблица:

На ее основе был создан метод name_number:

private int  name_number(string str){
        var  n=0;
        string[] array = new string[str.length];
        for (int i=0;i<str.length;i++) {
            array[i] = str.get_char(str.index_of_nth_char(i)).to_string();//превращаем строку в массив символов
            switch (array[i]) {
                case "a":
                case "j":
                case "s":
                case "A":
                case "J":
                case "S":
                    n += 1;
                    break;
                case "b":
                case "k":
                case "t":
                case "B":
                case "K":
                case "T":
                    n += 2;
                    break;
                case "c":
                case "l":
                case "u":
                case "C":
                case "L":
                case "U":
                    n += 3;
                    break;
                case "d":
                case "m":
                case "v":
                case "D":
                case "M":
                case "V":
                    n += 4;
                    break;
                case "e":
                case "n":
                case "w":
                case "E":
                case "N":
                case "W":
                    n += 5;
                    break;
                case "f":
                case "o":
                case "x":
                case "F":
                case "O":
                case "X":
                    n += 6;
                    break;
                case "g":
                case "p":
                case "y":
                case "G":
                case "P":
                case "Y":
                    n += 7;
                    break;
                case "h":
                case "q":
                case "z":
                case "H":
                case "Q":
                case "Z":
                    n += 8;
                    break;
                case "i":
                case "r":
                case "I":
                case "R":
                    n += 9;
                    break;
                case " ":
                case "-":
                    n += 0;
                    break;
                default:
                    return -1;
            }
    }
    return trans_num(n);//возвращаем однозначное число
 }

Число имени должно быть однозначным. Для его получения применяется метод trans_num:

private int  trans_num(int num){
        while (num>=10){//если число не является однозначным
            num=(num/10)+(num%10);//превращаем в однозначное
        }
        return num;
     }

Для вычисления числа рождения нужно сложить все цифры даты рождения. Этим занимается следующий код:

private int  births_number(int n,int l,int m){
    int numbr=trans_num(n)+trans_num(l)+trans_num(m);//слаживаем все числа даты
        return trans_num(numbr);
    }

Квадрат Пифагора

Или по другому это еще называется психоматрицей. Чтобы ее получить нужно сначала вычислить несколько, так называемых рабочих чисел, с помощью несложных арифметических операций с цифрами даты рождения.

Пример:

Дата: 5 декабря 1979 года.

  1. Складываем цифры дня, месяца и года рождения: 5+1+2+1+9+7+9=34 — это 1-ое рабочее число.

  2. Складываем цифры первого рабочего числа: 3+4=7 — это 2-ое рабочее число.

  3. Из первого рабочего числа вычитаем удвоенную первую цифру дня рождения: 34-2*5=24 — это 3-е рабочее число.

  4. Складываем цифры третьего рабочего числа: 2+4=6 — это 4-ое рабочее число. Первый ряд чисел: 5121979 Второй ряд чисел: 347246. Подсчитав, сколько каких цифр в обоих рядах, составляем таблицу:

11...22...3

44...5....6

77...---...99

Для вычисления психоматрицы создан такой метод:

private string psychomatrix(int n,int l,int m){
        int[] mas = new int[16];

        mas[0] = (n / 10);
        mas[1] = n % 10;

        int c;
        int z;

        if (mas[0] == 0)
        {
            c= mas[1];
        } else
        {
            c= mas[0];
        }

        mas[4]= m % 10;
        z = m / 10;
        mas[5] = z % 10;
        z = z / 10;
        mas[6] = z % 10;
        z = z / 10;
        mas[7]=z;

      if(l<10){
          mas[2]=0;
          mas[3]=l;
      }else{
          mas[2]=1;
          mas[3]=l-10;
      }

        int sum = mas[0] + mas[1] + mas[2] + mas[3] + mas[4] + mas[5] + mas[6] + mas[7];

        mas[8] = sum/ 10;
        mas[9] = sum % 10;

        mas[10] = (mas[8]+mas[9])/ 10;
        mas[11] = (mas[8]+mas[9])% 10;

        mas[12] = (sum-(2*c)) / 10;
        mas[13] = (sum-(2*c)) % 10;

        mas[14] = (mas[12]+mas[13]) / 10;
        mas[15] = (mas[12]+mas[13]) % 10;
        string[] str = new string[9];
        for (var i=0;i<9;i++){
            str[i]="";
        }
        for (var i=0;i<16;i++){//группируем одинаковые числа
            switch (mas[i]){
                case 0:break;
                case 1:str[0]=str[0]+"1";break;
                case 2:str[1]=str[1]+"2";break;
                case 3:str[2]=str[2]+"3";break;
                case 4:str[3]=str[3]+"4";break;
                case 5:str[4]=str[4]+"5";break;
                case 6:str[5]=str[5]+"6";break;
                case 7:str[6]=str[6]+"7";break;
                case 8:str[7]=str[7]+"8";break;
                case 9:str[8]=str[8]+"9";break;default:break;
            }
        }
        string matrix = "";
        for(int i=0;i<9;i++){//формируем таблицу 3X3
             if(i==2||i==5){
                matrix=matrix+str[i]+"\n";
             }else{
                matrix=matrix+str[i]+"  ";
             }
        }
        return matrix;
    }

Восточный гороскоп

Определением знака по восточному гороскопу занят вот этот метод:

private  string  ost_horoscope(int n){
        while (n>12){//возвращаемся в начало нашей эры
            n-=12;
        }
        switch (n){
            case 1:
                return "cock";
            case 2:
                return "dog";
            case 3:
                return "pig";
            case 4:
                return "rat";
            case 5:
                return "bull";
            case 6:
                return "tiger";
            case 7:
                return "rabbit";
            case 8:
                return "the Dragon";
            case 9:
                return "snake";
            case 10:
                return "horse";
            case 11:
                return "goat";
            case 12:
                return "monkey";
            default:
                return "";
        }
    }

Знаки Зодиака

Кроме зодиакальных знаков программа рассчитывает еще знаки славянского и египетского гороскопов, но так как принцип расчета у всех этих знаков одинаковый, то приведу только метод для расчета зодиакальных знаков:

 private string zodiac_horoscope(int n,int month){
        string  f;
        if (month==3&&n>20||month==4&&n<21)f="Aries";
        else if (month==4&&n>20||month==5&&n<22)f="Taurus";
        else if (month==5&&n>21||month==6&&n<22)f="Gemini";
        else if (month==6&&n>21||month==7&&n<23)f="Cancer";
        else if (month==7&&n>22||month==8&&n<22)f="Leo";
        else if (month==8&&n>21||month==9&&n<24)f="Virgo";
        else if (month==9&&n>23||month==10&&n<24)f="Libra";
        else if (month==10&&n>23||month==11&&n<23)f="Scorpio";
        else if (month==11&&n>22||month==12&&n<23)f="Sagittarius";
        else if (month==12&&n>22||month==1&&n<21)f="Capricorn";
        else if (month==1&&n>20||month==2&&n<20)f="Aquarius";
        else if (month==2&&n>19||month==3&&n<21)f="Pisces";
        else return "";
        return f;
    }

Дата-центр ITSOFT — размещение и аренда серверов и стоек в двух дата-центрах в Москве. За последние годы UPTIME 100%. Размещение GPU-ферм и ASIC-майнеров, аренда GPU-серверов, лицензии связи, SSL-сертификаты, администрирование серверов и поддержка сайтов.