Die Mathe-Redaktion - 23.11.2017 00:53 - Registrieren/Login
Auswahl
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden oder den Newsletter bestellen.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 465 Gäste und 14 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » C++: Typenumwandlungen
Druckversion
Druckversion
Autor
Schule J C++: Typenumwandlungen
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 997
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2017-10-23


Mir gelingt es grade nicht eine Prozentangabe mit etlichen Nullen nach dem Komma zu generieren....

Hat jemand eine Idee? Es geht um Zeile: 71, 72
C++
  1. #include <vector>
  2. #include <cstdio>
  3. #include <iostream>
  4. using namespace std;
  5. #include <sstream>
  6. #include <string>
  7. #include <cmath>
  8. #include <stdbool.h>
  9. #include <iomanip>
  10. #include <fstream>
  11. #include <stdlib.h>
  12.  
  13. bool prim();// Bool Primzahlprüfung
  14. bool prim(int n)
  15. {
  16. int x;
  17. if(n<2) return false;
  18. if(n==2) return false;
  19. if(n%2==0) return false;
  20. for(x=3;x<=sqrt(n);x+=2){
  21. if(n%x==0)
  22. return false;
  23. }
  24. return true;
  25. }
  26.  
  27. int Start=3;
  28. int Grenze= 6663;
  29. int Nr=0;
  30. int pos1=0;
  31. int pos2=0;
  32. int y=0;
  33. int Maxdf=0;
  34. int Mindf=0;
  35. int Dist=0;
  36. int PNr=0;
  37. int PZalt =0;
  38. int zwz=0; //Zwillingszähler
  39. int xalt=0;
  40. int m=0;
  41. int n=0;
  42.  
  43. float Prozent=0;
  44.  
  45. int main(int argc, const char * argv[]) {
  46.  
  47. for(int x=Start;x<=Grenze;x=10+x)
  48. {
  49. Nr++;
  50. if (prim(x)==true && ((Nr+2)%3)==1)
  51. {
  52. pos1++;
  53. }
  54. if (prim(x)==true && ((Nr+2)%3)==2)
  55. {
  56. pos2++;
  57. }
  58. int dif=pos1-pos2;
  59. if((PZalt+10 == x) && (prim(x)== true))//Zwillingszähler
  60. {
  61. zwz++;
  62. }
  63. if(prim(x)==true)
  64. {
  65. cout<<"PZ-Nr. "<<PNr<<" ";
  66. n=abs(Maxdf);
  67. m=abs(Mindf);
  68. Prozent=((Maxdf*100)/x);
  69.  
  70. std::cout<<" "<<x<<" Pos"<<((Nr+2)%3)<<" P1 "<<pos1<<" P2 "<<pos2<<" Df "<<dif<<" Maxdf "<<Maxdf<<" Mindf "<<Mindf<<" "<<(m+n)<<" Zw: "<<zwz<<"";
  71. cout.precision(6);
  72. cout<<" Abweich %: "<<Prozent<<"\n";
  73. PNr++;
  74. PZalt=x;
  75. }
  76. if(Maxdf<dif)
  77. Maxdf=dif;
  78. if(Mindf>dif)
  79. Mindf=dif;
  80. xalt=x;
  81. }
  82. return 0;
  83. }
  84.  



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



  Profil  Quote  Link auf diesen Beitrag Link
BerndLiefert
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 21.10.2014
Mitteilungen: 252
Aus: Lehramtplanet
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2017-10-23


Zu wenige Stellen hinter dem Komma?



  Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 997
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2017-10-23


2017-10-23 22:19 - BerndLiefert in Beitrag No. 1 schreibt:
Zu wenige Stellen hinter dem Komma?


Ja, bei mir sieht es so aus....

ich will aber 10 Stellen hinter dem Komma, damit man sieht, wie der Wert für Abweichung kleiner wird ...

PZ-Nr. 0  3 Pos0   P1 0 P2 0 Df 0 Maxdf 0 Mindf 0 0   Zw: 0 Abweich %: 0
PZ-Nr. 1  13 Pos1   P1 1 P2 0 Df 1 Maxdf 0 Mindf 0 0   Zw: 1 Abweich %: 0
PZ-Nr. 2  23 Pos2   P1 1 P2 1 Df 0 Maxdf 1 Mindf 0 1   Zw: 2 Abweich %: 4
PZ-Nr. 3  43 Pos1   P1 2 P2 1 Df 1 Maxdf 1 Mindf 0 1   Zw: 2 Abweich %: 2
PZ-Nr. 4  53 Pos2   P1 2 P2 2 Df 0 Maxdf 1 Mindf 0 1   Zw: 3 Abweich %: 1
PZ-Nr. 5  73 Pos1   P1 3 P2 2 Df 1 Maxdf 1 Mindf 0 1   Zw: 3 Abweich %: 1
PZ-Nr. 6  83 Pos2   P1 3 P2 3 Df 0 Maxdf 1 Mindf 0 1   Zw: 4 Abweich %: 1
PZ-Nr. 7  103 Pos1   P1 4 P2 3 Df 1 Maxdf 1 Mindf 0 1   Zw: 4 Abweich %: 0
PZ-Nr. 8  113 Pos2   P1 4 P2 4 Df 0 Maxdf 1 Mindf 0 1   Zw: 5 Abweich %: 0
PZ-Nr. 9  163 Pos1   P1 5 P2 4 Df 1 Maxdf 1 Mindf 0 1   Zw: 5 Abweich %: 0
PZ-Nr. 10  173 Pos2   P1 5 P2 5 Df 0 Maxdf 1 Mindf 0 1   Zw: 6 Abweich %: 0
PZ-Nr. 11  193 Pos1   P1 6 P2 5 Df 1 Maxdf 1 Mindf 0 1   Zw: 6 Abweich %: 0
PZ-Nr. 12  223 Pos1   P1 7 P2 5 Df 2 Maxdf 1 Mindf 0 1   Zw: 6 Abweich %: 0
PZ-Nr. 13  233 Pos2   P1 7 P2 6 Df 1 Maxdf 2 Mindf 0 2   Zw: 7 Abweich %: 0
PZ-Nr. 14  263 Pos2   P1 7 P2 7 Df 0 Maxdf 2 Mindf 0 2   Zw: 7 Abweich %: 0
PZ-Nr. 15  283 Pos1   P1 8 P2 7 Df 1 Maxdf 2 Mindf 0 2   Zw: 7 Abweich %: 0
PZ-Nr. 16  293 Pos2   P1 8 P2 8 Df 0 Maxdf 2 Mindf 0 2   Zw: 8 Abweich %: 0


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



  Profil  Quote  Link auf diesen Beitrag Link
Berufspenner
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 13.11.2003
Mitteilungen: 3019
Aus: Hamburg, z.Zt. Hannover
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2017-10-23


Moin

Der erste Gedanke wäre von float auf double auszuweichen. Allerdings ist das mit der Genauigkeit von Fließkommazahlen auf Computern ja immer so eine Sache. Zusätzlich könnte das Beispiel hier und die Anmerkung dazu noch interessant für dich sein.

Abgesehen davon sollest du deine Zeile 68 noch um ein Cast ergänzen, da dir sonst die Nachkommastellen abgeschnitten werden
C++
Prozent= (((float) Maxdf*100)/x);



-----------------
Grenzen sind zum Überwinden da



  Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 997
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2017-10-23


Danke Berufspenner, hat geholfen.....

kannst Du mir die zeile noch erklären, was da passiert?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



  Profil  Quote  Link auf diesen Beitrag Link
Berufspenner
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 13.11.2003
Mitteilungen: 3019
Aus: Hamburg, z.Zt. Hannover
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2017-10-24


2017-10-23 23:13 - Bekell in Beitrag No. 4 schreibt:
kannst Du mir die zeile noch erklären, was da passiert?

In deiner ursprünglichen Variante von Zeile 68 bildest du den Quotienten zweier Integerwerte. Da in C++ auch die integrierten Datentypen Objekte sind, wird also entsprechend der /Operator für Integers angewendet und entsprechend ist das Ergebnis ein Integer. Das Casten wandelt das Ergebnis einer Operation in einen anderen, gewünschten Datentypen um. Natürlich aber nicht immer unter Einhaltung beliebiger Datenerhaltung.

Die Variante, die ich Beitrag No.3 vorgestellt habe, ist in C++ eigentlich nicht erwünscht, da es die Typenumwandlung aus C ist. In C++ würde man es zum Beispiel mit static_cast machen. Hier die Varianten in C und C++
C
int main()
{
	int x = 5, y = 2;
	double z = (double) x/y;
 
	cout << z << endl;
 
	return 0;
}
Hier wird x in den Typ double gecastet und entsprechend wird der /Operator für double verwendet.
C++
int main()
{
	int x = 5, y = 2;
 
	double a = static_cast<double>(x);
	double b = static_cast<double>(y);
 
	double c = a/b;
 
	cout << c << endl;
 
	return 0;
}


Um es aber im Detail zu verstehen, solltest du dir ein gutes Buch zu C++ anschauen.


-----------------
Grenzen sind zum Überwinden da



  Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 997
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2017-10-31 14:08


2017-10-24 19:30 - Berufspenner in Beitrag No. 5 schreibt:
2017-10-23 23:13 - Bekell in Beitrag No. 4 schreibt:
kannst Du mir die zeile noch erklären, was da passiert?


Um es aber im Detail zu verstehen, solltest du dir ein gutes Buch zu C++ anschauen.

Danke nochmals, hast Du für das Buch einen Tip, ich habe nur Dirk Louis, C++, was mir oft weiterhilft, aber viele Fragen einfach nicht behandelt .... übrigens, da ich ja nur programmiere, um für mich best. math. Fragen zu beantworten, sind die Fragen immer nur aktuell, solange ich das Problem nicht gelöst habe ....  deshalb hatte ich in diesen Thread einfach nichts mehr reingeguckt, .... sry


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



  Profil  Quote  Link auf diesen Beitrag Link
Buri
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 02.08.2003
Mitteilungen: 44788
Aus: Dresden
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2017-10-31 14:40


Hi Bekell,
das eigentliche Problem, das du hier behandelst, ist nicht das einer Typumwandlung, sondern einer Ausgabeformatierung. Diese kann man im Zusammenhang mit der Verwendung des cout-Streams zusätzlich spezifizieren, es ist nicht angebracht, eine Typumwandlung vorzunehmen, um die gewünschte Ausgabeart zu erzwingen. Näheres siehe hier.
Gruß Buri
PS: Der Link funktioniert leider nicht, ich kann mir nicht erklären, warum.
Du könntest ebenso wie ich mit Google nach "Ausgabeformat C++" suchen.



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 26020
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2017-10-31 15:04


2017-10-23 23:02 - Berufspenner in Beitrag No. 3 schreibt:
Abgesehen davon sollest du deine Zeile 68 noch um ein Cast ergänzen, da dir sonst die Nachkommastellen abgeschnitten werden
C++
Prozent= (((float) Maxdf*100)/x);

Es geht auch so (überflüssige Klammern auch gleich weglassen):
C++
Prozent= Maxdf * 100.0 / x;
Durch die <math>100.0</math> wird der Compiler gezwungen, mit float zu rechnen.


-----------------
Bild



  Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 04.03.2003
Mitteilungen: 26020
Aus: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, eingetragen 2017-10-31 15:08


2017-10-31 14:40 - Buri in Beitrag No. 7 schreibt:
Näheres siehe hier.
Gruß Buri
PS: Der Link funktioniert leider nicht, ich kann mir nicht erklären, warum.
Ganz einfach. Wenn man die Adresse direkt im Browser eingibt kommt diese Meldung:
Fehler 404: Nicht gefunden
 
Die von Ihnen angewählte Adresse ist nicht (mehr) gültig.

Echt merkwürdig. Bei einem nochmaligen Versuch wurde die Seite angezeigt eek

Anscheinend hat der Server eie Prüfung, wie die Seite aufgerufen wird (direkt oder von einer „fremden“ Seite) und blockt entsprechend confused

Also:
Link anklicken, es wird ein Aufruffehler angezeigt. Ins Adreßfeld gehen und nochmal Return drücken, dann ist es ein direkter manueller Aufruf und die Seite wird angezeigt.



  Profil  Quote  Link auf diesen Beitrag Link
Berufspenner
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 13.11.2003
Mitteilungen: 3019
Aus: Hamburg, z.Zt. Hannover
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2017-10-31 17:10


2017-10-31 15:04 - viertel in Beitrag No. 8 schreibt:
2017-10-23 23:02 - Berufspenner in Beitrag No. 3 schreibt:
Abgesehen davon sollest du deine Zeile 68 noch um ein Cast ergänzen, da dir sonst die Nachkommastellen abgeschnitten werden
C++
Prozent= (((float) Maxdf*100)/x);

Es geht auch so (überflüssige Klammern auch gleich weglassen):
C++
Prozent= Maxdf * 100.0 / x;
Durch die <math>100.0</math> wird der Compiler gezwungen, mit float zu rechnen.
Stimmt, so könnte man es hier in der Tat machen. Für den allgemeineren Fall denke ich aber, dass es nicht schlecht ist das Thema Typenumwandlung zu behandeln. Das war mein Hintergedanke zu Beitrag No.5.


-----------------
Grenzen sind zum Überwinden da



  Profil  Quote  Link auf diesen Beitrag Link
Tirpitz
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 07.01.2015
Mitteilungen: 450
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2017-10-31 17:18


2017-10-31 17:10 - Berufspenner in Beitrag No. 10 schreibt:
Durch die <math>100.0</math> wird der Compiler gezwungen, mit float zu rechnen.
Ganz streng genommen ist der Compiler hier gezwungen, mit double zu rechnen und am Ende das Ergebnis auf float implizit zu narrow'n. Das entsprechende float-Literal lautet 100.0f.



  Profil  Quote  Link auf diesen Beitrag Link
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell hat selbst das Ok-Häkchen gesetzt.
Bekell wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2017 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]