Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabenblatt3_Aufgabe3(CCS und CRS)
In der dritte Spalte von Matrix A stehen alle Stellen “0”. Um diese Situation genau darzustellen, was soll man in col_ptr entsprechend machen?
Da der Pointer immer auf den nächsten Wert im Value-Array zeigt und der sich in einer 0-Spalte nicht ändert, sind die col_ptr-Einträge für die 0-Spalte und für die folgende Spalte gleich.
sollten dann nicht die col_ptr-Einträge von der 0-Spalte und der vorherigen Spalte gleich sein? Also ich weiß es selbst nicht, aber ich ha gedacht das wäre logischer. wenn ich die matrix befülle, dann würde ich ja nach deinem system erst die einträge der folgenden spalte in die der 0-Spalte schreiben, und dann bei dem nächsten col_ptr-Wert feststellen, dass ich die einträge wieder =0 setzen muss, weil der nächste eintrag gleich ist.
Ich hoffe man kann verstehen was ich meine
EDIT: Hab nochmal nachgesehen, also so wie du es erklärt hast stimmt es auch, Dalek. Allerdings bin ich mir nicht sicher, warum man es nicht anders herum macht?
Es ist so leichter zu programmieren.
Wenn du z.B. den Eintrag an der Stelle (1, 2) in der Matrix haben willst, nimmst du dir den Eintrag des col_ptr an der Stelle 2 als Laufvariable und prüfst nur solange, bis die Laufvariable gleich dem nächsten Eintrag ist. Da der Pointer immer auf den ersten Eintrag zeigt, wird bei diesem begonnen. Wenn es keinen Eintrag gibt (Nullspalte), bricht die Schleife gleich beim ersten Prüfen der Bedingung ab und du weißt sofort, dass dort eine Nullspalte ist.
Ansonsten werden alle Werte in der Spalte durchlaufen, bis (in diesem Fall) die Zeile mit Index 1 gefunden wurde (falls dort denn ein Wert != 0 steht).
Beispielcode für die Stelle (1,2):
int k = col_ptr[2];
while (k < col_ptr[3]) {
if (row_index[k] == 1) {
return value[k];
}
k++;
}
return 0;