Veröffentlicht 27. Oktober 201410 j Hallo, wir haben die Aufgabe das Seitenverhältnis einer gegebenen Auflösung zu berechnen. An sich ist das auch überhaupt kein Problem: seitenverhaeltnis=4.00/3.00; Damit man das schöner ausgeben lassen kann (4:3, 16:9 etc) habe ich folgende if-Schleife gebastelt (Dabei würde ich gerne auch bleiben, weil wir switch-case noch nicht besprochen haben): if(seitenverhaeltnis==4/3) //Diese Verzweigung formatiert das errechnete Seitenverhaeltnis in die Werte 4:3, 16:9 oder 16:10 { seitenverhaeltnis_h=4; seitenverhaeltnis_v=3; } else { if(seitenverhaeltnis==16/9) { seitenverhaeltnis_h=16; seitenverhaeltnis_v=9; } else { if(seitenverhaeltnis==16/10) { seitenverhaeltnis_h=16; seitenverhaeltnis_v=10; } } } Leider funktioniert das nicht. Es wird für seitenverhaeltnis_h und seitenverhaeltnis_v jeweils eine 0 ausgegeben. Habe ich hier echt so einen großen Denkfehler? Hoffe auf eure Mithilfe
27. Oktober 201410 j int/int ergibt int. 4/3 ist 1, genau wie 16/10 und 16/9. Ich würde dir aber raten, das Seitenverhältnis als Bruch zu behandeln und zu kürzen. Dann kommt das Programm auch mit unvorhergesehenen Seitenverhältnissen klar.
27. Oktober 201410 j Autor Die Variablen habe ich als float deklariert. Auch wenn ich statt 4 4.00 verwende funktioniert es nicht. Bin gerade echt am verzweifeln.
27. Oktober 201410 j Lass dir mal ausgeben, welcher Wert in seitenverhaeltnis steht. Grundsätzlich ist es keine gute Idee, Fließkommavariablen auf Gleichheit zu testen, wegen der eingebauten Ungenauigkeit. Besser wäre so etwas, wenn du es denn unbedingt nur mit vorgegebenen Verhältnissen machen willst: if(h * 3 == v * 4) // 4:3
27. Oktober 201410 j Autor Lass dir mal ausgeben, welcher Wert in seitenverhaeltnis steht. Grundsätzlich ist es keine gute Idee, Fließkommavariablen auf Gleichheit zu testen, wegen der eingebauten Ungenauigkeit. Besser wäre so etwas, wenn du es denn unbedingt nur mit vorgegebenen Verhältnissen machen willst: if(h * 3 == v * 4) // 4:3 Mit dem Code funktioniert es komischerweise. Rechnerisch ist das ja identisch. Danke dafür:)
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.