Πέμπτη 16 Αυγούστου 2018

Αναθεώρηση 4 Έκδοση 9.4

Στη νέα αναθεώρηση προστέθηκε η δυνατότητα να ορίζουμε περιοχή τιμών σε διαστάσεις πίνακα. Τα παλαιότερα προγράμματα τρέχουν κανονικά. Σε αυτά άλλαζε μόνο η Βάση, από 0 σε 1 ή το ανάποδο, και μπορούσαμε ανά πίνακα να έχουμε διαφορετική βάση. Όμως αυτή ήταν κοινή σε όλες τις διαστάσεις ενός πίνακα (μέγιστο οι δέκα διαστάσεις).
Επιπλέον έχει τροποποιηθεί και η Διάσταση() ώστε να γυρνάει και την περιοχή κάθε διάστασης.  Ενώ γύρναγε το μέγεθος κάθε διάστασης, τώρα μπορεί να γυρνάει και τα όρια (πχ αν τα όρια είναι -4 και 4 τότε έχουμε 9 ως μέγεθος διάστασης.
Η εντολή Πίνακας κάνει και αλλαγές διάστασης σε υφιστάμενους πίνακες. Επιπλέον μπορεί να "ισοπεδώσει" την βάση. Με μια εντολή Πίνακας Βάση 0 στο Α(), τα 3 και -4 γίνονται 0 και τα 10 και 8 γίνονται 7 και 12, ώστε να διατηρούνται τα μεγέθη.



Πίνακας α(3 έως 10, -4 έως 8)
αρχή1=Διάσταση(α(),1, 0)
τέλος1=Διάσταση(α(),1, 1)
αρχή2=Διάσταση(α(),2, 0)
τελος2=Διάσταση(α(),2, 1)
Τύπωσε "Διαστάσεις:"; Διάσταση(α())
Τύπωσε "Συνολικά στοιχεία:"; Μήκος(α())
Τύπωσε "Πίνακας των ";Διάσταση(α(),1);" γραμμών Χ ";Διάσταση(α(),2);" στηλών"
Τύπωσε  "Πρώτη διάσταση από ";αρχή1; " έως "; τέλος1
Τύπωσε  "Δεύτερη διάσταση από ";αρχή2; " έως "; τέλος2

Dim a(3 to 10, -4 to 8)
lbound1=dimension(a(),1, 0)
ubound1=dimension(a(),1, 1)
lbound2=dimension(a(),2, 0)
unound2=dimension(a(),2, 1)
Print "Dimensions:";Dimension(a())
Print "Total items:";Len(a())
Print "Array of ";Dimension(a(), 1);" rows X ";Dimension(a(),2);" columns"
Print "First dimension form ";lbound1;" to "; ubound1
Print "Second dimension from"; lbound2; " to "; unound2




Ένα ερώτημα που μπαίνει καμιά φορά είναι στο πώς γεμίζει ένας πίνακας. Δηλαδή αν βάλουμε συνεχόμενα τιμές από το πρώτο μέχρι το τελευταίο στοιχείο, σαν να ήταν μονοδιάστατος, ενώ ο πίνακας είναι δυο διαστάσεων;
Λοιπόν αυτό έχει να κάνει και με το πώς αυξάνει ένας πίνακας, δυο διαστάσεων. Στη Μ2000 ο κανονικός τρόπος είναι "αντίστροφος" από τον OLE τρόπο που χρησιμοποιεί η Visual Basic 6 (και με την οποία είναι γραμμένος ο διερμηνευτής της Μ2000).
Ακολουθεί ένα παράδειγμα στα αγγλικά. Στα ελληνικά για να φτιάξουμε έναν OLE Πίνακα δίνουμε το Πίνακας OLE με τα υπόλοιπα. Ουσιαστικά με τον κανονικό πίνακα γεμίζουμε σειρές, και με τον OLE στήλες.
Εδώ θα κάνουμε ακριβώς το γέμισμα που μπορούμε. Στον κανονικό πίνακα θα βάλουμε μια σειρά ακόμα, ενώ στον τύπου OLE θα βάλουμε μια στήλη. Δεν μπορούμε να αλλάξουμε τύπο σε ένα πίνακα. Ακόμα και αν μηδενίσουμε τις διαστάσεις πχ Πίνακας Α() θα παραμείνει ο τύπος ως έχει.a
Όπως βλέπουμε οι δυο τύποι πινάκων μπορούν να συνυπάρχουν.







m=lambda x ->{
      x++
      =x
}
\\ normally numbers fill first the last dimension
\\ one row at a time
dim a(-2 to 2, -1 to 1)<<m()
Print "normal array"
For i=-2 to 2 {
      print i,")",
      For j=-1 to 1 {
            Print j;")";a(i, j),
      }
      Print
}
m=lambda x ->{
      x++
      =x
}
\\ Ole means arrays with same structure as an Ole array
\\ numbers fill first the first dimension
\\ one column at a time
dim Ole b(-2 to 2, -1 to 1)<<m()
Print "Ole type -reversed array"
For i=-2 to 2 {
      print i,")",
      For j=-1 to 1 {
            Print j;")";b(i, j),
      }
      Print
}
\\ flatten base to 1 for all dimensions
dim base 1 to b()
For i=1 to 5 {
      print i,")",
      For j=1 to 3 {
            Print j;")";b(i, j),
      }
      Print
}






m=lambda x ->{
      x++
      =x
}
\\ normally numbers fill first the last dimension
\\ one row at a time
dim a(-2 to 2, -1 to 1)<<m()
Print "Normal array"
For i=-2 to 2 {
      print i,")",
      For j=-1 to 1 {
            Print j;")";a(i, j),
      }
      Print
}
dim a(-2 to 3, -1 to 1) ' this is redim
Print "Add a row to normal array"
na=each(a(), -3, -1)
While na {Return na, na^:=m()} ' add  row 3) 16 17 18
For i=-2 to 3 {
      print i,")",
      For j=-1 to 1 {
            Print j;")";a(i, j),
      }
      Print
}

m=lambda x ->{
      x++
      =x
}
\\ Ole means arrays with same structure as an Ole array
\\ numbers fill first the first dimension
\\ one column at a time
dim Ole b(-2 to 2, -1 to 1)<<m()
Print "Ole type -reversed array"
For i=-2 to 2 {
      print i,")",
      For j=-1 to 1 {
            Print j;")";b(i, j),
      }
      Print
}
\\ flatten base to 1 for all dimensions
dim base 1 to b()
Print "Flatten base to 1"
For i=1 to 5 {
      print i,")",
      For j=1 to 3 {
            Print j;")";b(i, j),
      }
      Print
}
Dim base 1, b(5, 4)
Print "Add a column to Ole array"
na=each(b(), -5, -1)
While na {Return na, na^+1:=m()} ' add  column 16, 17, 18, 19,  20
For i=1 to 5 {
      print i,")",
      For j=1 to 4 {
            Print j;")";b(i, j),
      }
      Print
}


Output
normal array
  -2)  -1)1     0)2     1)3 
  -1)  -1)4     0)5     1)6 
   0)  -1)7     0)8     1)9 
   1)  -1)10    0)11    1)12
   2)  -1)13    0)14    1)15
Add a row to normal array
  -2)  -1)1     0)2     1)3 
  -1)  -1)4     0)5     1)6 
   0)  -1)7     0)8     1)9 
   1)  -1)10    0)11    1)12
   2)  -1)13    0)14    1)15
   3)  -1)16    0)17    1)18


Ole type -reversed array
  -2)  -1)1     0)6     1)11
  -1)  -1)2     0)7     1)12
   0)  -1)3     0)8     1)13
   1)  -1)4     0)9     1)14
   2)  -1)5     0)10    1)15
Flatten base to 1
   1)   1)1     2)6     3)11
   2)   1)2     2)7     3)12
   3)   1)3     2)8     3)13
   4)   1)4     2)9     3)14
   5)   1)5     2)10    3)15
Add a column to Ole array
   1)   1)1     2)6     3)11    4)16
   2)   1)2     2)7     3)12    4)17
   3)   1)3     2)8     3)13    4)18
   4)   1)4     2)9     3)14    4)19
   5)   1)5     2)10    3)15    4)20


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.