C, PHP, VB, .NET

Дневникът на Филип Петров


Архив за октомври, 2008

* Рекурсивни структури

Публикувано на 24 октомври 2008 в раздел С/С++.

Дефинирането на указател като част от структура е напълно валидна конструкция. Освен това е напълно възможно и дефинирането на указател към структура във структура. По този начин е възможно създаването на т.нар. „рекурсивни структури“:

	struct rec{
		int k;
		struct rec *nextrec;
	};

Лесно можете да направите аналогия с рекурсивните функции. Използвайки подобни структури можем лесно да създаваме добре познати структури от данни като линейни списъци и бинарни дървета например.

Прочети още…

.

 


* Побитови операции

Публикувано на 24 октомври 2008 в раздел С/С++.

Езикът С притежава част от качествата на асемблерните езици. Той разполага с пълен набор от операции за работа с отделни битове на числените стойности – поразредни операции. Тези операции позволяват проверяване, установяване или преместване на отделни битове на променливи от тип int или char. Поразредните операции се използват много често при писането на драйвери за устройства.

Прочети още…

.

 


* Класове Памет, Разделно Компилиране

Публикувано на 24 октомври 2008 в раздел С/С++.

Класове Памет, Разделно Компилиране

Всяка променлива в С се характеризира с три атрибута:
1. Тип на променливата – определя стойностите, които променливата може да приема и съответно необходимото количество памет, което трябва да се задели
2. Област на действие – мястото в програмата, където тя е „видима“, например разгледаните вече глобални променливи имат по-широка област на действие от локалните
3. Период на активност – част от времето за изпълнение на програмата, през което ще се съхранява последната текуща стойност Прочети още…

.

 


* Преобразуване на типове, размер на данни

Публикувано на 24 октомври 2008 в раздел С/С++.

I. Преобразуване на типове:

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

	(тип) операнд

Пример:

	double x = 15.5;
	// Следното ще доведе до:
	// warning C4244: 'initializing' : conversion from 
	// 'double' to 'int', possible loss of data
	int y = x;
	// Когато укажем преобразуването явно този warning изчезва:
	int z = (int)x;
 Прочети още...

.

 


* Предпроцесор

Публикувано на 24 октомври 2008 в раздел С/С++.

Езикът за програмиране С има едно рядко срещано при езиците от високо ниво преимущество – възможност за управление на процеса на компилация. Предпроцесорът дава на програмиста следните допълнителни средства:
– Използуване на макроопределения
– Включване на първични файлове към програмата
– Условно компилиране Прочети още…

.

 


* Допълнителни задачи към упражнение №1

Публикувано на 14 октомври 2008 в раздел С/С++.

Задача 1.  Компютърът си “намисля” едно число в даден интервал. От потребителят се изисква да “познае намисленото” число. За да бъде сходяща играта, всеки път се намалява интервала, в който трябва да се намира намисленото число (компютърът ще „казва“ дали числото е по-голямо или по-малко от предположеното). Накрая се разпечатва оригинала и броя пъти, необходими за познаването му.

* Произволно число „randomNumber“ в интервала [0, 100] може да зададете по следния начин:

srand( (unsigned) time (NULL) );
int randomNumber = (int) ( 101.0 * (double) rand() / ( (double) RAND_MAX+1.0) );
Прочети още…

.

 


* Указатели, Адресна аритметика

Публикувано на 11 октомври 2008 в раздел С/С++.

Всеки обект в езика (променлива, константа, масив, елемент на масив, структура, …) се съхранява в определени клетки на паметта. Прието е да се казва, че тези клетки се намират на определен „адрес“. Променлива, чиято стойност е адрес в паметта, се нарича указател. Стойността на указателя посочва местоположението на дадена променлива и позволява косвен достъп до стойността й. Прочети още…

.

 


* Структури

Публикувано на 11 октомври 2008 в раздел С/С++.

Като първа стъпка при структуриране на информация в дадена програма ние се стремим да групираме логически свързаните данни в едно цяло. Пример за такова групиране са масивите. При тях обаче има едно съществено ограничение: всички елементи трябва да са от един и същи тип. Когато се налага да групираме данни от различни типове можем да използваме специалния тип данни struct:

	struct име
	{
		описание на първия елемент;
		...
		описание на последния елемент;
	};

Променливите от тип struct могат да се изброят като списък след затварящата скоба на блока в дефиницията на структурата, или допълнително на произволно място в програмата. Прочети още…

.

 


* Функции, Глобални променливи

Публикувано на 11 октомври 2008 в раздел С/С++.

Функцията е основната програмна единица. Можем да разглеждаме функциите като логическа част от по-голяма програма. Този фрагмент може да се изпълнява многократно в различни части на програмата.

Функциите се дефинират по следият начин:

	тип_на_функцията име(входни_параметри)
	{
		оператори;
		return резултат;
	}

Типа на връщания резултат трябва да съвпада с типа на самата функция. Когато няма нужда от връщане на резултат се използва тип на функцията void. Прочети още…

.