2016-04-21 12 views
0

Ich brauche das kleinste Element jeder Spalte. Meine Matrix ist 250x6, was gedruckt wird, ist die letzte Zeile der Matrix.Min/Max Element des 2D-Arrays

+0

sein ein Duplikat ok http://stackoverflow.com/questions/34210401/finding-the-maximum-value-of-every-row-in-2d-array -c – piyushj

+0

Innerhalb der Zeilenschleife müssen Sie min und max anstelle von allmin und allmax aktualisieren, da min und max immer nur die gleichen maximalen und minimalen Gleitkommawerte beibehalten. Dann, nach der inneren Schleife, update allmin und allmax mit den Werten von min und max. Stellen Sie außerdem sicher, dass Sie min und max innerhalb der äußeren Schleife initiieren, damit sie die Werte der vorherigen Spalten nicht übernehmen. –

+0

In der ersten Schleife min max initialisieren: min = Matrix [0] [y]; max = Matrix [0] [y]; –

Antwort

2

Sie benötigen zwei Korrekturen:

Sie nicht die gleiche Variable für jede Ihrer Spalten verwenden, aber eine andere, wie direkt Ihre allmin und allmax Reihe.

Initialisieren Sie es vor dem Eintritt in die Schleife. Eine klassische Lösung besteht darin, sie mit dem ersten Element der Zeile zu initialisieren und jedes nächste in der Schleife zu überprüfen.

for(int y = 0; y < column; y++) 
    { 
    allmin[y] = matrix[0][y]; 
    allmax[y] = matrix[0][y]; 
    for(int x = 1; x < row; x++) 
     { 
     allmin[y] = std::min(matrix[x][y], allmin[y]); 
     allmax[y] = std::max(matrix[x][y], allmax[y]); 
     } 

    cout << "Mins " << allmin[y] << "\n"; 
} 
+0

Es gibt jedoch Werte zurück, die nicht in der Matrix vorhanden sind. Ich habe Werte von 1 bis 5000 mit 2 Gleitpunkte und es kehrt Min 7.18866e-43 Min 0 -7.85255e Min + 06 Min 4.57692e-41 Min 1.68436e-42 Min 3.05483e-43 –

0

Da Anweisung allmin[y] = std::min(matrix[x][y], min); der matrix[x][y] is always small than min (std :: :: numeric_limits max()) , so when internal loop execute, allmin [y] is updated to ·matrix[x][y] alle Zeiten, so schließlich zu allmin[y]matrix[259][y] (dem letzten Spalte des y row) aktualisiert werden, . allmax[y] = std::max(matrix[x][y], max); hat die gleiche Frage.

sollten Sie Ihren Code ändern in `` ` Float allmin [Spalte]; float allmax [Spalte]; Gleitkomma min = std :: numeric_limits :: max(); Gleitkomma max = std :: numeric_limits :: min();

for(int y = 0; y < column; y++) 
{ 
    allmin[y] = min 
    allmax[y] = max 
    for(int x = 0; x < row; x++) 
    { 
     allmin[y] = std::min(matrix[x][y], allmin[y]); //allmin[y] always store the min value has meet before 
     allmax[y] = std::max(matrix[x][y], allmax[y]); //allmax[y] always store the max value has meet before 
    } 

    cout << "Mins " << allmin[y] << "\n"; 
} 

Das alles wird