Составить подпрограмму, которая заменяет в двумерном массиве четные элементы на нули.
Проверить, будут ли равны два массива A и B после применения к ним этой подпрограммы.
Формат входных данных
В первой строке входного файла содержится два натуральных числа n и m (1<=n,m<=100) - размерности массивов.
Далее в n строках записано по m целых чисел - элементы массива A. Далее в таком же формате задан массив B.
Все числа в массивах натуральные и не превосходят 10000.
Формат выходных данных
Выведите в выходной файл "YES" (без кавычек), если массивы совпадут после преобразования, и "NO" в противном случае.
C/C++
Программирование на языке C++
#include <iostream>
#include <tuple>
#include <string>
#include <fstream>
using namespace std;
using matrix_t = tuple<int**, size_t, size_t>;
int* vector(const size_t length) {
return new (nothrow) int[length];
}
int** matrix(const size_t rows, const size_t cols) {
auto ptr = new (nothrow) int*[rows];
if (ptr) {
for (auto i = 0U; i < rows; ++i) {
ptr[i] = vector(cols);
if (ptr[i] == nullptr) {
for (auto j = 0U; j < i; ++j) {
if (ptr[i] != nullptr) {
delete[] ptr[i];
}
}
delete[] ptr;
ptr = nullptr;
}
}
}
return ptr;
}
int** destroy(int** ptr, const size_t rows) {
if (ptr) {
for (auto i = 0U; i < rows; ++i) {
if (ptr[i] != nullptr) {
delete[] ptr[i];
}
}
delete[] ptr;
ptr = nullptr;
}
return ptr;
}
void even_to_zeros(int* ptr, const size_t letgth) {
for (auto i = 0U; i < letgth; ++i) {
if (~ptr[i] & 1) {
ptr[i] = 0;
}
}
}
void even_to_zeros(int** ptr, const size_t rows, const size_t cols) {
for (auto i = 0U; i < rows; ++i) {
even_to_zeros(ptr[i], cols);
}
}
bool compare(matrix_t a, matrix_t b) {
if (a == b) return true;
auto [pa, na, ma] = a;
auto [pb, nb, mb] = b;
if (na != nb || ma != mb) return false;
for (auto i = 0U; i < na; ++i) {
for (auto j = 0U; j < ma; ++j) {
if (pa[i][j] != pb[i][j]) {
return false;
}
}
}
return true;
}
int main() {
// Имя входного файла или путь к нему вводится с клавиатуры
cout << "Path: ";
string path;
cin >> path;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
ifstream file(path);
if (file.is_open()) {
size_t n, m;
int** a = nullptr;
int** b = nullptr;
file >> n >> m;
a = matrix(n, m);
b = matrix(n, m);
if (a && b) {
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < m; ++j) {
file >> a[i][j];
}
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < m; ++j) {
file >> b[i][j];
}
}
}
file.close();
if (a && b) {
even_to_zeros(a, n, m);
even_to_zeros(b, n, m);
auto res = compare({ a, n, m }, { b, n, m }) ? "YES" : "NO";
puts(res);
}
a = destroy(a, n);
b = destroy(b, n);
}
system("pause > nul");
}
#include <tuple>
#include <string>
#include <fstream>
using namespace std;
using matrix_t = tuple<int**, size_t, size_t>;
int* vector(const size_t length) {
return new (nothrow) int[length];
}
int** matrix(const size_t rows, const size_t cols) {
auto ptr = new (nothrow) int*[rows];
if (ptr) {
for (auto i = 0U; i < rows; ++i) {
ptr[i] = vector(cols);
if (ptr[i] == nullptr) {
for (auto j = 0U; j < i; ++j) {
if (ptr[i] != nullptr) {
delete[] ptr[i];
}
}
delete[] ptr;
ptr = nullptr;
}
}
}
return ptr;
}
int** destroy(int** ptr, const size_t rows) {
if (ptr) {
for (auto i = 0U; i < rows; ++i) {
if (ptr[i] != nullptr) {
delete[] ptr[i];
}
}
delete[] ptr;
ptr = nullptr;
}
return ptr;
}
void even_to_zeros(int* ptr, const size_t letgth) {
for (auto i = 0U; i < letgth; ++i) {
if (~ptr[i] & 1) {
ptr[i] = 0;
}
}
}
void even_to_zeros(int** ptr, const size_t rows, const size_t cols) {
for (auto i = 0U; i < rows; ++i) {
even_to_zeros(ptr[i], cols);
}
}
bool compare(matrix_t a, matrix_t b) {
if (a == b) return true;
auto [pa, na, ma] = a;
auto [pb, nb, mb] = b;
if (na != nb || ma != mb) return false;
for (auto i = 0U; i < na; ++i) {
for (auto j = 0U; j < ma; ++j) {
if (pa[i][j] != pb[i][j]) {
return false;
}
}
}
return true;
}
int main() {
// Имя входного файла или путь к нему вводится с клавиатуры
cout << "Path: ";
string path;
cin >> path;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
ifstream file(path);
if (file.is_open()) {
size_t n, m;
int** a = nullptr;
int** b = nullptr;
file >> n >> m;
a = matrix(n, m);
b = matrix(n, m);
if (a && b) {
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < m; ++j) {
file >> a[i][j];
}
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < m; ++j) {
file >> b[i][j];
}
}
}
file.close();
if (a && b) {
even_to_zeros(a, n, m);
even_to_zeros(b, n, m);
auto res = compare({ a, n, m }, { b, n, m }) ? "YES" : "NO";
puts(res);
}
a = destroy(a, n);
b = destroy(b, n);
}
system("pause > nul");
}
#include "stdio.h"
void zeroing_even_elements(int** A, int n, int m);
int main()
{
FILE* F;
fopen_s(&F, "input.txt", "r");
int n, m;
fscanf_s(F, "%d %d", &n, &m);
int i, j;
int** A = new int* [n + 1];
for (i = 1; i <= n; i++)
*(A + i) = new int[m + 1];
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
fscanf_s(F, "%d", *(A + i) + j);
int** B = new int* [n + 1];
for (i = 1; i <= n; i++)
*(B + i) = new int[m + 1];
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
fscanf_s(F, "%d", *(B + i) + j);
fclose(F);
zeroing_even_elements(A, n, m);
zeroing_even_elements(B, n, m);
fopen_s(&F, "output.txt", "w");
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (*(*(A + i) + j) != *(*(B + i) + j))
{
fprintf(F, "NO");
i = n + 1;
break;
}
if ((i > n) && (j > m))
fprintf(F, "YES");
fclose(F);
for (i = 1; i <= n; i++)
{
delete[] * (A + i);
delete[] * (B + i);
}
return 0;
}
void zeroing_even_elements(int** A, int n, int m)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (*(*(A + i) + j) % 2 == 0)
*(*(A + i) + j) = 0;
}
void zeroing_even_elements(int** A, int n, int m);
int main()
{
FILE* F;
fopen_s(&F, "input.txt", "r");
int n, m;
fscanf_s(F, "%d %d", &n, &m);
int i, j;
int** A = new int* [n + 1];
for (i = 1; i <= n; i++)
*(A + i) = new int[m + 1];
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
fscanf_s(F, "%d", *(A + i) + j);
int** B = new int* [n + 1];
for (i = 1; i <= n; i++)
*(B + i) = new int[m + 1];
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
fscanf_s(F, "%d", *(B + i) + j);
fclose(F);
zeroing_even_elements(A, n, m);
zeroing_even_elements(B, n, m);
fopen_s(&F, "output.txt", "w");
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (*(*(A + i) + j) != *(*(B + i) + j))
{
fprintf(F, "NO");
i = n + 1;
break;
}
if ((i > n) && (j > m))
fprintf(F, "YES");
fclose(F);
for (i = 1; i <= n; i++)
{
delete[] * (A + i);
delete[] * (B + i);
}
return 0;
}
void zeroing_even_elements(int** A, int n, int m)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (*(*(A + i) + j) % 2 == 0)
*(*(A + i) + j) = 0;
}
Похожие вопросы
- Стоит ли начинать изучение программированию с языка C?
- Программирование на языках C/C++
- Программирование на языке C++
- Какую тему курсовой выбрать для супер новичка программирования на языке C++?
- Программирование на языке C++. Двухмерные массивы чисел
- Нужна помощь в программировании на языке C++
- Программирование на языке C++
- Программирование на языке C
- Программирование на языке C
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)