Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Циклы


Сразу оговоримся, что в случае консольных приложений к проекту необходимо прикрепить заголовочный файл iostream.h (а в некоторых случаях и stdio.h – экспериментируйте).


for (начальные условия; условия выполнения; закон изменения)

{

оператор;

}


Например,


for (int i = 0; i < 6; i++)

{

printf("%d\n", i);

}


Также можно сделать "пустой" цикл – предыдущий (к проекту следует подключить файл stdio.h).


for (int i = 0; i < 6; printf("%d\n", i++)) // выводим значения от 0 до 5

{

;

}


Тот же самый цикл может быть записан так (к проекту следует подключить файл iostream.h).


for (int i = 0; i < 6; cout << i++ << endl)

{

;

}


Теперь рассмотрим пример с выводом значения типа float.


for (float i = 0; i < 6; i=i+0.5)

{

printf("%.2f ", i); // 2f означает, что точность – два знака.

}


или


for(unsigned char cKey='A'; cKey<='Z'; cKey++)

{

printf("%c ", cKey);

}


Также можно ввести несколько переменных


for (int i=0, j=0; i<3; i++, j++)

cout << "i: " << i << " j: " << j << endl;


Любой из трех параметров цикла for может быть опущен.

Если опустить первый и третий операторы, то цикл for будет подобен циклу while, рассматриваемого далее.


int cycle = 0; // объявляем переменную cycle типа int

for( ; cycle < 5; ) // опускаем 1-й и 3-й параметр

{

cycle++; // увеличиваем значение переменной на 1

cout << "Yes!"; // выводим на экран слово Yes!

}

cout << "\nCycle: << cycle << ".\n";// после цикла выводим значение переменной


В результате выполнения программы на консоль будет выведен текст


Yes!Yes!Yes!Yes!Yes!

Cycle:5.


Если опустить все три параметра, организуем бесконечный цикл.


for(;;)

{

printf("A"); // печатаем букву A

}


Или же можно организовать такой цикл (хотя это уже громоздко)


int cycle = 0;

int max;

cout << " Press any digital key...";// нажмите любую цифровую клавишу

cin >> max; // присвоить введенное значение


for (;;) // объявляем бесконеный цикл

{

if (cycle < max) // пока значение cycle меньше введенной нами

{

cout << "Hello!!!\n"; // выводить строку Hello!!!

cycle++; // увеличим переменную cycle на 1

}

else // инече

break; // выход

}

И последнее. Переменные, определенные в блоке цикла for могут быть восприняты многими компиляторами за пределами цикла, хотя новый стандарт указывает обратное.

Оператор while. Цикл выполняется до тех пор, пока условие принимает значение "истинно". Если цикл for "вобрал" в себя три значения, то в цикле while (как и do-while) следует установить значение переменных цикла, далее – на каждой итерации проконтролировать их изменение и во время цикла изменять значение переменной, иначе цикл будет бесконечный. Чтобы понять, как это сделать смотрите пример.


while(условие) оператор;


//Цикл выполняется до тех пор, пока условие принимает значение "истинно".

unsigned char ch;

int flag;


flag=1; // флагу присвоено значение 1

while(flag) // пока у флага значение 1, цикл будет повторяться

{

ch=getch(); //Читает символ с клавиатуры и возвращает его код

if(ch==27) //Если код равен 27

{

flag=0;//Flag усстанавливаем в 0. Выход из цикла

}

else

{

printf("%c",ch);

}

}


Еще один пример.


unsigned short min;

unsigned long max;

const unsigned short MAXMAL=65535;

cout << "Please insert min: ";

cin >> min;

cout << "Please insert max: ";

cin >> max;

cout << "min: " << min << "\n";

// выполнение трех условий

while (min < max && max > 0 && min < MAXMAL)

{

if (min % 5000 == 0) //после 5000 строк (остаток деления равен 0)

cout << "."; // вывести точку

min++; // увеличить значение на 1

max-=2; // уменьшить значение на 2

cout << "\nEnd" << endl;// вывести сообщение об успешности цикла

}

cout << "\nMin: " << min << " Max: " << max << endl;

// то есть, если min > max, max положительно, а min меньше 65535, цикл начнется.


Следует заметить, что условие проверяется до выполнения цикла. То есть, если будут введены числа, неудовлетворяющие условию, сообщения End не будет.

Оператор do-while.

Основное отличие оператора цикла do-while от операторов for и while заключается в том, что условие проверяется в конце оператора цикла. А отсюда следует, что тело (блок операторов) оператора do-while всегда выполняется хотя бы один раз. При использовании данного примера следует подключить файлы stdio.h и conio.h.


unsigned char cKey; //объявляем переменную

do // начало цикла

{

cKey=getch(); // присваиваем номер нажатой клавишы переменной

printf("%c",cKey);// выводим на экран консоли нажатую клавишу

}

while(ch!=27); // делаем это пока номер клавиши не равен 27 (Esc)


Оператор goto. С помощью данного оператора можно осуществить переход в любую точку программы, где определена соответствующая метка.

Объявляем метку,


loop:


а затем, где предполагается повтор цикла, написать


goto loop;


Например, так.


int cycle = 0;

loop: cycle ++; // начинаем цикл

cout << cycle << "\n"; // вывод значения на экран консоли

if (cycle < 4) // если значение меньше 4

goto loop; // вернуться к метке loop – повтор цикла

cout << "Complete..." << cycle << "\n";

return 0;


Еще один пример


int cycle = 0;

char counter[10];

loop: cycle ++; // начинаем цикл

itoa(cycle, counter, 10); // перевести тип int в char

MessageBox(counter); // показать сообщение

if (cycle < 4) // если значение меньше 4

goto loop; // вернуться к метке loop – повтор цикла

MessageBox("Complete"); // это сообщение не входит в цикл



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS