Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Primzahlzerlegung einer Zahl

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kouji



Anmeldungsdatum: 12.12.2004
Beiträge: 1

BeitragVerfasst am: 12.12.2004, 19:34    Titel: Primzahlzerlegung einer Zahl Antworten mit Zitat

Hallo!

Versuche nun seit mehreren Tage eine Primzahlzerlegung einer Zahl durch qbasic zu programmieren. Die Faktoren, dessen Produkt die eingegebene Zahl ist, sollen ausgegeben werden. Dabei sind die Faktoren ja Primzahlen und woher soll QBASIC nun wissen welche Zahlen Primzahlen sind?

Hoffe jemand kann mir helfen... weinen

Gruß

Kouji
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 12.12.2004, 19:41    Titel: Antworten mit Zitat

Hm also dein Problem hab ich noch nicht so super durchblickt, aber feststellen, ob eine Zahl eine Primzahl ist, kann man so:
Code:

zahl = 11
IF zahl MOD 2 <> 0 AND zahl MOD 3 <> 0 AND zahl MOD 5 <> 0 AND zahl MOD 7 <> 0 THEN
PRINT "Primzahl !"
ELSE
PRINT "Keine Primzahl !"
END IF

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 12.12.2004, 19:43    Titel: Antworten mit Zitat

Ich weiß nicht, obs einfacher geht, aber du könntest immer wieder so prüfen:

Code:

Anz_Teiler = 0
INPUT Zahl
FOR  Teiler = 1 to Zahl
  IF INT(Zahl / Teiler) = Zahl / Teiler THEN Anz_Teiler = Anz_Teiler + 1
NEXT Teiler
IF Anz_Teiler = 2 THEN
  PRINT "Mit";Anz_Teiler;"Teilern ist";Zahl;"eine Primzahl."
ELSE
  PRINT "Mit";Anz_Teiler;"Teilern ist";Zahl;"keine Primzahl."
END IF


Ist jetzt zwar allgemein ein Programm zum Testen, ob es sich bei einer eingegebenen Zahl um eine Primzahl handelt, aber das kannst du hoffentlich zu deinem Nutzen umwandeln

(Zahl durch 1. Primzahl teilen, wenn möglich -> Teiler und neue Zahl wieder versuchen zu Teilen, wenn nicht -> nächste Primzahl suchen)

Roman


edit: ICC ist mir zuvorgekommen; diese Möglichkeit ist mir gar ncith in den Sinn gekommnen, so, wie ichs gepostet hab, hat es mir mein Mathe-Info-Lehrer beigebracht, ich persönlich hätte aber anstatt

IF INT(a/b) = a/b THEN

sondern

IF a MOD b = 0 THEN

genommen, so gibts sicher noch mehr Möglichkeiten

_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.12.2004, 19:55    Titel: Antworten mit Zitat

Hallo

Man muss die Schleife nicht bis zum Wert der zu prüfenden Zahl laufen lassen. Bis zur Wurzel reicht auch schon.

FOR Teiler = 2 TO INT(SQR(zahl))

Gruss
Skilltronic
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 12.12.2004, 20:01    Titel: Antworten mit Zitat

Dann muss Anz_Teiler aber von Anfang an auf 1 gesetzt werden, da eine Primzahl sonst nur einen Teiler hätte?
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.12.2004, 20:48    Titel: Antworten mit Zitat

Habe diese Aufgabe schon einmal ganz früher (1991) mit GW-BASIC gelöst. Siehe

http://beilagen.dreael.ch/QB/PRIMFAKZ.BAS

Musste damals noch mit DOUBLE (#) gelöst werden, da es dort noch kein LONGINT (&) gab, denn sonst könnte man nur Zahlen bis 32767 zerlegen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 13.12.2004, 00:56    Titel: Dazu habe ich mir Folgendes für die QB-MonsterFAQ vorgemerkt Antworten mit Zitat

Dazu habe ich mir Folgendes für die QB-MonsterFAQ vorgemerkt:

Frage deutsch
~~~~~~~~~~~~~~
Wie führe ich eine Primfaktor-Zerlegung durch ?



Ergänzung
-------------

Einen netten in JavaScript realierten Online-Rechner zur Primfaktorzerlegung
findest Du übrigens unter

http://wthlentner.cablenet.de/javascript/primfaktorzerlegung.html

Es gibt sogar eine Deutsche Internetseite, die sich nur den Primzahlen gewidmet
hat, nämlich http://www.primzahlen.de . Dor steht auch eine Facharbeit über
Primzahlen mit 2 QBasic-Programmen steht unter
http://www.primzahlen.de/files/referent/sra/
zur Verfügung.


Antwort 1
~~~~~~~~~
[ von Philipp Schröter (philipp_schroeter@web.de )per Mail, .11.2003 ]

Ich hab ein Programm zur Zerlegung von Zahlen in ihre Primärzahlen geschrieben.
Das Hauptgerüst stammt aus der Bedienungsanleitung meines CASIO-Taschenrechners
cfx9850. ich hab es in abgeänderter Form in QBasic geschrieben. Hier ist es:

Code:

'***********************************************************************
' PRIMFAK.BAS = Primfaktorzerlegung
' ===========
' b# ist der Primfaktor, wenn teilbar
' e  ist der Exponent der Zahl b# oder von 2
'
' (c) Philipp Schröter (philipp_schroeter@web.de), 26.1.2004
'***********************************************************************
10 CLS : INPUT "Zahl (max.15 Stellen):", z#
IF z# = 0 OR z# = 1 OR z# > 999999999999999# THEN GOTO 10
e = 0
GOTO 25
20 e = e + 1: z# = z# / 2
IF z# = 1 THEN
  IF e > 1 THEN PRINT 2; "^"; e: e = 0: GOTO 90 ELSE PRINT 2: GOTO 90
END IF
25 IF INT(z# / 2) - (z# / 2) = 0 THEN GOTO 20
     'Teilbarkeit durch 2 pruefen
IF e <> 0 THEN IF e > 1 THEN PRINT 2; "^"; e ELSE PRINT 2
e = 0
b# = 3
30 c# = SQR(z#) + 1
40 IF b# - c# >= 0 THEN GOTO 80
'Teilbarkeit durch b# pruefen
IF INT(z# / b#) - (z# / b#) = 0 THEN e = e + 1: z# = z# / b#: GOTO 30
IF e <> 0 THEN
  IF e > 1 THEN PRINT b#; "^"; e: e = 0 ELSE PRINT b#: e = 0
END IF
b# = b# + 2: GOTO 40
80 IF b# = z# THEN e = e + 1
IF e <> 0 THEN IF e > 1 THEN PRINT b#; "^"; e ELSE PRINT b#
IF b# = z# THEN GOTO 90
PRINT z#
90 PRINT "Fertig...Wiederholung mit beliebiger Taste...Beenden mit Esc"
DO
k$ = UCASE$(INKEY$)
LOOP UNTIL k$ <> ""
IF k$ = CHR$(27) THEN CLS : END
GOTO 10



--------------------------------------------------------------------------------
[/code]
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht 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.

 Impressum :: Datenschutz