Categories
Visual C#

Задача: Garden

Решение

using System;
namespace TelerikExamples
{
class Garden
{
static void Main()
{
decimal[] seedsCosts = {0.5M, 0.4M, 0.25M, 0.6M, 0.3M, 0.4M};
decimal totalCosts = 0M;
int totalArea = 250;
int inputArea = 0;
for (int i = 0; i < seedsCosts.Length; i++)
{
int seedsAmount = int.Parse(Console.ReadLine());
totalCosts += seedsAmount * seedsCosts[i];
if(i != seedsCosts.Length - 1)
{
inputArea += int.Parse(Console.ReadLine());
}
}
Console.WriteLine("Total costs: {0:F2}", totalCosts);
int areaDifference = totalArea - inputArea;
if (areaDifference > 0)
{
Console.WriteLine("Beans area: {0}", areaDifference);
}
else if (areaDifference < 0)
{
Console.WriteLine("Insufficient area");
}
else
{
Console.WriteLine("No area for beans");
}
}
}
}
view raw Garden.cs hosted with ❤ by GitHub
Categories
Visual C#

Задача: Fire In The Matrix

Описание

Лятото наближава. Птичките пеят, дърветата са зелени, момичетата носят къси поли… Да, точно така, само в мечтите ти! Въпреки, че е юни, времето е ужасно. Нуждаем се от огън, за да се стоплим. Много огън! Много, много огън!!!

Понеже живеем в Матрицата, хипер-ултра-мега спасителят Нео ще трябва да напише програма за създаване на големи факли. За съжаление, Нео е просто един кунг-фу учител, който обича да лети в небесата. Ти ще трябва да му помогнеш, в противен случай хората ще измръзнат.

Решение

using System;
namespace TelerikExamples {
class FireInTheMatrix {
static void Main() {
int fireWidth = int.Parse(Console.ReadLine());
int sideDots = (fireWidth - 2) / 2;
int middleDots = 0;
for (int i = sideDots; i >= 0; i--) {
Console.Write(new string('.', i));
Console.Write(new string('#', 1));
Console.Write(new string('.', middleDots));
Console.Write(new string('#', 1));
Console.Write(new string('.', i));
Console.WriteLine();
middleDots += 2;
}
middleDots = fireWidth - 2;
for (int i = 0; i < fireWidth / 4; i++) {
Console.Write(new string('.', i));
Console.Write(new string('#', 1));
Console.Write(new string('.', middleDots));
Console.Write(new string('#', 1));
Console.Write(new string('.', i));
Console.WriteLine();
middleDots -= 2;
}
Console.WriteLine(new string('-', fireWidth));
int middleSlashes = fireWidth / 2;
for (int i = 0; i < fireWidth / 2; i++) {
Console.Write(new string('.', i));
Console.Write(new string('\\', middleSlashes));
Console.Write(new string('/', middleSlashes));
Console.Write(new string('.', i));
Console.WriteLine();
middleSlashes--;
}
}
}
}
Categories
Visual C#

Задача: Drunken Numbers

Описание

Всеки знае, че второто най-важно нещо в живота на програмиста е да пише код, но най-важното е да пие бира. Митко и Владко са много известни програмисти. В 19-тото световно състезание по програмиране двамата се срещнали. Състезанието се състои от N на брой рунда. Във всеки рунд двамата състезатели трябва да пият бира. Митко и Владко са много добри програмисти, затова те пият наистина много бира. Съдиите са пияни и не могат да изчислят колко бира е изпита от всеки състезател, и не могат да определят по-добрият програмист.

Решение

using System;
namespace TelerikExamples {
class DrunkenNumbers {
static void Main() {
// брой рундове - прочита се от конзолата
byte rounds = byte.Parse(Console.ReadLine());
// спечелени точки (една изпита бира = една точка)
int vladkoScore = 0;
int mitkoScore = 0;
for (byte round = 0; round < rounds; round++) {
// "пияно" число - прочита се от конзолата
int drunkenNumber = Math.Abs(int.Parse(Console.ReadLine()));
// брой цифри в числото //
int digitsCount = drunkenNumber.ToString().Length;
int digitsCount = (int) Math.Floor(Math.Log10(drunkenNumber)) + 1;
// начален индекс за Владко
int start = (int) Math.Floor(digitsCount * 0.5);
// отместване от началото на числото
int offset = digitsCount % 2 == 0 ? start : start + 1;
for (int index = 0; index < offset; index++) {
mitkoScore += int.Parse(drunkenNumber.ToString().Substring(index, 1));
vladkoScore += int.Parse(drunkenNumber.ToString().Substring(start + index, 1));
}
}
// разлика в точките
int scoreDifference = Math.Abs(mitkoScore - vladkoScore);
// сбор на точките
int totalScore = mitkoScore + vladkoScore;
// определяне на победителя
if (mitkoScore > vladkoScore) {
// победител е Митко
Console.WriteLine("M {0}", scoreDifference);
} else if (mitkoScore < vladkoScore) {
// победител е Владко
Console.WriteLine("V {0}", scoreDifference);
} else {
// няма победител
Console.WriteLine("No {0}", totalScore);
}
}
}
}
Categories
Visual C#

Задача: Coffee Vending Machine

Описание

Кафе-машината в Академия Телерик не работи правилно. Модулът за връщане на ресто на машината е създава проблеми. Персоналът вече е повикал техник, но той се намира в едно от стотиците задръствания в центъра на София. Понеже е изпитен ден, дълга опашка от „девелъпъри“ с кръвожадни погледи чака за кафе. Задачата ти е да помогнеш за временното поправяне на машината, преди пристигането на техника, за да успокоиш програмистите.

Решение

using System;
namespace TelerikExamples {
class CoffeeVendingMachine {
static void Main() {
short i;
short j;
short[] coinsNumber = new short[5];
decimal[] coinsValue = {
0.05 M,
0.10 M,
0.20 M,
0.5 M,
1.00 M
};
decimal totalMoney = 0.00 M;
for (i = 0; i < 5; i++) {
coinsNumber[i] = short.Parse(Console.ReadLine());
totalMoney += coinsNumber[i] * coinsValue[i];
}
decimal givenAmount = decimal.Parse(Console.ReadLine());
decimal itemPrice = decimal.Parse(Console.ReadLine());
if (givenAmount < itemPrice) {
Console.WriteLine("More {0:F2}", itemPrice - givenAmount);
} else {
if (totalMoney < (givenAmount - itemPrice)) {
Console.WriteLine("No {0:F2}", givenAmount - itemPrice - totalMoney);
} else {
decimal change = givenAmount - itemPrice;
decimal availableMoney = totalMoney - change;
for (i = 4; i >= 0; i--) {
for (j = 0; j < coinsNumber[i]; j++) {
change -= coinsValue[i];
if (change < 0) {
change += coinsValue[i];
break;
} else if (change == 0) {
break;
}
}
if (change == 0) {
break;
}
}
if (change == 0) {
Console.WriteLine("Yes {0:F2}", availableMoney);
}
}
}
}
}
}
Categories
VB.NET

Задача: Sand-glass

Описание

Имало едно време един могъщ магьосник. Неговото име било Гуеногфрин. Не след дълго той станал велик магьосник. Добросърдечен бил той. Използвал магията си единствено, за да защитава хората от злите вещици, идващи през нощта. Гуеногфрин, въпреки това, бил миролюбив и не искал да се бие или нарани вещиците, затова той измислил друго решение. Щял да хваща вещиците и да ги заключва в пясъчни часовници (единственият затвор, от който  вещица не може да избяга). За нещастие, пясъчните му часовници били на привършване. Помогни на Гуеногфрин да залови всички вещици като направиш свои собствени пясъчни часовници.

Пример

Sand-glass

Решение

Module SandGlass
Sub Main()
Dim n = Integer.Parse(Console.ReadLine())
Dim stars As Integer = n + 2
Dim add As Boolean = False
For i As Integer = 1 To n
If stars = 1 Then
add = True
End If
stars = If(add = False, stars - 2, stars + 2)
Dim dots As Integer = (n - stars) * 0.5
Console.Write(New String(".", dots))
Console.Write(New String("*", stars))
Console.Write(New String(".", dots))
Console.WriteLine()
Next i
Console.ReadLine()
End Sub
End Module
Categories
VB.NET

Задача: Fir Tree

Описание

Бъдни вечер наближава, така че дори и програмистите трябва да се подготвят.

В духа на празника твоята задача е да напишеш програма, която отпечатва елха в конзолата.

Форматът на дървото е показан в примера по-долу.

Пример

Fir Tree

Решение

Module FirTree
Sub main()
Dim height As Integer = Integer.Parse(Console.ReadLine())
Dim width As Integer = 1
For i As Integer = 2 To height - 1
width += 2
Next i
Dim asterisk As Integer = -1
Dim point As Integer = 0
For i = 1 To height
asterisk += 2
point = If(i < height, (width - asterisk) * 0.5, (width - 1) * 0.5)
For j = 1 To width
If j <= point Or j > width - point Then
Console.Write(".")
Else
Console.Write("*")
End If
Next j
Console.WriteLine()
Next i
Console.ReadLine()
End Sub
End Module
Categories
Без категория

Задача: Tribonacci

Описание

Редицата на Трибоначи е редица, в която всеки следващ елемент се получава от сумата на предходните три елемента на редицата.

Tn = Tn-1 + Tn-2 + Tn-3

Напишете програма, която намира n-тият елемент на редицата на Трибоначи, ако са дадени първите три елемента на редицата и номерът на n-тия елемент.

Първоначално решение

Module Tribonacci
Sub main()
Dim T1 As Integer = Integer.Parse(Console.ReadLine())
Dim T2 As Integer = Integer.Parse(Console.ReadLine())
Dim T3 As Integer = Integer.Parse(Console.ReadLine())
Dim N As Integer = Integer.Parse(Console.ReadLine())
Dim T(N - 1) As Integer
T(0) = T1
T(1) = T2
T(2) = T3
For i As Integer = 3 To N - 1
T(i) = T(i - 3) + T(i - 2) + T(i - 1)
Next i
Console.WriteLine(T(N - 1))
Console.ReadLine()
End Sub
End Module

Коментар

Това решение не е добро, защото N може да е число от 1 до 15000 включително, а T1, T2 и T3 – числа от -2000000 до 2000000. В решението масивът T се запълва с всички елементи на редицата.

Ново решение

Module Tribonacci
Sub main()
Dim T1 As Integer = Integer.Parse(Console.ReadLine())
Dim T2 As Integer = Integer.Parse(Console.ReadLine())
Dim T3 As Integer = Integer.Parse(Console.ReadLine())
Dim N As Integer = Integer.Parse(Console.ReadLine())
Dim i As Integer = 4
Dim nextMember As Integer = 0
While i <= N
nextMember = T1 + T2 + T3
T1 = T2
T2 = T3
T3 = nextMember
i += 1
End While
Console.WriteLine(nextMember)
Console.ReadLine()
End Sub
End Module

Коментар

В това решение последните три члена на редицата се пазят в променливите T1, T2 и Т3. Масиви не се използват.

Categories
VB.NET

Задача: Ship Damage

Описание

За дефинирането на диагонала не е от значение реда на въвеждане на двете срещуположни точки, както и самите точки.

Визуализация

Ship Damage

Решение

Imports System.Drawing
Module ShipDamage
Sub Main()
' вход на данни
Dim line(10) As Integer
For i As Integer = 0 To line.Length - 1
line(i) = Integer.Parse(Console.ReadLine())
Next i
' дефиниране на правоъгълник,
' с начало долен ляв ъгъл (1) и посока обратна на часовниковата стрелка,
' зададен чрез един от диагоналите му
Dim S(3) As Point 'масив за точките, дефиниращи върховете на правоъгълника
If line(2) - line(0) > 0 And line(3) - line(1) > 0 Then
'диагоналът е зададен с точки 1-3
S(0) = New Point(line(0), line(1))
S(1) = New Point(line(2), line(1))
S(2) = New Point(line(2), line(3))
S(3) = New Point(line(0), line(3))
ElseIf line(2) - line(0) > 0 And line(3) - line(1) < 0 Then 'диагоналът е зададен с точки 2-4 S(0) = New Point(line(2), line(1)) S(1) = New Point(line(0), line(1)) S(2) = New Point(line(0), line(3)) S(3) = New Point(line(2), line(3)) ElseIf line(2) - line(0) < 0 And line(3) - line(1) > 0 Then
'диагоналът е зададен с точки 4-2
S(0) = New Point(line(0), line(3))
S(1) = New Point(line(2), line(3))
S(2) = New Point(line(2), line(1))
S(3) = New Point(line(0), line(1))
Else
'диагоналът е зададен с точки 3-1
S(0) = New Point(line(2), line(3))
S(1) = New Point(line(0), line(3))
S(2) = New Point(line(0), line(1))
S(3) = New Point(line(2), line(1))
End If
'дефиниране на катапулти
Dim C(2) As Point 'масив за точките, дефиниращи катапултите
C(0) = New Point(line(5), line(6))
C(1) = New Point(line(7), line(8))
C(2) = New Point(line(9), line(10))
'дефиниране на хоризонта
Dim horizon As Integer = line(4)
'щети, нанесени по кораба от катапултите
Dim totalDmg As Integer = 0
'превъртане на всички катапулти
For i As Integer = 0 To C.Length - 1
'разстояние от катапулта до хоризонта
Dim dist = horizon - C(i).Y
'координати на точката, дефинираща мишената
Dim target = New Point(C(i).X, dist + horizon)
'брояч за положителните детерминанти
Dim positiveDeterminant As Integer = 0
'флаг за пропуск при отрицателна детерминанта
Dim miss As Boolean = False
'превъртане върховете на кораба
For j As Integer = 0 To S.Length - 1
'определяне на "площта" (детерминантата)
Dim area As Integer
If j < S.Length - 1 Then
area = (0.5) * (S(j + 1).X * target.Y - S(j + 1).Y * target.X - S(j).X * target.Y + S(j).Y * target.X + S(j).X * S(j + 1).Y - S(j).Y * S(j + 1).X)
Else
area = (0.5) * (S(0).X * target.Y - S(0).Y * target.X - S(j).X * target.Y + S(j).Y * target.X + S(j).X * S(0).Y - S(j).Y * S(0).X)
End If
'проверяване знака на "площта" (детерминантата)
Select Case area Case Is > 0 'положителна "площ"
'целта е улучена при 2 <= positiveDeterminant <= 4 positiveDeterminant += 1
Case Is < 0 'отрицателна "площ"
'целта е пропусната
miss = True
Exit For
End Select
Next j
'ако няма пропуск, прибавяме щетите, нанесени по кораба, към общите щети
If miss = False Then
Select Case positiveDeterminant
Case 4 'изстрелът попада в кораба
totalDmg += 100
Case 3 'изстрелът попада върху един от ръбовете
totalDmg += 50
Case 2 'изстрелът попада върху един от върховете
totalDmg += 25
End Select
End If
Next i
'извеждане на резултата
Console.WriteLine(String.Format(totalDmg))
End Sub
End Module
Categories
Други

Задължителни добавки за Firefox

Добавки, които всеки потребител на Firefox трябва да има:

2024

  1. uBlock Origin

2013

  1. Adblock Plus
  2. DownloadHelper
  3. Ghostery
Categories
PHP

Трансформация от WGS 84 към UTM

Преобразуване от географски координати (WGS84) към проекционни координати (WGS84/UTM 35N)

Връзка: Трансформация на координатни системи

За трансформацията е използвана библиотека Proj4js.

Proj4js е библиотека, написана на JavaScript, за трансформация на координати от една координатна система в друга, включваща и трансформация на геодезически референтни системи (datum transformations)