| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: C++ Felder Minimum wird in Matrix nicht gefunden im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo HaBo, ich bräuchte mal hilfe bei einer Aufgabe. Hier erstmal die Aufgabe Zitat: 1. Aufgabe: Gegeben sei eine ...
![]() |
| | #1 (permalink) | |
| Senior Member | C++ Felder Minimum wird in Matrix nicht gefunden Anzeige Hallo HaBo, ich bräuchte mal hilfe bei einer Aufgabe. Hier erstmal die Aufgabe Zitat:
Code: #include<iostream>
using namespace std;
int main() {
int matrix[6][12];
//einlesen
cout<<"User eingabe"<<endl;
for(int i=0;i<6;i++)
{
for(int j=0;j<12;j++)
{
cout<<"Matrix["<<i<<"]["<<j<<"]"<<endl;
cin>>matrix[i][j];
// cout<< matrix[i][j];
}
}
//einlesen ende
//minimum
int min[12]; //feld anlegen fuer jedes minimum extra speichern
min[0]=matrix[0][0]; //minimal wert gültig belegen
for(int i=0;i<6;i++)
{
for(int j=0;j<12;j++)
{
// cout<<"Matrix["<<i<<"]["<<j<<"]"<<endl;
if (min[j] > matrix[i][j]) {
min[j]=matrix[i][j];
}
}
}
int k=0;
for(int j=0;j<12;j++)
{
//cout<<"Minimum der einzelnen spalten: min["<<j<<"]"<<endl;
// cout<<min[j]<<endl;
if(min[j]<min[j+1]) k=j;
}
cout<<"Das Minimum liegt in Spalte : "<<k<<endl;
//ausgabe
cout.width(8);
//cout<<"Minimum"<<endl;
for(int j=0;j<12;j++)
{
cout.width(8);
cout<<matrix[k][j];
}
cout<<"Minimum ist:"<<min[k]<<endl;
system("PAUSE");
return 0;
} Kann mir jemand auf die Sprünge helfen? Danke
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world Geändert von Chakky (15.06.11 um 19:05 Uhr) | |
| | |
| | #2 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Nur als Idee: Code: int min[12]; //feld anlegen fuer jedes minimum extra speichern min[0]=matrix[0][0]; Code: if (min[j] > matrix[i][j]) und hier: Zitat:
auf welchen Wert zeigt min[j+1] (also min[12]) ? Andere Idee: Eingabe entweder bei der Initialisierung der Matrix mit Konstanten "simulieren" oder die Matrix zum testen kleiner machen
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 03.04.11 ![]() Likes: 10 | Code: //minimum
int min[12]; //feld anlegen fuer jedes minimum extra speichern
min[0]=matrix[0][0]; //minimal wert gültig belegen
for(int i=0;i<6;i++)
{
for(int j=0;j<12;j++)
{
// cout<<"Matrix["<<i<<"]["<<j<<"]"<<endl;
if (min[j] > matrix[i][j]) {
min[j]=matrix[i][j];
}
}
} Dann belegst du den ersten Eintrag mit einem gültigen Wert: OK. Aber was macht dann überhaupt diese beiden for-Schleifen? Außen nach i iterieren und innen nach j. Der erste Durchlauf: if (min[0] > matrix[0][0]) Zweiter Durchlauf: if (min[1] > matrix[0][1]) Da wir hier bei C/C++ sind passiert bei dem zweiten Durchlauf totaler Quatsch, weil du min[1] nie vorher belegt hast, d.h. es wird jetzt einfach irgendein Wert genommen der beim letzten Mal nutzen des Speichers noch da drin steckt. Du solltest min[1],min[2]...min[11] ebenfalls mit jeweils dem ersten Eintrag der Spalte belegen, damit hast du nur gültige Werte. Dann müsstest du außen j iterieren und innen nach i und überprüfst dann immer für min[j], ob der Wert in matrix[i][j] nicht kleiner ist. Ungefähr so: Code: for(int j=0;j<12;j++) {
for(int i=0;i<6;i++) {
if (min[j] > matrix[i][j]) {
min[j]=matrix[i][j];
}
}
} Geändert von Tsjuder (08.06.11 um 22:17 Uhr) |
| | |
| | #4 (permalink) | ||
| Senior Member Themenstarter | Zitat:
Code: int min[12]; //feld anlegen fuer jedes minimum extra speichern
for (int i=0;i<12;i++)
{
min[i]=matrix[0][i];
} //minimal wert gültig belegen Zitat:
Code: int k=0;
for(int j=12;j>=0;j--)
{
if(min[j] <min[j-1]) k=j;
} Hab jetzt auch mal pseudo zufalls werte eingetragen mit Code: matrix[i][j] = (i*13*j)%4; Nochmal der Komplette Code. Danke euch! Code
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world | ||
| | |
| | #5 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Im alten Code hattest Du noch die Ausgabe Code: cout<<"Minimum der einzelnen spalten: min["<<j<<"]"<<endl; Nur die Suche nach dem Minimum war nicht korrekt. Der jetztige Code: Code: int k=0;
for(int j=12;j>=0;j--)
{
if(min[j] <min[j-1]) k=j;
} wohin zeigt min[j-1], wenn j=0 ist? ![]() Edit: und min[12] gibt es auch nicht Was spricht gegen die "klassische" Vorgehensweise? Code: my_super_min = min[0];
for i=0 to i<len(min):
if my_super_min > min[i] then:
my_super_min = min[i]; Code: int k=0;
for(int j=11;j>=0;j--)
{
if(min[j] <min[k]) k=j;
}
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. Geändert von CDW (08.06.11 um 23:12 Uhr) Grund: Rechtschreipunk |
| | |
| | #6 (permalink) |
| Registriert seit: 03.04.11 ![]() Likes: 10 | Code: for(int j=12;j>=0;j--)
{
if(min[j] <min[j-1]) k=j;
} 2. Problem wenn j = 0 dann ist min[j-1] = min[-1] Iteriere doch einfach wieder von 1-12 und überprüfe min[k] < min[j]. Du wählst also als ersten Index k = 0 und in der If-Anweisung wird überprüft, ob der Wert im min Array an der Stelle 0 größer als der an der Stelle min[j] ist, wenn dem so ist, ist dein neues Minimum an der Stelle min[j] und damit setzt du k = j, weil das der neue Index ist (hast du ja auch gemacht). EDIT: Da war wohl jemand schneller ![]() EDIT2: Sehe gerade bei mir ist kleiner Zeichen falsch: Da wir das Minimum suchen natürlich min[k] > min[j] Geändert von Tsjuder (08.06.11 um 23:09 Uhr) |
| | |
| | #7 (permalink) |
| Registriert seit: 06.06.09 ![]() Likes: 6 | Ist zwingend eine komplett eigene Lösung gefordert? Wenn nicht schau dir doch mal min_element() und max_element() an. Wenn doch würde ich es gar nicht so kompliziert machen und dir einen ähnlichen Lösungsansatz wie CDW empfehlen. Suche nur das globale Minimum und merke dir zum aktuellen bisherigen Minimum die Zeile in der es steht. Dann musst du nicht mit dem min-Array herum hantieren. Macht es in meinen Augen nur unnötig kompliziert. Code: int min = matrix[0][0];
int min_zeile = 0;
for( int i=0; i<6; ++i )
{
for( int j=0; j<12; ++j )
{
if( matrix[i][j] < min )
{
min = matrix[i][j];
min_zeile = i;
}
}
}
__________________ A good programmer looks both ways before crossing a one-way street. Die Politik kann uns nur für so dumm verkaufen, wie wir sind. |
| | |
| | #8 (permalink) |
| Senior Member Themenstarter | ich danke euch erstmal ganz sehr. ich probier dass heute nachmittag alles nochmal aus. ich glaube ich werden euch noch mit mehr fragen konfrontieren hab noch ein paar aufgaben vor mir zur klausur vorbereitungen.... der ansatz mit den standard funktionen ist leider verboten in der klausur und man muss immer seinen eigenen kram benutzen. vielen dank erstmal!
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |