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:

Array_Inhalte_ immer einen weiter ach rechts kopieren?

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



Anmeldungsdatum: 17.12.2011
Beiträge: 114

BeitragVerfasst am: 17.08.2012, 15:31    Titel: Array_Inhalte_ immer einen weiter ach rechts kopieren? Antworten mit Zitat

Hi meine Frage die mich gerade beschäftigt ist wenn ich zb ein Array habe.

Ich schreibe im index 0 des Array zb ne 5 rein.
dann will ich eine 6 zb in den index 0 schreiben aber die 5 soll auf den
index 1 kopiert werden. Wenn ich jetzt noch eine neue zahl zb 8 rein schreibe soll 5 auf index 2 und 6 auf index 1 kopiert werden.


Code:


Randomize

Dim array_1(6) As Integer

For i As Integer = 0 To 5

Print "----"

For i As Integer = 0 To 5
   
   array_1(0) = Int (Rnd*5)
   
   If (UBound(array_1)-i) <> 0 Then
   array_1(UBound(array_1)-i) = array_1(UBound(array_1)-(i+1))
   EndIf
   

   
   ? Str(array_1(i))
   
Next

next

Sleep
End





Müsste es nicht ungefähr so funktionieren das ich von rechts nach links den inhalt verschiebe? Also der letzte index kann ruhig immer wegfallen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.08.2012, 16:35    Titel: Antworten mit Zitat

Hallo,

je nachdem, was du vorhast und wie die Performance-Anforderungen fürs Lesen und Schreiben in der Datenstruktur sind, könnte entweder ein arraybasierter Ringpuffer (BTW, brauchst du LIFO oder FIFO?) oder eine Liste mit Insert am Anfang für dich interessant sein:
- http://de.wikipedia.org/wiki/Warteschlange_%28Datenstruktur%29#Implementierung_als_Ringpuffer
- http://www.freebasic-portal.de/tutorials/verkettete-listen-in-freebasic-37.html

Das Umkopieren des gesamten Array-Inhalts bei jedem Einfügen/Löschen eines Elements wäre natürlich auch möglich:
Code:
'Pseudocode:
Für alle i von 0 bis N-1
   Element(i+1) = Element(i)
EndFür
Element(0) = NeueEingabe

Aber wenn das nicht unbedingt so nötig ist, gibt es da auch geschicktere Möglichkeiten, wo eine Einfügeoperation weniger aufwendig ist.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
0oFreako0



Anmeldungsdatum: 17.12.2011
Beiträge: 114

BeitragVerfasst am: 18.08.2012, 08:39    Titel: Antworten mit Zitat

Das Beispiel was Du gepostet hast funzt irgentwie auch nicht richtig. Er verschiebt beim ersten durchlauf den Inhalt richtig danach haut er wieder alles durcheinander.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 18.08.2012, 08:59    Titel: Antworten mit Zitat

Kann eigentlich nicht sein - kannst du mal deine Umsetzung posten?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 18.08.2012, 10:44    Titel: Antworten mit Zitat

ZB.:
Code:
Randomize
Dim As Integer array_1(6), j, i, _
n = UBound(array_1)

For i  = 0 To n
  Print String(n*4+4, "-")

  For j = n To 0 Step -1
    array_1(j) = array_1(j-1)
  Next
  array_1(0) = Int(Rnd*8+1)

  For j = 0 To n
    Print array_1(j);" |";
  Next
  Print

Next
Print String(n*4+4, "-")

Sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
0oFreako0



Anmeldungsdatum: 17.12.2011
Beiträge: 114

BeitragVerfasst am: 18.08.2012, 13:26    Titel: Antworten mit Zitat

THx volta. Nun klappt es.
Nur so ne Frage am Rande. Gibt es noch eine schnellere Variante?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.08.2012, 13:47    Titel: Antworten mit Zitat

Sebastian's Link zum Thema verkettete Listen wäre da Hilfreich wenn auch etwas komplizierter: http://www.freebasic-portal.de/tutorials/verkettete-listen-in-freebasic-37.html

Im Prinzip könnte man nach dem Beispiel eine Liste mit einer Init-Funktion versehen die eine (NULL) Liste mit einer bestimmten grösse der Liste festlegt.

Eine Add-Methode die dann einen neuen Wert an den Anfang 'hängt' und den letzten aus der Liste löscht, damit hätte man dann eine Liste fester grösser/länge und man müsse nicht erst durch die ganze liste per for/next um die werte eins weiter zu verschieben...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 18.08.2012, 18:16    Titel: Antworten mit Zitat

Schneller, da keine Speicherschieberei...
aber nicht einfach zu handhaben grinsen
Code:
Randomize 0815
Dim As Integer array_1(6), j, i, _
n = UBound(array_1)

For i  = 0 To n
  array_1(i) = Int(Rnd*8+1)

  For j = i To 0 Step -1 'Pseudoindex
    Print array_1(j);" ";
  Next
  For j = i+1 To n
    Print array_1(j);" ";
  Next
  Print
Next

Sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 18.08.2012, 18:35    Titel: Antworten mit Zitat

Pointer ftw!
Code:
#Include Once "crt/string.bi"

Dim As Integer array(0 To 5)
For i As Integer = 0 To 5
   array(i) = i
Next

Print "---------------------------------"
For i As Integer = 0 To 5
   Print "Wert von i=" & i & " vorher", array(i)
Next
memmove(@array(1), @array(0), SizeOf(array(0))*(UBound(array)-LBound(array)))
array(0) = 0

Print "---------------------------------"
For i As Integer = 0 To 5
   Print "Wert von i=" & i & " nachher", array(i)
Next
Sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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