Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Habe eine Aufgabe erhalten und mir fehlt der Ansatz..

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.12.2017, 17:03 Uhr
NicoOst



Hallo an alle,
bei eine erhaltenen Aufgabe fehlt mir der Ansatz, wie ich heranzugehen habe..
Vielleicht denke ich auch einfach zu kompliziert. Ich wäre über jede Hilfe dankbar.


C++:

struct Matrix {
    int rows; // number of rows
    int cols; // number of columns
    double** data; // a pointer to an array of n_rows pointers to rows; a row is an array of n_cols doubles
};
typedef struct Matrix Matrix;

/**
Creates a zero-initialized matrix of rows and columns matrix.
@param[in] n_rows number of rows
@param[in] n_cols number of columns
@return a pointer to an array of n_rows pointers to rows; a row is an array of n_cols doubles
*/

Matrix* make_matrix(int n_rows, int n_cols) {
  
    return NULL;
}



Das ist der Codeteil zu der folgenden Aufgabe:

Aufgabe:
Das Template für diese Aufgabe ist matrix.c. In dieser Aufgabe geht es um dynamisch allokierte Matrizen. Eine Matrix wird durch einen Zeiger auf eine struct Matrix repräsentiert. Diese Struktur enthält die Angabe der Anzahl von Zeilen und Spalten sowie einen Zeiger auf ein C-Array, das Zeiger auf die Zeilen der Matrix enthält. Jede Zeile der Matrix ist ein C-Array mit Elementen vom Typ double. Die Zeilen und Spalten der Matrix sollen dynamisch allokiert werden. Verwenden Sie xcalloc/xmalloc und free zur dynamischen Anforderung bzw. Freigabe von Speicher. Der dynamisch angeforderte Speicher soll vor dem Ende des Programms auch wieder freigegeben werden.

a) Implementieren Sie die Funktion make_matrix, die dynamisch eine Matrix mit der entsprechenden Anzahl Zeilen und Spalten erzeugt, die Elemente mit 0 initialisiert und einen Zeiger auf die erzeugte Matrix zurückgibt.



Ich weiß nicht genau was ich bei a wirklich tun soll.. da wir bzw ich etwas in dieser Form noch nicht gemacht habe..Weil meiner Meinung nach brauche ich ja ein 2 dimensionales Array z.B.
a [5][3]. Jedoch habe ich keinen Schimmer wie ich diesen mit xmallac bzw. xcalloc allokiere.. Und wie ich dann den Zeiger auf diese Matrix ausgebe..

-----
Edit: code-Tags durch cpp-Tags ersetzt

Dieser Post wurde am 18.12.2017 um 19:34 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.12.2017, 19:46 Uhr
ao

(Operator)


Du sollst zuerst den Speicher für die Row-Pointer holen und in data speichern. Danach sollst du N-mal den Speicher für eine Zeile holen und jeweils einem Row-Pointer zuweisen. Für eine N-zeilige Matrix sind das also N+1 Aufrufe von xmalloc (was auch immer xmalloc tut - Standard ist das jedenfalls nicht).


Zitat:
Weil meiner Meinung nach brauche ich ja ein 2 dimensionales Array z.B.
a [5][3]. Jedoch habe ich keinen Schimmer wie ich diesen mit xmallac bzw. xcalloc allokiere..

Verabschiede dich am besten von der Vorstellung, dass du mit malloc ein explizit ein-, zwei- oder N-dimensionales Objekt holen kannst. Du holst immer nur einen zusammenhängenden Speicherblock, den du dann mit der nötigen Anzahl Indirektionen (das sind die Sternchen an der Pointervariable) als N-dimensionales Array interpretierst.

Aber darum gehts hier gar nicht. data soll ein Array von Pointern sein, die auf jeweils eine Zeile zeigen. Es ist nicht schlau, das Ding "data" zu nennen, weil das ne falsche Vorstellung von EINEM Stück Speicher weckt. "rows" wäre besser, und die Anzahlen dann n_rows und n_cols. Aber egal. Hol dir so viele Zeilenpointer wie nötig und dann hol dir für jeden dieser Pointer eine Zeile.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.12.2017, 19:52 Uhr
ao

(Operator)


Ach so, hab ich ganz übersehen: Zuallererst holst du natürlich den Speicher für ein Objekt vom Typ Matrix, ebenfalls mit xmalloc. Dann das Pointer-Array für data und dann die einzelnen Zeilen. Es sind also N+2 xmalloc-Aufrufe für eine N-zeilige Matrix.
Dieser Post wurde am 18.12.2017 um 19:52 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: