-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sigachev week7.2 without task 2 and task 3 #92
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Написать рекурсивную функцию нахождения наибольшего общего делителя двух целых чисел. | ||
#include <iostream> | ||
using namespace std; | ||
|
||
int greatestCommonFactor(int num1, int num2) | ||
{ | ||
if (num2 == 0) | ||
{ | ||
return num1; | ||
} | ||
return greatestCommonFactor(num2, num1 % num2); | ||
} | ||
|
||
int main() | ||
{ | ||
int firstNumber, secondNumber, max = 0, min = 0; | ||
cout << "Enter first number: "; | ||
cin >> firstNumber; | ||
cout << "Enter second number: "; | ||
cin >> secondNumber; | ||
(firstNumber < secondNumber ? max = secondNumber : max = firstNumber); | ||
(firstNumber > secondNumber ? min = secondNumber : min = firstNumber); | ||
cout << "Greatest common factor: " << greatestCommonFactor(max, min); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Написать рекурсивную функцию нахождения степени числа. | ||
#include <iostream> | ||
using namespace std; | ||
|
||
int numberDegree(int num, int degree) | ||
{ | ||
if (degree < 1) { | ||
return 1; | ||
} | ||
return num * numberDegree(num, degree - 1); | ||
} | ||
|
||
int main() | ||
{ | ||
int number, degree; | ||
cout << "Enter number: "; | ||
cin >> number; | ||
cout << "Enter degree: "; | ||
cin >> degree; | ||
cout << "Number in degree " << numberDegree(number, degree); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
// Написать рекурсивную функцию, которая выводит N звезд в ряд, число N задает пользователь. | ||
// Проиллюстрируйте работу функции примером. | ||
#include <iostream> | ||
using namespace std; | ||
|
||
int starLine(int number) | ||
{ | ||
if (number < 1) | ||
return 1; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. что означает возвращаемое значение? и почему его нет ниже |
||
cout << " * "; starLine(number - 1); | ||
} | ||
int main() | ||
{ | ||
int numberStar; | ||
cout << "Enter the number of stars: "; | ||
cin >> numberStar; | ||
//for (int i = 0; i < numberStar; ++i) | ||
//{ | ||
// cout << "* "; | ||
//} | ||
starLine(numberStar); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// Написать рекурсивную функцию, которая вычисляет сумму всех чисел в диапазоне от a до b. | ||
// Пользователь вводит a и b.Проиллюстрируйте работу функции примером. | ||
#include <iostream> | ||
using namespace std; | ||
|
||
int sumNumber(int num1, int num2) { | ||
if (num2 == num1 - 1) | ||
return 0; | ||
return num2 += sumNumber(num1, num2 - 1); | ||
} | ||
int main() | ||
{ | ||
int firstNumber, secondNumber, max = 0; | ||
cout << "Enter first number: "; | ||
cin >> firstNumber; | ||
cout << "Enter second number: "; | ||
cin >> secondNumber; | ||
if (firstNumber > secondNumber) { // Если пользоваатель ввел числа как попало, здесь определяем какое больше. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ну тернарный оператор короче. а вообще всё, как я сегодня сказал - начинаем использовать готовые библиотечные функциии |
||
max = firstNumber; | ||
} | ||
else { | ||
max = secondNumber; | ||
secondNumber = firstNumber; | ||
} | ||
cout << sumNumber(secondNumber, max); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Напишите рекурсивную функцию, которая принимает одномерный массив из 100 целых чисел, | ||
// заполненных случайным образом, и находит позицию, с которой начинается | ||
// последовательность из 10 чисел, сумма которых минимальна. | ||
|
||
//------------------------------------------------------------------------ | ||
// Решение не списывал, но подглядывал у всех и в интернете тоже. | ||
// после того как понял принцип выполнения кода, смог сваять. | ||
// cout на строке 18 и 39 закоментировал для красивого вывода ответа. | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int minimumSumTenNumber(int arr[100], int n, int& position) { | ||
int sum = 0; | ||
for (int i = n; i < n + 10; ++i) { | ||
sum += arr[i]; | ||
} | ||
//cout << "Sum ten element from the " << n << " position"<< " - " << "\t" << sum << endl; | ||
if (100 - n == 10) { | ||
position = n; | ||
return sum; | ||
} | ||
else { | ||
int summ = minimumSumTenNumber(arr, n + 1, position); | ||
if (sum < summ) { | ||
position = n; | ||
return sum; | ||
} | ||
return summ; | ||
} | ||
} | ||
|
||
int main() | ||
{ | ||
int arr[100]; | ||
int position; | ||
for (int i = 0; i < 100; ++i) { | ||
arr[i] = rand() % 100 - 25; | ||
//cout << arr[i] << " "; | ||
} | ||
cout << endl; | ||
minimumSumTenNumber(arr, 0, position); | ||
cout << "Position: " << position << endl; // все что ниже - это для красоты! | ||
cout << "Elements: "; | ||
int sum = 0; | ||
for (int i = position; i < position + 10; ++i) { | ||
cout << arr[i] << " "; | ||
sum += arr[i]; | ||
} | ||
cout << "\nSum: " << sum << endl; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// Используя два указателя на массив целых чисел, скопировать один массив в другой. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. гит тоже смотри. зачем мне в ветке 7.2. задачи из ветки 7.3 |
||
// Использовать в программе арифметику указателей для продвижения по массиву, а также оператор разыменования | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
const int size = 7; | ||
int firstArr[size] = { 1,2,3,4,5,6,7 }; | ||
int secondArr[size] = { 0 }; | ||
int* pFirstArr = firstArr; | ||
int* pSecondArr = secondArr; | ||
for (int i = 0; i < size; ++i) { | ||
*(pSecondArr + i) = *(pFirstArr + i); | ||
} | ||
for (int i = 0; i < size; ++i) { | ||
cout << *(secondArr + i) << " "; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Используя указатель на массив целых чисел, изменить порядок следования элементов массива на противоположный. | ||
// Использовать в программе арифметику указателей для продвижения по массиву, а также оператор разыменования. | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
int const size = 7; | ||
int arr[size] = { 1,2,3,4,5,6,7 }; | ||
int* pFirstArr = &arr[0]; | ||
int* pLastArr = &arr[size - 1]; | ||
do { | ||
int temp = *pFirstArr; | ||
*pFirstArr = *pLastArr; | ||
*pLastArr = temp; | ||
++pFirstArr; | ||
--pLastArr; | ||
} while (pFirstArr < pLastArr); | ||
for (int i = 0; i < size; ++i) | ||
{ | ||
cout << *(arr + i) << " "; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// Используя два указателя на массивы целых чисел, скопировать один массив в другой так, чтобы во втором массиве элементы | ||
// находились в обратном порядке. | ||
// Использовать в программе арифметику указателей для продвижения по массиву, а также оператор разыменования. | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
const int size = 10; | ||
int arr[size] = { 1,4,7,8,5,8,2,4,0,3 }; | ||
int inverseArr[size] = { 0 }; | ||
int* pArr = arr; | ||
int* pInverseArr = inverseArr; | ||
for (int i = 0; i < size; ++i) { | ||
*(pInverseArr + i) = *(pArr + ((size - 1) - i)); | ||
cout << *(pInverseArr + i) << " "; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
// Используя указатели и оператор разыменования, определить наибольшее из двух чисел | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int findMax(int* pA, int* pB) { | ||
if (*pA > * pB) { | ||
return *pA; | ||
} | ||
else if (*pA < *pB) { | ||
return *pB; | ||
} | ||
else | ||
cout << "Numbers are equal: "; | ||
return *pA; | ||
} | ||
int main() | ||
{ | ||
int a = 8, b = 8; | ||
cout << findMax(&a, &b); | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// Используя указатели и оператор разыменования, определить знак числа, введённого с клавиатуры. | ||
#include <iostream> | ||
using namespace std; | ||
|
||
void signNumber(int* pA) { | ||
cout << "Sign of number " << (*pA > 0 ? "positive." : "negative."); | ||
} | ||
int main() | ||
{ | ||
int a; | ||
cout << "Enter number: "; | ||
cin >> a; | ||
if (a == 0) { | ||
cout << "your number zero!"; | ||
return 0; | ||
} | ||
signNumber(&a); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Используя указатели и оператор разыменования, обменять местами значения двух переменных. | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
int a = 5, b = 9; | ||
cout << a << ", " << b << endl; | ||
int* pA = &a, * pB = &b, temp; | ||
temp = *pA; | ||
*pA = *pB; | ||
*pB = temp; | ||
cout << a << ", " << b << endl; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// Написать примитивный калькулятор, пользуясь только указателями. | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
double calc(double num1, double num2, int action) { | ||
double* pNum1 = &num1, *pNum2 = &num2; | ||
int* pAction = &action; | ||
if (*pAction == 1) | ||
return *pNum1 + *pNum2; | ||
if (*pAction == 2) | ||
return *pNum1 - *pNum2; | ||
if (*pAction == 3) | ||
return *pNum1 * *pNum2; | ||
if (*pAction == 4) | ||
return *pNum1 / *pNum2; | ||
} | ||
int main() | ||
{ | ||
double firstNumber, secondNumber; | ||
int action; | ||
cout << "Enter first number: " << endl; | ||
cin >> firstNumber; | ||
cout << "Enter second number: " << endl; | ||
cin >> secondNumber; | ||
while (true) { | ||
cout << "Select an action: \n"; | ||
cout << "Enter 1 - with action '+'\n" | ||
<< "Enter 2 - with action '-'\n" | ||
<< "Enter 3 - with action '*'\n" | ||
<< "Enter 4 - with action '/'\n"; | ||
cin >> action; | ||
if (secondNumber < 0 && action == 4) { | ||
cout << "Cannot be divided by zero! Choose another action\n"; | ||
} | ||
else if (0 >= action || action > 4) { | ||
cout << "Input error, try again"; | ||
} | ||
else { | ||
break; | ||
} | ||
} | ||
cout << "Result: " << calc(firstNumber, secondNumber, action); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// Используя указатель на массив целых чисел, посчитать сумму элементов массива. Использовать | ||
// в программе арифметику указателей для продвижения по массиву, а также оператор разыменования. | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
const int size = 10; | ||
int arr[size]; | ||
int sum = 0; | ||
for (int i = 0; i < size; ++i) { | ||
arr[i] = rand() % 10; | ||
cout << arr[i] << " "; | ||
} | ||
int* pSum = ∑ | ||
int* pArr = arr; | ||
for (int i = 0; i < size; ++i) { | ||
*pSum += *(arr + i); | ||
} | ||
cout << endl << endl; | ||
cout << *pSum; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
почему тут макс определяется? а не внутри функции