C_testat_7
Home Nach oben

 

Home
Nach oben
C_testat_1
C_testat_2
C_testat_3
C_testat_4
C_testat_5
C_testat_6
C_testat_7
C_testat_8

Aufgabenstellung von Herren Grams

Ein- und Ausgabe

7.1 Übersetzen Sie das Programm sinus aus dem Abschnitt 4.1 des Skriptums "Einführung in die Informatik, Teil 2" von Pascal in C.

7.2 Ergänzen Sie das Programm der Aufgabe 6.4 (Serienschwingkreis) um sine grafische Ausgabe mittels Tabellenkalkulation.

Lösungsansätze:

Aufgaben 7.1

/*sinus von Pascal in c*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926536

double t=0;
FILE *textfile;

void main() 
{
    if ((textfile=fopen("a:\sinus.dat", "w"))==NULL) 
    {
        printf("Fehler beim Oeffnen zum schreiben");
        exit (0);
    }
    fprintf(textfile, "Geaempfte Sinusschwingung, Zeitformat: t, f(t)\n");
    while (t<2.1) 
    {
        fprintf(textfile,"%3.1f %12.9f\n",t,exp(-0.1*t)*cos(2*PI*t));
        t=t+.1;
    }
    fclose(textfile);
}

Aufgaben 7.2

/*Serienschwingkreis*/
#include <stdio.h>
#include <stdlib.h>
#include "KOMPLEX.h"
#define PI 3.1415926536;

FILE *datenfile;

void main() 
{
    float fu,fo,step,r,l,c,w0,w;
    KOMPLEX z;
    if ((datenfile=fopen("a:\Serienschwingkreis.dat", "w"))==NULL) 
    {
        printf("Fehler beim Oeffnen zum schreiben");
        exit (0);
    } 
    printf("Serienschwingkreis vom Rainer M., Daniel G. & Guido M.\n\n");
    printf("Die physikalischen Werte fuer die folgende Werte muessen einzugeben werden:\n");
    printf("R = Widerstand [Ohm]\n");
    printf("C = Kapazitaet [F]\n");
    printf("L = Induktivitaet [H]\n");
    printf("fu = Startfrequenz [Hz]\n");
    printf("fo = Endfrequenz [Hz]\n");
    printf("s = Schrittweite [Hz]\n");
    printf("?R = ");scanf("%f",&r);
    printf("?C = ");scanf("%f",&c);
    printf("?L = ");scanf("%f",&l);
    printf("?fu = ");scanf("%f",&fu);
    printf("?fo = ");scanf("%f",&fo);
    printf("?s = ");scanf("%f",&step);
    w0=1/sqrt(l*c);
    z.x=r;
    fprintf(datenfile,"Frequenz [Hz], Scheinwiderstand [Ohm]\n");
    while (fu<fo) 
    {
        w=fu*2*PI;
        z.y=w*l-1/(w*c);
        printf("%12.3f %12.3f \n",fu,betrag(&z));
        fprintf(datenfile,"%12.3f,%12.3f\n",fu,betrag(&z));
        fu=step+fu;
    }
    fclose(datenfile);
}

/*KOMPLEX.h*/

#define KOMPLEX struct complex


/*Struktur festlegen*/
KOMPLEX {float x,y;KOMPLEX *next;};

extern float betrag(KOMPLEX*);
extern KOMPLEX* sort (KOMPLEX*);
extern KOMPLEX add (KOMPLEX* ,KOMPLEX*);
extern KOMPLEX sub (KOMPLEX* ,KOMPLEX*);
extern KOMPLEX multi (KOMPLEX* ,KOMPLEX*);
extern KOMPLEX div (KOMPLEX* ,KOMPLEX*);
extern float phase (KOMPLEX*);

/*KOMPLEX.c*/

#include <math.h>
#include "KOMPLEX.h"

/*Function betrag()*/
float betrag (KOMPLEX *z)
{
    return fabs(z->x)<fabs(z->y)? fabs(z->y)*sqrt(1+(z->x/z->y)*(z->x/z->y))
    : z->x==0? 0: fabs(z->x)*sqrt(1+(z->y/z->x)*(z->y/z->x));
}

/*Funktion less()*/
int less(KOMPLEX* z1,KOMPLEX* z2)
{
    return (z1->x)<(z2->x)&&(z1->y)<(z2->y);
}

/*Funktion sort()*/
KOMPLEX* sort(KOMPLEX* p)
{
    if(p)
    {
        KOMPLEX* q=p->next;
        p->next=0;
        while (q) 
        {
            KOMPLEX *h=q; 
            q=q->next;
            if (less(h, p)) 
            {
                h->next=p;
                p=h;
            }
            else 
            {
                KOMPLEX *cur=p;
                while (cur->next&&!less(h, cur->next)) cur=cur->next;
                h->next=cur->next;
                cur->next=h;
            }
        }
    }
    /*else;*/
    return p;
}

/*Addition*/
KOMPLEX add (KOMPLEX* z1,KOMPLEX* z2) 
{
    KOMPLEX c;
    c.x=z1->x+z2->x;
    c.y=z1->y+z2->y;
    return c;
}

/*Subtraktion*/
KOMPLEX sub (KOMPLEX* z1,KOMPLEX* z2) 
{
    KOMPLEX c;
    c.x=z1->x-z2->x;
    c.y=z1->y-z2->y;
    return c;
}

/*Multiplikation*/
KOMPLEX multi (KOMPLEX* z1,KOMPLEX* z2) 
{
    KOMPLEX c;
    c.x=z1->x*z2->x-z1->y*z2->y;
    c.y=z1->x*z2->y+z1->y*z2->x;
    return c;
}

/*Division*/
KOMPLEX div (KOMPLEX* z1,KOMPLEX* z2) 
{
    KOMPLEX c;
    c.x=(z1->x*z2->x+z1->y*z2->y)/pow(betrag(z2),2);
    c.y=(z1->y*z2->x-z1->x*z2->y)/pow(betrag(z2),2);
    return c;
}

/*phase ()*/
float phase (KOMPLEX* z) 
{
    return z->y!=0? atan(z->x/z->y):z->x>0? 90:270;
}