summaryrefslogtreecommitdiff
path: root/CPP/Basics/flow.cpp
blob: 82b7062378082120ae180865a246113101c3eaad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <vector>

void ifs(void) {
	int a = 1024;
	bool flag = false;
	char letter = 'E';

	if (a > 1000)
		std::cout << "Warning: over 1k" << std::endl;

	if (a % 2)
		std::cout << "a is odd" << std::endl;
	else
		std::cout << "a is even" << std::endl;

	std::cout << "The letter " << letter <<  " is ";

	if (letter != 'a' && letter != 'e' && letter != 'i' &&
	    letter != 'o' && letter != 'u' &&
	    letter != 'A' && letter != 'E' && letter != 'I' &&
	    letter != 'O' && letter != 'U')
		std::cout << "not ";
	std::cout << "a vowel" << std::endl;

	if (flag)
		std::cout << "The flag is true." << std::endl;
}

void switches() {

	float num1, num2, result;
	char op;

	std::cout << "Enter operand 1: " << std::endl;
	std::cin >> num1;
	std::cout << "Enter operand 2: " << std::endl;
	std::cin >> num2;
	std::cout << "Choose operation: + - * /: " << std::endl;
	std::cin >> op;

	switch (op) {
		case '+':
			result = num1 + num2;
			break;
		case '-':
			result = num1 - num2;
			break;
		case '*':
			result = num1 * num2;
			break;
		case '/':
			result = num1 / num2;
			break;
		default:
			std::cout << "Invalid Operation." << std::endl;
			return;
	}
	std::cout << "The result is: " << result << std::endl;
}

void LWhile() {


	// Declare and initialize a vector and an iterator
	// in this case iterator is a type inside vector class
	std::vector<int> numbers = {12, 25, 31, 55, 24, 32, 99};
	std::vector<int>::iterator ptr = numbers.begin();

	// We can use auto type to avoid the mess up above:
	auto ptr_auto = numbers.begin();
	int i = 0;

	while (ptr != numbers.end()) {
		std::cout << *ptr << " ";
		ptr = std::next(ptr, 1);
	}
	std::cout << std::endl;
	do {
		std::cout << numbers[i] << ":" << *ptr_auto << " ";
		i++;
		ptr_auto = std::next(ptr_auto, 1);
	}while(i < numbers.size());
	std::cout << std::endl;
}

void LFor() {
	std::vector<int> numbers = {12, 25, 31, 55, 24, 32, 99};
	std::vector<int>::iterator ptr = numbers.begin();
	float avg = 0;

	for(int i = 0; i < numbers.size() ; i++)
		avg += numbers[i];

	avg /= numbers.size();
	std::cout << "The average is: " << avg << std::endl;

	// C++11 Iterator based for
	avg = 0;

	// The iterator will copy the data from each element within the vector,
	// to the iterator variable (iter) here. We may want to access by
	// reference instead of copying it
	// READ AS: for each iter in numbers
	for(int iter : numbers)
		avg += iter;
	avg /= numbers.size();
	std::cout << "The average is: " << avg << std::endl;
}

int main(void) {
	ifs();
	switches();
	LWhile();
	LFor();
	return 0;
}