Πίνακας

Πίνακας

Μέτριο

Οδηγίες

Δίνεται μια συμβολοσειρά που αναπαριστά έναν πίνακα αριθμών, επέστρεψε τις γραμμές και τις στήλες αυτού του πίνακα.

Έτσι, δίνεται μια συμβολοσειρά με ενσωματωμένες αλλαγές γραμμής, όπως:

9 8 7
5 3 2
6 6 7

που αναπαριστά αυτόν τον πίνακα:

    1  2  3
  |---------
1 | 9  8  7
2 | 5  3  2
3 | 6  6  7

ο κώδικάς σου θα πρέπει να μπορεί να βγάλει:

  • Μια λίστα με τις γραμμές, διαβάζοντας κάθε γραμμή από αριστερά προς τα δεξιά ενώ κινείσαι από πάνω προς τα κάτω στις γραμμές,
  • Μια λίστα με τις στήλες, διαβάζοντας κάθε στήλη από πάνω προς τα κάτω ενώ κινείσαι από αριστερά προς τα δεξιά.

Οι γραμμές για τον πίνακα του παραδείγματός μας:

  • 9, 8, 7
  • 5, 3, 2
  • 6, 6, 7

Και οι στήλες του:

  • 9, 5, 6
  • 8, 3, 6
  • 7, 2, 7

Νέες έννοιες στην AWK

Αυτή είναι η πρώτη άσκηση όπου η λύση δεν είναι ένα σενάριο "main". Ο στόχος είναι να γράψεις μια βιβλιοθήκη από συναρτήσεις που θα συμπεριληφθεί σε άλλα προγράμματα awk. Υπάρχουν αρκετές ενδιαφέρουσες νέες έννοιες που θα δεις σε αυτή την άσκηση.

Οι παρακάτω ενότητες που έχουν τη σήμανση "(gawk)" είναι ειδικά επεκτάσεις της GNU awk.

Ανάγνωση από ένα αρχείο

Σε αυτή την άσκηση θα διαβάζεις δεδομένα από ένα αρχείο, όχι από την κύρια ροή εισόδου. Διάβασε για τη getline στο εγχειρίδιο της Gnu awk, ειδικά τις μορφές Getline/File και Getline/Variable/File.

Περισσότερα για τους πίνακες

Ένας δισδιάστατος πίνακας μπορεί να είναι ένας τρόπος να υλοποιήσεις αυτή τη λύση. Η GNU awk έχει δύο τρόπους να τον αναπαραστήσει:

Αρχεία συμπερίληψης (gawk)

Πρόσεξε την οδηγία @include στο αρχείο δοκιμών.
Αυτή δίνει εντολή στη gawk να διαβάσει και να αξιολογήσει το αρχείο που αναφέρεται.

Χώροι ονομάτων (gawk)

Όλες οι μεταβλητές της awk είναι καθολικές (εκτός από τις παραμέτρους των συναρτήσεων, που είναι τοπικές στη συνάρτηση). Υπάρχει μεγάλη πιθανότητα συγκρούσεων ονομάτων, ειδικά όταν συμπεριλαμβάνονται βιβλιοθήκες τρίτων. Οι χώροι ονομάτων είναι ένας τρόπος να χωρίσεις το πού αποθηκεύονται οι μεταβλητές. Πρόσεξε την οδηγία @namespace στα αρχεία της άσκησης.

Ο προεπιλεγμένος χώρος ονομάτων ονομάζεται "awk". Η ύπαρξη ενός προεπιλεγμένου χώρου ονομάτων επιτρέπει στον προγραμματιστή να καλέσει μια ενσωματωμένη συνάρτηση της awk μέσα από μια συνάρτηση σε διαφορετικό χώρο ονομάτων.

Πώς περνιούνται οι παράμετροι των συναρτήσεων

Οι παράμετροι που είναι πίνακες περνιούνται κατ' αναφορά. Οι αλλαγές που γίνονται στον πίνακα μέσα στη συνάρτηση είναι ορατές σε αυτόν που κάλεσε τη συνάρτηση.

Οι παράμετροι που δεν είναι πίνακες περνιούνται κατ' αξία.

Για τις παραμέτρους χωρίς τύπο, εξαρτάται από το τι κάνει η συνάρτηση με αυτές:

  • αν η συνάρτηση την αρχικοποιήσει ως πίνακα, τότε γίνεται παράμετρος που περνιέται κατ' αναφορά,
  • αν η συνάρτηση την αρχικοποιήσει ως βαθμωτή τιμή (έναν αριθμό ή μια συμβολοσειρά), τότε δεν είναι αναφορά.

Οι πλήρεις λεπτομέρειες βρίσκονται στο εγχειρίδιο, στο Πέρασμα ορισμάτων συνάρτησης κατ' αξία ή κατ' αναφορά.

Τοπικές μεταβλητές

Οι μεταβλητές με εμβέλεια συνάρτησης (τοπικές) μπορούν να δημιουργηθούν χρησιμοποιώντας παραμέτρους που περνιούνται "κατ' αξία". Δεν είναι σφάλμα να περάσεις σε μια συνάρτηση λιγότερες τιμές από τον αριθμό των παραμέτρων που δηλώνονται· οι επιπλέον παράμετροι είναι "χωρίς τύπο" μέχρι να χρησιμοποιηθούν. Μπορούν να δεχτούν βαθμωτές τιμές μέσα στη συνάρτηση, οι οποίες δεν αποθηκεύονται στον καθολικό χώρο ονομάτων.

  • Αν αναθέσεις μια βαθμωτή τιμή σε μια παράμετρο, αυτή είναι τοπική στη συνάρτηση.
  • Αν αναθέσεις μια βαθμωτή τιμή σε μια μεταβλητή που δεν αναφέρεται στη λίστα παραμέτρων, αυτή η μεταβλητή είναι καθολική.

Κατά σύμβαση, στην υπογραφή της συνάρτησης οι αναμενόμενες παράμετροι εμφανίζονται πρώτες, ακολουθούμενες από λευκό διάστημα και μετά από τις τοπικές παραμέτρους. Ένα παράδειγμα:

function add(a, b,    total) {
    # here, `typeof(total)` is "untyped"
    total = a + b
    # now, `typeof(total)` is "number"
    return total
}

BEGIN {
    sum = add(5, 10)
    print sum             # 15
    print typeof(total)   # untyped, meaning "total" is unused in this scope
}
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
AWK Exercism

Έτοιμος να ξεκινήσεις την άσκηση Πίνακας;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις AWK με 3 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.