Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.09.2005, 08:41

Seite 101 Aufgabe 2

Hallo,

Ich habe auf Seite 101 die AUfgaben 1 und 3 berwitz gelöst.
Aufgabe 2 schaffe ich nicht. Ich weiss nicht, wie man eine Matrix und die Vectoren aus einer Datei lesen kann.

Hat jemand vieleicht eine Musterlösung? ODer auch ein kleiner Tipp wäre von großer Hilfe.
Ich weiss auch nicht in welcher Form die MAtirx in der Datei stehen soll :(

BIn dankbar für jede Hilfe^^

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

21.09.2005, 10:59

Naja, das ist doch gar nicht so schwer. Es gibt da zwei Ansätze. Der eine ist Text basierend, der andere Datenstrombasierend. Der Textbasierende dürfte jetzt aber wohl der sein, der gewünscht ist. Also

Inhalt der Datei mat.txt

Quellcode

1
2
3
4
4
2
1 2 3 4 
1 2 3 4


Eine Erklärung dazu.
Es handelt hier eine Matrize der Form 4x2. Die erste Zahl gibt die Spalten vertikal an (4), die zweite die Spalten horizontal (2). Der nächste Block gibt den Inhalt der Matrize an.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    FILE* pfile;
    unsigned rows=0;
    unsigned cols=0;
    unsigned* mat;

    // Datei probieren zu öffnen.

    if((pfile = fopen("mat.txt", "r")) != NULL)
    {

        fscanf(pfile, "%d\n", &cols);
        fscanf(pfile, "%d\n", &rows);

        // Den speicher für eine Matrize reseervieren

        mat = new unsigned[cols * rows];

        // Einlesen

        // ACHTUNG: Es wird immer eine Zahl von einem Leerzeichen

        // getrennt. ("%d ").

        // Es muss in der Text so aussehen:

        // "1 2 3 4 "

        // Man beachte auch das Leerzeichen am Ende.

        //---------------------------------------------------

        for(unsigned i = 0; i < cols * rows; i++)
            fscanf(pfile, "%d ", &mat[i]);

        // Ausgeben

        for(unsigned i = 0; i < cols * rows; i++)
            printf("%d ", mat[i]);

        // Speicher wieder freigeben

        delete[] mat;

        // Datei schließen

        fclose(pfile);
    }
    else printf("Datei konnte nicht geöffnet werden");


Weiterhin schau dir mal diese Funktion an:

Quellcode

1
GetPrivateProfileString


Oder den Read Ini Kram aus der Tribase.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

21.09.2005, 18:43

Einfacher geht's so:

C-/C++-Quelltext

1
2
3
4
5
// Matrix schreiben

tbMatrix mMatrix;
FILE* pFile = fopen("matrix.dat", "wb");
fwrite(pFile, &mMatrix, 1, sizeof(tbMatrix));
fclose(pFile);


Dann ist die Datei aber für einen normalen Menschen nicht mehr lesbar, weil sie die Binärdaten enthält *g*

Anonymous

unregistriert

4

22.09.2005, 07:18

Vielen Dank.

Jetzt kommt nur noch ein Laufzeit fehler.
Ich erstelle die Datet mat.txt mit richtigem Inhalt und die ausgabe ist:

2 3 die Datei konnte nicht geöffnet werden.

5

22.09.2005, 07:21

Wenn ich am ende eien Else bedingung mache, dann funktioniert es! Veilen dank!
Das Problem war dass ich nicht mehr wusste wie man in Daeteien schreibt oder daraus ausliest :(.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

22.09.2005, 11:13

@David:
ich sagte doch "Der eine ist Text basierend, der andere Datenstrombasierend" ;) ich war einfach zu faul.

@Fury
Ja ein else fehlt.

7

22.09.2005, 21:12

Das mit dem aus daten Lesen war doch in Heiko Kallistas Buch drinne.
Muss morgen fürh vr der Schule das nochmal durchmachen^^.

Vielen Dank nochmal

Werbeanzeige