Problem mit Console und PrintN()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Problem mit Console und PrintN()

Beitrag von blbltheworm »

Hallo zusammen,
ich hab ein kleines Programm mit der PureBasic Demo geschrieben.
Dieses Programm soll alle Primzahlen zwischen 0 und einem bestimmten Wert errechnen.
Das macht er dann auch, aber bei der Ausgabe der Zahlen stoße ich auf ein Problem.
Ich Schreib alle Zahlen in eine Liste und möchte diese mit folgendem Code dann auf den Bildschirm bringen:

Code: Alles auswählen

ResetList(Prims())
j=0

ClearConsole()
PrintN("Alle Primzahlen von 0 bis " + Str(Upper) + ":")
PrintN("2")
Repeat
  NextElement(Prims())
  PrintN(Str(Prims()))
  j=j+1
Until j= CountList(Prims())
Wenn ich das jedoch mache, dann kann ich in der Console nicht hochscrollen, sondern nur runter.
Das heißt, dass ich gar nicht alle Primzahlen einsehen kann, sondern nur die letzten 20, oder so.
Kann mir wer sagen, wie ich es hinbekomme, dass der User nacher durch die Zahlen scrollen kann??
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag von wichtel »

Nur über API calls.
Da hatte ich mal was im alten Forum.

Code: Alles auswählen

Global stdout.l, stdin.l, nl$

nl$=Chr(13)+Chr(10)

Procedure myPrintN(text$)
  text$+nl$
  size.l=Len(text$) 
  bWritten.l 
  writeconsole_(stdout,@text$,size, @bWritten, #Null) 
EndProcedure

Procedure myPrint(text$)
  size.l=Len(text$) 
  bWritten.l 
  writeconsole_(stdout,@text$,size, @bWritten, #Null) 
EndProcedure

Procedure.s myInkey() ; geht nur richtig wenn SetConsoleMode benutzt wurde
  input$=Space(256)
  size.l=1 
  bRead.l 
  readconsole_(stdin,@input$,size, @bRead, #Null) 
  ProcedureReturn input$
EndProcedure

allocconsole_()
stdout=GetStdHandle_(#STD_OUTPUT_HANDLE) 
stdin=GetStdHandle_(#STD_INPUT_HANDLE) 
oldmode.l
GetConsoleMode_(stdin,@oldmode) ; alten mode merken
SetConsoleMode_(stdin,oldmode | #ENABLE_PROCESSED_INPUT) ; neuen mode setzen, damit readconsole wie Inkey arbeitet


For i=1 To 100
  myPrintN("Hallo "+Str(i))
  
Next i

Repeat
  a$=myInkey()
Until a$<>""

SetConsoleMode_(stdin,oldmode) ; neuen mode setzen, damit readconsole wie Inkey arbeitet
freeconsole_()

PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Das geht nicht.
Öffne dazu ein Fenster und bspw. ein [c]ListViewGadget()[/c] und schreibe die Zahlen dort rein.

Aber noch was anderes. Diese Schleife

Code: Alles auswählen

Repeat 
  NextElement(Prims()) 
  PrintN(Str(Prims())) 
  j=j+1 
Until j= CountList(Prims()) 
ist ultralangsam.
Du musst wissen, dass [c]CountList()[/c] zum Zählen der Listenelemente jedesmal alle Listenelemente durchzählt, was bei einer hohen Anzahl an Elementen schnell auffällt.
Hast du also 100 Elemente, machst du insgesamt 100 * 100 = 10.000 Durchläufe durch die Liste.

Benutze also lieber die Schleife aus der Hilfe oder eine der folgenden:

Code: Alles auswählen

ResetList(Prims())
While NextElement(Prims()) 
  PrintN(Str(Prims()))
Wend
Oder:

Code: Alles auswählen

ForEach Prims()
  PrintN(Str(Prims()))
Next
Letztere Methode ist am einfachsten.

///Edit:
@Wichtel: Klar, mit API gehts, aber nicht mit der Demo.
Zuletzt geändert von NicTheQuick am 22.09.2004 20:20, insgesamt 1-mal geändert.
Bild
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Äh, Wichtel, Apis mit der Demo? :?
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag von wichtel »

Ömpf... :oops:
Man sollte lesen.
Aber warum DEMO, das Geld ist gut investiert <grins><Kopf rett>
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

Danke für den Tipp im Bezug auf CountList(), das hat spürbar was gebracht.

Eine Frage, befindet sich hier jemand im Forum, der abwiegen kann, wo die Vor/Nachteile zwischen Pure, Power und Visual Basic liegen??
Oder sind hier alle voreingenommen??
Benutzeravatar
redacid
Beiträge: 581
Registriert: 29.08.2004 17:06

Beitrag von redacid »

blbltheworm hat geschrieben:Oder sind hier alle voreingenommen??
:lol:

...natürlich sind hier (fast) alle voreingenommen... :-) Aber warte es ab, es kommen sicherlich noch einige wirklich gute Antworten.

Ich persönlich habe nur kurz mit VB "gespielt" und es nie wirklich erlernt. Somit kann ich dazu eigentlich nicht viel sagen. Was mir da missfällt ist die Tatsache, dass immer diese Runtime-DLLs vorhanden/mitgeliefert sein müssen und auch dewegen die Programme im Vergleich zu PureBasic-Executables einfach riesig sind. Bei 200 GB-Festplatten heutzutage mag dies zu verschmerzen sein, aber ich finde es doch schöner, wenn alles kompakt ist.

PowerBasic habe ich nie benutzt.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag von Falko »

Unterschiede gibt es bei jeder Programmiersprache.

Als erstes wäre schon mal der preisliche Unterschied incl.
weiterer Updates.

Ich selbst habe noch GFABasic-GB32 (16 u. 32 Bit-Version), GFADOS,
Powerbasic DOS 3.5, und von Powerbasic DLL-COMPILER.

Als ich mir damals wegen dem Untergang von GFA-Basic bei Conradelektronik mal die Purebasic (TOPO-Version) zum Testen gekauft hatte, merkte ich doch sehr schnell wie leicht man damit Progs erstellen konnte und das, was es gegenüber GFA oder auch VBasic hervorhebt, sind die kleinen fertigen EXE-Programme. Man kann zwar jetzt nicht groß Vergleiche ziehen, aber es läßt sich fast alles damit programmieren, was sonst auch ein teuerer Compiler kann.

Ich kann nicht darüber klagen und warte gespannt auf das nächste
Update. :mrgreen:
Wenn man dann noch die Vollversion besitzt, dann weiß man schon
einen sehr großen Unterschied gegenüber der Demoversion von PB. :mrgreen:

MfG Falko
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag von wichtel »

@blbltheworm:
voreingenommen oder einfach überzeugt?
Es kommt darauf an was du vor hast. Wenn du schnell und einfach kleine Programme bauen willst die viel hermachen kommst du an PB nicht vorbei.
Wenn die Wert darauf legst Schnittstellen zu allen OfficeProdukten eingebaut zu haben, dann eher VB. Nur in VB tippst du eine Seite um ein Fenster zu öffnen und dein Programm braucht hinterher noch runtime libs.
Mit PB machen 30 Zeilen bereits ein nettes GUI und es kommt eine sehr klein exe heraus.
Ich habe in der Steinzeit mit Omikron Basic auf dem Atari 1040STF gabastelt. Dazwischen mal mit TurboPascal auf dem 286er. In PB fühlte ich mich dann sofort wie zu Hause.
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Antworten