Exercises – УВОД В ПРОГРАМИРАНЕТО – УПРАЖНЕНИЕ №14 Solved

$ 20.99
Category:

Description

ЗА КАКВО ЩЕ СИ ГОВОРИМ ДНЕС?
 От миналия път – ламбда функции
 Header файлове
 Преговор
ЛАМБДА ФУНКЦИИ
 Т.нар. анонимни функции – дефинират се еднократно на мястото, на което се използват (извикват или подават като параметър на функция)
https://learn.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170
КАК ДА ПИШЕМ „ХУБАВ“ КОД?
 Използвайте смислени имена на променливи и функции!
 НЕ пишете на шльокавица!
 НЕ използвайте магически числа – заменете ги с константи!
 Една функция трябва да прави (по възможност) едно нещо. Ако функцията ви прави повече неща, разделете я на подфункции!
(принцип „разделяй и владей“)
 Пишете устойчиви функции – винаги проверявайте дали параметрите ви са валидни за конкретната задача, която решавате!
 НЕ пишете основната логика на задачата в main() – там трябва да са само входът на данните, валидацията им (идеално и тя е в отделна функция) и функция, която съдържа логиката на задачата (и която най-вероятно извиква други функции)!
УКАЗАТЕЛИ И ПСЕВДОНИМИ (РЕФЕРЕНЦИИ)
int number = 5;
int& referenceToNumber = number; // друго име на същата променлива std::cout << referenceToNumber << std::endl;
int* pointerToNumber = &number; // пази адреса на променливата number std::cout << pointerToNumber << std::endl; std::cout << *pointerToNumber << std::endl;
УКАЗАТЕЛИ КЪМ КОНСТАНТА != КОНСТАНТНИ
УКАЗАТЕЛИ
const int* != int* const

Указател към константа Сочи към константа, т.е. не може да се променя стойността й Алтернативен запис – int const* Константен указател Веднъж свързан с дадена променлива, не може да се „пренасочва“ към друга променлива (като псевдоним) Може да се променя стойността на самата променлива

НАЧИНИ ЗА ПРЕДАВАНЕ НА ПАРАМЕТРИ НА ФУНКЦИЯ
 По стойност
 Чрез указател
 Чрез псевдоним
УКАЗАТЕЛНА АРИТМЕТИКА
int a = 4; int *p = &a;
p = p + 1; // ще „премести“ напред указателя с една „стъпка“, голяма колкото е размерът на типа, към който сочи указателят
УКАЗАТЕЛИ И МАСИВИ
 Указатели и едномерни масиви
int a[100]; // а -> указател към а[0]
*a == a[0];
*(a+1) == a[1]; … *(a+n) == a[n];
 Указатели и двумерни масиви
int a[10][20]; // a -> указател към първия елемент на едномерния масив [a[0], a[1], … a[9]], а всяко a[i] е указател към а[i][0]
**a == a[0][0]; *a == a[0]; a[i][j] == *(*(a+i)+j);
КАКВО Е СИМВОЛЕН НИЗ И КАК ГО ПРЕДСТАВЯМЕ В С++?
 Редица от краен брой символи, заградена в кавички
 Масив от символи (char), в който след последния символ в низа е записан т.нар. терминиращ символ ’’
char str[] = “FMI”;
‘F’ ‘M’ ‘I’ ‘’
КАКВО ТРЯБВА ДА ЗАПОМНИМ ЗА СИМВОЛНИТЕ НИЗОВЕ?
 Винаги завършват с терминиращ символ, т.е. масив от тип char с размер size може да съдържа низ с максимална дължина (size – 1).
 Реално това са масиви => не можем да ги сравняваме с оператора „==“ или да ги копираме с оператора „=“.
 Можем да въвеждаме и извеждаме символни низове директно чрез cin и cout. Въвеждането със cin обаче се терминира при въвеждане на whitespace символ => в такъв случай ползваме cin.getline().
УКАЗАТЕЛИ И НИЗОВЕ
Връзката е като при едномерните масиви; Обхождане на низ с помощта на указатели:
char str[] = “Hello!”; char* pstr = str; while (*pstr) {
cout << *pstr; pstr++;
}
ВИДОВЕ ПАМЕТ
Stack vs. Heap
▪ Заделя се при компилация▪Заделя се по време на
▪ Освобождава се автоматично, изпълнението на програмата когато се излезе от scope-a, ▪НЕ се освобождава се в която е била дефиниранаавтоматично, трябва програмистът сам да се погрижи за това
КАК ЗАДЕЛЯМЕ И ОСВОБОЖДАВАМЕ ДИНАМИЧНА ПАМЕТ?
 Заделяме с new или new[]
 Освобождаваме с delete или delete[]
 ВИНАГИ трябва да освободим заделената с оператора new памет
КАК ФУНКЦИЯ ДА ВЪРНЕ МАСИВ?
 Масивът се връща като тип указател към съответния тип на елементите
 Важно е този указател да НЕ се унищожи след края на изпълнението на функцията
 За целта можем да използваме динамично създаден масив, който се намира в областта на heap-a и ще бъде изтрит от нея, когато ние експлицитно го направим
FUNCTION POINTERS – УКАЗАТЕЛИ КЪМ ФУНКЦИИ
 Указателят към функция има за стойност адреса на изпълнимия код на функцията
 Указателите към функции могат да се използват, за да се извикват функции и да се подават функции като параметри на други функции (функции от по-висок ред)
 НЕ може да се извършва указателна аритметика върху указатели към функции
ЗАДАЧА 1
Да се напише рекурсивна функция, която намира сумата на елементите на масив от цели числа.

Reviews

There are no reviews yet.

Be the first to review “Exercises – УВОД В ПРОГРАМИРАНЕТО – УПРАЖНЕНИЕ №14 Solved”

Your email address will not be published. Required fields are marked *