Пищов по програмиране на c++
| Информационни технологии | 2009-12-04 | 159 сваляния |
| 1. Основните типове данни char, int, float, double, типа void и ф-ционалния тип. Тези типове са предварително деф в езика и се поддържат от неговото ядро. Чрез аритметичните типове int, car float и double се представят числени данни. Тези типове могат да се използват в комбинация с някои модофикатори signed, unsigned, short и long, които определят техните аспекти. При използването на тези модофикатори името на типа може да бъде пропуснато, кото подразбиращият се тип в този случаи е типа int. Типът void има смисъл на неопределен тип, а ф-ционалният тип се използва за представяне на данни, които се интерпретират като ф-ция или като начални адреси на ф-ции. Променливите типове данни са данни, чиято стойност може да се промея по време на изпълнение на програмата. Променливите имат три х-ристики: тип, име и стойност. Предо да бъдат използвани те трябва да бъдат деф. Общият бид на това е: <тип> <име на променлива> [= <стойност>]; задължителните елем на деф от типа и името на променливата. Деф на променливи може да бъде съпроводено от инициализацията, т.е. Задаване на начална стойност. В основата на действие на рс лежи използването на двоичната бройна с-ма, т.е. Използването на 0 и 1. Това е така, т.к. CPU на РС разпознава само два вида импулси единият от който е на високо ниво на напрежение, а другият на наниско ниво на напрежение. Високото ниво на напрежение се приема за логическа единица, а ниското за нула. 1-цата и 0-та се използват в различна комбинация. 10чната бр с-ма се изпозва в ежедневната работа и класическата математика. Тя изпозва десет цифри от 0 до 9. 2чната бр с-ма използва само две цифри за да представи всички възможни числа. Тези цифри са 0 и 1. Пример за това е 0101000101. Много важно нещо, което трябва да се има предвид е ролята на цифрата 0. Всяка бр с-ма използва тази цифра. Трябва да се забележи, че всеки път когато цифрата 0 се появява в лявата част на поредицата от цифри, тя може да се добави и премахне без да се промени числото. Наприм при 10чната бр с-ма, числото 0927 = 927. При 2чната 00010101 = 10101. Някой хора добавят 0 в лявата част на дадено число за да запълнят местата и да подчертаят, че няма значещи цифри. Друга важна концепция е когато се работи с 2чни числа е че степента на числото 2^0 и 2^3 са примеро на числа представени чрез степен. Техните стойности са съответно 2^0=1 и 2^3=8. При 10чната бр с-ма също се ползват степени, но с основа 10. Напр 23605 => 2.10^4+3.10^3+6.10^2+0.10^1++5.10^0. Въпреки че имаме 0.10^1-0 това не означава, че трябва да пренебрегваме числото, а да го запазим. Ако го изхвърлим ще получим числото 2365, а то е грашно. Същия метод се използва при 2чната бр с-ма при степен с основа 2. | 2. Масивът е стр-ра от данни, състояща се от множество последоватени наредени елем от един и същи тип, достъпът до който се осъществява чрез индекси.масивите могат да бъдат едномерни и многомерни, в зависимост от броя чрез които се адресира един елем. Съществура мног тясна връзка м/у масивите и един специален тип променливи, наречени указатели. Тази връзка се изразява във възможността достъпът до елем на масивите да се осъществява както чрез индекси, така и чрез указатели. Деф на един масив вкл типа на елем, името на масива и неговия размер. Памет се заделя по време на компилация, поради което техните размери трябва да бъдат const или const изрази. int x[10]; - това е едномерен масив с име x, състоящ се от 10 елем които са от тип int. Освен едномерни, масивите могат да бъдат и многомерни. При деф на многмерни масиви се задават техните размерности, които могат да бъдат, 2,3 или повече, адостъпът до отделните елем става ч/з съответния брой индекси. При работа с масив трябва да се има предвид, че компилатора не прави проверка дали стойностите на индексите, ч/з които се адресират елем, са в рамките на границите на масивите зададени в техните ф-ции. Това е лошо защото при допускане на грешка тя е труднооткриваема. Операциите вкл и изкл на елем в масива са недопустуми, т.е. масива е статична стр-ра от данни. Масива се разгл като крайна редица от елем от един и същ тип с пряк достъп до всеки елем, осъществява се ч/з индекс с цели стойности, започващи от 0 и нарастващи с 1 до указаната горна граница. Нека Т е име или деф на произволен тип, различен от псевдоним, void и ф-ционален. За типа Т и const израз от интегрален или от изборен тип с положителна стойност size, T[size] е тип масив от тип size елем от тип T. Елем се индексират от 0 до size-1. Т се нарича базов на типа, а size горна граница за типа. Множеството от стойности на типа Т[size] се състои от всички редици от по size елем, които са произволни const от типа Т. Достъпът до елем на редиците е пряк и се осъществява с помоща на индекс със стойност 0, до последния с индекс със стойност size-1, а до всеки от останалите елем с индекс със стойност 1 по-голяма от тази на индекса на предишния елем. | 3. Единствения начин да извличем данни от стекове и опашки ч/р отраняване на елем.По-добре е да използваме всички данни, запазени в свързан списък,без непременно да отсраняваме елем от този списък. Нека разгл следните операции в/у такъв списък, добавяне на нов елем в неговия край ч/з ф-ция append, обхождане на списъл ч/з ф-циите iteraterStart и iterator, търсене на елем в списъка ч/з ф-циията find. Целият списък ще бъде изтрит от деструктор, когато вече не е необходим. Можем също да искаме да вмъкнем и изртиваме елем на списъка. Свързаните списъци ни позволяват да правим това по един ефективен начин. Вместо да пишем изцяло нов клас, ще използваме принципа на наследяване, за да създадем лесно нова прогр. Този клас ще е базов за един произволен клас, който има 3 ф-ции в допълнение към тези от неговия базов клас. Паметта на РС може да се разгл като много голям масив, ще използваме масив с фиксирана дължина и наш собсрвен преграмен код, за да заделим памет за свързан списък в този масив. Възлите от списъка ще бъдат елем на масива. Всеки от тях ще съдържа ноне next от int, което ще е стойността на индекса на възела, към който дадения възел сочи. Всички елем на масива, които не се използват в свързания списък, ще бъдат свързани заедно, образувайки друг свързан списък, известен като свободен. Двата списъка взаимно се допълват. Първоначално всички елем на масива принадлежат на свободния списък. Разполагането на възел води до преместването на елем от свободния в нашия потреб списък. Вместо указатели сега използваме цели числа, първият възел от потреб списък е сентинелът. Съхраняваме стойности на индексите, както и самия масив, като скрити полета от данни. Използването на целочислени стойности на индекси вместо указатели, като възлите са реализирани с елем на масив е приложима не само за свързани списъци, но 1 същ и за дървета и други стр-ри от данни. Едно предимство на този подход за реализацияна стр-рите от данние че можем лесно и ефективно да ги копираме не само в паметта но и във файлове. Недостатък е фиксираниятразмер на масива, вмъкването на нов елем е невъзможно, а масивът е пълен. Употребата на указатели ни се стурава по удобна, понеже така или иначе имаме нужда от указатели, за да бъде приложната прогр по-близка до това, с което сме свикнали. Обаче целочислените стойности на индексите имат предимството, че са свързани с началото на масива, докато указателите са абсолютни адреси. Често се налага да сорт свързан списък. Можем да преобразуваме несорт списък в сорт ч/з пренареждане на него-вате възли. Има дваначина единият е на базата на бързото сорт, а другиятна базата на сорт ч/з слизане. Бързото сорт построява две части- едната е елем/и, не по-големи от оста, а другата с елем/и, не по-малки от нея, след това също се прилага и към всяка от частите и накрая се долепят получените сорт части. Сорт ч/з сливане разделя цялата редица на две половини, след това същото се прилага към тези две подредици и накрая се сливат получените сорт подредици в една. Когато сорт масив, предпочита се бързото сорт, защото то не изисква никакъв допълнителен масив, както е при сорт ч/з сливане. Този недостатък на сорт ч/з сливане не важи за свързаните списъци, защото те са по-гъвкави от масивите преместването на елем от един списък в друг може да се извърши много ефективно, без никакви операции за разпределяне на памет. Що се отнася до оста, необходима при бързото сорт, в свързан списък не може да я намираме толкова ефективна, колкото в масив. По тези причини се предпочита сорт ч/з сливане. | 4. Крайна, празна редица от символи, заградена в кавички, се нарича символиен низ, знаков низ или само низ. Броят на символите в редицата се нарича дължина на низа. Низ с дължина 0, се нарича празен. Низ, който се съдържа в даден низ, се нарича негов подниз. Конкатенация на два низа е низ, получен като в края на първия низ се запише втория или сенарича още слепване на низове. Сравняването на два низа става като се сравнява всеки символ от първия низ със символа от съответната позиция на втория низ. Сравняването продължава докато се намерят два различни символа или докрая на поне един от символните низове. Ако кодът на символите от първия низ е по-малък от съответния код на втория низ, то се приема, че първия низ е по-малък от втория и обратно. А когато при сравняването и двата низа са изчерпани, казва ме че те са равни. Този тип сравняване се нарича лексикографско. Символните низове могат да се предствят по два начина като едномерни масиви от символи char abc[100]; като се определи променливата abc като масив от 100 символа, и като указателикъм тип char: char wav[s] = {`a`,`b`,`c`}; деф масива от символи wav и го инициализира. Т.к. се указани по-малко от 5 символа, останалите се попълават с нулевия символ, ` ` или char wav[5]={`a`,`b`,`c`,` `,` `}; Всички действия за работа с едномерен масив са валидни и за масиви от символи с изкл на извеждането, ще бъде езведено не цифра, а потока от текст. Низът се разгл като редица от символи, завършваща с нулевия символ |


