Προτεραιότητα εκτέλεσης πράξεων σε εκφράσεις. Προτεραιότητες λειτουργίας

Χαιρετισμούς, αγαπητοί αναγνώστες του ιστότοπου του ιστολογίου! Την τελευταία φορά εξετάσαμε το ζήτημα της ενσωματωμένης γλώσσας 1C: Enterprise 8. Σήμερα θα μιλήσουμε για σχετικά με τις προτεραιότητες των αριθμητικών πράξεων των πρωτόγονων τύπων δεδομένωνκαι εξετάστε επίσης αρκετές διαδοχικές αριθμητικές πράξεις. Ας δούμε!

Από το σχολικό πρόγραμμα σπουδών, είστε εξοικειωμένοι με το γεγονός ότι υψηλότερη προτεραιότητα στις αριθμητικές πράξειςείναι παρενθέσεις "()".
Εάν η έκφραση είναι σε παρένθεση, τότε θα εκτελεστεί πρώτα από όλα. Οι μοναδιαίες πράξεις "+" και "-" είναι οι επόμενες σε προτεραιότητα, η μονομερής πράξη σημαίνει ότι η πράξη και μία τιμή υποδεικνύονται, για παράδειγμα "-5". Το τρίτο εκτελεί τις πράξεις του πολλαπλασιασμού και της διαίρεσης, και τελευταίο αλλά όχι λιγότερο σημαντικό, πρόσθεση και αφαίρεση. Ας δούμε πώς λειτουργεί:

99+15/5*8

Σε αυτήν την περίπτωση, το πρώτο 15 θα διαιρεθεί με το 5, ο αριθμός που προκύπτει θα πολλαπλασιαστεί με το 6 και η τρίτη πράξη: 99 θα προστεθεί στον αριθμό που προκύπτει. Επιπλέον, η ακόλουθη απλή έκφραση είναι 10+5/2+1. Είναι σαφές ότι πρώτα θα εκτελεστεί η λειτουργία διαίρεσης και μετά θα εκτελεστεί η λειτουργία πρόσθεσης. Εάν χρησιμοποιείτε παρενθέσεις:

(90+30)/(7+5)

Σε αυτήν την περίπτωση, στην αρχή θα προσθέσουμε 90 και 30 και θα τα διαιρέσουμε όλα με 7 + 5, και σε αυτήν την περίπτωση η έκφραση θα είναι ίση με 10. Ας εξετάσουμε άλλες λειτουργίες που είναι δυνατές στον κώδικα του προγράμματος 1C:Enterprise 8. Μπορεί να έχετε εργαστεί σε PHP, όπου είναι δυνατός ένας τέτοιος τελεστής i++;ή Εγώ-;. Είναι μια αύξηση ή μείωση κατά μία μονάδα. Η εκτέλεση τέτοιων τελεστών στο 1C είναι αδύνατη, αλλά ο χειριστής είναι δυνατός i++1;Και j-1;. Ας τους ρίξουμε μια ματιά πιο αναλυτικά. Αυτός είναι ένας απολύτως φυσιολογικός χειριστής. Ας ανοίξουμε τη λειτουργική μονάδα οποιουδήποτε καταλόγου στο Configurator:

Διαμόρφωση -> Κατάλογοι -> Ονοματολογία, κάντε δεξί κλικ για να καλέσετε το στοιχείο Ανοίξτε τη μονάδα αντικειμένου.

Για να αποφύγουμε ένα σφάλμα, ας δηλώσουμε μια μεταβλητή σε αυτόν τον κώδικα προγράμματος:

A=0; b=a++1;

Εάν ελέγξετε για συντακτικά σφάλματα, τότε δεν θα είναι. Ακόμα κι αν η έκφραση τοποθετείται σε διαφορετικές γραμμές:

A=0; b=a+ +1;

Γενικά, οι νέες γραμμές δεν επηρεάζουν την εκτέλεση των δηλώσεων. Πώς θα λειτουργούσε ένας τέτοιος χειριστής; Ο μεταγλωττιστής γλώσσας 1C θα εκτελέσει πρώτα τη λειτουργία unary plus, δηλαδή, το +1 θα δώσει 1 και μετά στο έναθα προσθέσει ένα. Αυτό είναι το ίδιο με την προσθήκη ενός σε ένα. Ομοίως, μπορείτε να γράψετε:

A=0; b=a+-1;

Πρώτα, εκτελείται η πράξη μείον, βγαίνει -1, μετά το μείον και το συν προστίθενται μαζί και προκύπτει -1. Κατά συνέπεια, αυτό είναι το ίδιο με i-1. Πρέπει να γνωρίζετε αυτές τις συγκεκριμένες λειτουργίες και να κατανοήσετε πώς θα εκτελεστούν. Αυτό θα βοηθήσει στη σωστή ιεράρχηση των αριθμητικών πράξεων σύμφωνα με τη σειρά για την οποία μιλάμε.

Έτσι, ανακαλύψαμε ότι το σύστημα εκτελεί ήρεμα μια πράξη όπου υπάρχουν δύο αριθμητικές πράξεις στη σειρά, για παράδειγμα ++ , +-, -+, αλλά τι συμβαίνει αν γράψουμε πολλές αριθμητικές πράξεις στη σειρά; Αυτό μπορεί να επαληθευτεί. Για να το κάνετε αυτό, ανοίξτε το 1C:Enterprise από το Configurator σε λειτουργία εντοπισμού σφαλμάτων, πατήστε το πλήκτρο "F5". Ας ορίσουμε ένα σημείο διακοπής, το πλήκτρο "F9", στο τέλος της έκφρασής μας και ας εισάγουμε μια απλή έκφραση στον πίνακα αποτελεσμάτων. Στο Configurator, ανοίξτε το στοιχείο μενού Debug -> Tableau.

Ας γράψουμε την έκφραση 3+++5 στον πίνακα αποτελεσμάτων, προσέξτε, στην έξοδο παίρνουμε σφάλμα στην έκφραση. Η πλατφόρμα δεν μπορεί να κάνει τέτοιο μετασχηματισμό. Η έκφραση 3++5 λειτουργεί, αλλά με τρία συν, το σύστημα δεν καταλαβαίνει πλέον τι ακριβώς θέλουν από αυτήν. Αλλά αν βάλετε αγκύλες 1++(+2) , τότε όλα αυτά θα γίνουν σωστά. Όπως μπορείτε να δείτε, για να οργανωθεί σωστά η εργασία των αριθμητικών πράξεων, είναι απαραίτητο να κατανοήσετε καλά τις προτεραιότητες της εκτέλεσής τους. Στο επόμενο άρθρο, θα δούμε .

Μια αριθμητική έκφραση (ή απλά μια έκφραση) νοείται ως ένα σύνολο γλωσσικών αντικειμένων που συνδέονται με σημάδια λειτουργίας. Ως ειδική περίπτωση, μπορεί να είναι μόνο ένα αντικείμενο.

Μια λειτουργία είναι μια ενέργεια που πρέπει να εκτελεστεί. Τα αντικείμενα στα οποία εκτελείται η ενέργεια ονομάζονται τελεστές.

Κατά την αξιολόγηση μιας αριθμητικής παράστασης, μπορεί να χρειαστεί να εκτελέσετε πολλές διαφορετικές πράξεις. Οποιαδήποτε λειτουργία έχει ένα σταθερό επίπεδο προτεραιότητας για την εκτέλεσή της. Η σειρά αξιολόγησης μπορεί να αλλάξει με την εισαγωγή παρενθέσεων που καθορίζουν το υψηλότερο επίπεδο προτεραιότητας.

Εάν υπάρχουν τελεστές διαφορετικών τύπων σε μια αριθμητική παράσταση, τότε πριν από την εκτέλεση πράξεων, πραγματοποιείται αυτόματη μετατροπή στον τύπο του «υψηλότερου» τελεστή. Η αύξουσα σειρά προτεραιότητας έχει ως εξής:

απανθρακώνω< int < long < float < double

Σύμφωνα με τον αριθμό των τελεστών που εμπλέκονται σε μια συγκεκριμένη λειτουργία, υπάρχουν τρεις ομάδες λειτουργιών:

Unary (ένας τελεστής);

Δυαδικό (δύο τελεστές);

Τριμερής (τρεις τελεστές).

Ανάλογα με το είδος των πράξεων που εκτελούνται, υπάρχουν αριθμητικές, λογικές, bitwise, σχεσιακές, ανάθεση και πλήθος άλλων.

Αριθμητικές πράξεις

Η γλώσσα C υποστηρίζει ένα τυπικό σύνολο δυαδικής αριθμητικής

φυσικές λειτουργίες:

Προσθήκη (+);

Αφαίρεση (-);

Πολλαπλασιασμός (*);

Διαίρεση (/);

Λαμβάνοντας το υπόλοιπο της διαίρεσης ακέραιων τελεστών (%).

Σημειώστε ότι δεν υπάρχει λειτουργία εκθέσεως στη γλώσσα C. Για να εκτελέσετε αυτήν την ενέργεια, είναι εύκολο να γράψετε τη δική σας συνάρτηση ή να χρησιμοποιήσετε μια τυπική λειτουργία βιβλιοθήκης με ένα πρωτότυπο.

διπλό pow (διπλό x, διπλό y);

υπολογίζοντας την τιμή του x στη δύναμη του y.

Θα πρέπει να θυμόμαστε ότι το αποτέλεσμα της διαίρεσης ακεραίων είναι επίσης ένας ακέραιος που δεν έχει κλασματικό μέρος: το 7/4 καταλήγει σε ένα! Εάν πρέπει να λάβετε το υπόλοιπο μιας διαίρεσης ακέραιου αριθμού, τότε χρησιμοποιείται η λειτουργία modulo, που συμβολίζεται με το σύμβολο %:

Το 7%4 καταλήγει σε 3,

21%2 αποτελέσματα σε 1,

Το 10%5 έχει ως αποτέλεσμα 0.

Σε αντίθεση με πολλές άλλες γλώσσες προγραμματισμού, στη C, τα σημάδια χειριστή μπορούν να είναι γειτονικά μεταξύ τους:

Σε περίπτωση αμφιβολίας σχετικά με τη σειρά με την οποία εκτελούνται οι λειτουργίες, θα πρέπει να χρησιμοποιούνται παρενθέσεις για να δοθεί η υψηλότερη προτεραιότητα στην αξιολόγηση των εκφράσεων μέσα στις αγκύλες. Πρώτα, αξιολογείται η έκφραση στις εσωτερικές αγκύλες, μετά στις εξωτερικές αγκύλες και ούτω καθεξής.

λειτουργία ανάθεσης

Στο C, μια ανάθεση συμβολίζεται με ένα μόνο σύμβολο ίσου (=). Η αριθμητική τιμή της δεξιάς πλευράς εκχωρείται στη μεταβλητή που υποδεικνύεται στα αριστερά και πριν από αυτό, ο αριθμός που εισαγάγατε μετατρέπεται πάντα αυτόματα στον τύπο αυτής της μεταβλητής:

Το αποτέλεσμα θα είναι a = 19,0 .

Αυστηρά μιλώντας, ακόμη και η έκφραση (!), σωστά-

ναι, ουσιαστική διεύθυνση. Λοιπόν, είναι πολύ σωστό να γράψουμε:

Το C επιτρέπει πολλαπλές αναθέσεις, για παράδειγμα:

Στην περίπτωση αυτή, ο υπολογισμός γίνεται από δεξιά προς τα αριστερά, δηλ.

η τιμή του z θα εκχωρηθεί στη μεταβλητή w και μετά στη μεταβλητή άθροισμα.

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

Το C επιτρέπει επίσης σημεία ανάθεσης πολλών χαρακτήρων. ΠΡΟΣ ΤΗΝ

θα πρέπει να περιλαμβάνουν += , -= , *= , %= και έναν αριθμό παρόμοιων σημείων,

καθώς και τα σημάδια των τελεστών αύξησης προθέματος και μετάθεμα ++ και

μείωση --.

┌─────────────────────────────────────────────┐

│ Οι ενδείξεις λειτουργίας πολλαπλών χαρακτήρων δεν είναι │

│ πρέπει να είναι κενά!! │

└─────────────────────────────────────────────┘

Ας δώσουμε παραδείγματα σύντομης χρήσης ανάθεσης

σημάδια λειτουργιών πολλών χαρακτήρων:

i += 1; σημαίνει i = i+1;

i -=k; σημαίνει i = i-k;

i *=k; σημαίνει i = i*k;

i /=k; σημαίνει i = i/k;

Οι πράξεις προθέματος και μετάθεμα ++ και -- σημαίνουν τις αντίστοιχες

Αύξηση και μείωση μιας μεταβλητής (όχι απαραίτητα ακέραιος):

K - αυξάνει την τιμή της μεταβλητής k κατά ένα

πριν το χρησιμοποιήσετε σε μια έκφραση.

k++ - το ίδιο μετά τη χρήση.

K - μειώνει την τιμή της μεταβλητής k κατά ένα

πριν τη χρήση;

k-- - το ίδιο μετά τη χρήση.

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

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

που στην προκειμένη περίπτωση ισοδυναμεί με γραφή

Με άλλα λόγια, εάν οι τελεστές προθέματος και μετάθεμα χρησιμοποιούνται μεμονωμένα από άλλους τελεστές, έχουν την ίδια σημασία. Η διαφορά γίνεται εμφανής μόνο όταν χρησιμοποιούνται σε πιο σύνθετες εκφράσεις ή δηλώσεις.

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

Εάν προοριζόταν να αξιολογήσει μια έκφραση της μορφής a+(++b) στα δεξιά, τότε ο μεταγλωττιστής θα αντιληφθεί πραγματικά την έκφραση ως (a++)+b. Για να διευκρινίσουμε αυτήν την κατάσταση, ας θυμηθούμε την έννοια ενός λεξικού που υπάρχει στις γλώσσες προγραμματισμού.

Ένα διακριτικό είναι μια μονάδα κειμένου προγράμματος που γίνεται αντιληπτό από τον μεταγλωττιστή ως μια ενιαία αναγνωρίσιμη κατασκευή που δεν μπορεί να χωριστεί σε μικρότερα μέρη που μπορούν να αναγνωριστούν από τον μεταγλωττιστή. Στη γλώσσα C, τα λεξικά είναι:

Επίσημα λόγια.

Αναγνωριστικά;

Λειτουργία και σημεία στίξης.

Σταθερές.

Τα όρια διακριτικών ορίζονται από τον μεταγλωττιστή είτε από την παρουσία ενός άλλου διακριτικού (σημεία στίξης και τελεστές) είτε από την παρουσία ενός διαστήματος. Εάν τα διακριτικά δεν διαχωρίζονται με χαρακτήρες κενού διαστήματος, τότε ο μεταγλωττιστής, επισημαίνοντας ένα ξεχωριστό λεξικό, συνδυάζει σε αυτό τον μέγιστο δυνατό αριθμό διαδοχικών χαρακτήρων.

Συμπέρασμα: για αποφυγή πιθανής ασάφειας, συνιστάται

χρησιμοποιήστε κενά ή παρενθέσεις για να ρητά

διαίρεση λεξιμάτων σε αμφίβολα σημεία.

έκφραση και τους κανόνες για την αξιολόγηση της έκφρασης. Οι κανόνες είναι:
  • προτεραιότηταλειτουργίες,
  • για πράξεις ίδιας προτεραιότητας Διαδικασία εφαρμογής- από αριστερά προς τα δεξιά ή από δεξιά προς τα αριστερά.
  • Μετατροπή τύπου τελεστών και επιλογή υλοποίησης για υπερφορτωμένες λειτουργίες.
  • τον τύπο και την τιμή του αποτελέσματος της εκτέλεσης μιας πράξης στις δεδομένες τιμές των τελεστών ενός συγκεκριμένου τύπου.

Προτεραιότητα και σειρά εργασιών

Οι περισσότερες λειτουργίες στη C#, η προτεραιότητα και η σειρά τους κληρονομούνται από τη C++. Ωστόσο, υπάρχουν διαφορές: για παράδειγμα, δεν υπάρχει λειτουργία " , " που σας επιτρέπει να αξιολογήσετε μια λίστα εκφράσεων. προστέθηκαν ελεγμένες και μη επιλεγμένες λειτουργίες που ισχύουν για εκφράσεις.

Όπως γίνεται συνήθως, παρουσιάζουμε πίνακα προτεραιότηταςπράξεις, κάθε γραμμή των οποίων περιέχει πράξεις της ίδιας προτεραιότητας και οι γραμμές ακολουθούν με σειρά προτεραιότητας, από την υψηλότερη προς τη χαμηλότερη.

Πίνακας 3.1. Προτεραιότητα τελεστή C#
Προτεραιότητα Κατηγορία Λειτουργίες Σειρά
0 Πρωταρχικός (expr), x.y, x->y, f(x), a[x], x++, x--, new, typeof(t), checked(expr), unchecked(expr) Από αριστερά στα δεξιά
1 Unary +, -, !, ~, ++x, --x, (T)x, sizeof(t) Από αριστερά στα δεξιά
2 Πολλαπλασιαστικός (Πολλαπλασιασμός) *, /, % Από αριστερά στα δεξιά
3 Πρόσθετο (Προσθήκη) +, - Από αριστερά στα δεξιά
4 Βάρδια << ,>> Από αριστερά στα δεξιά
5 Σχέσεις, έλεγχος τύπου <, >, <=, >=, είναι, όπως Από αριστερά στα δεξιά
6 Ισοδυναμίας ==, != Από αριστερά στα δεξιά
7 Λογικό ΚΑΙ (ΚΑΙ) & Από αριστερά στα δεξιά
8 Λογικό αποκλειστικό OR (XOR) ^ Από αριστερά στα δεξιά
9 Λογικό Ή (OR) | Από αριστερά στα δεξιά
10 Υπό όρους λογικό ΚΑΙ && Από αριστερά στα δεξιά
11 Υπό όρους λογική Ή || Από αριστερά στα δεξιά
12 Έκφραση υπό όρους ? : Από δεξιά προς τα αριστερά
13 ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ

Συγκόλληση με μηδενικό

=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= Από δεξιά προς τα αριστερά
14 χειριστής λάμδα => Από δεξιά προς τα αριστερά

Λειτουργίες και μέθοδοι υπερφόρτωσης

Κάτω από υπερφόρτωση της λειτουργίαςκατανοείται η ύπαρξη πολλών υλοποιήσεων της ίδιας λειτουργίας. Για παράδειγμα, ο τελεστής "+" λειτουργεί διαφορετικά ανάλογα με το αν οι τελεστές του είναι ακέραιοι, μεγάλοι ακέραιοι, σταθεροί ή κινητής υποδιαστολής ακέραιοι ή συμβολοσειρές κειμένου.

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

Οι περισσότεροι από τους τελεστές της γλώσσας C# είναι υπερφορτωμένοι - ο ίδιος τελεστής μπορεί να εφαρμοστεί σε τελεστές διαφορετικών τύπων. Επομένως, πριν από την εκτέλεση της λειτουργίας, γίνεται αναζήτηση για μια υλοποίηση που είναι κατάλληλη για αυτούς τους τύπους τελεστών. Σημειώστε ότι οι λειτουργίες εκτελούνται συνήθως σε τελεστές του ίδιου τύπου. Εάν οι τελεστές είναι διαφορετικών τύπων, τότε οι προκαταρκτικοί σιωπηρή μετατροπή τύπουένας από τους τελεστές. Και οι δύο τελεστές μπορεί να είναι του ίδιου τύπου, αλλά η μετατροπή τύπου εξακολουθεί να μπορεί να συμβεί, επειδή δεν υπάρχει αντίστοιχος υπερφορτωμένος τελεστής για τους συγκεκριμένους τύπους. Αυτή η κατάσταση συμβαίνει συχνά στην πράξη, αφού, για παράδειγμα, η λειτουργία της πρόσθεσης δεν ορίζεται για δευτερεύοντες υποτύπους ενός αριθμητικού τύπου. Εάν δεν υπάρχει κατάλληλη υλοποίηση της λειτουργίας για αυτούς τους τύπους τελεστέων και η σιωπηρή χύτευση τύπων τελεστέων είναι αδύνατη, τότε, κατά κανόνα, αυτό το σφάλμα εντοπίζεται στο στάδιο της μεταγλώττισης.

Μετατροπές τύπων

Κάθε αντικείμενο (μεταβλητή), κάθε τελεστής όταν αξιολογείται η έκφραση, η ίδια η έκφραση χαρακτηρίζεται από ένα ζεύγος που καθορίζει την τιμή της παράστασης και τον τύπο της. Κατά τη διαδικασία των υπολογισμών, συχνά καθίσταται απαραίτητη η μετατροπή τύπων - η ανάγκη μετατροπής ενός ζεύγους σε ένα ζευγάρι . Το αρχικό ζεύγος ονομάζεται πηγή μετασχηματισμού, το τελικό ζεύγος είναι ο στόχος μετασχηματισμού.

Η ανάγκη για τέτοιες μετατροπές προκύπτει, όπως έχει ήδη σημειωθεί, κατά την αξιολόγηση της έκφρασης κατά τη χύτευση τελεστών σε έναν τύπο συμβατό με τον τύπο λειτουργίας. Η μετατροπή τύπου είναι απαραίτητη στις δηλώσεις εκχώρησης όταν ο τύπος της έκφρασης στη δεξιά πλευρά του τελεστή μεταφέρεται στον τύπο που δίνεται από την αριστερή πλευρά αυτού του τελεστή. Η σημασιολογία ανάθεσης εφαρμόζεται επίσης σε επικλήσεις μεθόδων κατά τη διαδικασία αντικατάστασης τυπικών ορισμάτων μεθόδου με πραγματικές παραμέτρους. Εδώ απαιτείται μετατροπή τύπου.

Οι μετατροπές τύπων μπορούν να χωριστούν σε ασφαλείς και επικίνδυνες. Ασφαλής μετατροπή είναι μια μετατροπή για την οποία είναι εγγυημένο ότι:

Ένας μετασχηματισμός που δεν ικανοποιεί τουλάχιστον μία από αυτές τις προϋποθέσεις ονομάζεται επικίνδυνος. Επαρκής προϋπόθεση για την ύπαρξη ασφαλούς μετατροπής είναι, για παράδειγμα, η προϋπόθεση ότι ένας τύπος είναι υποτύπος τύπου . Πράγματι, σε αυτήν την περίπτωση, οποιαδήποτε τιμή πηγής είναι επίσης έγκυρη τιμή στόχος. Έτσι, η μετατροπή από type int σε type double είναι ασφαλής. Ο αντίστροφος μετασχηματισμός θα ήταν φυσικά επικίνδυνος.

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

Υπάρχουν διάφοροι τρόποι εκτέλεσης ρητών μετατροπών - λειτουργία casting (casting to a type), μέθοδοι της ειδικής κλάσης Convert , ειδικές μέθοδοι ToString , Parse . Όλες αυτές οι μέθοδοι θα συζητηθούν σε αυτή τη διάλεξη.

Ας εξηγήσουμε πώς εκτελούνται οι σιωπηρές μετατροπές όταν αξιολογείται μια έκφραση. Έστω , όταν υπολογίζουμε κάποια παράσταση , είναι απαραίτητο να κάνουμε πρόσθεση , όπου έχει τύπο double , και - int . Μεταξύ των πολυάριθμων εφαρμογών προσθήκης είναι πράξεις που εκτελούν προσθήκη τελεστέων τύπου int και προσθήκη τελεστών τύπου double, επομένως η επιλογή μιας από αυτές τις υλοποιήσεις προσθήκης θα απαιτήσει μια μετατροπή τύπου ενός από τους τελεστές. Δεδομένου ότι η μετατροπή τύπου από int σε διπλό είναι ασφαλής και ο άλλος τρόπος είναι επικίνδυνος, επιλέγεται μια ασφαλής μετατροπή και εκτελείται αυτόματα, ο δεύτερος τελεστής μετατρέπεται σιωπηρά σε τύπου double, προστίθενται οι τελεστές αυτού του τύπου και το αποτέλεσμα της προσθήκης θα είναι τύπου διπλός .

Οργάνωση του ConsoleExpressions Programming Project

Ως συνήθως, όλα τα παραδείγματα κώδικα που εμφανίζονται στο κείμενο αποτελούν μέρος του έργου λογισμικού. Θα περιγράψω τη δομή του έργου της κονσόλας που χρησιμοποιείται σε αυτήν τη διάλεξη, που ονομάζεται ConsoleExpressions. Εκτός από την προεπιλεγμένη κλάση Program, δύο κλάσεις έχουν προστεθεί στο έργο, με το όνομα TestingExpressions και Scales . Κάθε μία από τις μεθόδους της κλάσης TestingExpressions αντιπροσωπεύει μια δοκιμή που σας επιτρέπει να αναλύσετε τα χαρακτηριστικά των πράξεων που χρησιμοποιούνται στην κατασκευή παραστάσεων, επομένως αυτή η κλάση είναι μια συλλογή δοκιμών. Το μάθημα της κλίμακας είναι ενημερωτικό, δείχνοντας πώς να εργαστείτε με τις κλίμακες που θα συζητηθούν σε αυτή τη διάλεξη. Για να είναι δυνατή η κλήση των μεθόδων αυτών των κλάσεων, τα αντικείμενα αυτών των κλάσεων δηλώνονται και δημιουργούνται στη διαδικασία Main της κλάσης Program. Αυτά τα αντικείμενα χρησιμοποιούνται στη συνέχεια ως στόχος κλήσης των κατάλληλων μεθόδων. Το γενικό σχήμα της κύριας διαδικασίας και των μεθόδων κλήσης της κλάσης έχει ως εξής:

static void Main(string args) ( string answer = "Yes"; do ( try ( TestingExpressions test = new TestingExpressions(); test.Casting(); //Call other method... ) catch (Exception e) ( Console. WriteLine ("Δεν μπορώ να συνεχίσω κανονικά!"); Console.WriteLine(e.Message); ) Console.WriteLine("Θα συνεχίσουμε; (Ναι/Όχι)"); απάντηση = Console.ReadLine(); ) ενώ ( απάντηση == "Ναι" || απάντηση == "ναι" || απάντηση == "ναι"); )

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

Διάλεξη 4 Τμήμα Εφαρμοσμένων Μαθηματικών Μ-703, τηλ. 362-79-62 Ph.D., καθηγητής Glagolev Viktor Borisovich, αίθουσα. Zh-405b, τηλ. 362-73-28 http://glagvik.narod2.ru/index.htm Αριθμητικές πράξεις Προτεραιότητα αριθμητικών πράξεων Μαθηματικές συναρτήσεις Πίνακες Λογικές πράξεις Προτεραιότητα πράξεων


Λειτουργίες και Λειτουργίες Η VB διαθέτει ένα μεγάλο σύνολο ενσωματωμένων λειτουργιών. Μπορούν να χωριστούν σε διάφορες κατηγορίες: Συναρτήσεις χρηματοδότησης Μαθηματικές συναρτήσεις Συναρτήσεις επεξεργασίας συμβολοσειρών Τύπος συναρτήσεων μετατροπής Άλλες συναρτήσεις


Εξοικειωθούν με Λεπτομερής περιγραφήΟι λειτουργίες μπορούν να βρεθούν στο σύστημα βοήθειας VB. Στη συνέχεια, θα δούμε μόνο τις μαθηματικές συναρτήσεις VB. Ο πίνακας στην επόμενη διαφάνεια παρέχει μια πλήρη λίστα πράξεων που μπορούν να εφαρμοστούν σε αριθμητικά δεδομένα.


Αριθμητικές πράξεις

λειτουργίες σχέσης


Προτεραιότητα τελεστή Εάν χρησιμοποιούνται πολλαπλοί τελεστές σε μια έκφραση, οι τελεστές με την υψηλότερη προτεραιότητα εκτελούνται πρώτα. Εάν η προτεραιότητα των πράξεων είναι η ίδια, τότε εκτελούνται από αριστερά προς τα δεξιά. α + β/γ + δ (α + β)/(γ + δ) Παραδείγματα Κωδικός έκφρασης


Μαθηματικές συναρτήσεις

Οι γωνίες εκφράζονται σε ακτίνια. Το έργο πρέπει να εισαγάγει τον χώρο ονομάτων System.Math προσθέτοντας τη γραμμή Imports System.Math στην αρχή του πηγαίου κώδικα (πριν από τη δήλωση της πρώτης ενότητας ή κλάσης). Διαφορετικά, θα χρειαστεί να προσθέσετε το όνομα της κλάσης πριν από το όνομα κάθε συνάρτησης, για παράδειγμα: Math.Sin(x)


Εισαγωγή στο έργο χώρου ονομάτων System.Math


Οι συναρτήσεις Int και Fix επιστρέφουν μια τιμή ίση με το ακέραιο μέρος ενός αριθμού του οποίου ο τύπος είναι ίδιος με τον τύπο του ορίσματος. Σύνταξη: Int(number) και Fix(number) Ο απαιτούμενος αριθμός ορίσματος είναι οποιαδήποτε έγκυρη αριθμητική παράσταση.


Η διαφορά μεταξύ των συναρτήσεων Int και Fix είναι ότι για μια αρνητική τιμή ορίσματος, η συνάρτηση Int επιστρέφει τον πλησιέστερο αρνητικό ακέραιο μικρότερο ή ίσο με την καθορισμένη τιμή, ενώ το Fix επιστρέφει τον πλησιέστερο αρνητικό ακέραιο μεγαλύτερο ή ίσο με την καθορισμένη τιμή. Για παράδειγμα, η συνάρτηση Int μετατρέπει το -8,4 σε -9 και η συνάρτηση Fix μετατρέπει το -8,4 σε -8.


Η συνάρτηση Rnd επιστρέφει μια τιμή Single που περιέχει έναν τυχαίο αριθμό μικρότερο από 1 και μεγαλύτερο ή ίσο με 0. Πριν από την πρώτη κλήση στη συνάρτηση Rnd, πρέπει να χρησιμοποιήσετε τη δήλωση Randomize() χωρίς όρισμα για να αρχικοποιήσετε τη γεννήτρια τυχαίων αριθμών.


Παράδειγμα. Παιχνίδι "Μαντέψτε τον αριθμό" Συνθήκη του παιχνιδιού Ο υπολογιστής μαντεύει κάποιο τυχαίο ακέραιο k από το εύρος 0 - 100. Θα πρέπει να μαντέψετε τον μαντέψει, κάνοντας όσο το δυνατόν λιγότερες προσπάθειες. Μετά από κάθε προσπάθεια, ο υπολογιστής αναφέρει εάν ο κρυφός αριθμός είναι μεγαλύτερος ή μικρότερος από τον προτεινόμενο αριθμό.


πίνακας δεδομένων


Μπλοκ διάγραμμα αλγορίθμου Δημιουργία τυχαίου αριθμού k από το 0 έως το 100 Είσοδος k1 a



Διεπαφή


Αξίες Ακινήτων


Κωδικός προγράμματος

Πίνακες Ένας πίνακας είναι μια ομάδα μεταβλητών που περιέχει στοιχεία δεδομένων του ίδιου τύπου και με το ίδιο όνομα. Ένα ξεχωριστό κελί μνήμης εκχωρείται για κάθε στοιχείο του πίνακα. Όλα τα στοιχεία ενός πίνακα είναι του ίδιου τύπου. Είναι δυνατοί σύνδεσμοι με μεμονωμένα στοιχεία πίνακα. Κάθε μεμονωμένο στοιχείο πίνακα ορίζεται από το όνομα του πίνακα και τις τιμές του ευρετηρίου.


Για παράδειγμα, οι αναφορές a(7) ή a1(2, 9) σημαίνουν ότι: a είναι το όνομα ενός μονοδιάστατου πίνακα (διάνυσμα) με έναν δείκτη, το στοιχείο του πίνακα έχει τιμή δείκτη 7. a1 είναι το όνομα του ένας δισδιάστατος πίνακας (μήτρας). Αυτό υποδεικνύεται από τη χρήση δύο ευρετηρίων για τον προσδιορισμό του στοιχείου του πίνακα.


Ο πρώτος δείκτης ενός δισδιάστατου πίνακα ερμηνεύεται ως ο αριθμός σειράς στον οποίο βρίσκεται το στοιχείο του πίνακα και ο δεύτερος δείκτης αντιμετωπίζεται ως αριθμός στήλης. Το ευρετήριο μπορεί να είναι μια έκφραση ακέραιου τύπου με μη αρνητική τιμή. Το κάτω όριο ενός ευρετηρίου είναι πάντα 0. Το άνω όριο κάθε δείκτη πίνακα καθορίζεται όταν δηλώνεται.


Όνομα πίνακα Ευρετήριο (αριθμός θέσης) του στοιχείου πίνακα km Παράδειγμα πίνακα με το όνομα km του ακέραιου τύπου των ενδείξεων του μετρητή χιλιομέτρων στο ταχύμετρο του αυτοκινήτου στην αρχή κάθε μήνα καθ' όλη τη διάρκεια του έτους:


Όπως οι απλές μεταβλητές, οι πίνακες δηλώνονται χρησιμοποιώντας τις δηλώσεις Dim, Static, Private ή Public. Παραδείγματα δήλωσης πίνακα: Dim x() As Single Dim y(,) As Single


Δηλώνεται ένας μονοδιάστατος πίνακας με το όνομα x και ένας δισδιάστατος πίνακας y. Αυτό υποδεικνύεται με παρενθέσεις στη δήλωση μετά το όνομα κάθε πίνακα. Κατά τη δήλωση ενός δισδιάστατου πίνακα, πρέπει να υπάρχει κόμμα ανάμεσα στις αγκύλες. Η δήλωση των άνω ορίων των δεικτών σε αυτά τα παραδείγματα αναβάλλεται για αργότερα (τέτοιοι πίνακες ονομάζονται δυναμικοί πίνακες). Ένας μονοδιάστατος πίνακας ονομάζεται διάνυσμα. Ένας δισδιάστατος πίνακας ονομάζεται μήτρα.


Για να δηλώσετε το άνω όριο του ευρετηρίου και να εκχωρήσετε πίνακες στη μνήμη, θα πρέπει να τοποθετήσετε την εντολή: Redim x(10), y(4,5) Εδώ, καθορίζονται οι τιμές των άνω ορίων κάθε ευρετηρίου πίνακα.


Ο δείκτης του πίνακα x μπορεί να πάρει μια τιμή μεταξύ 0 και 10. Ο πίνακας x έχει 11 στοιχεία. Ο πρώτος δείκτης του πίνακα y μπορεί να είναι μεταξύ 0 και 4. Ο δεύτερος δείκτης του πίνακα y μπορεί να είναι μεταξύ 0 και 5. Ο πίνακας y έχει 30 στοιχεία (αριθμός γραμμών επί αριθμό στηλών).


Όταν δηλώνετε έναν πίνακα, μπορείτε να τον αρχικοποιήσετε: Dim z() As Single = (1.3, -2.7, _ 14.6, -5) Σε αυτό το παράδειγμα, δηλώνεται ένας μονοδιάστατος πίνακας z, ο οποίος έχει 4 στοιχεία, τις τιμές ​εκ των οποίων δίνονται από τη λίστα αρχικοποίησης. Ένας πίνακας του οποίου η δήλωση δεν καθόριζε τα άνω όρια των δεικτών (δυναμικός πίνακας) μπορεί να επαναδηλωθεί επανειλημμένα χρησιμοποιώντας την εντολή ReDim.


Ανάμεσα στις οδηγίες μέσα στη διαδικασία, μπορείτε να γράψετε: ReDim y(5, 10) Επιπλέον, αυτός ο πίνακας μπορεί να δηλωθεί εκ νέου: ReDim y(5, 20)


Η δήλωση ReDim μπορεί να αλλάξει μόνο τα άνω όρια των ευρετηρίων. Η διάσταση ενός πίνακα (ο αριθμός των δεικτών) μπορεί να οριστεί μία φορά. Δεν μπορεί να αλλάξει. Η δήλωση ReDim μπορεί να χρησιμοποιηθεί για την τροποποίηση ενός δυναμικού πίνακα όσες φορές χρειάζεται. Ωστόσο, κάθε φορά που χρησιμοποιείται, τα δεδομένα που περιέχονται στον πίνακα χάνονται.


Η δήλωση ReDim Preserve μπορεί να αυξήσει το μέγεθος ενός πίνακα διατηρώντας παράλληλα τα περιεχόμενά του. Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να αυξήσετε το μέγεθος του πίνακα a4 κατά 10 στοιχεία χωρίς να καταστρέψετε τις τρέχουσες τιμές των στοιχείων του πίνακα. Έστω ένας πίνακας να δηλωθεί: Dim a4 () Ως ακέραιος Τότε το μέγεθος αυτού του πίνακα ορίζεται στο πρόγραμμα: ReDim a4 (n)



Εάν τα άνω όρια των δεικτών καθορίζονται κατά τη δήλωση ενός πίνακα, τότε ένας τέτοιος πίνακας ονομάζεται σταθερός πίνακας. Παράδειγμα Dim s(10) As Single Dim b(4, 5) As Integer Το ReDim δεν ισχύει για σταθερούς πίνακες.


Είναι δυνατό να αντιστοιχίσετε τα περιεχόμενα ενός πίνακα σε έναν άλλο με τον ίδιο τρόπο που γίνεται για απλές μεταβλητές. Αλλά αυτοί οι πίνακες πρέπει να έχουν την ίδια διάσταση και τον ίδιο αριθμό στοιχείων.


Εάν υπάρχει ένας δυναμικός πίνακας στην αριστερή πλευρά του τελεστή εκχώρησης, τότε ο αριθμός των στοιχείων δεν χρειάζεται να ταιριάζει. Ο αριθμός των στοιχείων πίνακα στην αριστερή πλευρά της δήλωσης ανάθεσης θα αλλάξει εάν είναι απαραίτητο.


Παράδειγμα. Dim a() Ως ακέραιος = (1, 2, 3, 4), _ b(), i Ως ακέραιος b = a Για i = 0 έως 3 MsgBox(b(i)) Επόμενη έξοδος: 1, 2, 3, 4.


Παράδειγμα 1 Υπολογίστε τον αριθμητικό μέσο όρο των k δεδομένων αριθμών.


Εφαρμοσμένα δεδομένα Αρχικά δεδομένα: k – μεταβλητή τύπου ακέραιου αριθμού, αριθμός δεδομένων τιμών. a() – πίνακας τύπου Single, τιμές δεδομένων τιμών. Αποτελέσματα: s είναι μια μεταβλητή τύπου Single, η τιμή του αριθμητικού μέσου όρου.


Ενδιάμεσο: Άθροισμα – μεταβλητή τύπου Single, η τιμή του αθροίσματος των πρώτων k στοιχείων του πίνακα a. i – μεταβλητή ακέραιου τύπου, τιμή δείκτη στοιχείου πίνακα α.


Μπλοκ διάγραμμα του αλγορίθμου (1) (2) 1


(3) (4) (5) (6) (7) (8) 1 2 Αρ



Ας δούμε αυτό το μπλοκ διάγραμμα ως προς τις βασικές δομές που περιλαμβάνει. Τα μπλοκ 1 - 2 συνθέτουν μια διαδοχική δομή (ακολουθεί), την οποία θα ονομάσουμε Δομή 1. Τα μπλοκ 3 - 8 αναφέρονται στον κύκλο. Θα ονομάσουμε αυτή τη δομή Δομή 2. Τα μπλοκ 9 και 10 είναι πάλι μια διαδοχική δομή, την οποία θα ονομάσουμε Δομή 3.


Η Δομή 1, η Δομή 2 και η Δομή 3, μαζί, είναι επίσης μια δομή ακολουθίας. Στο διάγραμμα ροής οποιουδήποτε δομημένου αλγόριθμου, μπορεί κανείς πάντα να δει ξεκάθαρα τις βασικές δομές από τις οποίες είναι κατασκευασμένος ο αλγόριθμος.


Διεπαφή έργου Το πεδίο κειμένου έχει σχεδιαστεί για να εμφανίζει τα αποτελέσματα των υπολογισμών. Πατώντας το κουμπί θα ξεκινήσουν οι υπολογισμοί.


Διεπαφή έργου


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


Η εκτέλεση του έργου θα πρέπει να ξεκινήσει με ένα κλικ στο κουμπί BtnStart. Επομένως, ο κώδικας του έργου πρέπει να περιλαμβάνει μια υπορουτίνα BtnStart_Click, η εκτέλεση της οποίας ενεργοποιείται από το συμβάν Click που συνέβη με το κουμπί BtnStart (κάνοντας κλικ σε αυτό το κουμπί).


Το επόμενο βήμα για τη δημιουργία του κώδικα έργου θα πρέπει να είναι η συμπερίληψη της υπορουτίνας BtnStart_Click στον κώδικα έργου, ο οποίος δημιουργείται από το σύστημα εάν, για παράδειγμα, κάνετε διπλό κλικ στο κουμπί BtnStart.


Παρακάτω είναι ο κώδικας που θα προκύψει μετά τη δημιουργία του κενού της υπορουτίνας BtnStart_Click.

Μετά την εκκίνηση του έργου για εκτέλεση, ο κώδικας του προγράμματος θα ξεκινήσει να εκτελείται μόνο αφού πατήσετε τα κουμπιά BtnStart. Σε αυτήν την περίπτωση, εμφανίζεται το συμβάν Click για αυτό το κουμπί, το οποίο προκαλεί την εκτέλεση της διαδικασίας συμβάντος BtnStart_Click. Αποτελέσματα Λύσης

Οι γραμμές 1 έως 5 του σώματος αυτής της διαδικασίας δηλώνουν δεδομένα. Η γραμμή 6 διαγράφει το πεδίο κειμένου. Για να το κάνετε αυτό, χρησιμοποιήστε τη μέθοδο Clear. Εάν αυτό δεν γίνει, τότε κατά τη διάρκεια πολλαπλών εκκινήσεων του έργου, οι πληροφορίες που εμφανίζονται στο πεδίο κειμένου στην επόμενη εκκίνηση θα προστεθούν στις πληροφορίες που εμφανίζονται σε αυτό κατά τις προηγούμενες εκκινήσεις.


Η γραμμή 7 παρέχει είσοδο για τη μεταβλητή k. Συνιστάται να ελέγχετε πάντα την ορθότητα της εισαγωγής δεδομένων. Για το σκοπό αυτό, στη γραμμή 8 εμφανίζεται η τιμή της μεταβλητής k στο πεδίο κειμένου. Η γραμμή 9 εκχωρεί τον πίνακα a στη μνήμη.


Στις γραμμές 10 έως 12, εισάγονται οι τιμές των στοιχείων του πίνακα a. Η τιμή του στοιχείου a(0) δεν εισάγεται σε αυτήν την περίπτωση. Θα αγνοήσουμε την παρουσία αυτού του στοιχείου. Δεν θα ισχύει πουθενά. Στις γραμμές 13 έως 16, οι τιμές των εισαγόμενων στοιχείων του πίνακα a εμφανίζονται για έλεγχο στο πεδίο κειμένου.


Οι γραμμές 17 έως 20 αξιολογούν την τιμή της μεταβλητής s. Και τέλος, η γραμμή 21 παρέχει την έξοδο της μεταβλητής s στο πεδίο κειμένου.


Σημειώστε ότι δεν υπάρχει i = 1 εντολή στο πρόγραμμα και δεν υπάρχει i = i + 1 εντολή, παρόλο που αυτές οι οδηγίες βρίσκονται στο διάγραμμα ροής. Επίσης δεν υπάρχει επαλήθευση της συνθήκης i<= k. Выполнение всех этих действий обеспечивает инструкция цикла For … Next.


Σημειώστε ότι το πρόγραμμα δεν περιέχει επίσης την εντολή άθροισμα = 0. Η τιμή 0 δόθηκε στη μεταβλητή άθροισμα ως αποτέλεσμα της δήλωσης της. Μπορείτε να αφαιρέσετε τη δήλωση Dim i As Integer. Η πρόταση βρόχου For...Next είναι ένα μπλοκ. Η μεταβλητή i μέσα στο μπλοκ θα λάβει αυτόματα τον τύπο Integer (ανάλογα με τον τύπο των αρχικών και τελικών τιμών της παραμέτρου), αλλά θα ενεργεί μόνο μέσα στο μπλοκ.


Λογικές πράξεις Το VB.NET ορίζει λογικές πράξεις: Και (λογικός πολλαπλασιασμός), Ή (λογική πρόσθεση), Όχι (λογική άρνηση) και Xor (λογική αποκλειστική προσθήκη). Ο τελεστής Not έχει την ακόλουθη σύνταξη: Not Operand


Ένας τελεστής που έχει τύπο Boolean είναι μια σχέση, μια μεταβλητή ή μια συνάρτηση Boolean τύπου ή το αποτέλεσμα μιας λειτουργίας Boolean. Το αποτέλεσμα μιας λογικής άρνησης έχει την αντίθετη τιμή του τελεστή του, όπως φαίνεται στον παρακάτω πίνακα.


Operation Not Operand


Η πράξη And έχει δύο τελεστές: τελεστής 1 και τελεστής 2 Το αποτέλεσμα της πράξης And ορίζεται από τον πίνακα:


Ο τελεστής And είναι True μόνο όταν και οι δύο τελεστές είναι True. Παράδειγμα Ανισότητα α ; Χ? Το β πρέπει να γράφεται: α<= x And x <= b Неправильно написать: a <= x <= b


Η πράξη Or έχει επίσης δύο τελεστές: τελεστή 1 ή τελεστή 2 Το αποτέλεσμα της πράξης Or δίνεται στον πίνακα:


Ο τελεστής Or αξιολογείται σε True εάν τουλάχιστον ένας τελεστής (και ακόμη και οι δύο) αξιολογείται σε True. Παράδειγμα: Η συνθήκη "x δεν ανήκει στο τμήμα" πρέπει να γραφεί: x< a Or x >β ή όχι (α<= x And x <= b)


Xor (λογική αποκλειστική προσθήκη) Το αποτέλεσμα της πράξης Xor δίνεται στον πίνακα: Η πράξη Xor είναι True εάν ένας από τους τελεστές (αλλά όχι και οι δύο) είναι True.


Το VB.NET ορίζει επίσης λογικές πράξεις: AndAlso και OrElse. Η λειτουργία AndElso είναι πολύ παρόμοια με τη λειτουργία Και. Εκτελεί επίσης έναν λογικό πολλαπλασιασμό στους δύο τελεστικούς boolean (Boolean).


Η κύρια διαφορά μεταξύ AndAlso και And είναι ότι το AndAlso επιτρέπει μειωμένη, ελλιπή αξιολόγηση των τελεστών. Εάν ο πρώτος τελεστής στο AndAlso αξιολογείται σε False, ο δεύτερος τελεστής δεν αξιολογείται και η λειτουργία AndAlso επιστρέφει False.


Ομοίως, η λειτουργία OrElse είναι πολύ παρόμοια με τη λειτουργία Or. Εκτελεί μια συντομογραφική λογική προσθήκη δύο λογικών τελεστών. Εάν ο πρώτος τελεστής στην έκφραση OrElse είναι True, ο δεύτερος τελεστής δεν αξιολογείται και το True επιστρέφεται για τη λειτουργία OrElse.

Η σειρά με την οποία εκτελούνται οι πράξεις κατά τον υπολογισμό της τιμής μιας παράστασης καθορίζεται από θέση των πινακίδων λειτουργίας, παρενθέσειςΚαι επιχειρησιακή προτεραιότητα . Οι πράξεις με την υψηλότερη προτεραιότητα εκτελούνται πρώτα. Εάν μια παράσταση περιέχει πολλές λειτουργίες της ίδιας προτεραιότητας στο ίδιο επίπεδο, τότε η επεξεργασία τους γίνεται σύμφωνα με τη σειρά εκτέλεσης - από δεξιά προς τα αριστερά ή από τα αριστερά προς τα δεξιά. Εάν πρέπει να αλλάξετε τη σειρά των πράξεων σε μια παράσταση, τότε θα πρέπει να χρησιμοποιήσετε παρενθέσεις, για παράδειγμα (x + y) * z .

Προτεραιότητα κόμμα πράξεωνχαμηλότερη από όλες τις άλλες συναλλαγές.

Ο παρακάτω πίνακας παραθέτει τις λειτουργίες της γλώσσας C++ με φθίνουσα σειρά προτεραιότητας. Οι λειτουργίες με διαφορετικές προτεραιότητες χωρίζονται με μια ράβδο.

Πίνακας προτεραιοτήτων λειτουργίας

Σημάδια λειτουργιών

Ονόματα λειτουργίας

Διαταγή εκτέλεσης

ενίσχυση προτεραιότητας

postfix προσαύξηση

postfix μείωση

από αριστερά στα δεξιά

μέγεθος του

(τύπος ) έκφραση και

τύπος (έκφραση)

μέγεθος τελεστών σε byte

προσαύξηση προθέματος

μείωση του προθέματος

δυαδικά Hμι

λογικός ΔΕΝ

unary μείον, συν

μετατροπή τύπου

στα δεξιάαριστερά

πολλαπλασιασμός

υπόλοιπο της διαίρεσης ακεραίων

από αριστερά στα δεξιά

πρόσθεση

αφαίρεση

από αριστερά στα δεξιά

μετατόπιση αριστερά

δεξιά μετατόπιση

από αριστερά στα δεξιά

μικρότερο ή ίσο με

περισσότερο ή ίσο

από αριστερά στα δεξιά

από αριστερά στα δεξιά

δυαδικά ΚΑΙ

από αριστερά στα δεξιά

bitwise αποκλειστικό Ή

από αριστερά στα δεξιά

δυαδικά Ή

από αριστερά στα δεξιά

λογικός ΚΑΙ

από αριστερά στα δεξιά

λογικός Ή

από αριστερά στα δεξιά

? :

υποθετικός

στα δεξιάαριστερά

*= , /= , %=

+= , - =

<<= , >>=

&= , |= , ^=

ανάθεση (απλή και

σύνθετος)

στα δεξιάαριστερά

κόμμα λειτουργίας

από αριστερά στα δεξιά

Τύπος χύτευση (μετατροπή)

Γλώσσα προγραμματισμού C++, επειδή είναι μια πληκτρολογημένη γλώσσα, σας επιτρέπει ωστόσο να χειρίζεστε ελεύθερα εκφράσεις που λειτουργούν σε διάφορους τύπους δεδομένων. Σε αυτήν την περίπτωση, οι τελεστές της έκφρασης μεταφέρονται σε κάποιο κοινό τύπο.

Μόνο οι μετατροπές που μετατρέπουν τελεστές μικρότερου εύρους σε τελεστές μεγαλύτερου εύρους εκτελούνται αυτόματα, καθώς αυτό συμβαίνει χωρίς απώλεια πληροφοριών. Για παράδειγμα, αν στην έκφραση ival + fvalμεταβλητός ival τύπος ενθ και η μεταβλητή φάval– τύπος φλοτέρ , τότε κατά την εκτέλεση επιχειρήσεις(+ ) μεταβλητή τιμή ivalθα χυθεί για να πληκτρολογήσει φλοτέρ .

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

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

(τύπος) έκφραση

τύπος(έκφραση)

όρος πράξης επιχειρήσειςτύπου χύτευσηείναι η έκφραση που πρέπει να μετατραπεί. Προτεραιότητα επεμβάσεις castτο ίδιο όπως και για άλλες ενιαίες πράξεις. Για παράδειγμα: (μακρύςδιπλό) 5; (ενθ) φά ; (διπλό)Α2 .

Εάν η εν λόγω έκφραση έχει αρκετά περίπλοκη μορφή, συνιστάται να την βάλετε σε παρένθεση για να βεβαιωθείτε ότι ο τύπος θα αλλάξει για το αποτέλεσμα ολόκληρης της έκφρασης και όχι για μέρος της. Για παράδειγμα,

(ενθ) x+b*c

(ενθ) (x + b * c )

Στην πρώτη περίπτωση, ο μετασχηματισμός αναφέρεται στη μεταβλητή Χ , στο δεύτερο - σε όλη την έκφραση Χ+β*γ.

Φόρτωση...Φόρτωση...