Архив за етикет: Масиви

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: 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(), на който се подават звездичките „*“ и дължината на стринга т.е. колко пъти да се повторят тези звездички.

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, ако търсения елемент няма позиция вътре в масива.

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

C# сортиращи алгоритми (sorting algorithms)

CSharpYodaРазбирането, овладяването и правилното използване на сортиращите алгоритми е ключово за добрия програмист и ще му бъде от полза не само в C#, но и в други езици за програмиране.

В случая със C# сортиращите алгоритми – те са безценен помощник при решаването на задачите свързани с масиви и матрици и се явяват като задължително познание по време на C# 2 изпита.

Няма да преразказвам надълго и нашироко това, което и сами можете да си откриете в Google за тези алгоритми. Вместо това смятам да постна няколко полезни видеа и линкове, на които попаднах и след като ги разгледате, мисля че повечето неща кристално ще ви се изяснят:

Започвам с това 6 минутно видео, което има за цел простичко да ви визуализара как работят самите сортиращи алгоритми. Между другото музикалното оформление на това клипче ми навява приятни спомени за вемената когато компютрите нямаха звукови карти, а прост PC speaker и в общи линии по този начин звучаха игри, които човек можеше да играе тогава… Но стига лирични отклонения 😀

Списък с алгоритмите, които са визуализирани в горното видео:

selection sort, insertion sort, quick sort, merge sort, heap sort, radix sort (LSD), radix sort (MSD), sort (intro sort), stable_sort (adaptive merge sort), shell sort, bubble sort, cocktail shaker sort, gnome sort, bitonic sort и bogo sort.

Ето и два много добри сайта, чрез които можете да сравнявате бързодействието на различните алгоритми: www.sorting-algorithms.com и www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

Представям ви и тези изключително полезни видеа направени от xoax.net, в които не само нагледно се обясняват и визуализират самите сортиращи алгоритми, но се дават обяснения и върху начинът, по който работи самия им код:

Bubble-sort-example-300px <<- Bubblesort и Analyzing Bubblesort

Insertion-sort-example-300px <<- Insertion Sort

Merge-sort-example-300px<<- Merge Sort

Sorting_quicksort_anim <<- Quicksort

Selection_sort_animation<<- Selection Sort

Sorting_heapsort_anim<<- Heaps и Heap Sort

Linear и Binary Searching
Big O, Big Omega и Big Theta Notation

 

* Източник на картинките-диаграми Wikipedia

Как да запишем двумерен масив във външен текстов файл и след това да го прочетем обратно?

CSharpYoda

Изключително полезен код за C#, в случай че ви се наложи да запишете двумерен масив във външен текстов файл и след това да можете отново този  масив да си го прочетете от файла. Например, ако пишете игра и искате тя да има Save Game опция – с помощта на този код ще можете да я реализирате, записвайки променливите, които ви трябват във външен файл и да ги извикате, когато играта отново бъде пусната.

WriteReadMatrixTextFile^ Двата метода ReadFromFile и WriteOutInFile са в основата на нещата.

Telerik C# Part2 Homeworks – Methods (методи)

CSharpYodaОбяснение на задачите/упражненията от домашното за Методи в Академията.

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

1. Write a method that asks the user for his name and prints “Hello, <name>” (for example, “Hello, Peter!”). Write a program to test this method.

ОБЯСНЕНИЕ: Лесна задача, като за първа 🙂 Правим си съвсем прост метод.

2. Write a method GetMax() with two parameters that returns the bigger of two integers. Write a program that reads 3 integers from the console and prints the biggest of them using the method GetMax().

ОБЯСНЕНИЕ: За създаването на условието в GetMax метода реших да използвам един тернарен оператор. След това нещата са лесни – въвеждаме си 3 числа от конзолата и с GetMax можете да видите в кода как намираме, кое е най-голямото.

3. Write a method that returns the last digit of given integer as an English word. Examples: 512 –> „two“, 1024 –> „four“, 12309 –> „nine“.

ОБЯСНЕНИЕ: За създаването на този метод, реших да използвам един класически switch-case. Делим числото, така че да му вземем остатъка и го сравняваме по switch-овете, докато не намерим случая, който ни трябва. ReturnAsWord методът ни връща стрига, който ни е необходим и го засилва към Main метода, където ни чака един Console.WriteLine,за да го изпечата на конзолата.

4. Write a method that counts how many times given number appears in given array. Write a test program to check if the method is working correctly.

ОБЯСНЕНИЕ: Методът, който трябва да създадем за тази задача трябва да провери колко пъти един елемент се съдържа в даден масив от числа. Декларираме си един CountAppearances метод, в чието условие body кодът е много прост – for цикъл, който обхожда цикъла и сравнява елемент по елемент, дали числото което търсим се съдържа в него. В променливата counter отброяваме броя на съвпаденията, ако такива има.

5. Write a method that checks if the element at given position in given array of integers is bigger than its two neighbors (when such exist).

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

6. Write a method that returns the index of the first element in array that is bigger than its neighbors, or -1, if there’s no such element.
Use the method from the previous exercise.

ОБЯСНЕНИЕ: Тук задачате е почти аналогична на предходната с единсвената разлика, че трябва да намерим първия индекс в масива, чийто елемент е по-голям от обграждащите го. Ако няма такъв елемент, то програмата трябва да върне „-1“. Естествено ще си използваме метода от предишната задача, като за по интересно реших да си го изнеса даже в отделен клас.

7. Write a method that reverses the digits of given decimal number. Example: 256 –> 652

ОБЯСНЕНИЕ: Доста лесна задача на нивото от C# part 1. Четем число от конзолата, на което да обърнем числата. В ReverseNumber метода използваме просто while условие, в което изпълняваме друго условие, чиято същина са особеностите на оператора „%“ (т.нар. делиение с остатък, при което като разделим остава числото след запетаята) и „/“ (т.нар. целочислено деление, при което след разделянето остава числото преди запетаята). След изпълнението на while цикъла, променливата tempNumber съдържа вече обърнатото число и след това го печатаме на конзолата.

8. Write a method that adds two positive integer numbers represented as arrays of digits (each array element arr[i] contains a digit; the last digit is kept in arr[0]). Each of the numbers that will be added could have up to 10 000 digits.

ОБЯСНЕНИЕ: Comming soon.

9. Write a method that return the maximal element in a portion of array of integers starting at given index. Using it write another method that sorts an array in ascending / descending order.

ОБЯСНЕНИЕ: Създаваме си един масив и му въвеждаме ръчно стойности. Посочваме и някакъв индекс от масива, от който индекс до края на масива ще се опитаме да намерим индекса с най-големия елемент. За да намерим най-големия елемент от някакъв отрязък от елементи в масива ще използваме метода MaxElementInArrPortion. Идеята му е, че приемаме първоначално, че индекса, който сме посочили за начало на отрязъка от елементи е именно индексът, на чиято позиция се съдържа най-големия елемент. С помощта на един лесен for Цикъл с if условие в MaxElementInArrPortion провеяваме това дали наистина е така, като сравняваме първоначално зададения индекс с всички останали елементи до края на масива. Ако намерим по голям елемент, просто if цикъла го заместваме в променливата biggestIndex и метода накрая ни връща на кой точно индекс се намира търсения от нас най-голям елемент в отрязъка.

За сортирането на масива ще използваме SelectionSort алгоритъма, с който се запознахме в лекциите за многомерни масиви. Създаваме си класическия за целта SelectionSort медот с класическия за алгоритъма код, който можете да си копирате директно от предишните задачи. Ако потребителят въведе цифрата 1, ще се изпълни SortArrayAscending метода, който ще сортира масива възходящо и съответно, въведе 2 – ще се изпълни метода SortArrayDescending, който ще сортира низходящо. Между другото кодът при SortArrayDescending е същия с SortArrayAscending с разликата, че накрая reverse-ваме сортирания масив.

10. Write a program to calculate n! for each n in the range [1..100]. Hint: Implement first a method that multiplies a number represented as array of digits by given integer number.

ОБЯСНЕНИЕ: Тук трябва да изчислим фактуриел от 100. Тъй като големината на числата ще нарастнат доста бързо, изчисляването на фактуриел изисква да ползваме BigInteger (виж задача 08, как се извикват). Формулата за фактуриел е ясна още от задачите в C#1, можете оттам да си я припомните. Особеното тук е че просто изнасяме формулата в отделен метод. И това е.

11. Write a method that adds two polynomials. Represent them as arrays of their coefficients as in the example below: x2 + 5 = 1×2 + 0x + 5 –> 5 0 1

ОБЯСНЕНИЕ: Comming soon.

12. Extend the program to support also subtraction and multiplication of polynomials.

ОБЯСНЕНИЕ: Comming soon.

13. Write a program that can solve these tasks:
– Reverses the digits of a number
– Calculates the average of a sequence of integers
– Solves a linear equation a * x + b = 0 Create appropriate methods. Provide a simple text-based menu for the user to choose which task to solve. Validate the input data:
– The decimal number should be non-negative
– The sequence should not be empty
– „a“ should not be equal to 0

ОБЯСНЕНИЕ: Сравнително лесна задача, като за 13 🙂 Просто може да се разгледа като три малки подзадачки събрани в една. Няма нищо кой знае колко сложно за обясняване тук – формулата за квадратно уравнение е вече добре позната от C#1, намирането на средната стойност също, а пък кодът за разместването на цифрите в ведно число можете направо да си го копи-пейстнете от решенета по-горе 7-ма задача на Методи. Правите си и нужните проверки със стандартните if и else условия и готово. Начини за решението на тази задача бол, така че както и да го напишете няма значение, стига да работи 🙂

14. Write methods to calculate minimum, maximum, average, sum and product of given set of integer numbers. Use variable number of arguments.

ОБЯСНЕНИЕ: Също лесна задача, подобна на предишната 13. Трябва да намери минимална, среднна, максимална стойност, сума и произведение на числата в един масив. Някой от кодовете дори могат да се вземат и от предишните задачи тук, други пък от по-стари задачи. Обръщам внимание само, че за метода с произведението на числата в масива ползваме отново BigInteger, за да се затраховаме от евентуално препълване.

15. * Modify your last program and try to make it work for any number type, not just integer (e.g. decimal, float, byte, etc.). Use generic method (read in Internet about generic methods in C#).

ОБЯСНЕНИЕ: Comming soon.

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

Telerik C# Part2 Homeworks – Multidimensional Arrays (многомерни масиви)

CSharpYodaОбяснение на задачите/упражненията от домашното за Многомерни масиви в Академията. И тук за някой задачи не ми остана време да напиша обяснения, при първа възможност ще ги добавя, а други ще ги ъпдейтна.

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

1. Write a program that fills and prints a matrix of size (n, n) as shown below: (examples for n = 4)
Screen shot 2013-08-01 at 2.53.04 PM

ОБЯСНЕНИЕ: Разделям четирете поддточки на задачата с if условия, като от конзолата потребителя си избира, коя матрица да се принтира. Кодът за всяка една от тях е изнесена в отделен метод.
fillMatrixA: най-лесната матрица за печатане, като вместо [row, col] използваме [col, row].
fillMatrixB: при втората матрица отново редовете и колоните са разменени при инициализирането. Особеното тук е, че проверяваме дали текущата колона е четна. Ако да – цикълът ни е от 0 до дължината на масива. Ако е нечетна – от дължината до 0.
fillMatrixC: третата матрица я запълваме не по ред и колона, а по диагонали. Първо под главния диагонал и после допълваме над главния.
fillMatrixD: Comming soon.

2. Write a program that reads a rectangular matrix of size N x M and finds in it the square 3 x 3 that has maximal sum of its elements.

ОБЯСНЕНИЕ: Подробно обяснение как се решава този тип задача, можете да намерите в учебника „Въведение в програмирането със C#“ (стр. 258). За тва условие тук, единствената промяна която правим е, добавянето на още една колона и клетка към патерна за подматрицата 3×3, за която търсим най-голямата сума.

3. We are given a matrix of strings of size N x M. Sequences in the matrix we define as sets of several neighbor elements located on the same line, column or diagonal. Write a program that finds the longest sequence of equal strings in the matrix. Example:
3 zada4a

ОБЯСНЕНИЕ: Comming soon.

4. Write a program, that reads from the console an array of N integers and an integer K, sorts the array and using the method Array.BinSearch() finds the largest number in the array which is ≤ K.

ОБЯСНЕНИЕ: Изключително важна задача, чиято цел е да проучим как работи алгоритъмът BinarySearch. Готовият метод в C# е Array.BinarySearch. Характерно за него е, че ако търсеният елемент го няма в масива, то тогава BinarySearch връща отрицателно число (ако върнатата стойност е по-голяма или равна на нула, то търсения елемент съществува в масива). Ако методът върне отрицателно число бихме могли с помощта на побитовия оператор “~” да намерим индекса на първия елемент по-голям от търсения. Правим си три if проверки, за да можем да покрием всички евентуални върнати стойности от BinarySearch-а.

5. You are given an array of strings. Write a method that sorts the array by the length of its elements (the number of characters composing them).

ОБЯСНЕНИЕ: Доста лесна задача, на фона на останалите досега 🙂 Имаме си масив от стрингове, който трябва да сортираме според дължината на елементите им. Сортираме си масива с Array.Sort метода, към който прикрепяме една ламбда функция като тази от лекцията за Многомерни масиви. След това печатаме резултата.

6. * Write a class Matrix, to holds a matrix of integers. Overload the operators for adding, subtracting and multiplying of matrices, indexer for accessing the matrix content and ToString().

ОБЯСНЕНИЕ: Comming soon.

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

Telerik C# Part2 Homeworks – Arrays (масиви) PART 1

CSharpYodaОбяснение на задачите/упражненията от домашното за Масиви в Академията. Бая като брайка задачи са, затова ги разделям на две части. За някой задачи не ми остана време да напиша обяснения, при първа възможност ще ги добавя, а други ще ги ъпдейтна.

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

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

ОБЯСНЕНИЕ: Инициализираме масив от 20 елемента. С for цикъл обхождаме елементите му всеки един от които го умножаваме по 5. След това с втория for цикъл принтираме резултата на конзолата.

2. Write a program that reads two arrays from the console and compares them element by element.

ОБЯСНЕНИЕ: Първото нещо, което правим е да инициализираме самия размер на двата масива. Макар и незадължително по условие, с помощта на if условието проверяваме дали броя на елементите в двата масива са равни. Това може и да не го правим, ако просто накараме потребителя веднъж да въведе число за размера на масивите (веднъж като го въведе ще го ползваме същата променлива при инициализацията и на втория масив). След това с помощта на for цикли въвеждаме самите стойности из отделните позиции на двата масива.

Преминаваме към същинската част на задачата – сравняване на самите отделни стойности в масива една по една. Използваме булева променлива, в която изначално казваме че елементите в двата масива са равни, до доказване на противното. С помощта на for цикъл започваме да сравняваме отделните елементи на масивите един по един. В случай че два елемента от една и съща позиция в масивите се случи да не са равни се изпълнява if условието, променливата, която създадохме по-горе вече става false и се прехвърляме към break оператора, тъй като при това положение няма смисъл да продължаваме да сравняваме останалите елементи из масивите. Отпечатваме резултата на конзолата.

3. Write a program that compares two char arrays lexicographically (letter by letter).

ОБЯСНЕНИЕ: Решението е почти същото като на задача 2 от Масиви. Разликата е че зададох char-овете предварително в самия масив.

4. Write a program that finds the maximal sequence of equal elements in an array.

ОБЯСНЕНИЕ: Заделяме масив и го инициализираме. Създаваме три нови променливи: counter, longestSequence и value. В първата ще записваме текущото проверявано повторение от числа, във втората ще записваме най-голямото повторение от числа и в последната (value) ще запишем елемента, който създава най-дългата поредица. С for цикъла сравняваме числата позиция по позиция. Ако намерим две еднакви се изпълнява if условието, в което са събрани трите променливи. Накрая яко longestSequence е различно от 0 т.е. ако сме открили някаква повтаряща се поредица, изписваме колко е голяма тя на конзолата.

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

ОБЯСНЕНИЕ: Създаваме си масив от някакви числа, които въвеждаме ръчно от конзолата. Създаваме си първоначално 4 променливи.

В maxSequence ще отброяваме броя на нарастващите последователности, ако може така да се каже. Примерно ако имаме поредица от числата 1,2,5,1 в тази променлива ще се запише 3.
В sequence променливата ще записваме броя на моментните повторения, които цикълът е открил.
В sequenceNumbers ще се записват самите числа, които в момента цикъла проверява.
В maxSequenceNumbers ще се съдържа максималната, най-голямата последователност от нарастващи числа, която е открита до момента.
Пускаме един нормален for цикъл, с който да сравняваме числата в поредицата, като в зависимост от това дали числото е по-малко или по-голямо от следващото сравнявано в редицата се изпълнява едно от if условията. Когато програмата премине през скобите със самите if условия, „зачистваме“ sequence и sequenceNumbers променливите, съответно с числото 1 и „“. След което останалато е лесно – програмата се връща отново горе във for цикъла, минава и сравнява останалите числа по редицата и накрая програмата принтира резултата

6. Write a program that reads two integer numbers N and K and an array of N elements from the console. Find in the array those K elements that have maximal sum.

ОБЯСНЕНИЕ: Решението е подобно като на задача 5. Особеното е че с if условие се прави проверка i + k > arrayLen, дали случайно не сме излезнали от рамките на масива. След това за всяка „заградена“ съвкупност от i+k индекси до края на масива правим сравнения на самите суми и намираме, коя е най-голямата.

7. Sorting an array means to arrange its elements in increasing order. Write a program 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.

ОБЯСНЕНИЕ: Основна задача за сортиране на масив, може би една от задачите за масиви (и в частност тяхното сортиране) с най-много обяснения в интернет – http://en.wikipedia.org/wiki/Selection_sort

8. Write a program that finds the sequence of maximal sum in given array.
Example: {2, 3, -6, -1, 2, -1, 6, 4, -8, 8} –> {2, -1, 6, 4}
Can you do it with only one loop (with single scan through the elements of the array)?

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

9. 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)

ОБЯСНЕНИЕ: С първите два for цикъла първо подреждаме самия масив от числа във възходящ ред. Стандартен алгоритъм за сортиране си е това, нищо сложно. След което правим класическите три променливи, в които да отброяваме: броя на повторенията към момента, най-голямото повторение и самото число, което е с най-голямото повторение. Пускаме трети for цикъл, с който започваме да сравняваме един по един елементите из масива и съответно ако има еднакви числа в поредица едно до друго if и else конструкцията в кода се грижат за това накрая конзолата да ни изпечата правилното решение на задачата.

10. Write a program that finds in given array of integers a sequence of given sum S (if present). Example: {4, 3, 1, 4, 2, 5, 8}, S=11 –> {4, 2, 5}

ОБЯСНЕНИЕ: Тук търсим в масив последователна поредица от числа, чиято сума да е равна на числото S. Правим си три променливи по подобие на 8-ма задача: startIndex, endIndex, CurrSum.
С два for цикъла обхождаме масива събирайки отляво-надясно елементите му. В момента, в който открием елементи, чиято сума да удовлетворява if условието (а именно – временната CurrSum да бъде равна на sumS) влизаме в третия for цикъл, който ни отпечатва индексите (startIndex e нейното начало, а endIndex нейния край) на търсената поредица от числа. Ако не намерим такава поредица от елементи – изписваме, че в масива няма такава поредица.

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

ОБЯСНЕНИЕ: Задача имаща за цел да ни запознае с един от основните алгоритми в програмирането – Binary Search.

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

Очаквайте скоро втора част с обясненията и на останалата част от задачите за Масивите…