Предмет: Информатика, автор: Bollywood77

c++
написать проверку на то, входит ли первый массив во второй и наоборот. массивы вводит пользователь.


settom: тогда еще вопрос, размеры массивов изначально вводятся с клавиатуры и потом заполняются?
Bollywood77: так точно
settom: то что меньший входит в больший уже упрощает работу
settom: ни слова больше)) теперь всё понятно, сейчас немного подредактирую
Bollywood77: буду безумно благодарен
settom: лучшего ответа будет достаточно))
settom: 15-20 мин
vshershunvalera: Помоги с Лабораторными на странице умоляю
vshershunvalera: Очень надо
vshershunvalera: Срочно

Ответы

Автор ответа: NqVixer
0

Ответ:

#include <iostream>

#include <Windows.h> //локализация

using namespace std;

int main()

{

SetConsoleCP(1251); //локализация

SetConsoleOutputCP(1251);

short size{};

cout << "Введите размер массивов: ";

cin >> size;

int* arrA = new int[size];

int* arrB = new int[size];

cout << "\nВведите элементы первого массива:\n";

for (int i = 0; i < size; i++)

 cin >> arrA[i];

cout << "\nВведите элементы второго массива:\n";

for (int i = 0; i < size; i++)

 cin >> arrB[i];

for (int i = 0; i < size; i++)

{

 for (int j = 0; j < size; j++)

 {

  if (arrB[i] == arrA[j]) //если значение элемента в массиве B найдётся в массиве A

  {

   int numOfRepeatsA{}, numOfRepeatsB{};

   for (int l = 0; l < size; l++) //подсчитываем количество повторений этих элементов

   {

    if (arrB[i] == arrB[l])

     numOfRepeatsB++;

    if (arrB[i] == arrA[l])

     numOfRepeatsA++;

   }

   if (numOfRepeatsA == numOfRepeatsB) //если элемент повторяется в массиве A столько же раз, сколько и в массиве B

    break; //переходим к проверке следующего элемента

   else //иначе очищаем память и завершаем программу, т.к. если хотя бы 1 элемент не прошёл проверку == дальше проверять нет смысла

   {

    cout << "\nМассивы не входят друг в друга";

    delete[] arrA;

    delete[] arrB;

    return 0;

   }

  }

 }

}

cout << "\nМассивы входят друг в друга"; //если в цикле программа не завершилась, значит ответ положительный

delete[] arrA;

delete[] arrB;

return 0;

}


Bollywood77: не работает коректно. к тому же надо, чтобы массивы моглы быть разных размеров
settom: в с++ локализация включается setlocale(LC_ALL, "rus"); без всякий windows.h
Bollywood77: https://znanija.com/task/45675362 с данного задания код подходит, вот только как сделать, чтобы массивы могли быть разных размеров, а не два одинаковых
Автор ответа: settom
1

Основное действие оставил функцией, так как проще потом осуществлять вызов в зависимости от того, какой массив больше

Ответ (вариант исполнения 1):

#include <iostream>

using namespace std;

bool IsInclude(int* Find, int* Suorce, int sizeFind, int sizeSuorce);

int main()

{

int *A, *B, NA, NB;

setlocale(LC_ALL, "rus");

bool result;

cout << "Введите количество элементов первого массива: ";

cin >> NA;

A = new int[NA];

cout << "Введите элементы массива: " << endl;;

for (int i = 0; i < NA; i++) { cout << "A["<< i << "] = "; cin >> A[i]; }

cout << "Введите количество элементов второго массива: ";

cin >> NB;  

B = new int[NB];

cout << "Введите элементы массива: " << endl;;

for (int i = 0; i < NB; i++) { cout << "B[" << i << "] = "; cin >> B[i]; }

//Тепеь смотрим какой массив длиннее и в зависимости от этого запускаем функцию по разному

if (NA > NB)

{

 result = IsInclude(B, A, NB, NA);

 if (result) cout << "Массив B входит в массив A";

 else cout << "Массив B не входит в массив A";

}

else {

 result = IsInclude(A, B, NA, NB);

 if (result) cout << "Массив A входит в массив B";

 else cout << "Массив A не входит в массив B";

}

delete[] A;

delete[] B;

return 0;

}

bool IsInclude(int* Find, int* Suorce, int sizeFind , int sizeSuorce)

{

int CountInSuorce, CountInFind;

for (int i = 0; i < sizeFind; i++) { // Перебираем по одному все элементы меньшего массива  

 CountInSuorce = 0;

 CountInFind = 0;

 for (int j = 0; j < sizeSuorce; j++)

 {

  if (Find[i] == Find[j] && j < sizeFind) CountInFind++; // Считаем сколько раз элемент искомого массива находится в нём самом

  if (Find[i] == Suorce[j]) CountInSuorce++; // Считаем сколько раз элемент искомого массива встретился в большем массиве

 }

 if (CountInFind > CountInSuorce) return false;// Если счётчик элементов в искомом массиве оказался больше чем в большем массиве, значит выходим и дальше не имеет смысла искать

}

return true;// Если счётчики большего массива были всегда не меньше счетчика искомого массива, то мы попадём сюда и меньший массив можно составить из элементов большего

}

Ответ (вариант исполнения 2):

#include <iostream>

using namespace std;

int IsInclude(int* First, int FirstCount, int* Second, int SecondCount);

int main()

{

int* A, * B, NA, NB;

setlocale(LC_ALL, "rus");

int result;

cout << "Введите количество элементов первого массива: ";

cin >> NA;

A = new int[NA];

cout << "Введите элементы массива: " << endl;;

for (int i = 0; i < NA; i++) { cout << "A[" << i << "] = "; cin >> A[i]; }

cout << "Введите количество элементов второго массива: ";

cin >> NB;

B = new int[NB];

cout << "Введите элементы массива: " << endl;

for (int i = 0; i < NB; i++) { cout << "B[" << i << "] = "; cin >> B[i]; }

result = IsInclude(A, NA, B, NB);

switch (result) {

 case 0: {cout << "Массивы A и B не входят друг в друга"; break; }

 case 1: {cout << "Массивы A и B имеют одинаковые элементы"; break; }

 case 2: {cout << "Массив A входит в массив B"; break; }

 case 3: {cout << "Массив B входит в массив A"; break; }

}

delete[] A;

delete[] B;

return 0;

}

int IsInclude(int* First, int FirstCount, int* Second, int SecondCount) // возвращаем 0 если массив не входид в другой, 1 если они одинаковые, 2 если первый входит во второй, 3 если второй входит в первый

{

int *Source, * Find, sizeSource, sizeFind, CountInSource, CountInFind;

bool Equal; // Флаг того что элементы одинаковые

bool AandB = FirstCount > SecondCount;

if(AandB)

{

 Source = First;

 sizeSource = FirstCount;

 Find = Second;

 sizeFind = SecondCount;

}

else  

{

 Find = First;

 sizeFind = FirstCount;

 Source = Second;

 sizeSource = SecondCount;

}

if (sizeFind == sizeSource) Equal = true;

else Equal = false;

for (int i = 0; i < sizeFind; i++) { // Перебираем по одному все элементы меньшего массива  

 CountInSource = 0;

 CountInFind = 0;

 for (int j = 0; j < sizeSource; j++)

 {

  if (Find[i] == Find[j] && j < sizeFind) CountInFind++; // Считаем сколько раз элемент искомого массива находится в нём самом

  if (Find[i] == Source[j]) CountInSource++; // Считаем сколько раз элемент искомого массива встретился в большем массиве

 }

 if (CountInFind > CountInSource) return 0;// Если счётчик элементов в искомом массиве оказался больше чем в большем массиве, значит выходим и дальше не имеет смысла искать

 if (CountInFind != CountInSource) Equal = false; // Если количество в искомом и большом получилось различное, то сбрасываем флаг

}

// Если счётчики большего массива были всегда не меньше счетчика искомого массива, то мы попадём сюда и меньший массив можно составить из элементов большего

if (Equal) return 1; // если флаг не сброшен, то возврвщаем 1

if (!Equal && AandB) return 3; // если флаг не сброшен, то возврвщаем 1

else return 2;

}


settom: #include
using namespace std;
int IsInclude(int* First, int FirstCount, int* Second, int SecondCount);
int main()
{
int* A, * B, NA, NB;
setlocale(LC_ALL, "rus");
int result;
cout << "Введите количество элементов первого массива: ";
cin >> NA;
settom: A = new int[NA];
cout << "Введите элементы массива: " << endl;;
for (int i = 0; i < NA; i++) { cout << "A[" << i << "] = "; cin >> A[i]; }
cout << "Введите количество элементов второго массива: ";
cin >> NB;
B = new int[NB];
cout << "Введите элементы массива: " << endl;
for (int i = 0; i < NB; i++) { cout << "B[" << i << "] = "; cin >> B[i]; }
settom: result = IsInclude(A, NA, B, NB);
switch (result) {
case 0: {cout << "Массивы A и B не входят друг в друга"; break; }
case 1: {cout << "Массивы A и B имеют одинаковые элементы"; break; }
case 2: {cout << "Массив A входит в массив B"; break; }
case 3: {cout << "Массив B входит в массив A"; break; }
}
delete[] A;
delete[] B;
return 0;
}
settom: int IsInclude(int* First, int FirstCount, int* Second, int SecondCount) // возвращаем 0 если массив не входид в другой, 1 если они одинаковые, 2 если первый входит во второй, 3 если второй входит в первый
{
int *Source, * Find, sizeSource, sizeFind, CountInSource, CountInFind;
bool Equal; // Флаг того что элементы одинаковые
bool AandB = FirstCount > SecondCount;
if(AandB)
{
Source = First;
sizeSource = FirstCount;
Find = Second;
sizeFind = SecondCount;
}
settom: else
{
Find = First;
sizeFind = FirstCount;
Source = Second;
sizeSource = SecondCount;
}

if (sizeFind == sizeSource) Equal = true;
else Equal = false;
settom: for (int i = 0; i < sizeFind; i++) { // Перебираем по одному все элементы меньшего массива
CountInSource = 0;
CountInFind = 0;
for (int j = 0; j < sizeSource; j++)
{
if (Find[i] == Find[j] && j < sizeFind) CountInFind++; // Считаем сколько раз элемент искомого массива находится в нём самом
if (Find[i] == Source[j]) CountInSource++; // Считаем сколько раз элемент искомого массива встретился в большем массиве
}
settom: if (CountInFind > CountInSource) return 0;// Если счётчик элементов в искомом массиве оказался больше чем в большем массиве, значит выходим и дальше не имеет смысла искать
if (CountInFind != CountInSource) Equal = false; // Если количество в искомом и большом получилось различное, то сбрасываем флаг
}
settom: // Если счётчики большего массива были всегда не меньше счетчика искомого массива, то мы попадём сюда и меньший массив можно составить из элементов большего
if (Equal) return 1; // если флаг не сброшен, то возврвщаем 1
if (!Equal && AandB) return 3; // если флаг не сброшен, то возврвщаем 1
else return 2;
}
settom: Вот это всё собрать в одно
settom: #include iostream только в начале
Похожие вопросы
Предмет: Русский язык, автор: sss7771
Предмет: Немецкий язык, автор: ALEKS53533
Bei Eisenach in Thüringen steht auf einem Felsen eine alte Burg aus dem 11. Jahrhundert, die Wartburg. Man nannte sie früher den „Mittelpunkt Punkt“ Deutschlands. Im Jahr 1521 hat dort Martin Luther das Neue Testament ins Deutsche übersetzt. Kein anderes Buch hat die deutsche Sprache so stark geprägt wie Luthers Übersetzung der Bibel.
Martin Luther war Professor für Theologie an der kleinen Universität Wittenberg in Sachsen. Er war mit der Kirche in Konflikt geraten, weil er eine neue Lehre verkündete. „Von der Freiheit eines Christenmenschen“ war der Titel einer seiner Schriften. Frei zu sein von den Gesetzen der alten Kirche und vor allem frei zu sein von der Herrschaft des Papstes in Rom – das war es, was Luther mit dieser Freiheit meinte. Aber was sollten die Christen glauben, wenn viele Gesetze der alte Kirche unrecht und viele ihrer Lehren falsch waren? Die einzige Quelle des Glaubens – so lehrt Luther ist die Bibel.
Eine gute deutsche Bibel gab es aber damals nicht. Zwar gab es Übersetzungsversuche aus dem Lateinischen, aber die waren ungenau und für viele kaum zu verstehen. Luther stand also vor einer schwierigen Aufgabe: Er musste die Bibel neu ins Deutsche übersetzen.
Aber was hieß „ins Deutsche“? Das Volk sprach Dialekte. Leute aus dem Norden und dem Süden Deutschlands verstanden einander, wie wir von Luther selbst wissen, fast nicht. Nur die Gebildeten konnten sich leicht verständigen: ihre internationale Sprache war das Latein.
Die Lutherbibel wurde ein Meisterwerk und zugleich das erfolgreichste Buch in deutscher Sprache bis zum heutigen Tag.Die Sprache Luthers hat die deutsche Hochsprache gepragt, wie wir sie heute sprechen und schreiben. Viele Redewendungen und Sprichworter stammen aus der Lutherbibel, z. B. „Das Werk lobt den Meister. Zahlreiche Worter hat Luther neu geschaffen: ,,gastfrei“,,,Herzenslust“; andere wurden durch Luther in die Schriftsprache aufgenommen, ebenso das schone Wort „die Muttersprache".

Mitten in der Zeit des Zerfalls2 des mittelalterlichen deutschen Reiches legte Luther die Grundlage fur eine gemeinsame deutsche Sprache und eine gemeinsame deutsche Kultur.
Предмет: Математика, автор: Арман051