Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Taschenrechner mit Batch-Programm

Frage Entwicklung Batch & Shell

Mitglied: Noobstar0815

Noobstar0815 (Level 1) - Jetzt verbinden

17.04.2013 um 13:57 Uhr, 3257 Aufrufe, 19 Kommentare

Hallo =)
Ich habe grade etwas Freizeit auf der Arbeit und da kam mir die Idee: Warum nicht einen Rechner bauen, der mir Primzahlen ausrechnet? Leider stoße ich sehr früh schon auf ein Problem

Ich habe leider keine Ahnung wie man mit Batch rechnen muss. Gedacht habe ich es mir so:
Ich gebe eine Zahl ein, zum Beispiel 100. Dann soll die Datei nacheinander erst durch 99, dann durch 98 etc rechnen. Das könnte man noch ungefähr so lösen:
01.
set zahl1=100 
02.
set zahl2=%zahl1% (oder nicht?) 
03.
 
04.
:rechnen 
05.
 
06.
set zahl2=%zahl2%-1 (Geht dies oder wie kann ich es sonst lösen, dass zahl2 jedesmal um 1 kleiner wird?) 
07.
 
08.
set /a %zahl1%/%zahl2% 
09.
 
10.
if %zahl2%==0 goto END 
11.
 
12.
goto RECHNEN 
13.
 
14.
:end 
15.
pause
Soweit das halbwegs einfache. Wo ich Probleme mit habe ist folgendes: Wie schaffe ich es, dass mir das Batch-Programm alle Nachkommastellen anzeigt, oder mindestens 20? Wie schaffe ich es, dass das Programm automatisch aufhört, sobald es keine Nachkommastellen gibt (es also keine Primzahl ist)?
Ich denke da wird es noch mehr Probleme geben, die mir grade nicht einfallen hehe.
Wisst ihr da weiter, oder ratet ihr mir besser komplett davon ab?
Mit freundlichen Grüßen Noobstar0815
Mitglied: MrNetman
17.04.2013 um 14:07 Uhr
Villeicht solltest du rechts oben mal suchen, wie andere das machen:
http://it074.de/wiki/Primzahlen%28Batch%29
und etwas Theorie:
http://www.mathe.tu-freiberg.de/~hebisch/cafe/primzahlen.html

Du hast ja noch gar nicht wirklich angefangen ...

Gruß
Netman
Bitte warten ..
Mitglied: SarekHL
17.04.2013, aktualisiert um 14:14 Uhr
Zitat von Noobstar0815:
Ich habe leider keine Ahnung wie man mit Batch rechnen muss.

Ich auch nicht ... so etwas würde ich immer mit VB bzw. VBS machen.

Aber laß mich eine Anmerkungen zu Deinem Lösungsweg machen:

Gedacht habe ich es mir so:
Ich gebe eine Zahl ein, zum Beispiel 100. Dann soll die Datei nacheinander erst durch 99, dann durch 98 etc rechnen.

Damit verschwendest Du bei der Primzahlensuche wertvolle Rechenzeit. Wenn Deine Zahl z.B. 117 ist, brauchst Du nicht alle Zahlen von 2 bis 116 als Divisor nehmen, sondern lediglich bis zu 117/2 -> 58,5 -> abgerundet 58. Denn alle Zahlen darüber sind uninteressant!

Außerdem kannst Du auch alle geraden Zahlen ab 4 weglassen, denn wenn irgendeine Zahl davon als Divisor in Frage käme, hätte es auch schon mit der 2 geklappt.
Bitte warten ..
Mitglied: Noobstar0815
17.04.2013, aktualisiert um 14:19 Uhr
Zitat von SarekHL:
> Zitat von Noobstar0815:
> ----
> Ich habe leider keine Ahnung wie man mit Batch rechnen muss.

Ich auch nicht ... so etwas würde ich immer mit VB bzw. VBS machen.

Aber laß mich eine Anmerkungen zu Deinem Lösungsweg machen:

> Gedacht habe ich es mir so:
> Ich gebe eine Zahl ein, zum Beispiel 100. Dann soll die Datei nacheinander erst durch 99, dann durch 98 etc rechnen.

Damit verschwendest Du bei der Primzahlensuche wertvolle Rechenzeit. Wenn Deine Zahl z.B. 117 ist, brauchst Du nicht alle Zahlen
von 2 bis 116 als Divisor nehmen, sondern lediglich bis zu 117/2 -> 58,5 -> abgerundet 58. Denn alle Zahlen darüber
sind uninteressant!

Außerdem kannst Du auch alle geraden Zahlen ab 4 weglassen, denn wenn irgendeine Zahl davon als Divisor in Frage käme,
hätte es auch schon mit der 2 geklappt.

Hallo SarkHL, mit dem alles über 58 ist unintressant hast du recht, allerdings liegst du mit dem alle graden Zahlen ab 4 falsch. Schauen wir uns 115 an, ist nicht durch 2 oder 4 teilbar, allerdings durch 5 und dadurch keine Primzahl mehr =)

Naja, aufgrund eines Denkfehlers meinerseits lasse ich die Idee mit dem Rechner lieber sein, trotzdem danke euch =)

EDIT: Ich wollte eigentlich neue Primzahlen ausrechnen (ja ich weiß dass sie elendig lang sind), dabei habe ich vergessen das CMD ja nur mit 31-bit-Zahlen rechnen kann hehe
Bitte warten ..
Mitglied: SarekHL
17.04.2013 um 14:25 Uhr
Zitat von Noobstar0815:
Hallo SarkHL, mit dem alles über 58 ist unintressant hast du recht, allerdings liegst du mit dem alle graden Zahlen ab 4 falsch. Schauen wir uns 115 an, ist nicht durch 2 oder 4 teilbar, allerdings durch 5 und dadurch keine Primzahl mehr =)

Und seit wann ist die 5 eine gerade Zahl???
Bitte warten ..
Mitglied: Noobstar0815
17.04.2013 um 14:29 Uhr
Ich sprach nie von geraden Zahlen.
Zur Erläuterung, eine Primzahl ist nur durch 1 und sich selbst teilbar. Ob eine Zahl nun gerade oder ungerade ist, ist egal. Solltest du eine Zahl durch eine andere Zahl teilen, und es kommt eine GANZE Zahl raus, weißt du, dass Zahl1 keine Primzahl ist.
Bitte warten ..
Mitglied: SarekHL
17.04.2013, aktualisiert um 14:35 Uhr
Zitat von Noobstar0815:
Ich sprach nie von geraden Zahlen.

Doch

Du sagtest, daß ich mit meiner Aussage, daß alle geraden Zahlen ab 4 als Divisor uninteressant sind, falsch läge. Und dann hast du als Beispiel die Dividierbarkeit der 115 durch 5 angeführt. Lies noch mal, was Du geschrieben hast ...
Bitte warten ..
Mitglied: Noobstar0815
17.04.2013 um 14:38 Uhr
Meh... :D
Also:
RICHTIGSTELLUNG
Du hast recht, die einzige GERADE Zahl mit der man rechnen muss ist 2, allerdings darf man die ungeraden nicht vergessen.
So richtig? :D

PS: Ich kann mich grade nicht mehr so gut konzentrieren, sitze schon 6 Stunden vorm PC
Bitte warten ..
Mitglied: Noobstar0815
17.04.2013 um 14:40 Uhr
Achso, weitergehen brauch man generell nicht versuchen eine Zahl zu prüfen, ob es eine Primzahl ist, wenn die letzte Ziffer gerade ist... :D
Bitte warten ..
Mitglied: SarekHL
17.04.2013, aktualisiert um 14:46 Uhr
Zitat von Noobstar0815:
Achso, weitergehen brauch man generell nicht versuchen eine Zahl zu prüfen, ob es eine Primzahl ist, wenn die letzte Ziffer gerade ist... :D

Richtig .. Darum habe ich als Beispiel ja auch die 117 genommen und nicht wie Du ursprünglich die 100 0
Bitte warten ..
Mitglied: Snowman25
17.04.2013 um 16:00 Uhr
Hey Noobstar0815,

warum macht man sich eigentlich die Mühe, Anleitungen zu schreiben?
Rechnen in Batch

Gruß
Snow
Bitte warten ..
Mitglied: DerWoWusste
17.04.2013, aktualisiert um 21:22 Uhr
mit dem alles über 58 ist unintressant hast du recht
Nö, nicht wirklich. Der größte Primfaktor irgendeiner zusammengesetzten Zahl kann Ihre Quadratwurzel sein, nicht ihre Hälfte.
Bitte warten ..
Mitglied: Noobstar0815
18.04.2013 um 09:33 Uhr
Snowman, hatte über Google leider nichts gefunden, tut mir leid.

DerWoWusste, spontan macht das für mich gar keinen Sinn. Weil demnach müsste es eine ganz Zahl geben, die geringer als 2 aber größer als 1 ist. Weil durch 1 ist jede ganze Zahl teilbar und durch 2 wären wir schon wieder bei dem Thema mit alles was größer als die Hälfte ist, ist unintressant.
Bitte warten ..
Mitglied: DerWoWusste
18.04.2013 um 09:45 Uhr
Spontan verweise ich da mal auf http://www.mathematik.de/ger/fragenantworten/erstehilfe/primfaktorzerle ... da kannst Du das mit der Quad.-Wuzel mal nachlesen.
Bitte warten ..
Mitglied: Noobstar0815
18.04.2013 um 09:55 Uhr
Ok, zum klarstellen : Der größte Primfaktor kann nicht größer als die Hälfte sein. Es kann genau so groß sein wie die Hälfte, aber nicht größer.
Bitte warten ..
Mitglied: DerWoWusste
18.04.2013 um 10:04 Uhr
Text gelesen? Der gr. PF kann nicht größer als die QWurzel sein - das versuche ich Dir nahe zu bringen.
Bitte warten ..
Mitglied: Apop85
19.04.2013, aktualisiert 20.04.2013
Hallo @Noobstar0815

Hatte vor kurzem die selbe Idee und hab dazu eine Anleitung geschrieben:
http://www.administrator.de/wissen/berechnen-auf-nahezu-beliebige-komma ...

Zwar nicht direkt das selbe aber theoretisch könntest du einen counter einbauen der von x : 1 anfängt und bei x : 100 aufhört
Dann müsstest du dazu noch die Ausgabe prüfen ob diese aus Nullen beseteht. z.B. das es nach drei Nullen hintereinander sagt die Zahl ist (sofern nicht 1 oder die eingegebene Zahl) keine Primzahl... Nachteil bei dieser Methode ist, dass wenn grössere Zahlen angegeben werden diese wohl etwas länger gehen zum berechnen.

Viel Spass

Lg Apop
Bitte warten ..
Mitglied: Apop85
20.04.2013, aktualisiert 21.04.2013
Hier dein Primzahlenrechner... Sogar mit "Luxus" Ladebalken und Fortschrittanzeige ;) Jedoch besitzt er einen Fehler... wenn das Resultat eingabe : counter z.b. 1.000012 ergibt (z.B. bei 31333) erhält er nur 1.0000 und denkt dass dies keine Primzahl ist... er funktioniert (Durch einschränkungen des CMD) in dieser Ausführung bis +/- 213999 (Bis dahin hat er mir noch richtig gerechtnet). Hab aber noch eine Abfrage gemacht ob er die Zahl überhaubt rechnen kann (Zeile 24)

Ich berechne hier bis zur hälfte der eingegebenen Zahl... danach kommt ja eh nur noch 0.irgendwas raus und wenn er schon soweit gerechnet hat weiss er ja dass es eine Primzahl ist

01.
Versehentlich den falschen Beitrag editiert :(  
02.
und hab das alte Beispiel nicht mehr aber optimierte  
03.
Verision die die Rechnung auf 30 Kommastellen prüft  
04.
steht unten bei meinem nächsten Beitrag.
Und wie in der vorherigen Antwort schon erwähnt... je grösser die Zahl umso länger rechnet er...

Zitat von DerWoWusste:
Text gelesen? Der gr. PF kann nicht größer als die QWurzel sein - das versuche ich Dir nahe zu bringen.
Das hab ich hier jetzt noch nicht umgesetzt könnte man aber theoretisch noch machen mit

01.
set /a QWT=%counter%*%counter% 
02.
if %QWT% geq %eingabe% set "ausgabe=Ist eine Primzahl!" & goto Done
Gruss Apop
Bitte warten ..
Mitglied: MrNetman
20.04.2013 um 10:08 Uhr
Super ...
macht Spaß

Gruß
Netman
Bitte warten ..
Mitglied: Apop85
21.04.2013, aktualisiert um 15:46 Uhr
So und noch abschliessend... Nochmals der selbe Rechner nur dass er jetzt das Resultat erst auf 30 Kommastellen überprüft bevor er sagt dass es keine Primzahl ist.

Ich denke das sollte doch ausreichen um den Thread als gelöst zu markieren? ;) (Kann noch beliebig ausgeweitet werden denke ich, Jedenfalls kann die Kommastelle auf die Maximale Länge einer Variable überprüft werden... k.A. wie viele Zeichen DOS vergleichen kann...)

EDIT: habs zuerst falsch interpretiert, habs aber Korrigiert. Zahlen bis 999'999 rechnet er noch richtig danach ist Sense warum weiss ich nicht... eigentlich müsste es bis 20'000'000 gehen da Dos ja Summen bis 2Mrd berechnen sollte... K.A. warum das so ist

01.
@echo off & setlocal  
02.
TITLE Primzahlenpruefer 
03.
 
04.
:RESET 
05.
echo Gib hier deine Zahl ein (Max.:999'999): 
06.
set /p eingabe= 
07.
set counter=0 
08.
set "a=..." & set "b=..." 
09.
set "c=..." & set "d=..." 
10.
set "e=..." & set "f=..." 
11.
set "g=..." & set "h=..." 
12.
set "i=..." & set "j=..." 
13.
set eingabetmp=%eingabe% 
14.
set /a ziel=%eingabe%/2 
15.
set /a ziel+=1 
16.
if %eingabe% geq 1000000 ( set "ausgabe=ist zum berechnen zu gross!" & goto Done ) 
17.
set counterz=0 
18.
goto Ziel 
19.
 
20.
:Berechnung 
21.
set /a operator=%eingabe%*100 
22.
set /a counter+=1 
23.
set calctimer=0 
24.
set /a div0=%operator%/%counter% 
25.
set /a div1=%div0%/100 
26.
set "div2=%div0:~-2% 
27.
set /a prozent=%counter%*100 
28.
set /a prozent=%prozent%/%ziel% 
29.
set "ausgabe2=" & set "divb=" 
30.
set "ausgabe2=" & set "check=" 
31.
cls 
32.
echo. 
33.
echo            Primzahl Ja oder Nein? 
34.
echo -------------------------------------------------- 
35.
echo Berechnung: %eingabe% : %counter% = %div1%.%div2% 
36.
echo -------------------------------------------------- 
37.
echo Ziel      : %eingabe% : %ziel% = 
38.
echo -------------------------------------------------- 
39.
echo -------------------------------------------------- 
40.
echo        Berechnung abgeschlossen:  
41.
echo !!%a%%b%%c%%d%%e%%f%%g%%h%%i%%j%!! 
42.
echo             %prozent% Prozent 
43.
echo -------------------------------------------------- 
44.
if "%counter%" neq "1" ( if "%counter%" neq "%ziel%" ( if "%div2%" == "00" ( goto CALCULATE ) ) ) 
45.
if "%counter%" == "%ziel%" set "ausgabe=ist eine Primzahl!" & goto Done 
46.
if %prozent% geq 10 set "a=III" 
47.
if %prozent% geq 20 set "b=III" 
48.
if %prozent% geq 30 set "c=III" 
49.
if %prozent% geq 40 set "d=III" 
50.
if %prozent% geq 50 set "e=III" 
51.
if %prozent% geq 60 set "f=III" 
52.
if %prozent% geq 70 set "g=III" 
53.
if %prozent% geq 80 set "h=III" 
54.
if %prozent% geq 90 set "i=III" 
55.
if %prozent% geq 98 set "j=III" 
56.
goto Berechnung 
57.
 
58.
:Done 
59.
cls 
60.
echo. 
61.
echo            Primzahl Ja oder Nein? 
62.
echo -------------------------------------------------- 
63.
echo Berechnung: %eingabe% : %counter% = %div1%.%div2% 
64.
echo -------------------------------------------------- 
65.
echo Die Zahl %eingabe% %ausgabe% 
66.
echo -------------------------------------------------- 
67.
echo Um den dividend %counter% zu uebergehen j eingeben. 
68.
set /p next= 
69.
if "%next%" == "j" goto Berechnung 
70.
goto RESET 
71.
 
72.
:CALCULATE 
73.
cls 
74.
set /a calctimer+=1 
75.
echo            Primzahl Ja oder Nein? 
76.
echo -------------------------------------------------- 
77.
echo Berechnung: %eingabe% : %counter% = %div1%.%check% 
78.
echo -------------------------------------------------- 
79.
echo Ziel      : %eingabe% : %ziel% = 
80.
echo -------------------------------------------------- 
81.
echo -------------------------------------------------- 
82.
echo        Berechnung abgeschlossen:  
83.
echo !!%a%%b%%c%%d%%e%%f%%g%%h%%i%%j%!! 
84.
echo             %prozent% Prozent 
85.
echo -------------------------------------------------- 
86.
set /a diva=%eingabetmp%/%counter% 
87.
if "%diva%" == "0" ( set "ausgabe2=0" & set "divb=0" ) 
88.
if "%diva%" neq "0" ( set "ausgabe2=%diva%" & set /a divb=%diva%*%counter% ) 
89.
if %diva% GEQ 1 ( set /a eingabetmp=%eingabetmp%-%divb% ) 
90.
set /a eingabetmp=%eingabetmp%*10 
91.
if "%calctimer%" == "1" goto CALCULATE 
92.
if defined check set "check=%check%%ausgabe2%"  
93.
if not defined check set "check=%ausgabe2%" 
94.
if "%check%" == "000000000000000000000000000000" set "ausgabe=Ist keine Primzahl sie ist durch %counter% Teilbar" & goto Done 
95.
if "%calctimer%" == "31" goto Berechnung   
96.
goto CALCULATE 
97.
 
98.
:Ziel 
99.
cls 
100.
echo. 
101.
echo Zielwert wird berechnet! Einen Augenblick bitte! 
102.
set /a counterz+=1 
103.
set /a QWT=%counterz%*%counterz%  
104.
echo           %counterz%*%counterz% = %QWT% 
105.
if %QWT% geq %eingabe% set /a ziel=%counterz% & goto Berechnung 
106.
goto Ziel
P.S
wenn man den Startwert vertauscht mit dem Zielwert bei ":Ziel" berechnet er nur ab der Zahl die zum Quadrat grösser oder gleich der Eingabe ist... somit können auch etwas grössere Zahlen berechnet werden... Ich hab jetzt auch die Multiplikation heruntergestellt auf 100 da die Berechnung so oder so auf 30 Kommastellen stattfindet... Tiefer als 100 würde ich jedoch nicht gehen da man ja Kommastellen zum prüfen braucht. So bleiben ihm doch noch zwei... alles was mit ,00 endet überprüft er bis zur 30. Kommastelle...
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...