Rechenproblem

OP #4634636
Lesenswert?
• ▲
▼
Hallo Leute,

Ich steh leider mal wieder auf der Leitung.
Kann mir einer sagen was daran falsch ist ?
1
void calculate(char f, int *xgrad, int *ygrad, int *zgrad, int *bilder)
2
{
3
  xgrad=0;
4
  ygrad=0;
5
  zgrad=0;
6
  bilder=0;
7
  float atan_wert;
8
  if (f=="l")
9
    atan_wert=pgm_read_float(&laenge[sens]);/Sensorwert einlesen
10
  else
11
    atan_wert=pgm_read_float(&hoehe[sens]);//Sensorwert einlesen
12
  uint16_t sens_wert=pgm_read_word(&bnw_mm[objektiv]);/Objektivwert einlesen
13
  float winkel = (2*atan(sens_wert/(2*objektiv)))/(2*M_PI/360);  //Blickwinkel berechnen und von Rad auf Grad umrechnen
14
  float calc= 360/winkel+1;  //Bilderanzahl berechnen und um eins erhöhen 
15
    //--------
16
  if (calc-(int)(calc) >= 0.01)  //Bilderanzahl ab 0,01 Aufrunden sonst Abrunden
17
    calc=(int)(calc+1);
18
  else
19
    calc=(int)(calc);  
20
  float grad_ts= 400 / calc;  //Anzahl der Tatsächlich benötigten Bilder, Da eine Umdrehung 400 Schritte anstelle von 360 hat
21
  zgrad=(int)(grad_ts);
22
  if (grad_ts-(int)(grad_ts) >= 0.01)  // ab 0,1 Aufrunden sonst Abrunden
23
    bilder=(int)(grad_ts+1);
24
  else
25
    bilder=(int)(grad_ts);
26
  return;
27
}

Der Wert für zgrad und bilder passen von forn bis hinten nicht  :-(
Die Werte die er momentan einlesen sollte von den Arrays sind:
atan_wert=50
sens_wert=36


Wäre super wenn einer eine Idee hat :-)
Gast #4634679
Lesenswert?
• ▲
▼
Da stimme ich meinem Vorredner zu! Solche Anfragen sollten schon 
vernünftig gestellt werden.
-Ziel möglichst genau beschreiben(Soll)
-Ist Situation beschreiben(Code gepostet, na immerhin)
-Probleme/Abweichungen vom Soll möglichst genau beschreiben.

Wenn du dir die Mühe gemacht hast, mache ich mir die Mühe, dir zu 
erklären, in welchen Zeilen es hakt.
OP #4634680
Lesenswert?
• ▲
▼
Also: Ich Schreibe mit dem Atmel Studio V7.0, und verwende den Combiler, 
der dabei ist. der Code sollte auf einem ATMEGA 32 laufen. Das 
Combilieren funktioniert. Beim Ausführen jedoch kommen offensichtlich 
falsche Werte raus. Ich habe aber keine Idee woran es liegen könnte. 
Vieleicht sieht ja einer mit einem geübten Auge etwas Problematisches an 
dem Cood.
Gast #4634700
Lesenswert?
• ▲
▼
>Beim Ausführen jedoch kommen offensichtlich
>falsche Werte raus. Ich habe aber keine Idee woran es liegen könnte.

Du solltest Dich gründlich mit einem C-Buch beschäftigen, bevor Du hier
wieder aufschlägst.
#4634726
Lesenswert?
• ▲
▼
Wenn die 4 übergeben Zeiger zuerst auf NULL gesetzt werden, dann sind 
sie unbrauchbar.

C-Tutorial/Buch lesen:

"Was macht ein '*' vor einer Variablen?"

Auf einem AVR zeigt (int*)0 übrigens auf R0:R1. Da gibt es kein 
C0000005-Fehler/SegmentViolantion, denn 0 ist eine gültige RAM-Adresse.
Nur was so ein Programm macht, das ist eher Zufall.
#4634733
Lesenswert?
• ▲
▼
Harald U. schrieb:
> Erstens, fehlen sicher Grundkenntnisse,

Hannes J. schrieb:
> Du hast schon einen klaren Hinweis bekommen wo du gucken musst.
Hannes J. schrieb:
> Schon die ersten paar Zeilen, die Initialisierungen der Pointer mit 0,
> sind Bockmist.

@Harald
Dann schau mal in dein C-Buch (Pointer-Kapitel). Was passiert hier?:
1
  xgrad=0;
2
  ygrad=0;
3
  zgrad=0;
4
  bilder=0;

Was passiert hier?:
1
if (grad_ts-(int)(grad_ts) >= 0.01)  // ab 0,1 Aufrunden sonst Abrunden
2
  bilder=(int)(grad_ts+1);
3
else
4
  bilder=(int)(grad_ts);
OP #4634779
Lesenswert?
• ▲
▼
Erstmal danke für die Hinweise.

Nachdem ich mich wieder beruhigt habe, Ich habe keine Ahnung was der * 
davor bedeutet. Ich "programmiere" seit 4 Monaten C. Bei den 1330 
restlichen Zeilen meiner zwei Miniprogramme (wahrscheinlich für 99% von 
euch nur Lachhaft) habe ich das nicht gebraucht. Ein C Buch besitze ich 
nicht. Bis jetzt hab ich mir bis auf eine andere Frage hier im Forum 
alles selbst beigebracht und er recherchiert. Ich finde es schade wenn 
in Foren gleich solche Kommentare kommen, wobei auch sicher meiner Seits 
etwas überreagiert wurde. Ich bin auch keine 16 mehr.
Nach einer gewissen Zeit vorm Computer sieht man einfache Sachen, sofern 
man sie überhaupt kennt, nicht mehr.
Dennoch Danke fürs darauf schauen.
#4634846
Lesenswert?
• ▲
▼
Paplick Fjuer schrieb im Beitrag #4634819:
> Bei Dir scheint's wohl eher an der weichen Birne zu liegen. Wenn ich
> irgendwas von Dir lese, dann ist immer die Schnauze weit auf.

Hannes hat als Erster den Hinweis auf das Nullsetzen der Zeiger 
geliefert,
das ist 100x nützlicher als dein Beitrag.
Warum gibst DU dem TO keine Hilfe?
Moderator (Firma: Titel) Persönliche Seite #4635175
Lesenswert?
• ▲
▼
Harald U. schrieb:
> Wäre super wenn einer eine Idee hat :-)
Du könnest selber die C-Tags um deinen Code machen, dann muss ich 
das nicht tun...

Über jeder Eingabebox steht das hier:
1
Antwort schreiben
2
Wichtige Regeln - erst lesen, dann posten!
3
    ...
4
    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
5

6
Formatierung (mehr Informationen...)
7
    [c]C-Code[/c]
8
    ...
Gast #4635211
Lesenswert?
• ▲
▼
Harald U. schrieb:
> Kann mir einer sagen was daran falsch ist ?

Harald U. schrieb:
> Beim Ausführen jedoch kommen offensichtlich
> falsche Werte raus. Ich habe aber keine Idee woran es liegen könnte.

Der µC wird richtig rechnen - ist doch kein Pentium.
Vermutlich ist deine Erwartungshaltung an die Funktion des von dir in 
den Compiler gefütterten Codes und an das Ergebnis falsch.

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