WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Eratosthenes

 

>>JaBu<<
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 06.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2012, 15:16     Titel: Eratosthenes
  Antworten mit Zitat      
Hallo ,

habe gerade ein Sieb des Erathosthenes programiert und es hat auch funktioniert...... also die Primzahlen ausgeworfen von 2 bis n

jedoch gab er mir noch P [ 2 3 0 5 0 7 0...] an und ich wollte die 0-werte selektieren

Ich schrieb P=P(P>2)

jetzt schrieb er mir aber anstatt der Primzahlen ohne die 0
alle zahlen werte von 2 bis n in anderer schrittfolge auf [ 2 3 4 6 8 ]

ich löschte den eintrag wieder und seit dem funktioniert es gar nicht mehr ....

jetzt werden bei der gleichen funktion auf einmal keien primzahlen mehr ausgeworfen sondern zb [2 3 4 0 6 0 8 0 0 0 ] .... egal ob ich matlab neustarte ein neues skript benutze ... clear clc ... etc

was soll das?

es funktionierte doch

habe nix geändert ausser das ich wieder das gelöscht habe was ich ausprobiert habe " P=P(P>2) "


Code:
function Pn = Eratosthenes(n)


n=input('Obergrenze >2')

P=[2:n]

    for (i=2:n)        
       if P(i)              
          P((2*i):i:n) = 0 ;
       end
       
     
    end  
   
   
  P
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.02.2012, 15:19     Titel:
  Antworten mit Zitat      
Code:
macht keinen sinn da in P keine boolschen sachen stehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
>>JaBu<<
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 06.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2012, 15:24     Titel:
  Antworten mit Zitat      
Es funktionierte doch er gab mir die primzahlen aus ...habe es sicher 7-10 mal getestet

aber tut es nicht mehr wirft jetzt andere werte aus

und habe doch gar nix geändert


ok ~0

aber mein problem ist ja ein anderes
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.02.2012, 15:39     Titel:
  Antworten mit Zitat      
naja da dein quelltext ja unvollständig ist hab ich mal den von wiki genommen. vieleicht findest du dann ja deinen fehler
Code:
N=10000;
gestrichen=zeros(N,1);
P=1;
for i = 2:N
    if not(gestrichen(i))
        P=[P,i];

        for j = i*i:i:N
            gestrichen(j)=1;
        end
    end
 
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
>>JaBu<<
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 06.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2012, 16:12     Titel:
  Antworten mit Zitat      
Keine Ahnung was los ist

bin mir 100 % sicher das ich nix gelöscht habe (zurück funktion hat auhc nix verändert)
und sehe ja wenn ich hochscrolle das dort primzahlen ausgeworfen wurden
für alle bereiche die ich getestet habe

das nervt mich so seit 2 std ich deintallier das einfach
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.02.2012, 16:22     Titel:
  Antworten mit Zitat      
kannst es deinstallieren. aber dein code ist halt einfach falsch.
Code:
n=10;
P=[1:n] ;

    for i=2:n        
       if P(i)~=0              
          P(i^2:i:n) = 0 ;
       end
       
     
    end  
   P=P(P~=0);
   

so siht deine version in richtig aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.02.2012, 18:49     Titel:
  Antworten mit Zitat      
Hallo Winkow,

"if P(i)" ist valider Matlab-Code. Wenn die IF-Bedingung keine skalarer LOGICAL ist, wird implizit dies ausgeführt:
Code:
if all(Expression) && ~isempty(Expression)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 23.02.2012, 07:40     Titel:
  Antworten mit Zitat      
gut zu wissen. danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
>>JaBu<<
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 06.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2012, 14:48     Titel:
  Antworten mit Zitat      
Also die von mir oben genannte Funktion funktioniert ! ich bin nicht verrückt , das ist eine positive erkenntnis....

der fehler lag hier

Code:


da muss 1:n stehen dann klappt deine als auch meine varriante
ebefalls mit
Code:


ich habe das wohl auf 2 geändert weil auch erst ab 2 zahlen ausgeworfen werden sollten.... aber irgednwie verfälscht das das ganze ergebnis
auf

P=2 3 4 0 6 0 8 0 0 0

anstatt der primzahlen reihe

dieser mist hat mich wahnsinnig gemacht .....


mit

Code:


habe ich dann die werte ohne 0 ab 2 auswerfen lassen
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.02.2012, 15:15     Titel:
  Antworten mit Zitat      
versteh jetzt nicht ganz. hast du es jetzt hinbekommen oder nicht?
du hattest auch einen fehler in der formel die ich berichtigt hatte.
Private Nachricht senden Benutzer-Profile anzeigen
 
>>JaBu<<
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 06.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2012, 15:32     Titel:
  Antworten mit Zitat      
ja es klappt auf mit dem weg den ich genommen hatte
ich misste nur P=[1:n] ädnern was ich vorher schonmal hatte und dann auf 2 gegändert hatte ... das war wohl der einzige Fehler....mit der 2 wollte ich bezwecken das die zahlenreihe erst bei 2 startet stattdessen hat er dann eine ganz andere auswertung vorgenommen.

so funktioniert es


Code:
function Pn = Eratosthenes(n)


n=input('Obergrenze >2') ;

P=[1:n];

    for (i=2:n)        
       if P(i)              
          P((2*i):i:n) = 0 ;
       end
       
     
    end  
   
   
  Pn=P(P>=2)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.