Hinweise zur Programmieraufgabe 3

Vorlesung Praktische Mathematik I

Daten aus einem C-Programm in eine Datei schreiben

Mit der Funktion fprintf können Dateien in C so ähnlich geschrieben werden, wie die Ausgabe mit printf erfolgt. Vorher muss die Datei jedoch zum Schreiben geöffnet werden (Befehl fopen) und nachher geschlossen werden (Befehl fclose). Das folgende Beispielprogramm demonstriert dies:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    FILE *f;  /* Variable fuer Dateizugriff deklarieren */

    /* Datei zum Schreiben oeffnen (w=write) */
    f=fopen("MeineDaten", "w");

    /* Hat das geklappt? */
    if (f==NULL)
        {
        printf("Konnte Datei nicht erstellen.\n");
        exit(1);
        }
    
    /* Ausgabe so aehnlich wie mit printf: */
    for (i=0; i<10; i++)
        fprintf(f, "%d %25.16e\n", i, sin(0.3*i)); 
    
    /* Datei schliessen */
    fclose(f);

    return 0;
}

Das Programm ist auch zum download erhätlich: DatenSchreiben.c.

Das Programm erzeugt eine Datei MeineDaten mit dem folgenden Inhalt:

0    0.0000000000000000e+00
1    2.9552020666133955e-01
2    5.6464247339503537e-01
3    7.8332690962748330e-01
4    9.3203908596722629e-01
5    9.9749498660405445e-01
6    9.7384763087819526e-01
7    8.6320936664887371e-01
8    6.7546318055115095e-01
9    4.2737988023383017e-01

Daten mit MatLab visualisieren

MatLab wird durch Eingabe von

    matlab
in einer shell gestartet.

Die oben geschriebenen Daten können nun in MatLab eingelesen werden:

    load MeineDaten;
Die Werte stehen nun in der 10x2-Matrix mit dem Namen MeineDaten. Mit MeineDaten(:,1) kann auf die komplette erste Spalte und mit MeineDaten(:,2) auf die komplette zweite Spalte zugegriffen werden, der Doppelpunkt steht dabei als Platzhalter für alle vorhandenen Indices.

Mit

    clf;
    hold on;
wird ein neues Plot-Fenster begonnen (clf=clear figure). hold on bewirkt, dass nachfolgende plots übereinander dargestellt werden.

Daten mit einer durchgezogenen blauen Linie darstellen:

    plot(MeineDaten(:,1), MeineDaten(:,2));
Hierbei werden die erste Spalte unserer Daten als X-Werte und die zweite Spalte als Y-Werte verwendet.

Das gleiche nochmal mit roten (r) Kreuzen (x):

    plot(MeineDaten(:,1), MeineDaten(:,2), 'rx');

Und nun noch Gitternetzlinien dazu:

    grid on;

Das sieht dann so aus: