Rechenproblem

OP #4634636
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
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
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
>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.
OP #4634705
Hi,

Erstens, fehlen sicher Grundkenntnisse, sonst würde ich nicht um Hilfe 
Bitten.
Zweitens, sind die anderen Rückgabewerte derweil noch nicht 
ausprogrammiert,


Aber danke für ein paar Nutzlose Zeilen

Wünsche allen noch ein schönes Leben
#4634713
Du lernst nur was wenn du selber in deinen Code rein siehst, nicht wenn 
du uns als Hilfskodierer rekrutierst, die dir den Karren aus dem Dreck 
ziehen.

Du hast schon einen klaren Hinweis bekommen wo du gucken musst. Dein 
Problem wenn du nicht gucken willst.
#4634726
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.