Categories
Без категория

CAD Viewer за отваряне на CAD файлове

Идея за простичка програма за визуализиране на CAD файлове (файлове съдържащи кадастрални данни).

CAD файловете са файлове, съдържащи данни за точки, линии (граници на имоти), текстове, контури и други данни.

Програмата ще използва библиотеката MapWinGIS.

MapWinGIS е библиотека, предлагаща възможност за визуализиране на данни от shape файлове, изображения, TIN и други формати. Поддържа се също и атрибутна информация.

Categories
Без категория

Пренасяне на ориентировъчни ъгли

За да се пренесе ориентировъчния ъгъл O(I) от станция I, на която O(I) е известен, в точка J е необходимо да има измерени посоки от точка I към точка J и обратно.

Първо се изчислява посочния ъгъл α(I, J) от точка I към точка J:

посочен ъгъл α(I, J) = ориентировъчен ъгъл O(I) + посока R(I, J);

След това се изчислява обратния посочен ъгъл α(J, I) = α(I, J) ± 200 гради.

Накрая се изчислява ориентировъчния ъгъл O(J) = α(J, I) – R(J, I).

 

Categories
Без категория

Least squares adjustment of survey networks

Проект в GitHub на програмата ПИПМ (Параметрично изравнение на планови мрежи).

Връзка:

https://github.com/Nanich87/least-squares-adjustment-of-survey-networks

Описание:

ПИПМ е програма за изравнение на геодезически мрежи чрез МНМК (Метод на най-малките квадрати).

Categories
Visual C#

Програма за изравнение на ъглово-линейни мрежи

Конзолна програма на C# за изравнение на ъглово-линейни мрежи

Проектът ще включва изравнение на ъглово-линейни мрежи по метода на най-малките квадрати и оценка на точността. Програмният език ще е C#. Входните данни ще се четат от kor и dpi файлове, съдържащи данни за дадените точки и измерванията.

Проектът ще бъде разделен на няколко отделни задачи (проблеми):

  1. Създаване на клас Point за дефиниране на дадените точки в мрежата;
  2. Прочитане на входните данни от kor файла и добавянето им в списък (List) от тип Point;
  3. Създаване на клас Station за дефиниране на станциите в мрежата;
  4. Създаване на клас Observation за дефиниране на измерванията в мрежата;
  5. Прочитане на станциите и измерванията от dpi файла, и добавянето им съответно в списъци (List) от тип Station и Observation;
  6. Дефиниране на клас PointDetermination, съдържащ методи за определяне на приблизителни координати на новите точки чрез засечки – права, обратна и линейна;
  7. Определяне на приблизителните координати на новите точки;
  8. Изчисляване на посочните ъгли;
  9. Изчисляване на ориентировъчните ъгли на станциите;
  10. Изчисляване коефициентите пред неизвестните в ураненията на поправките (съставяне на уравнение за всяка измерена посока и дължина);
  11. Елиминиране на ориентировъчното неизвестно в уравненията на поправките;
  12. Съставяне и решаване на система нормални уравнения;
  13. Определяне най-вероятните стойности на координатите на новите точки;
  14. Оценка на точността;

Задачите могат да претърпят промени в процеса на работа по проекта!

Връзки:

Categories
Visual C# Телерик

C# част 2 – класиране

C# програмиране – част IIОнлайн10 от 10279 от 500Взет!
Точки: 61.10
Място: 181

 За 21 точки не е взет с отличие, но можеха да са и 121 точки.

Поуката е повече подготовка за изпита по Обектно-ориентирано програмиране (ООП).

Categories
Visual C# Телерик

Решение на задача – StrangeLand Numbers

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

namespace StrangeLandNumbers {
  class Program {
    static void Main(string[] args) {
      Dictionary strangeLandNumbersDictionay = new Dictionary();
      strangeLandNumbersDictionay.Add("f", 0);
      strangeLandNumbersDictionay.Add("bIN", 1);
      strangeLandNumbersDictionay.Add("oBJEC", 2);
      strangeLandNumbersDictionay.Add("mNTRAVL", 3);
      strangeLandNumbersDictionay.Add("lPVKNQ", 4);
      strangeLandNumbersDictionay.Add("pNWE", 5);
      strangeLandNumbersDictionay.Add("hT", 6);
      List strangeLandNumbersList = new List();
      string strangeLandNumber = Console.ReadLine();
      StringBuilder number = new StringBuilder();
      for (int index = 0; index < strangeLandNumber.Length; index++) {
        number.Append(strangeLandNumber[index]);
        if (strangeLandNumbersDictionay.ContainsKey(number.ToString())) {
          strangeLandNumbersList.Add(number.ToString());
          number.Clear();
        }
      }
      int power = strangeLandNumbersList.Count - 1;
      long sum = 0;
      for (int index = 0; index < strangeLandNumbersList.Count; index++) {
        sum += strangeLandNumbersDictionay[strangeLandNumbersList[index]] * (long) Math.Pow(7, power);
        number.Clear();
        power--;
      }
      Console.WriteLine(sum);
    }
  }
}
Categories
Visual C# Телерик

Резултат от изпита по C# – част 2

Изпита на 22.01.2014 (сутрин) приключи със среден резултат, само 279 точки, но изводите са вече направени – необходимо е повече старание и време за по-добър резултат.

Задачите бяха много интересни, а за следващия курс по C# част 2 ще се постарая да съм решил всички давани задачи до момента, плюс тези от Алго академията.

Categories
Visual C# Телерик

Решение на задача – Decode And Decrypt

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

namespace DecodeAndDecrypt {
  class Program {
    static void Main() {
      string encodedMessage = Console.ReadLine();
      List cypherDigitsList = new List();
      for (int letterIndex = encodedMessage.Length - 1; letterIndex >= 0; letterIndex--) {
        if (Char.IsDigit(encodedMessage[letterIndex])) {
          cypherDigitsList.Add(encodedMessage[letterIndex]);
        } else {
          break;
        }
      }
      cypherDigitsList.Reverse();
      int cypherLenght = int.Parse(string.Join(string.Empty, cypherDigitsList.ToArray()));
      string decodedMessage = Decode(encodedMessage, cypherLenght.ToString().Length);
      int cypherStartIndex = decodedMessage.Length - cypherLenght;
      string cypher = decodedMessage.Substring(cypherStartIndex, cypherLenght);
      int encryptedMessageLength = decodedMessage.Length - cypher.Length;
      string encryptedMessage = decodedMessage.Substring(0, encryptedMessageLength);
      Console.WriteLine(Decrypt(encryptedMessage, cypher));
    }

    static string Decrypt(string encryptedMessage, string cypher) {
      char[] cypherText = new char[encryptedMessage.Length];
      int index = 0;
      if (cypher.Length < encryptedMessage.Length) {
        for (int i = 0; i < encryptedMessage.Length; i++) {
          if (index == cypher.Length) {
            index = 0;
          }
          cypherText[i] = (char)((FindLetterIndex((encryptedMessage[i])) ^ FindLetterIndex(cypher[index])) + 65);
          index++;
        }
      } else {
        for (int i = 0; i < cypher.Length; i++) {
          if (index == encryptedMessage.Length) {
            index = 0;
          }
          if (i >= encryptedMessage.Length) {
            cypherText[index] = (char)((FindLetterIndex((cypherText[index])) ^ FindLetterIndex(cypher[i])) + 65);
          } else {
            cypherText[index] = (char)((FindLetterIndex((encryptedMessage[index])) ^ FindLetterIndex(cypher[i])) + 65);
          }
          index++;
        }
      }
      string encryptedText = string.Join(string.Empty, cypherText);
      return encryptedText;
    }

    static string Decode(string message, int cypherDigitsCount) {
      StringBuilder decodedMessage = new StringBuilder();
      StringBuilder letterMultiplier = new StringBuilder();
      for (int i = 0; i < message.Length - cypherDigitsCount; i++) {
        if (Char.IsDigit(message[i])) {
          letterMultiplier.Append(Char.GetNumericValue(message[i]));
        } else {
          if (letterMultiplier.Length > 0) {
            decodedMessage.Append(new string(message[i], int.Parse(letterMultiplier.ToString())));
            letterMultiplier.Clear();
          } else {
            decodedMessage.Append(message[i]);
          }
        }
      }
      return decodedMessage.ToString();
    }

    static int FindLetterIndex(char letter) {
      int index = (letter < 97 ? letter - 65 : letter - 97);
      return index;
    }
  }
}
Categories
Visual C# Телерик

Решение на задача – Magic Words

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

namespace MagicWords {
  class Program {
    static List wordsList = new List();
    static int wordsCount;
    static void Main() {
      wordsCount = int.Parse(Console.ReadLine());
      for (int i = 0; i < wordsCount; i++) {
        wordsList.Add(Console.ReadLine());
      }
      if (wordsCount > 1) {
        for (int oldIndex = 0; oldIndex < wordsCount; oldIndex++) {
          int wordLength = wordsList[oldIndex].Length;
          int newIndex = wordLength % (wordsCount + 1);
          ShiftElement(oldIndex, newIndex);
        }
        Print();
      } else {
        Console.WriteLine(wordsList[0]);
      }
    }
    static void Print() {
      int maxWordLength = wordsList.Max(w => w.Length);
      StringBuilder output = new StringBuilder();
      for (int letterIndex = 0; letterIndex < maxWordLength; letterIndex++) {
        for (int wordIndex = 0; wordIndex < wordsCount; wordIndex++) {
          if (letterIndex < wordsList[wordIndex].Length) {
            output.Append(wordsList[wordIndex].ToString()[letterIndex]);
          } else {
            continue;
          }
        }
      }
      Console.WriteLine(output.ToString());
    }
    static void ShiftElement(int oldIndex, int newIndex) {
      string word = wordsList[oldIndex];
      wordsList[oldIndex] = null;
      wordsList.Insert(newIndex, word);
      wordsList.Remove(null);
    }
  }
}
Categories
Visual C# Телерик

Решение на задача – Multiverse Communication

using System;
using System.Collections.Generic;
using System.Text;

namespace MultiverseCommunication {
  class Program {
    static void Main() {
      Dictionary digits = new Dictionary();
      digits.Add("CHU", 0);
      digits.Add("TEL", 1);
      digits.Add("OFT", 2);
      digits.Add("IVA", 3);
      digits.Add("EMY", 4);
      digits.Add("VNB", 5);
      digits.Add("POQ", 6);
      digits.Add("ERI", 7);
      digits.Add("CAD", 8);
      digits.Add("K-A", 9);
      digits.Add("IIA", 10);
      digits.Add("YLO", 11);
      digits.Add("PLA", 12);
      string input = Console.ReadLine();
      StringBuilder number = new StringBuilder();
      decimal output = 0;
      int power = input.Length / 3;
      for (int i = 0; i < input.Length; i += 3) {
        string digit = string.Format("{0}{1}{2}", input[i], input[i + 1], input[i + 2]);
        output += (decimal)(digits[digit] * Math.Pow(13, power - 1));
        power--;
      }
      Console.WriteLine(output);
    }
  }
}