मैं अपने प्रोग्राम 2 डी-सरणी में उपयोग करके नाबालिगों को प्राप्त करने के लिए मैट्रिक्स के शून्य को स्थानांतरित करने का प्रयास कर रहा हूं। 2d-सरणी के तत्वों को सही ढंग से कैसे हटाएं (शिफ्ट) करें?
मुझे पता है कि इस समस्या को 1d-सरणी के साथ इसके तत्व की अनुमति देकर कैसे संभालना है
for (int i = DEL; i < (SIZE - 1); i++)
array[i] = array[i + 1];
जहां DEL - तत्व का सूचकांक, जिसे हम हटाना चाहते हैं, SIZE - सरणी का आकार। लेकिन मुझे बहुआयामी-सरणी के साथ समान परिणाम नहीं मिला है:
for (int i = DEL; i < (SIZE - 1); i++)
for (int j = DEL; j < (SIZE - 1); j++)
array[i][j] = array[i+1][j+1];
गलती कहाँ है?
#include <iostream>
using namespace std;
int main()
{
int array[3][3] = {
1, 2, 3,
4, 5, 6,
7, 8, 9};
// Setting to zero 2nd row and 3rd column
int m = 1; // 2
int n = 2; // 3
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
array[m][j] = 0;
array[i][n] = 0;
cout << array[i][j];
// Trying to shift every element, which equals zero
if (array[i][j] == 0)
for (int k = i; k < 2; k++)
for (int l = j; l < 2; l++)
array[k][l] = array[k+1][l+1];
}
cout << endl;
}
cout << endl;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
cout << array[i][j];
cout << endl;
}
}
मुझे समझ आ गया:
120
000
780
120
000
780
लेकिन असल में मैं चाहता हूं कि आखिरी आउटपुट ऐसा हो:
120
780
000
1 उत्तर
मुझे लगता है कि "परम्यूटिंग" शब्द यहां फिट नहीं है। आप 2 आयामी सरणी से पंक्तियों और स्तंभों को हटाना चाहते हैं।
हालाँकि आपने कुछ शब्दार्थ त्रुटियाँ की हैं। मैंने इसे आपके लिए ठीक कर दिया है और आपको नीचे सही कोड दिखा रहा हूं।
एक बड़ी सलाह। एक बड़ी समस्या को कई छोटी समस्याओं में बदलने का प्रयास करें। आप लूप के लिए बहु-नेस्टेड में बहुत अधिक प्रयास कर रहे हैं। एक के बाद एक करें।
कृपया देखें:
#include <iostream>
constexpr size_t MaxArraySize = 3;
int main()
{
int array[MaxArraySize][MaxArraySize] = {
1, 2, 3,
4, 5, 6,
7, 8, 9 };
// Setting to zero 2nd row and 3rd column
int rowToDelete = 1; // 2
int colToDelete = 2; // 3
// Set cell to delete to 0
for (int row = 0; row < MaxArraySize; ++row)
{
for (int col = 0; col < MaxArraySize; ++col)
{
array[rowToDelete][col] = 0;
array[row][colToDelete] = 0;
std::cout << array[row][col];
}
std::cout << '\n';
}
// First shift all rows
for (int row = rowToDelete; row < MaxArraySize - 1; ++row)
for (int col = 0; col < MaxArraySize; ++col)
array[row][col] = array[row+1][col];
// Then shift all cols
for (int col = colToDelete; col < MaxArraySize-1; ++col)
for (int row = 0; row < MaxArraySize; ++row)
array[row][col] = array[row][col+1];
// Set the cells that were shifted away to 0
for (int row = 0; row < MaxArraySize; ++row)
array[row][MaxArraySize - 1] = 0;
for (int col = 0; col < MaxArraySize; ++col)
array[MaxArraySize - 1][col] = 0;
// Show result
std::cout << "\n\nResult\n\n";
for (int row = 0; row < MaxArraySize; ++row)
{
for (int col = 0; col < MaxArraySize; ++col)
std::cout << array[row][col];
std::cout << '\n';
}
}
दूसरा और इससे भी महत्वपूर्ण। आप सादे सी-स्टाइल सरणियों के साथ सादे सी कोड का उपयोग कर रहे हैं। आपके कोड में केवल C++ iostreams का उपयोग कर रहा है। यह इतना अच्छा नहीं है।
सी ++ का उपयोग करने का प्रयास करें। कभी भी सादे सी-स्टाइल सरणी का उपयोग न करें। एसटीएल से एल्गोरिदम और कंटेनरों का उपयोग करने का प्रयास करें। चर के लिए बेहतर नामों का प्रयोग करें।
कोड का परिणामी टुकड़ा अति सरल होगा। और यहां हम वास्तव में पंक्तियों और स्तंभों को हटा रहे हैं। कृपया देखें:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
// Lambda for printing the matric to std::cout
auto print = [](std::vector<std::vector<int>> & m) {
std::for_each(m.begin(), m.end(), [](std::vector<int> & vi) { std::copy(vi.begin(), vi.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n'; });
};
// You can add whatever values.
std::vector<std::vector<int>> matrix {
{11, 12, 13, 14},
{15, 16, 17, 18},
{19, 20, 21, 22},
{23, 24, 25, 26}
};
// Show initial data
std::cout << "\n\nInitial matrix:\n";
print(matrix);
constexpr size_t RowToDelete = 1; // Row 2
constexpr size_t ColToDelete = 2; // Column3
// Erase row
matrix.erase(matrix.begin() + RowToDelete);
// Erase column in each row
std::for_each(matrix.begin(),matrix.end(), [ColToDelete](std::vector<int> & vi) { vi.erase(vi.begin() + ColToDelete); });
// Show result
std::cout << "\n\nResulting matrix with deleted row " << RowToDelete+1 << " and deleted column " << ColToDelete+1 << '\n';
print(matrix);
return 0;
}
उम्मीद है की यह मदद करेगा । . .
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।