Тема: Функція с++
Створити фунцкію яка визначає добуток елементів прямокутної матриці в тих рядках, які не
містять від’ємних елементів, а також максимум серед сум елементів
діагоналей, паралельних головній діагоналі матриці.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Функція с++
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Створити фунцкію яка визначає добуток елементів прямокутної матриці в тих рядках, які не
містять від’ємних елементів, а також максимум серед сум елементів
діагоналей, паралельних головній діагоналі матриці.
Я тільки недавно почав вивчати С++
Якщо потрібно, тримай ( ніби працює )
мда...
int const m = 5;
int const n = 3;int Matrix[m][m]
а що нетак?
далі в коді щоб не виникло магічних чисел використовуются змінні m та n
мда...
int const m = 5;
int const n = 3;int Matrix[m][m]
Він тільки недавно почав вивчати С++ і ще погано розрізняє літери
ur_naz написав:мда...
int const m = 5;
int const n = 3;int Matrix[m][m]
Він тільки недавно почав вивчати С++ і ще погано розрізняє літери
коли я пишу замість [m][m] [n][m] то воно показує дивні цифри тому, так задумано
Так тоді розмір матриці 5х5, а не 3х5. магія
Так тоді розмір матриці 5х5, а не 3х5. магія
так і було задумано
воно показує дивні цифри
Значить, щось ви не так робите. Швидше за все - читаєте з-за меж масиву.
так і було задумано
Ні, не було.
mamkin haker написав:воно показує дивні цифри
Значить, щось ви не так робите. Швидше за все - читаєте з-за меж масиву.
Знайшов і виправив, ось кінцевий результат
Такс вибачаюся за мої бздури але ось гарний код
#include <iostream>
#include <utility> // для std::pair
struct Name // структура імені людини
{
char surname[50]; // фамілія
char name[50]; // ім'я
char father[50]; //по-батькові
};
void addBackElem(std::pair<char*, int>*& arr, int& n, char* newName) // функція, що додає в кінець масиву arr, розміром n новий елемент newName
{
std::pair<char*, int>* bufArr = new std::pair<char*, int>[n + 1];
for (size_t i = 0; i < n; i++)
{
bufArr[i] = arr[i];
}
bufArr[n] = { newName, 1 };
if (arr) delete[] arr;
arr = bufArr;
n++;
}
int main()
{
system("chcp 1251 && cls"); // для укр мови
const int qNames = 4; // кількість імен
Name* structNames = new Name[qNames]; // створюємо массив структур імен
for (size_t i = 0; i < qNames; i++)
{
char tempName[200]; // для вводу строки імені
std::cout << "Введіть ім'я номер " << i + 1 << ": ";
gets_s(tempName); // вводимо ПІБ
int j = 0;
while (tempName[j] == ' ') // поки пробіл
{
j++;
}
int k = 0;
while (tempName[j] != '\0' && tempName[j] != ' ') // поки не кінець строки, або поки не пробіл
{
structNames[i].surname[k] = tempName[j]; // зчитуємо кожний символи з tempName у structNames[i].surname
k++;
j++;
}
structNames[i].surname[k] = '\0';// не забуваэмо про нуль термінатор, що означає кінець строки
while (tempName[j] == ' ') // поки пробіл
{
j++;
}
k = 0;
while (tempName[j] != '\0' && tempName[j] != ' ') // поки не кінець строки, або поки не пробіл
{
structNames[i].name[k] = tempName[j]; // зчитуємо кожний символи з tempName у structNames[i].name
k++;
j++;
}
structNames[i].name[k] = '\0';// не забуваэмо про нуль термінатор, що означає кінець строки
while (tempName[j] == ' ') // поки пробіл
{
j++;
}
k = 0;
while (tempName[j] != '\0' && tempName[j] != ' ') // поки не кінець строки, або поки не пробіл
{
structNames[i].father[k] = tempName[j]; // зчитуємо кожний символи з tempName у structNames[i].father
k++;
j++;
}
structNames[i].father[k] = '\0'; // не забуваэмо про нуль термінатор, що означає кінець строки
}
std::pair<char*, int>* arr = nullptr; // створюємо массив arr з типом елементів std::pair<char*, int>, де (char*) - ім'я, (int) - кількість такого імені
int N = 0; // розмір массиву arr
for (size_t i = 0; i < qNames; i++) // йдемо по масиву структур з іменами
{
bool flag = false; // для знаходження імені
for (size_t j = 0; j < N; j++) // йдемо по масиву імен і їх кількості
{
if (strcmp(structNames[i].name, arr[j].first) == 0) // якщо таке ім'я є(first - перше значення в std::pair)
{
flag = true;
arr[j].second++;// додаємо 1 до кількості таких імен(second - друге значення в std::pair)
}
}
if (!flag) // якщо такого імйя не знайшлось
{
addBackElem(arr, N, structNames[i].name); // то додаємо його в кінець з кількістю 1
}
}
int min = arr[0].second;
for (size_t i = 0; i < N; i++) // йдемо по масиву імен і їх кількості
{
if (arr[i].second < min) // шукаємо мінімальну кількість
{
min = arr[i].second;
}
}
std::cout << "Ім'я, що повторюються менш за все: ";
for (size_t i = 0; i < N; i++) // йдемо по масиву імен і їх кількості
{
if (arr[i].second == min) // якщо кількість таких імен додівнює min
{
std::cout << arr[i].first << " "; // то выводимо це ім'я
}
}
delete[]structNames;
return 0;
}
ойойой переплутав файли це до іншого
А тут є нормальний код
int sum_rows(int** arr, int rows, int columns)
{
cout << "Product of elements,\nwhich do not contain negative elements:\n";
for (int i = 0; i < rows; ++i)
{
bool flag = false;
int temp_ = 1;
for (int j = 0; j < columns; ++j)
{
if (arr[i][j] < 0)
{
flag = true;
break;
}
temp_ = temp_ * arr[i][j];
}
if (!flag)
{
cout << i + 1 << "row: " << temp_ << endl;
}
else
{
cout << i + 1 << "row: gap" << endl;
}
}
cout << endl;
return 1;
}
void diagonal(int** arr, int rows, int columns)
{
//int sum = 0;
int tempSum = 0;
int maxSum = MIN_INT;
for (int i, k = 1; k < rows; k++)
{
tempSum = 0;
i = 0;
for (int j = k; j < columns; j++)
{
tempSum = tempSum + arr[i][j];
i++;
}
if (maxSum < tempSum)
{
maxSum = tempSum;
}
}
for (int i, k = 1; k < rows; k++)
{
tempSum = 0;
i = k;
for (size_t j = 0; j < columns - k; j++)
{
tempSum = tempSum + arr[i][j];
i++;
}
if (maxSum < tempSum)
{
maxSum = tempSum;
}
}
cout << "maximum among the sums of the elements of the diagonals,parallel to the main diagonal of the matrix:\n";
cout << maxSum << endl;
system("PAUSE");
}
Такс вибачаюся за мої бздури але ось гарний код
▼Прихований текст
Vidtcuv peredoz Vajliv zamistj Foriv.
1. flag - погане ім'я для прапорця. Може, краще negativeFound?
2. temp_ - ще гірше. Це ж добуток, product, правильно? А _ в кінці що покликано означати? Іноді так позначають елементи класу, але ж це не той випадок.
3. Використовуйте += і *=, це зручно.
4. Якщо функція завжди повертає 1, то нащо це значення потрібне? Повертайте void, на return-і зекономите. Або, оскільки це C++, повертайте std::vector з добутками, обчислювати і виводити в одній функції - погано. Хоча з пропусками тоді щось треба робити.
5. Маленька таємниця:
if (maxSum < tempSum)
{
maxSum = tempSum;
}
значно красивіше записується як
maxSum = std::max(maxSum, tempSum);
Ну і в цілому переходьте вже на std::vector та std::string, якщо ви на C++ пишете.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися