www.mikrocontroller.net

Forum: PC-Programmierung Wie teile ich das Programm auf?


Autor: Fizzle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe ein Problem und zwar weiß ich nicht, wie ich das Programm unten 
in Header, *.c und main Dateien aufteilen soll. Ich weiß wohl, dass in 
den Header die Prototypen der Funktionen rein müssen, aber was ich dann 
noch und wie im c-file stehen lassen muss und was in die main Datei 
gehört, weiß ich nicht. Habe alles mögliche rumprobiert und alles in 
einem Projekt file gesammelt aber es klappt einfach nicht. Bin wohl noch 
blutiger Anfänger aber es ist ja noch kein Meister vom Himmel 
gefallen...:-)


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


struct comp
 {
   float real;
   float img;
 };


struct comp cfadd(struct comp a , struct comp b)
{
 struct comp c;
 c.real=a.real+b.real;
 c.img=a.img+ b.img;
 return c;
}

struct comp cfmul(struct comp a , struct comp b)
{
 struct comp c;
 c.real=a.real*b.real-a.img*b.img;
 c.img=a.real*b.img+ a.img*b.real;
 return c;
}

double cfabs(struct comp a)
{
 double c;
 c = sqrtf(a.real*a.real+a.img*a.img);
 return c;
}



{ struct comp a,b,c;
  printf("Bitte Realteil und Imagin\x84rteil eingeben  ");
scanf("%f%f", &a.real,&a.img);
  printf("Bitte Realteil und Imagin\x84rteil eingeben  ");
scanf("%f%f", &b.real,&b.img);

printf("a = %8.2f + %8.2fi\n", a.real, a.img);
printf("b = %8.2f + %8.2fi\n", b.real, b.img);
c = cfadd(a,b);
printf("a+b = %8.2f +%8.2fi\n", c.real, c.img);
c = cfmul(a,b);
printf("a*b = %8.2f +%8.2fi\n", c.real, c.img);
printf("a hat die L\x84nge %4:2d\n",cfabs(a));
printf("b hat die L\x84nge %4:2d\n",cfabs(b));
  system ("pause");
          }




Ich bin für jede Hilfe dankbar!!!!!
Gruß Fizzle

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispielsweise so:

comp.h

struct comp
{
  float real;
  float img;
};

struct comp cfadd(struct comp a , struct comp b);
struct comp cfmul(struct comp a , struct comp b);
double cfabs(struct comp a);

comp.c
#include <stdlib.h>
#include <math.h>

#include "comp.h"

struct comp cfadd(struct comp a , struct comp b)
{
  struct comp c;

  c.real=a.real+b.real;
  c.img=a.img+ b.img;
  return c;
}

struct comp cfmul(struct comp a , struct comp b)
{
  struct comp c;

  c.real=a.real*b.real-a.img*b.img;
  c.img=a.real*b.img+ a.img*b.real;
  return c;
}

double cfabs(struct comp a)
{
  double c;

  c = sqrtf(a.real*a.real+a.img*a.img);
  return c;
}

Und schließlich

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

#include "comp.h"

int main(int argc, char** argv)
{ 
  struct comp a,b,c;
  printf("Bitte Realteil und Imagin\x84rteil eingeben  ");
  scanf("%f%f", &a.real,&a.img);
  printf("Bitte Realteil und Imagin\x84rteil eingeben  ");
  scanf("%f%f", &b.real,&b.img);

  printf("a = %8.2f + %8.2fi\n", a.real, a.img);
  printf("b = %8.2f + %8.2fi\n", b.real, b.img);
  c = cfadd(a,b);
  printf("a+b = %8.2f +%8.2fi\n", c.real, c.img);
  c = cfmul(a,b);
  printf("a*b = %8.2f +%8.2fi\n", c.real, c.img);
  printf("a hat die L\x84nge %4:2d\n",cfabs(a));
  printf("b hat die L\x84nge %4:2d\n",cfabs(b));
  system ("pause");
}

Literaturhinweis:
Brian Kernigham & Dennis Ritchie
"Programmieren in C"
Zweite Auflage, Hanser Verlag
ISBN: 3446138781

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würds so machen. Erklärungen gern auf Anfrage.



comp.h:
#ifndef COMP__H
#define COMP__H

struct comp
 {
   float real;
   float img;
 };


struct comp cfadd(struct comp a , struct comp b);

struct comp cfmul(struct comp a , struct comp b);

double cfabs(struct comp a);
#endif

comp.c:
#include "comp.h"

struct comp cfadd(struct comp a , struct comp b)
{
 struct comp c;
 c.real=a.real+b.real;
 c.img=a.img+ b.img;
 return c;
}

struct comp cfmul(struct comp a , struct comp b)
{
 struct comp c;
 c.real=a.real*b.real-a.img*b.img;
 c.img=a.real*b.img+ a.img*b.real;
 return c;
}

double cfabs(struct comp a)
{
 double c;
 c = sqrtf(a.real*a.real+a.img*a.img);
 return c;
}

main.c:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "comp.h"

int main (void)
{ struct comp a,b,c;
  printf("Bitte Realteil und Imagin\x84rteil eingeben  ");
scanf("%f%f", &a.real,&a.img);
  printf("Bitte Realteil und Imagin\x84rteil eingeben  ");
scanf("%f%f", &b.real,&b.img);

printf("a = %8.2f + %8.2fi\n", a.real, a.img);
printf("b = %8.2f + %8.2fi\n", b.real, b.img);
c = cfadd(a,b);
printf("a+b = %8.2f +%8.2fi\n", c.real, c.img);
c = cfmul(a,b);
printf("a*b = %8.2f +%8.2fi\n", c.real, c.img);
printf("a hat die L\x84nge %4:2d\n",cfabs(a));
printf("b hat die L\x84nge %4:2d\n",cfabs(b));
  system ("pause");
return 0;
}

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ja, Rufus hat Recht. comp.c muss math.h inkludieren für die 
Wurzelfunktion.

Autor: Fizzle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha Aha, ja so in etwa hatte ich es auch schon aufgeteilt, also mein 
Header hatte ich schon so wie ihr geschrieben hattet. Ich habe 
allerdings im *.c modul dann die Funktions-deklarationen entfernt...weil 
sie ja dann schon im Header stehen.Da sehe ich keinen Sinn...wieso 
schreibt man die Prototypen der Funktionen extra noch mal in den Header 
und lässt sie aber dennoch im *.c modul??? Na dann setz ich mich noch 
einmal dahinter....eine Frage habe ich jedoch noch.Ich arbeite mit dem 
Dev c++ Compiler. Muss ich dann, um eine vernünftige ausführbare Datei 
zu kriegen, ein Projekt-file mit den drei Komponenten erstellen, gibts 
da besondere Regeln oder muss man etwas beachten?
Vielen, vielen Dank für die Hilfe!!!!!!!!!!!1

Gruß Felix

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fizzle wrote:
> Ich habe allerdings im *.c modul dann die Funktions-deklarationen
> entfernt...weil sie ja dann schon im Header stehen.Da sehe ich keinen
> Sinn...wieso schreibt man die Prototypen der Funktionen extra noch mal in
> den Header und lässt sie aber dennoch im *.c modul???

Die Deklarationen stehen ja auch nicht in der *.c Datei. Sie werden 
durch das
#include "comp.h"
in comp.c eingebunden.

In der comp.c Datei stehen die Definitionen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.