Die Mathe-Redaktion - 22.10.2018 10:06 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
ListenpunktSchwätz / Top 15
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
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. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 566 Gäste und 16 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++: copy_if
Druckversion
Druckversion
Antworten
Antworten
Autor
Schule C++: copy_if
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 1379
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2018-10-03 21:17


Hallo,

ich habe diese Zeile:
C++
  1. for (int i=1; i<11; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9 10

und ich möchte die erste Hälfte des Inhalts in einen Vector namens oben schreiben.

Dazu ist Copy-if von Algorithm gut, denke ich, leider funxioniert mein Versuch nicht.
C++
  1. auto it = std::copy_if (myvector.begin(), myvector.end(), oben.begin(), [](int i){return !(i<5);} );


kann mir mal jemand die Zeile schreiben?


-----------------
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
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 1739
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2018-10-03 21:38


Suchst du sowas?
C++
std::copy_if (myvector.begin(), myvector.end(), std::back_inserter(oben), [](int i){return !(i<5);} );
 


Deine Bedingung wählt allerdings die zweite Hälfte bzw. alle Elemente größer/gleich 5 aus.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



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


2018-10-03 21:38 - DerEinfaeltige in Beitrag No. 1 schreibt:
Suchst du sowas?
C++
std::copy_if (myvector.begin(), myvector.end(), std::back_inserter(oben), [](int i){return !(i<5);} );
 


Deine Bedingung wählt allerdings die zweite Hälfte bzw. alle Elemente größer/gleich 5 aus.

Ich wollte nur die zweite Hälfte, egal, ob großer oder kleiner 5. Ich will den Vector immer in zwei Teile teilen, egal was drinnen steht ....


-----------------
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
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 1739
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2018-10-04 09:29

\(\begingroup\)
Dann benutzt du die falsche Funktion.

copy_if kopiert (wie der Name sagt) genau die Elemente, die die im Prädikat gegebene Bedingung erfüllen.
Dein Prädikat fragt, ob ein Element "nicht kleiner als 5" ist.


Kopieren der oberen Hälfte eines Vektors namens $u$ ginge bspw. so:
C++
    v.assign(u.begin()+u.size()/2,u.end());

Alternativ direkt per Constructor den Bereich zuweisen.


Für das, was du mutmaßlich vor hast, ist kopieren allerdings ohnehin nicht notwendig bzw. unsinnig.

Ein bisschen mit Indizes zu jonglieren wäre viel, viel einfacher.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -
\(\endgroup\)


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


2018-10-04 09:29 - DerEinfaeltige in Beitrag No. 3 schreibt:
Dann benutzt du die falsche Funktion.

Ein bisschen mit Indizes zu jonglieren wäre viel, viel einfacher.

Gib mir doch mal ein Beispiel, eines daß ich versteh, wie ich das gewünschte erreiche

Danke


-----------------
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
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 1739
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2018-10-04 11:52


Falls ich dich recht verstehe, willst du eine Liste aus Boole'schen Werten halbieren, die untere Hälfte umkehren, gegen die obere verschieben und dann zählen, wie oft wahr über wahr liegt.


Also bspw. wie folgt:

{1,1,0,1,0,0}

=>

-,-,1,1,0
0,0,1

-,1,1,0
0,0,1

1,1,0
0,0,1

1,1,0
-,0,0,1

1,1,0
-,-,0,0,1

Kollisionen = {1,1,0,0,0}

Jetzt schau welche Indizes je nach Verschiebung miteinander verglichen werden.

-2 -> (0,3)
-1 -> (0,4),(1,3)
 0 -> (0,5),(1,4),(2,3)
+1 -> (1,5),(2,4)
+2 -> (2,5)

Da sollte sich ein Muster erkennen lassen.

Noch einfacher zu erkennen wird es, wenn man es so aufschreibt

-2 -> (-2,5),(-1,4),(0,3)
-1 -> (-1,5),(0,4),(1,3)
 0 -> (0,5),(1,4),(2,3)
+1 -> (1,5),(2,4),(3,3)
+2 -> (2,5),(3,4),(4,3)

... und dann alle ungültigen Paare streicht.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



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


2018-10-04 11:52 - DerEinfaeltige in Beitrag No. 5 schreibt:
Falls ich dich recht verstehe, willst du eine Liste aus Boole'schen Werten halbieren, die untere Hälfte umkehren, gegen die obere verschieben und dann zählen, wie oft wahr über wahr liegt.

Muß ich mich entschuldigen, Einfältiger, habe mich wohl undeutlich ausgedrückt. Eine Kette mit x Perlen hat immer  2x-1 Zustände, wo oben und unten zu vergleichen ist.  Bei 6 Perlen wären das 11 Zustände. Du bringst mit dem Verschieben nur 5.

Das mit dem Verschieben ist fehlerhaft. Leider geht auch der Befehl Rotate daneben, weil man so mit einer Perlenkette(10) nur 10 Zustande erreicht, und nicht 19! Die Perlenkette muß so gedreht werden, daß jede Perle über jeder zu stehen kommt! Deshalb ist wohl auch das Bild einer Raupenkette besser, wo oben über unten hinweggleitet.

Und dies ist auch der Moment, wo sich die boolschen Werte inpraktikabel erweisen. Bei mir muß jede weiße Perle eine Zahl haben und jede Schwarze eine 0 (Null). Ich brauch das für Rechenoperationen.


-----------------
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
matph
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 20.11.2006
Mitteilungen: 5401
Aus: A
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2018-10-04 15:53


Hallo Bekell,

Bitte beschreibe doch einmal worauf du hinaus möchtest, was möchtest du am Ende berechnen oder erzeugen...

Dein letzter Beitrag deutet darauf hin, dass es dir in irgend einer Form um Konjugationsklassen symmetrischer Gruppen geht, im Kontext deiner anderen Fragen in diesem Forum vielleicht etwas wie der De-Bruijn-Folge confused

--
mfg
matph


-----------------
Wir müssen wissen, wir werden wissen. Hilbert
Das Buch der Natur ist in der Sprache der Mathematik geschrieben. Galilei



  Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 117
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2018-10-04 18:26


Hallo Bekell, probierst du dies hier darzustellen? Was passiert eigentlich bei einer ungeraden Anzahl Glieder?



  Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 1379
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2018-10-04 22:09


@Skynja, Mathph und Einfältiger

lest hier mal nach, den Thread mit dem Namen
in Schulmathematik - Forum

Zählschwierigkeiten zum Goldbach-Experiment

Ich will jetzt einfach alle Zustände der einzelnen Perlenketten mit ihren möglichen Verteilungen (weiss/schwarz) untersuchen, wie sie sich verhalten, beim Rumraupen. Wieviel schwarz/schwarz und weiss weiss, und weiß/schwarz Passagen es jeweils gibt. Da kann man später bei Kenntnis der Symmetrien noch sehr viel Rechenleistung sparen.
Das will ich programmiert haben. Wenn Ihr nicht so pädagogisch agieren würdet, sondern nur meinem Niveau angepasst konkrete Antworten gebt, wofern Ihr versteh, was ich will, wäre ich schon viel weiter.  

Ich stell mir vor, daß die jeweiligen Möglichkeiten in ein Array abgespeichert werden, und ein zweites Tool die dann durchraupt und analysiert.

Es ist keine Kombinatorik-Frage, die mich interessiert, sondern es geht schon um Symmetrien. Weil ich kein Mathematiker bin, kann ich das nicht benennen, ich träume nachts immer was und muß das dann machen. Diese Idee verfolgt mich schon lange. Mag komisch klingen, aber es ist so.

Die Zeichnung von Skynja ist gut. Nur muß die Zählung an einer Seite abwärts laufen. Es handelt sich ja um eine schlaufenförmige geschlossene Kette. Der Einfältige war auch schon fast dran. Wichtig ist noch, daß die eine Perlenfarbe nummeriert wird, die andre genullt erscheint.  Das erleichtert erheblich die Plausibilitätsbetrachtung.

2018-10-04 18:26 - Scynja in Beitrag No. 8 schreibt:
 Was passiert eigentlich bei einer ungeraden Anzahl Glieder?

Das ist das eigentlich Interessante. Es springt eine Zauberzahl rein. Das will ich der jetzt bei meinen Betrachtungen erst einmal vollkommen draußen lassen.

Es alternieren also bei den 20 Zuständen der 10-er Perlenkette beim Durchraupen immer 4-er und 5-er Reihen. Beim Abraupen der offenen Kette gibt es nur (2n)-1, also 19 Zustände

Des Einfältigen Fehler in Beitrag Nr. 5 dieses Fadens besteht darin, daß er die Perlenkette nur einmal in der Mitte teilt. Die offene Kette muß aber abgeraupt werden, wie im oben genannten Faden Goldbach-Experiment in der gelb-roten Grafik ersichtlich dargestellt wird.  Abgeraupt meint: Jede Perle muß an jeder vorbei!


-----------------
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
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 117
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2018-10-09 18:56


Die Vektoren habe ich beide aufsteigend gemalt, weil dann das Vergleichen trivial ist. Obwohl es mit gedrehten auch nicht schwer ist. Wenn die Abfolge egal ist, würde ich eher zwei Datenstrukturen iterieren. Einmal, sodass sich oben und unten gegenüberliegen und einmal, wo sie es nicht tun. Aber was hat Goldbach jetzt mit Symmetrien zu tun? Ich habe nur Summengleichungen zu Primzahlen gefunden. Solange du nicht einmal mit Zettel und Stift aufmalst, was dein eigentliches Ziel ist, wird es schwierig. Für Vergleiche stören Zahlen in den Kugeln eher, als dass sie helfen. Und eine dritte Farbe kann man so auch nur durch Krücken hinzufügen. Dinge wie die magische Zahl sind essentiell, wenn du nicht nach jedem Thread deinen ganzen Code refactoren möchtest. Vielleichtmacht es in deinem Fall sogar Sinn eine abstrakte Datenstruktur - Kette zu entwerfen. Dann hast du an einer Stelle geschrieben, dass du dich um Performanz sorgst. Die Kombinationen steigen mit n! an. Die ganzen io-Ausgaben, die du hast, werden deine Software gnadenlos ausbremsen. Weiterhin solltest du vielleicht über Multithreading nachdenken. Aber wie gesagt, um das zu entscheiden, muss man das Endziel kennen.



  Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 1379
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, vom Themenstarter, eingetragen 2018-10-10 12:16


2018-10-09 18:56 - Scynja in Beitrag No. 10 schreibt:
Aber was hat Goldbach jetzt mit Symmetrien zu tun?

Stell Dir vor: Jede Perlenkette ist die Repräsentation einer Kette der arithmetischen. Folge 2n-1 für die gilt: In genau einem Zustand bei der Durchraupung sind die Summen übereinanderliegender Perlen alle =. Weiss = ungerade Nichtprimzahl, schwarz = PZ.


Solange du nicht einmal mit Zettel und Stift aufmalst, was dein eigentliches Ziel ist, wird es schwierig.
Dazu das Macro unten


Für Vergleiche stören Zahlen in den Kugeln eher, als dass sie helfen.
Nein, wirst noch sehen.


Und eine dritte Farbe kann man so auch nur durch Krücken hinzufügen.
brauchen wir überhaupt nicht.


Dinge wie die magische Zahl sind essentiell, wenn du nicht nach jedem Thread deinen ganzen Code refactoren möchtest.
Die magische Zahl oder Zauberzahl ist die Diagonale in der Würfeldarstellung in genanntem Thread.
Genau jede zweite gerade Zahl hat bei der Teilung durch 2 eine ungerade Zahl. ich nenne sie deshalb magische oder Zauberzahl, weil sie ja in der PerlenKette nur einmal vorkommt, als Summand einer gerade Summe aber zwei mal benötigt wird.


Vielleichtmacht es in deinem Fall sogar Sinn eine abstrakte Datenstruktur - Kette zu entwerfen.
was meinst Du damit?


dass du dich um Performanz sorgst. Die Kombinationen steigen mit n! an.
für größere Ketten auf jeden Fall.  Ich mach mein Programm für kleinere n mal fertig, daß Du es siehst. Für größere n muß dann mal ein Profi kurz ran. Mir macht ebenfalls die Darstellung in C++ sorge, daß die Möglichkeiten Bekannterweise ja begrenzt sind.


Die ganzen io-Ausgaben, die du hast, werden deine Software gnadenlos ausbremsen.
deswegen werden sie im Endstadium auskommentiert.


Weiterhin solltest du vielleicht über Multithreading nachdenken. Aber wie gesagt, um das zu entscheiden, muss man das Endziel kennen.
Du meinst, zwei Makros verketten?



-----------------
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
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 1379
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2018-10-10 15:56


Hier das, was ich wollte, leider lässt die Darstellung an Deutlichkeit zu wünschen übrig
C++
  1. // Stellt binäre Permutationen her, wandelt in Integer und packt dann in Vector, Nullt diese nach dem Code: 0=schwarze Perle(prim) weiße Perle = Stelle im Code und raupt alle zustände durch.
  2.  
  3. #include <vector>
  4. #include <map>
  5. #include <cstdio>
  6. using namespace std;
  7. #include <sstream>
  8. #include <cmath>
  9. #include <stdbool.h>
  10. #include <iomanip>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <string>
  14. #include <stdlib.h>
  15. #include <stdio.h>
  16. #include <algorithm>
  17. int nr1=0;
  18. int feld[6];
  19. int integ;
  20.  
  21.  
  22.  
  23. int main()
  24. {
  25. cout<<"Legende: 1. PermutationsNr., dann ZustandNr. 1Cx,x,x meint Zustand 1 der Perlenkette dann die Anzahl der black/black x weiss/weiss, gemischten Passagen \n";
  26. vector<int>veczahl;
  27. std::string s = "000111";
  28. std::sort(s.begin(), s.end());
  29. do {
  30. nr1++;
  31. std::cout<<nr1<<". "<< s <<" "; //Permutation in S
  32. istringstream inStream(s);
  33. inStream >>integ; // Permutation in Integer
  34. //std::cout<<"int: "<<integ<<" ";
  35.  
  36. //Integer aufspalten nach Vector
  37. while(integ)
  38. {
  39. for(int i=0; i<s.size(); i++)
  40. {
  41. feld[i]=integ%10;
  42. veczahl.push_back(feld[i]);
  43. integ/=10;
  44. //cout<<feld[i] <<endl;
  45. }
  46. }
  47. std::reverse(veczahl.begin(),veczahl.end());
  48. /* cout<<"vec: ";
  49.   for(int x : veczahl)
  50.   {cout<<x<<".";}*/
  51.  
  52. // Nullung des Codes, Bezifferung der weissen
  53.  
  54. std::vector<int> ergeb;
  55. for (int i = 0; i < veczahl.size(); ++i)
  56. {
  57. if (veczahl[i]==0){ergeb.push_back(0);}
  58. else{ergeb.push_back(i+1);}
  59. }
  60. /* cout<<" Zif:";
  61.   for(int x : ergeb){std::cout<<x<<".";}
  62.   cout<<"\n";*/
  63.  
  64. // Durchrauper
  65. int z;
  66. int y;
  67. int nr2=0; //Zustandsnummer )Perlenkette
  68. int su; //Summe
  69. int sz=0; //Schwarzzähler - wenn beide 0
  70. int wz=0; //Weisszähler - wenn beide > 0
  71. int gz=0; //Gemischtzähler - wenn eine Null und andre > 0
  72. int gsz=0; //Gesamt Schwarzzähler - wenn beide 0
  73. int gwz=0; //Gesamt Weisszähler - wenn beide > 0
  74. int ggz=0; //Gesamt Gemischtzähler - wenn eine Null und andre > 0
  75.  
  76.  
  77. std::vector<int> oben;
  78. std::vector<int> unten;
  79. std::vector<int> untenreverse;
  80.  
  81. // int myints[] = {1,0,3,0,0,0,7,0,9,10}; //Hier variieren und Nullen für schwarze Perlen rein
  82. //std::vector<int>myvector(myints,myints+10);
  83.  
  84. // Grundkette
  85. for (int i=0; i<s.size(); ++i)
  86. {
  87. if(i<=((s.size()/2)-1))
  88. oben.push_back(ergeb[i]);
  89. if (i>((s.size()/2)-1))
  90. unten.push_back(ergeb[i]);
  91. }
  92.  
  93. for(y=1;y<=s.size();y++) //Schleifen
  94. {
  95. nr2++;
  96. su=0;
  97. //std::cout <<nr2<< ". \n";
  98. /*std::cout <<"ob: ";
  99.   for(int x : oben)
  100.   std::cout<<""<<x<<" ";
  101.   std::cout << '\n';*/
  102.  
  103. untenreverse.resize(ergeb.size()/2);
  104. std::reverse_copy (unten.begin(), unten.end(), untenreverse.begin());
  105.  
  106. /*std::cout <<"un: ";
  107.   for(int x : untenreverse)
  108.   std::cout <<""<<x<<" ";
  109.   std::cout << '\n';*/
  110.  
  111. for(z=0; z<(ergeb.size()/2); ++z){
  112. su=su+(oben[z]+untenreverse[z]);
  113. if(oben[z]==0 && untenreverse[z]==0){
  114. sz++; gsz++;}
  115. if(oben[z]>0 && untenreverse[z]>0){
  116. wz++; gwz++;}
  117. if((oben[z]==0 && untenreverse[z]>0) || (oben[z]>0 && untenreverse[z]==0)){
  118. gz++; ggz++;}
  119. }
  120.  
  121. std::cout<<nr2<<"C"<<sz<<","<<wz<<","<<gz<<" ";
  122. nr2++;
  123. su=0, sz=0, wz=0, gz=0;
  124. // Verschiebung
  125. // std::cout <<nr2<< ". ";
  126.  
  127. oben.erase(oben.begin());
  128. /* std::cout <<"ob: ";
  129.   for(int x : oben)
  130.   std::cout <<x<<" ";
  131.   std::cout << '\n';*/
  132.  
  133. untenreverse.pop_back();
  134.  
  135. /* std::cout <<"un: ";
  136.   for(int x : untenreverse)
  137.   std::cout <<x<<" ";
  138.   std::cout << '\n'; */
  139.  
  140. su=0;
  141. for(z=0; z<(ergeb.size()/2)-1; ++z){
  142. su=su+(oben[z]+untenreverse[z]);
  143. if(oben[z]==0 && untenreverse[z]==0){
  144. sz++; gsz++;}
  145. if(oben[z]>0 && untenreverse[z]>0){
  146. wz++; gwz++;}
  147. if((oben[z]==0 && untenreverse[z]>0) || (oben[z]>0 && untenreverse[z]==0)){
  148. gz++; ggz++;}
  149. }
  150. std::cout<<nr2<<"C"<<sz<<","<<wz<<","<<gz<<" ";
  151. su=0, sz=0, wz=0, gz=0;
  152. oben.clear();
  153. unten.clear();
  154. untenreverse.clear();
  155.  
  156. std::rotate(ergeb.begin(),ergeb.begin()+1,ergeb.end());
  157.  
  158.  
  159. for(z=0; z<(ergeb.size()); ++z){
  160. if(z<=(((ergeb.size())/2)-1))
  161. oben.push_back(ergeb[z]);
  162. if (z>(((ergeb.size())/2)-1))
  163. unten.push_back(ergeb[z]);
  164. }
  165. }
  166. cout<<"\n";
  167. std::cout<<"GesamtCode: "<<gsz<<","<<gwz<<","<<ggz<<" \n\n";
  168.  
  169.  
  170. //Ende Durchrauper
  171. veczahl.clear();
  172. integ=0;
  173. cout<<endl;
  174. } while(std::next_permutation(s.begin(), s.end()));
  175. }

Ausdruck
Legende: 1. PermutationsNr., dann ZustandNr. 1Cx,x,x meint Zustand 1 der Perlenkette dann die Anzahl der black/black x weiss/weiss, gemischten Passagen
1. 000111 1C0,0,3 2C0,0,2 3C1,1,1 4C1,1,0 5C1,1,1 6C0,0,2 7C0,0,3 8C0,0,2 9C1,1,1 10C1,1,0 11C1,1,1 12C0,0,2
GesamtCode: 6,6,18


2. 001011 1C0,0,3 2C0,1,1 3C1,1,1 4C0,0,2 5C1,1,1 6C1,0,1 7C0,0,3 8C0,1,1 9C1,1,1 10C0,0,2 11C1,1,1 12C1,0,1
GesamtCode: 6,6,18



-----------------
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
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 1379
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, vom Themenstarter, eingetragen 2018-10-10 18:27


Ich hab noch etwas an der Form gebastelt. Jetzt sieht der Ausdruck so aus:

Legende: 1. PermutationsNr., dann die ersten 6 Zustände mit der Anzahl der black/black x weiss/weiss, gemischten Passagen , gs=gesamt (muß bei allen P. gleich sein!)

1. 000111    0,0,3   0,0,2   1,1,1   1,1,0   1,1,1   0,0,2    gs 3,3,9
2. 001011    0,0,3   0,1,1   1,1,1   0,0,2   1,1,1   1,0,1    gs 3,3,9
3. 001101    1,1,1   0,0,2   1,1,1   0,1,1   0,0,3   1,0,1    gs 3,3,9
4. 001110    1,1,1   1,1,0   1,1,1   0,0,2   0,0,3   0,0,2    gs 3,3,9
5. 010011    1,1,1   0,1,1   0,0,3   1,0,1   1,1,1   0,0,2    gs 3,3,9
6. 010101    0,0,3   1,1,0   0,0,3   1,1,0   0,0,3   1,1,0    gs 3,3,9
7. 010110    1,1,1   0,0,2   1,1,1   1,0,1   0,0,3   0,1,1    gs 3,3,9
8. 011001    0,0,3   0,1,1   1,1,1   0,0,2   1,1,1   1,0,1    gs 3,3,9
9. 011010    1,1,1   0,1,1   0,0,3   1,0,1   1,1,1   0,0,2    gs 3,3,9
10. 011100    1,1,1   0,0,2   0,0,3   0,0,2   1,1,1   1,1,0    gs 3,3,9
Program ended with exit code: 0

Es ist jetzt ein Viertel des Wertebestandes aufgeführt. Der Symmetrien wegen sind 3/4 kürzbar.

Die Grundfrage in Bezug auf Goldbach bei höheren n ist: Bei welchen Bedingungen verschwinden die mit 0 beginnenden Tripel? Meine Grundthese: Je größer n, desto seltener die Zustände, wo das Tripel mit 0 beginnt. Nur in bisymmetrischen Abschnitten wird sich das 0-Tripel halten können.


-----------------
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
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 117
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, eingetragen 2018-10-11 19:08


Schweregrad        Code        Beschreibung        Projekt        Datei        Zeile
Fehler        C1010        Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?        ConsoleApplication1        \consoleapplication1.cpp        180


Lässt sich nicht bauen. Bei C++ kann dir aber ohnehin DerEinfältige viel besser helfen. Bezüglich deiner Frage was ein abstrakter Datentyp (Kette) ist:
Man würde die Struktur so definieren, dass man später schreibt:
Kette MeineKette = new Kette([1,0,0,0,10,0])
Die Kette erstellt dann selbstständig Perlen.

cout>>>MeineKette.getPairs() // gibt alle Paare aus
MeineKette.rotate() // Raupt die Kette um 1 im Uhrzeigersinn
In der Kette sind dann z. B. Perlen.
Perle Perle1 = MeineKette.getStart()
Perle1.davor -> Gibt Vorgänger aus
Perle1.danach -> Gibt Nachfolger aus
Perle1.gegenueber -> Gibt Gegenüber aus
Perle1.getWert -> Zeigt, ob die Perle Schwarz oder Weiß ist.

usw. Ich könnte dir den Typ derzeit allerdings nur in Java oder Javascript bauen. Das andere dauert zu lange und du lernst dabei auch nichts. Du kannst es ja einmal selbst probieren. Wenn du nicht weiterkommst, musst du halt noch einmal nachfragen. Zumindest die C++ Experten hier im Forum können dir dabei weiterhelfen.

Edit: Multithreading ist Paralleles Rechnen mit den Werten. Sodass dein Programm alle CPU / GPU-Kerne deines Rechners nutzen kann.



  Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 1739
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, eingetragen 2018-10-11 19:55


Da ich nach wie vor nicht verstehe, was diese "Zustände" sein sollen und wie das "Raupen" funktioniert, und Bekell sich nicht dazu herablassen mag, es für Normalsterbliche zu erklären, kann ich auch nicht helfen.





-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



  Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 1379
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, vom Themenstarter, eingetragen 2018-10-11 20:40


2018-10-11 19:55 - DerEinfaeltige in Beitrag No. 15 schreibt:
Da ich nach wie vor nicht verstehe, was diese "Zustände" sein sollen und wie das "Raupen" funktioniert, und Bekell sich nicht dazu herablassen mag, es für Normalsterbliche zu erklären, kann ich auch nicht helfen.


Stell Dir bei Durchraupung bitte die rotierende Kette einer Schieberraupe vor! Jedes Glied der Kette muss mit jedem 1 x zur Deckung kommen. Das sind 45 Begegnungen/Passagen in 10 Zuständen. 9*10/2, oder 90 in 20 Zuständen nach einer vollen Umdrehung.
Bei der Rotation hast du nur 10 Zustände und 20 Begegnungen/Passagen, weil das Gegenüber unter den Zahlen erhalten bleibt (5 bleibt immer gegenüber der 10). Sogar sind es genau genommen nur 5 und die dazugehörigen Spiegelungen, also 10. Keine Zahl wechselt ihren Partner.  


Hier hast Du einen funktionierenden Durchrauper für kleine Zahlen .... Da sind alle Zustände der Perlenkette bildlich aufgeführt. Du kannst oben bei Zahl auch eine andere gerade! Zahl (<40) eintragen. Es wird aber sehr schnell sehr viel und ballert die den Bildschirm zu....
C++
  1. #include <vector>
  2. #include <map>
  3. #include <cstdio>
  4. using namespace std;
  5. #include <sstream>
  6. #include <cmath>
  7. #include <stdbool.h>
  8. #include <iomanip>
  9. #include <fstream>
  10. #include <iostream>
  11. #include <string>
  12. #include <stdlib.h>
  13. #include <stdio.h>
  14. #include <algorithm>
  15. vector<int>untenrev;
  16. vector<int>unten;
  17. vector<int>oben;
  18. vector<int>grundket; // Grundkette
  19. vector<int>grundket0; // genullte Grundkette
  20. int zahl=30; // Gerade zahl eingeben!
  21. int begob=1;
  22. int begun=zahl-1;
  23. int x;
  24. int y;
  25. int sz, wz, gz, gsz, gwz, ggz, su;
  26. int nr1=1;
  27. int nr2=1;
  28.  
  29.  
  30. bool prim();// Bool Primzahlprüfung
  31. bool prim(int n){
  32. int x;
  33. if(n<2) return false;
  34. if(n==2) return false;
  35. if(n%2==0) return false;
  36. for(x=3;x<=sqrt(n);x+=2){
  37. if(n%x==0)
  38. return false;
  39. }
  40. return true;
  41. }
  42.  
  43.  
  44. int main(int argc, const char * argv[]) {
  45.  
  46. cout<<"Zahl "<<zahl<<" \n";
  47. // Grundkette herstellen
  48. for(x=1;x<=zahl;x=x+2){
  49. y=x;
  50. grundket.push_back(x);
  51. if(prim(y)==true){
  52. y=0;}
  53. grundket0.push_back(y);
  54. }
  55.  
  56. /* std::cout <<nr1<<". \nob: "; // Probedruck
  57.   for(int x : grundket)
  58.   std::cout<<""<<x<<" ";
  59.   std::cout << '\n';
  60.   std::cout <<nr1<<". \nob: "; // Probedruck
  61.   for(int x : grundket0)
  62.   std::cout<<""<<x<<" ";
  63.   std::cout << '\n';*/
  64.  
  65.  
  66. //Schleife
  67. for(nr2= 1; nr2<=zahl/2;++nr2){
  68.  
  69. //oben und unten herstellen)
  70. for(int v=0;v<=((zahl/2)-1);v++)
  71. {
  72. if(v<=((zahl/4)-1))
  73. oben.push_back(grundket0[v]);
  74. if (v>((zahl/4)-1))
  75. unten.push_back(grundket0[v]);
  76. // std::cout<<"grV: "<<(grundket[v])<<" v: "<<v<<"\n"; //v ist index
  77. // std::cout<<"gV0: "<<(grundket0[v])<<" v: "<<v<<"\n";
  78. }
  79.  
  80.  
  81. // falls am ende nicht dieselbe Zahl, fügt er sie oben ein.
  82. if(oben.size() < unten.size()){
  83. if(prim(zahl/2)==true){
  84. oben.push_back(0);}
  85. else{
  86. oben.push_back(zahl/2);}
  87. }
  88.  
  89. std::cout<<"\n"<<nr2<<". \nob: ";
  90. for(int x : oben)
  91. std::cout<<""<<x<<" ";
  92. std::cout << '\n';
  93.  
  94. untenrev.resize(unten.size());
  95. std::reverse_copy (unten.begin(), unten.end(), untenrev.begin());
  96.  
  97. std::cout <<"un: ";
  98. for(int x : untenrev)
  99. std::cout<<""<<x<<" ";
  100. std::cout << '\n';
  101.  
  102.  
  103. for(int z=0; z<(oben.size()); ++z){
  104. // su=su+(oben[z]+untenrev[z]);
  105. if(oben[z]==0 && untenrev[z]==0){
  106. sz++; gsz++;}
  107. if(oben[z]>0 && untenrev[z]>0){
  108. wz++; gwz++;}
  109. if((oben[z]==0 && untenrev[z]>0) || (oben[z]>0 && untenrev[z]==0)){
  110. gz++; ggz++;}
  111. }
  112.  
  113. //if(sz==0)
  114. std::cout<<". AusWertung: "<<sz<<","<<wz<<","<<gz<<" ";
  115. //std::cout<<" "<<sz<<","<<wz<<","<<gz<<"\n ";
  116. su=0, sz=0, wz=0, gz=0;
  117.  
  118. nr2++;
  119. su=0, sz=0, wz=0, gz=0;
  120. // Verschiebung
  121. // std::cout <<nr2<< ". ";
  122.  
  123. oben.erase(oben.begin());
  124.  
  125. std::cout<<"\n"<<nr2<<". \nob: ";
  126. for(int x : oben)
  127. std::cout <<x<<" ";
  128. std::cout << '\n';
  129.  
  130. untenrev.pop_back();
  131.  
  132. std::cout <<"un: ";
  133. for(int x : untenrev)
  134. std::cout <<x<<" ";
  135. std::cout << '\n';
  136.  
  137.  
  138. for(int z=0; z<(oben.size()); ++z){
  139. // su=su+(oben[z]+untenrev[z]);
  140. if(oben[z]==0 && untenrev[z]==0){
  141. sz++; gsz++;}
  142. if(oben[z]>0 && untenrev[z]>0){
  143. wz++; gwz++;}
  144. if((oben[z]==0 && untenrev[z]>0) || (oben[z]>0 && untenrev[z]==0)){
  145. gz++; ggz++;}
  146. }
  147. //if (sz==0)
  148. std::cout<<". Auswertung: "<<sz<<","<<wz<<","<<gz<<" ";
  149. //std::cout<<" "<<sz<<","<<wz<<","<<gz<<" ";
  150. su=0, sz=0, wz=0, gz=0;
  151.  
  152.  
  153. //grundket.clear();
  154. // grundket0.clear();
  155. oben.clear();
  156. unten.clear();
  157. untenrev.clear();
  158. // nr2++;
  159. std::rotate(grundket0.begin(),grundket0.begin()+1,grundket0.end());
  160. }
  161. return 0;
  162. }



-----------------
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
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    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-2018 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]