Forum: PC-Programmierung Probleme mit datentypen


von PIC-user (Gast)


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

von Peter II (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Stefan R. (srand)


Lesenswert?

Du sollst alle Fehlermeldungen zeigen. Das ist ganz offensichtlich nur 
ein Ausschnitt.

von PIC-user (Gast)


Lesenswert?

Okay danke, es lag an der Derklaration des Arrays (sinustabelle[1000]). 
Blöder Flüchtigkeitsfehler, sorry.

von Höhlenproll (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Nein, Dein Programm "läuft nicht" nicht, es lässt sich noch nicht mal
> übersetzen (compilieren).

Was hast du denn für ein Problem, es lässt sich doch übersetzen?

von Dr. Sommer (Gast)


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
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Höhlenproll schrieb:
> Was hast du denn für ein Problem, es lässt sich doch übersetzen?

Die Fehlermeldungen, so unvollständig sie auch sein mögen, sagen da 
recht deutlich was anderes.

von Samuel J. (capstrovor)


Lesenswert?

Das sind Linker-Errors, keine Compiler-Errors

von Visualdingens (Gast)


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
  ...

von Dr. Sommer (Gast)


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

von Visualdingens (Gast)


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 ..

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Samuel J. schrieb:
> Das sind Linker-Errors, keine Compiler-Errors

Es ist von einem Programm die Rede, das funktioniert erst dann, wenn 
auch die Linkerfehler weg sind. Kommt Dir das komisch vor?

von W.S. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.