Probleme mit datentypen

Gast #3615161
Lesenswert?

Hallo zusammen,

ich würde gerne mit C++ eine Sinustabelle in einem array erstellen und 
dieses dann in einer .txt ausgeben, um das array dann zum Erzeugen einer 
Sinusspannung in einem µC-Programm zu nutzen.

Aus irgendeinem Grund läuft das Programm nicht...

Hier erstmal der Code:
1
#include "stdafx.h"
2
#include<stdio.h>
3

4
int n=0,i=0;
5
double pi=3.1415926535897932,s,f,p;
6
int sinustabelle[];
7

8
double sinus(double x){ 
9
  ... //Potenzreihenentwicklung der Sinusfunktion (ist Fehlerfrei)
10
  return s;
11
}
12

13
int _tmain()
14
{
15
  FILE * pFile;
16
  
17
  pFile=fopen("myfile.txt","w"); //für diese Zeile bekomme ich die Fehler angezeigt
18

19
  //Bereich Anfang
20
  for(i=0;i<1000;i++){
21
    sinustabelle[i] = int(sinus(((2*pi)/1000)*i)*1000); //geht das vielleicht so nicht? Ich möchte float oder double im uC-Programm vermeiden, deshalb das int-array.
22
  }
23
  
24
  fprintf(pFile,"sinustabelle[1000]={");  
25

26
  for(i=0;i<999;i++){
27
    fprintf(pFile,"%d,",sinustabelle[i]);
28
  }
29
  
30
  fprintf(pFile,"%d}",sinustabelle[999]);
31
  //Bereich Ende - Wenn ich diesen Bereich herausnehme, bekomme ich keine Fehlermeldung mehr, obwohl der Fehler für eine Zeile außerhalb des Bereichs angezeigt wird
32

33
  fclose(pFile);
34

35
  return 0;
36
}

Das wären die Fehlermeldungen:

1>c:\users\yasin hamdan\documents\visual studio 
2008\projects\sinustabelle\sinustabelle\sinustabelle.cpp(39) : warning 
C4996: 'fopen': This function or variable may be unsafe. Consider using 
fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
See online help for details.

1>        c:\program files (x86)\microsoft visual studio 
9.0\vc\include\stdio.h(237): Siehe Deklaration von 'fopen'

1>C:\Users\Yasin Hamdan\Documents\Visual Studio 
2008\Projects\sinustabelle\Debug\sinustabelle.exe : fatal error LNK1120: 
1 nicht aufgelöste externe Verweise.

1>C:\Users\Yasin Hamdan\Documents\Visual Studio 
2008\Projects\sinustabelle\Debug\sinustabelle.exe : fatal error LNK1120: 
1 nicht aufgelöste externe Verweise.


Ich verstehe nicht, weshalb das Programm so nicht läuft. Ich habe es mit 
ähnlichen Programmen von mir, die ebenfalls die fprintf-Funktion nutzen 
und problemlos laufen, verglichen, kann den Fehler aber trotzdem nicht 
finden.

Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.

Gruß
PIC-user
Gast #3615166
Lesenswert?

PIC-user schrieb im Beitrag #3615161:
> 1>C:\Users\Yasin Hamdan\Documents\Visual Studio
> 2008\Projects\sinustabelle\Debug\sinustabelle.exe : fatal error LNK1120:
> 1 nicht aufgelöste externe Verweise.

da fehlt noch etwas von der Fehlermeldung
Persönliche Seite #3615172
Lesenswert?

PIC-user schrieb im Beitrag #3615161:
> int sinustabelle[];

Das soll wohl ein Array sein. Für wieviele Elemente bietet das Platz?


Nein, Dein Programm "läuft nicht" nicht, es lässt sich noch nicht mal 
übersetzen (compilieren).

Und, wenn Du Dir die Meldungen des Compilers genau ansehen würdest, 
würdest Du auch sehen, daß das nichts mit fopen zu tun hat.
Gast #3615186
Lesenswert?

Wenn schon C++, kannst du auch die diversen hilfreichen Klassen, die C++ 
bietet, verwenden, anstelle der alten C-API's die von Windows scheinbar 
nicht so ganz unterstützt werden:
1
#include <fstream>
2
#include <iostream>
3
#include <cmath>
4
#include <vector>
5

6
int main () {
7
  double pi = 3.1415926535897932;
8
  std::vector<int> sinustabelle (1000);
9
  
10
  std::ofstream file ("myfile.txt");
11
  
12
  for (int i = 0; i < 1000; i++) {
13
    sinustabelle [i] = std::sin (((2 * pi) / 1000) * i) * 1000;
14
  }
15
  
16
  file << "sinustabelle[1000]={";
17
  
18
  for (int i = 0; i < 999; i++) {
19
    file << sinustabelle [i] << ',';
20
  }
21
  
22
  file << sinustabelle [999] << '}';
23
  
24
  return 0;
25
}
Gast #3615791
Lesenswert?

@ Dr. Sommer (Gast)

Da fehlt aber noch was damit das in VS compiliert. ;)
1
#include <fstream>
2
#include <iostream>
3
#include <cmath>
4
#include <vector>
5

6

7
using namespace std;
8

9

10
int main () {
11
  double pi = 3.1415926535897932;
12
  ...
Gast #3615801
Lesenswert?

Visualdingens schrieb:
> @ Dr. Sommer (Gast)
>
> Da fehlt aber noch was damit das in VS compiliert. ;)
Nö, da im Code überal "std::" steht, ist das "using namespace std;" 
überflüssig. Wenn VS das trotzdem braucht wäre es ganz schön kaputt. 
"using namespace std" sollte man onehin nicht verwenden:

http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice
Gast #3615824
Lesenswert?

Dr. Sommer (Gast) schrieb:
>> Da fehlt aber noch was damit das in VS compiliert. ;)
>Nö, da im Code überal "std::" steht, ist das "using namespace std;"
>überflüssig. Wenn VS das trotzdem braucht wäre es ganz schön kaputt.

Stimmt, geht auch ohne. Beim Einfügen deines Codes in VS10 hatte VS mir 
zunächst die std Ausdrücke rot markiert und mit dem using gings dann 
sofort weg. :) Geht aber auch so beim ersten compilieren weg. Im MSDN 
findet sich häufig in Codebeispielen die using Anweisung. Geschadet 
hat's auf jeden Fall nicht. Deine Sinustab ist erstellt ob mit oder ohne 
explizitem using ..
Gast #3628440
Lesenswert?

PIC-user schrieb im Beitrag #3615161:
> Aus irgendeinem Grund läuft das Programm nicht...

Naja, wenn es liefe, würde es auch aus anderen Gründen nichts taugen. 
Hast du dir schon mal nen Gedanken über die Skalierung gemacht? Nee.

Also erstmal die Y-Skalierung: Je nach Anwendungsfall müßtest du nicht 
nur mit einem Faktor herangehen, sondern auch noch mit Offset, denn die 
meisten DAC's brauchen positiv definite Werte.

Aber du hast gewiß auch keinen µC, für den Pi eine gerade Zahl ist. Also 
mußt du dir auch noch Gedanken machen, wieviele Werte bei deiner 
Anwendung ein Vollkreis ausmachen soll. Das läuft auf ne X-Skalierung 
hinaus. Gelle?

"double pi=3.1415926535897932"
Overkill. Mit nem simplen Basic-Programm wärest du schneller am Ziel und 
dessen Genauigkeit reicht allemal, um eine Tabelle für nen DAC in einem 
µC zu erzeugen.

W.S.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren