Мечтата на Павлов

Тук давам различни примери за конструкцията switch най-вече такива от контролните по теория на Павел Павлов по “Увод в програмирането“.


#include <iostream>
using namespace std;

int main ()
{
	int x = 0;
	while (x < 5) 	{
		switch (x * (x > -1) * (x < 4))
		{
			case 1: cout << "A";
			case 2: cout << "B";
			case 3: cout << "C";
			default: cout << "Not a number";
		}
		cout << endl;
		x++;
	}

	system("pause");
	return 0;
}

Конструкцията switch в езика С++ има богати възможности да обърква студентите, а и не само тях. Тук можем да нямаме break-ове и така да изпълнява и ненужни неща. Също така можем да подредим default-а по различни начини, съчетано с липсата на прекъсвания се получават интересни резултати.

Terminal1

В тази програма има сложно условие за switch-а, като идеята е, ако отговаря на тези условия да влиза нормално в case-овете. Условията в скобките връщат винаги true или false, или техния еквивалент в цели числа – т.е. 1 или 0. Нещо умножено по 0 е 0, а нещо умножено по 1 си е самото нещо. Понеже нямаме break-ове изпълняваме всичко след като е влезнал в дадения case или default, така че позиционирането на конкретния случай наистина има значение.


#include <iostream>
using namespace std;

int main ()
{
	int x = 0;
	while (x < 5) 	{ 		
		switch (x * (x > -1) * (x < 4))
		{
			default: cout << "Not a number";
			case 1: cout << "A";
			case 2: cout << "B";
			case 3: cout << "C";
		}
		cout << endl;
		x++;
	}

	system("pause");
	return 0;
}

Terminal

Разликата с по-горната е, че default-а е най-горе, но винаги първо проверява всички case-ове и чак тогава намира default-a и изпълнява всичко след него, поради липсата на break.


#include <iostream>
using namespace std;

int main ()
{
	int x = 0;
	while (x < 5) 	{ 		
		switch (x * (x > -1) * (x < 4))
		{
			case 1: cout << "A";
			case 2: cout << "B";
			default: cout << "Not a number"; break;
			case 3: cout << "C";
		}
		cout << endl;
		x++;
	}

	system("pause");
	return 0;
}

Terminal

В последния код, default-а е в м/у case-овете и има break. Изходният резултат е видим в изображението под кода.

Тази публикация е с цел да обърне внимание на липсата на break и различното подреждане на case и default, в един switch.

Leave a comment