Архив за етикет: програмиране

SoftUni Homeworks: JAVA Basics course – Java Collections (Масиви, списъци, стрингове, речници, множества)

Templates--JAVAОбяснение на задачите/упражненията от домашното към лекцията Масиви, списъци, стрингове, речници, множества от курса JAVA Basics в SoftUni.

Условията на задачите – тук

Кодът с решенията на задачите – тук

 

 

Задача 1: Няма нищо за обяснение, като за първа задача. В случая си заделяме масив от определени стойности, както подобава за езици като Java и C#, пълним го със стойности и го принтираме.

Задача 2: В тази задача, ни се обръща внимание как става сравнението на стринговете в Java. Мислите си, че е с „==“, ама не – трябва да пишете str.equals(str2). Тегава история си е Java-та за писане, няма спор 🙂

Задача 3: В тази задача, използвам Речник реализиран с червено-черно дърво (TreeMap), в която да събирам стринговете по ключ стойност. В тази структура от данни ключовете се пазят сортирани. Обръщам внимание, че когато се опитаме да вземем стойност ( object.get(key) ) се връща стойността по даден ключ. Ако в речника няма двойка с такъв ключ се връща null. За да обходим самия речник е необходимо да използваме интерфейса Map.Entry и неговия метод entrySet(). Този интерфейс декларира методи getKey() и getValue(), чрез които вече можем да получим достъп до ключовете и стойностите на TreeMap-а.

Задача 4: Обръщайте внимание на подсказките към задачите. В случая, подсказката към тази ни насочва към оттренирването на списъците в Java. Малко по-дървенички са направени отколкото в C#, но все пак хубавото е че ги има. Алгоритъмът за намиране на най-голяма нарастваща поредица няма да го разяснявам, тъй като той вече е добре познат от C# задачите.

Задача 5: Задачата „заспива“ само с едно сплитване по regEx и взимане на дължината на елементите в масива от стрингове.

Задача 6: Четем текста и търсената дума. Сплитваме с regEx и след това с един цикъл броим колко пъти търсената дума я има в текста.

Задача 7: Доста елегантни решения могат да се измислят тук, но на мен ми хареса това, в което просто обхождаме стринга и събстрактваме ( substring() ) и сравняваме ( equals() ) низовете в него.

Задача 8: Регулярния израз за тази задача просто не ни мърда, както и дългото писане на код в Java, за нещо толкова елементарно.

SoftUni Homeworks: JAVA Basics course – Java Syntax (данни, оператори, изрази, работа с конзолата, условни конструкции)

Templates--JAVAОбяснение на задачите/упражненията от домашното към лекцията Java Синтаксис (данни, оператори, изрази, работа с конзолата, условни конструкции) от курса JAVA Basics в SoftUni.

Условията на задачите – тук

Кодът с решенията на задачите – тук

 

 

Задача 1: Четем от конзолата стойностите за двете страни на квадрата (scanner.nextInt()), умножаваме ги и намираме лицето му.

Задача 2: Идеята на задачата е да се състави израз, който да изчислява подадените стойности според някаква завъртяна математическа формула. Относно извеждането на резултата – методът Math.abs() връща абсолютната стойност на аргумента.

Задача 3: Трябва да проверим дали дадени координати Х и Y се намират във или извън 3 правоъгълника с различни координати. Внимавайте за разделителя на double стойностите, които подавате в конзолата – в примерните данни в условието на задачата те са с точка (примерно 11.6), но ако при вас гърми IDE-то гърми, пробвайте да ги подавате със запетая (11,6).

Задача 4: Задача, в която е удачно да си припомним метода Math.min() – сравнява две числа и връща по-малката стойност.

Задача 5: Конвертираме десетичното число към шестнайсетично чрез готовия метод Integer.toHexString().

Задача 6: Тук трябва да изпробваме някой от форматиращите способности на System.out.printf().

System.out.printf(„|%-10s|%010d|%10.2f|%-10.3f|“, hexAString,
                Integer.parseInt(binAString), b, c);

% – означава началото на форматирашият низ.

%s – предназначен да принтира стрингов аргумент.

%f – prints a floating-point argument.

%.2f – prints a floating-point argument with 2 digits precision.

%d – принтира цяло число

10 – броят на клетките, в които ще се отпечата съответната променлива, ако е -10 тя ще е ляво подравнена.

%n – преминава на нов ред след отпечатването.

Задача 7:  Използвам Integer.bitCount().

 

SoftUni Homeworks: JAVA Basics course – Introduction to Java (Въведение в Java, JDK и Eclipse)

Templates--JAVAОбяснение на задачите/упражненията от домашното към лекцията Въведение в Java, JDK и Eclipse от курса JAVA Basics в SoftUni.

Условията на задачите – тук

Кодът с решенията на задачите – тук

 

 

Задача 3: Учим в тази задача с едно от първите неща в програмирането, а именно да принтираме нещо на конзолата. В Java това става с метода System.out.println() или System.out.print().

Задача 5:  Задача насочваща ни вниманието към java.time.LocalDateTime() класа в Java  за работа с време. Повече за него тук.

Задача 6:  Сумирането на числа в Java става по стандартния начин с оператора +. По интересно е четенето от конзолата, което става чрез класа java.util.Scanner. Създава се инстанция на „Скенера“, който следи за последователността от параметри, които се подават в конзолата и ги записва в предвидените за това променливи. Например, ако искаме да прочетем поредица от две числа, заделяме две променливи, на които им казваме да „дебнат“ за своите стойности от конзолата:
int first = scanner.nextInt();
int second = scanner.nextInt();

Също така се старайте да не отваряте по няколко Scaner-а върху един и същ входен поток (System.in).

Задача 8: – Класическа задача за сортиране, подобна на тези в C#. Сортирането на масив от елементи в Java става чрез класа java.util.Arrays и  метода Arrays.sort().

SoftUni Homeworks: PHP Basics course – Arrays, Strings, Objects (Масиви, стригнове, обектни)

PHP-TemplatesОбяснение на задачите/упражненията от домашното към лекцията Arrays, Strings, Objects от курса PHP Basics в SoftUni. Добре е да се вмъкнат следните редове, за да нямате проблем с омазване на кирилицата в PHP и UTF-8.
<?php

header(„Content-Type: text/html; charset=utf-8“);

mb_internal_encoding(„utf-8“);

?>

Условията на задачите – тук

Кодът с решенията на задачите – тук

Задача 1: Задачата се решава с един замах с функцията array_count_values: „Функция array_count_values() връща масив, като използва стойностите на input като ключове и броя на техните появи в input като стойности. “

Задача 2: ASCII стойността на чаръктъра се взима с PHP функцията ord(). В зависимост от това дали е четна или нечечетна – оцветяваме буквата в съответния цвят.

Задача 3: Задачата като сложност не е нищо особено, просто се четат стойностите които се подават в полетата и се принтират като HTML тагове динамично… Използвал съм един малко по-различен синтаксис в PHP за условните конструкции, за да е по-пригледен кода… Просто вместо да се използват фигурните скоби, за да се сложи край на if кострукцията примерно, се слага едно <?php endif; ?> и т.н.

Задача 4: Магията с заменянето на думите от „черния списък“ със звездички може да стане по много начини, включително и с callback фунския, но се спрях на варианта с методите str_replace() и str_repeat(), на който се подават звездичките „*“ и дължината на стринга т.е. колко пъти да се повторят тези звездички.

SoftUni Homeworks: PHP Basics course – Flow Control (Loops, Functions)

PHP-TemplatesОбяснение на задачите/упражненията от домашното към лекцията Flow Control от курса PHP Basics в SoftUni.

Условията на задачите – тук

Кодът с решенията на задачите – тук

 

 

Задача 1: Редовете на таблицата ги печатаме с for цикъл, като инкрементираме с +2.  Има много функции, които служат за закръгляне на число – number_format(), round()…

Задача 2: Задача, в която ще ни трябва рандом генератора в PHP – rand(). Правим си таблицата, като в нейното тяло пускаме един for цикъл, където попълваме с rand() полетата.

Задача 4: Между другото доста лесна задача, просто трябва отново да си припомним как да отсяваме кои числа са прости. За тази цел направо си правим една функция, пускаме числата през един фор цикъл и в зависимост от това дали числото е просто или не го печатаме нормално или болднато.

Задача 5: На първо четене в тази задача изглежда като да ни чака много писане, но с помощта на 3 готови функции в PHP, нещата значително се опростяват. Първо използваме ctype_digit функцията, чрез която връща true или false в зависимост от това дали проверявания стринг се състои само от числа или е примесен и с чарове. След това вместо да обхождаме индексите на стринга и да ги събираме, направо може да го сплитнем с str_split функцията, която ще ни върне масив от стойностите на стринговия низ, след това да подадем този масив на функцията array_sum, която вместо нас ще сумира всичките му стойности вътре в него. Яко 🙂

 

SoftUni Homeworks: PHP Basics course – PHP Syntax (PHP Синтаксис)

PHP-TemplatesОбяснение на задачите/упражненията от домашното към лекцията PHP Syntax от курса PHP Basics в SoftUni.

Условията на задачитетук.

Кодът с решенията на задачитетук.

 

Задача 1: Декларираме няколко променливи в PHP, използвайки доларчето ($). Конкатенираме две от тях, за да получим $fullName, като това в езика PHP става с точка (.), а не с плюс (+), както логично бихте очаквали да е. Това си е някаква тъпа особеност на PHP и ако се опитате да конкатенирате стрингове с плюса ще стане така, че заради аритметичния оператор (+) стринговете ще се кастнат към int и няма да получите очаквания резултат. Отпечатването става чрез метода echo, като форматирането на стринга може да стане така чрез точките:

echo „My name is “ . $firstName . “ “ . $lastName . “ and I am “ . $age .  “ years old.“

Или за по лесно може да стане така:

echo „My name is $fullName and I am $age year old.“;

Задача 2: Тук трябва да се запознаем с number_format метода, с който да закръглим до втория знак след десетичната запетая. Трябва да използваме точка, вместо запетая обаче. Повече за него и различните параметри, които приема можете да видите в официалната документация.

Задача 3: Тук трябва да прочетем какво правят три метода – is_numeric, var_dump и gettype. Интерсното при is_numeric е, че ако му подадете число като стринг (примерно „3“) ще ви върне true.

Задача 4: Докато се опитва човек да разпише алгоритъма за тази задачка, неминуемо ще се сблъска с това, което хората често казват за PHP – за да се свърши едно нещо, понякога има по няколко метода, които го правят… Например имало sizeof(), с който да си вземете дължината на елементите в масива, вършел работа, ама било по- хубаво да ползвате count() и т.н.
П.П. Принтирането на масив с print_r() става много елегантно 🙂

Задача 6: Задача, която вече е в духа на PHP. Правим таблица, в която td тага чрез друг PHP таг поместваме имената на променливите, които съдържат информацията за човека.

Задача 7: В тази задача трябва да се запознаем с isset. Правим си inpute полета и въвеждаме стойности в тях. Ако сме въвели име например ($_GET[‘name’]), ще се изпълни условието в if-а (isset ще върне true защото променливата isset $_GET[‘name’] съществува) и ще се изпълни условието в скобите.

Codehunt – игра, която тества знанията ви по програмиране

codehunt-menuТози линк седи буукмаркнат в браузъра ми вече от около половин година и все си казвам, че трябва да го споделя в блога… Е, мисля че е крайно време да го сторя, защото е настина много готин. Няма да навлизам в подробности, просто влезте и го разгледайте… Представлява нещо като игра, като всяко следващо ниво ви се дава парчета код, които да ги нагодите, така че да сработят. Принципът е като Judge автоматизираната система, която ни оценява на изпитите. Езиците, на които можете да се пробвате с казусите са C# и Java, като дори и да нямате много опит с тях, пак можете да се пробвате, просто трябва да внимавате за особеностите им…

codehunt-screenshot^ в ляво ви се дава кода, който да подкарате да работи, а в дясно виждате резултата от тестовете.

Telerik Homeworks: JavaScript Part1 course – Arrays (Масиви)

JavaScriptОбяснение на задачите/упражненията от домашното към лекцията Масиви от курса  JavaScript Part 1 в Академията. Условията на задачите и съответно обясненията на самите алгоритми за решаване са подобни на тези от от лекцията Масиви от C# курса, затова няма да се спирам да ги обяснявам в подробности наново. По-скоро ще се концентрираме върху това как да се донагодят решенията до синтаксиса и особеностите на самия JavaScript. Файловете с решения съдържат само JavaScript код, без никакви допълнителни стилизирания, потребителски менюта в браузъра и се извеждат като резултат директно на JS конзолата (console.log)… Т.е. решенията няма да приемат входа на стойностите от потребителя, а ще е зададен като променливи в самия код.

{ Кодът с решенията към всяка една от задачите можете да видите тук }

1. Write a script that allocates array of 20 integers and initializes each element by its index multiplied by 5. Print the obtained array on the console.

ОБЯСНЕНИЕ:  Задачата е същата като от C# курса, ако решите да преизползвате кода си внимавайте да смените myArr.Length на myArr.lengt… На пръв поглед няма разлика, но пропъртито „lengt“ за достъпване дължината на масивите в JavaScript се изписва с малко „l“ (както и всички пропъртита в JS). Ако не го смените, кодът ви няма да работите и ще се чудите защо, тъй като JS кода не гърми и не хвърля ексепшъни по време на писане и компилиране на кода.

2. Write a script that compares two char arrays lexicographically (letter by letter).

ОБЯСНЕНИЕ:  За да решим тази задача първо нека уточним какво се има в предвид под лексикографско сравнение на чаровете в масивите. Ето какво пише в учебника „Въведение в програмирането“ като разяснение към тази задача: „При лексикографската наредба символите се сравняват един по един като се започва от най-левия. При несъвпадащи символи по-рано е масивът, чийто текущ символ е по-рано в азбуката. При съвпадение се продължава със следващия символ вдясно. Ако се стигне до края на единия масив, по-краткият е лексикографски по-рано. Ако всички съответни символи от двата масива съвпаднат, то масивите са еднакви и никой о тях не е по-рано в лексикографската наредба.“ При C# тази задача си е бая занимавка, но тук в JavaScript решението я е много лесно тъй като, ако просто сравним „abc“ == „abc“ ще получим true. Ако сравним „abc“ < „abc“ или „abc“ > „abc“ получаваме false. Но ако сравним „abc“ < „akl“ ще получим true!!! Т.е. стринга „abc“ лексикографски е по-напред/по-малък е от „akl“. Или казано с други думи, JavaScript има способността автоматично да сравнява лексикографски чаровете.

3. Write a script that finds the maximal sequence of equal elements in an array. Example: {2, 1, 1, 2, 3, 3, 2, 2, 2, 1} ->> {2, 2, 2}.

ОБЯСНЕНИЕ:  Алгоритъмът и обясненията са същите като от C# домашното. Накрая когато принтираме съобщението „The longest sequence is of elements is „, увеличаваме променливата longestSequence с едно,  тъй като в хода на проверката с променливата counter не сме добавили последното число от най-дългата поредица.

4.  Write a script that finds the maximal increasing sequence in an array. Example: {3, 2, 3, 4, 2, 2, 4} ->> {2, 3, 4}.

ОБЯСНЕНИЕ:  Алгоритъмът е аналогичен на този от C#.

5.  Sorting an array means to arrange its elements in increasing order. Write a script to sort an array. Use the „selection sort“ algorithm: Find the smallest element, move it at the first position, find the smallest from the rest, move it at the second position, etc. Hint: Use a second array.

ОБЯСНЕНИЕ:  Идеята тук е да не използваме готовите методи за сортиране, а сами да си разпишем алгоритъма. Инициализираме си масив с несортирани стойности и го принтираме. След това пускаме два форцикъла и сравняваме елементите един по един, когато намерим такъв който е най-малък от останалите го местим на предна позиция и продължаваме проверките за останалите елеминти.

6. Write a program that finds the most frequent number in an array. Example: {4, 1, 1, 4, 2, 3, 4, 4, 1, 2, 4, 9, 3} ->> 4 (5 times).

ОБЯСНЕНИЕ:  Алгоритъмът е същия като от C# задачата – първо си сортираме (препоръчително е да си разпишете свой алгоритъм, не да ползвате готовия) масива,
после вървим по елементите му в търсене на най-голямото повторение.

7.  Write a program that finds the index of given element in a sorted myArray of integers by using the binary search algorithm (find it in Wikipedia).

ОБЯСНЕНИЕ:  Бинарното търсене е много полезен алгоритъм, когато трябва да се търси елемент в много големи масиви. За да работи много е важно да се отбележи, че масивът трябва да бъде сортиран! Неговата бързина на търсене се изразява в това, че той започва търсенето си, не от началото на масива, а от неговата среда. В зависимост от това дали елемента е равен на средния елемент, по-малък е или по голям, се определя в каква посока ще продължи търсенето (наляво или надясно в масива), ако не сме големи късметлии да се окаже, че търсения елемент е точно средния и сме го нацелили от раз. Объркващо звучи, затова може да прегледате това разяснително видео тук – https://www.youtube.com/watch?v=j5uXyPJ0Pew

Алгоритъмът е сравнително лесен, само го нагаждаме до особеностите на JS. За да накараме .sort() да сортира правилно числата (не лексикографски, както е по подразбиране), трябва да му зададете като параметър някаква сортираща функция, чрез която да се предефинират правилата за сортиране, така че те да са приложими адекватно за числа. Също така е важно да преди да получим стойността на променливата iMidpoint, преди това да сме парснали към INT, за да можем получения резултат след делението да е целочислен. Прието е след изпълнение на binarySearch-а, функцията да върне -1, ако търсения елемент няма позиция вътре в масива.

Кодът към всяка една от задачите можете да видите тук.

Telerik Homeworks: JavaScript Part1 course – Data Types and Variables (Типове данни и променливи)

JavaScriptОбяснение на задачите/упражненията от домашното към лекцията Типове данни и променливи от курса  JavaScript Part 1 в Академията.  Доста интересна е тази тема в слабо типизиран език като JS. Файловете с решения съдържат само JavaScript код, без никакви допълнителни стилизирания, потребителски менюта в браузъра и се извеждат като резултат директно на JS конзолата (console.log)… Т.е. решенията няма да приемат входа на стойностите от потребителя, а ще е зададен като променливи в самия код.

{ Кодът с решенията към всяка една от задачите можете да видите тук }

1. Assign all the possible JavaScript literals to different variables.

ОБЯСНЕНИЕ:  В тази задача, трябва да присвоим всички възможни типове променливи в JS. Дали съм присвоил „всички възможни“ не знам, но със сигурност присвоих всички, за които успях да се сетя.

2. Create a string variable with quoted text in it. For example: ‘How you doin’?’, Joey said.

ОБЯСНЕНИЕ:  Направих два варианта. В единия ескейпвам кавичките с ‘\’, докато при втория използвам двойните кавички „“.

3. Try typeof on all variables you created.

ОБЯСНЕНИЕ:  Уловката в тази задача, е да видим как операторът typeof не връща конкретния тип на всички възможни данни в JS. Затова е добра идея човек да си направи собствена функция typeOf, чрез която да връща конкретния точен тип.

4. Create null, undefined variables and try typeof on them.

ОБЯСНЕНИЕ:  В тази задача ни се обръща внимание, че една от разликите между null и undefined, е че null (както всичко останало в JS) е обект.

Кодът към всяка една от задачите можете да видите тук.

 

Как се дебъгва JavaScript с Visual Studio?

JavaScriptСлед не малко писане на C# и дебъгване с Visual Studio, признавам си така и не можах да достатъчно читав начин да правя същото и на JavaScript… Начините на дебъгване, които FireBug и Chrome предлагат са меко казано дървени, което е и нормално – няма как да се сравняват с мощния и много добре направен дебъгер на Visual Studio. И така логично последва въпросът – можем ли да дебъгваме JavaScript с Visual Studio? Отговорът за щастие е „да“! Ето и накратко стъпките, които трябва да следвате, за да си подкарате дебъгването на JS кода през Visual Studio:

1. За жалост, първата стъпка няма да ви хареса как звучи, но е необходима – трябва да използвате Internet Explorer, за да може да сработи дебъгването с VS. Принципно не е голяма драма, тъй като в случая IE ще ни трябва не, за да си тестваме CSS стиловете на сайта, а просто за да си следим стъпка по стъпка изпълнението на нашия JS код и да виждаме какво се случва във всеки един момент.

2. Отивате в Internet Explorer → Tools → Internet Options → Advanced → Disable script debugging (отметката и на двете полета трябва да се махнат). По този начин, ще позволите дебъгването на скрипта.

3. Отивате във VS и задължително си отваряте проекта в „New Web Site…“ (File → New Web Site..).

4. След като ви се отвори HTML-а с JS код вътре си натискате F5, и ако сте си сетнали дефолтния браузър за тестване на Internet Explorer – проектът ви ще се отвори именно в него, и само чрез него VS дебъгерът ще работи!

5. Воала вече можете да използвате дебъгера на VS по стандартния начин, можете да си слагате брейкпойтове, да си следите променливите в Locals  и въобще да използвате всички благинки, които този така полезен инструмент предлага.

Още допълнително и полезно ифо по темата можете да намерите тук:

http://msdn.microsoft.com/en-us/library/z959x58c.aspx