#include #include #pragma GCC diagnostic ignored "-Wdiv-by-zero" using namespace std; /* Exercises: * https://github.com/triffon/ip-2021-22/blob/master/practicum/6/week2/%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8%20%D0%B2%D1%82%D0%BE%D1%80%D0%B0%20%D1%81%D0%B5%D0%B4%D0%BC%D0%B8%D1%86%D0%B0.pdf */ // Задача 0 // Дадени са n лева. Да се изведе на конзолата как може да се разпределят по // банкноти така, че да имаме минимален брой банкноти. В условието приемаме, че // имаме банкноти от 1 и 2 лева. // Пример: // Вход: 62 // Изход: 1 * 50 + 1 * 10 + 1 * 2 void ex0() { int a; cin >> a; // Please, don't do this, it's really ugly if (a / 100 > 0) cout << (a / 100) << " * 100" << (((a %= 100) > 0) ? " + " : ""); if (a / 50 > 0) cout << (a / 50) << " * 50" << (((a %= 50) > 0) ? " + " : ""); if (a / 20 > 0) cout << (a / 20) << " * 20" << (((a %= 20) > 0) ? " + " : ""); if (a / 10 > 0) cout << (a / 10) << " * 10" << (((a %= 10) > 0) ? " + " : ""); if (a / 5 > 0) cout << (a / 5) << " * 5" << (((a %= 5) > 0) ? " + " : ""); if (a / 2 > 0) cout << (a / 2) << " * 2" << (((a %= 2) > 0) ? " + " : ""); if (a > 0) cout << a << " * 1"; } // Задача 1 // Да се напише програма, използваща конструкцията switch, която приема число от // 1 до 12, и отпечатва на стандартния изход съответния месец от годината. // Пример: // Вход: 12 // Изход: Декември void ex1() { int a; cin >> a; switch (a) { case 1: cout << "January"; break; case 2: cout << "February"; break; case 3: cout << "March"; break; case 4: cout << "April"; break; case 5: cout << "May"; break; case 6: cout << "June"; break; case 7: cout << "July"; break; case 8: cout << "August"; break; case 9: cout << "September"; break; case 10: cout << "October"; break; case 11: cout << "November"; break; case 12: cout << "December"; break; } } // Задача 2 // В по - долната таблица е представена глобата, която водачът получава, при // превишена скорост. Да се изведе получената глоба при въведена скорост. // | 50 | 70 | 90 | 110 | 130 | 160 | // |----+----+----+-----+-----+-----| // | 0 | 20 | 50 | 150 | 350 | 700 | void ex2() { int a; cin >> a; if (a >= 160) cout << 700; else if (a >= 130) cout << 350; else if (a >= 110) cout << 150; else if (a >= 90) cout << 50; else if (a >= 70) cout << 20; else cout << 0; } // Задача 3 // Да се въведат три числа и да се изведат на стандартния изход в нарастващ ред. void ex3() { int a, b, c; cin >> a >> b >> c; if (a < b && a < c) cout << a << " " << ((b < c) ? b : c) << " " << ((c > b) ? c : b); else if (b < a && b < c) cout << b << " " << ((a < c) ? a : c) << " " << ((c > a) ? c : a); else cout << c << " " << ((b < a) ? b : a) << " " << ((a > b) ? a : b); } // Задача 4 // От стандартния вход се въвеждат координатите (x1, y1), и (x2, y2), които описват // правоъгълник в двуизмерна координатна система и координатите (x, y), които // описват точка. Да се изведе на стандартния изход "true"ако точката е в // правоъгълника, и "false"в противен случай. void ex4() { int x1, y1, x2, y2, x, y; cin >> x1 >> y1 >> x2 >> y2 >> x >> y; // Again, this is very ugly cout << (( ((x > x1 && x < x2) || (x > x2 && x < x1)) && ((y > y1 && y < y2) || (y > y2 && y < y1)) ) ? "true" : "false"); } // Задача 5 // Какво ще изведе програмата: // #include // using namespace std; // int main() { // int c = 5; // int d = (c += 3 ) + (c += 5); // cout << d; // return 0; // } // Защо? void ex5() { cout << "Will output 26, since = returns a reference and at the end it evaluates to c + c." << endl; int c = 5; int d = (c += 3) + (c += 5); cout << d; } // Задача 6 // Какво ще изведе програмата: // #include // using namespace std; // int main() { // int c = 5; // if (c += c -= 5) // cout << (c *= 10); // else // cout << c; // } // Защо? void ex6() { cout << "Will output 0, = evaluates from the right to the left, so c becomes 0 and we have 0 + 0." << endl; int c = 5; if (c += c -= 5) cout << (c *= 10); else cout << c; } // Задача 7 // Какво ще изведе програмата: // #include // using namespace std; // int main() { // int c = 5; // cout << ((c == 6) || (c / 0)); // } // Защо? void ex7() { cout << "Will output nothing, since you cannot divide by 0" << endl; int c = 5; cout << ((c == 6) || (c / 0)); } // Задача 8 // Какво ще изведе програмата: // #include // using namespace std; // int main() { // int c = 5; // cout << ((c == 6) && (c / 0)); // } // Защо? void ex8() { cout << "Will output 0, since comparison is lazy and when it evaluates c == 6 as false, it just returns" << endl; int c = 5; cout << ((c == 6) && (c / 0)); } // Задача 9 // Какво ще изведе програмата: // #include // using namespace std; // int main() { // int c = 5; // double e = 0; // cout << ((c = 6) && (e = 1)); // cout << c << " " << e; // } // Защо? void ex9() { cout << "Will output 16 1, because = returns a reference, which is practically a number, that is more than 0 so it evaluates as true" << endl; int c = 5; double e = 0; cout << ((c = 6) && (e = 1)); cout << c << " " << e; } // Задача 10*: // Да се реши квадратно уравнение, като предварително от потребителя са въведени // a, b и с където: // ax 2 + bx + c = 0 void ex10() { double a, b, c; cin >> a >> b >> c; // Unfinished double d = b * b - 4 * a * c; if (d < 0) { cout << "No real root." << endl; } else if (d == 0) { cout << 0; } else { d = sqrt(d); cout << (-b + d) / (2 * a) << " " << (-b - d) / 2; } } int main() { ex10(); }