1. Εισαγωγή

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

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

Ως βάση για να συζητήσουμε τα προβλήματα του αυτόματου προγραμματισμού, παίρνουμε μια πρόσφατη διάλεξη από τον Shalyto A.A. και τα χαρτιά του "λογισμικού" για τον ορισμό του παραδείγματος προγραμματισμού αυτόματα.

Η C++ (προφέρεται c-plus-plus) είναι μια μεταγλωττισμένη, στατικά πληκτρολογημένη, γενικής χρήσης γλώσσα προγραμματισμού που μπορεί να χρησιμοποιηθεί για τη δημιουργία προγραμμάτων οποιουδήποτε επιπέδου πολυπλοκότητας.
Για περισσότερα από 20 χρόνια, αυτή η γλώσσα βρίσκεται στις τρεις πιο δημοφιλείς και πιο απαιτητικές γλώσσες προγραμματισμού. (Αυτό μπορεί να επαληθευτεί με επίσκεψη στον ιστότοπο της TIOBE).
Η γλώσσα ξεκίνησε στις αρχές της δεκαετίας του 1980, όταν ο υπάλληλος της Bell Labs, Björn Stroustrup, κατέληξε σε μια σειρά βελτιώσεων στη γλώσσα C για τις δικές του ανάγκες.

Bjarne Stroustrup - δημιουργός της γλώσσας C++

Ο Stroustrup αποφάσισε να επεκτείνει τη γλώσσα C με τις δυνατότητες που είναι διαθέσιμες στη γλώσσα Simula. Η γλώσσα C, που είναι η βασική γλώσσα του συστήματος UNIX στο οποίο έτρεχαν οι υπολογιστές Bell, είναι γρήγορη, πλούσια σε χαρακτηριστικά και φορητή. Ο Stroustrup πρόσθεσε σε αυτό τη δυνατότητα εργασίας με κλάσεις και αντικείμενα. Ως αποτέλεσμα, τα πρακτικά προβλήματα μοντελοποίησης αποδείχθηκαν προσβάσιμα τόσο από την άποψη του χρόνου ανάπτυξης (λόγω της χρήσης κλάσεων τύπου Simula) όσο και από την άποψη του χρόνου υπολογισμού (λόγω της ταχύτητας του C).
Να πώς το λέει ο ίδιος ο προγραμματιστής της γλώσσας:



Το 1998, το πρώτο γλωσσικό πρότυπο, γνωστό ως C++98, δημοσιεύτηκε από μια επιτροπή προτύπων. Η C++ συνεχίζει να εξελίσσεται για να ανταποκρίνεται στις σύγχρονες απαιτήσεις. Μία από τις ομάδες που αναπτύσσει τη γλώσσα C++ και στέλνει προτάσεις στην επιτροπή τυποποίησης της C++ για τη βελτίωσή της είναι Ωθηση, που ασχολείται, μεταξύ άλλων, με τη βελτίωση των δυνατοτήτων της γλώσσας με την προσθήκη χαρακτηριστικών μεταπρογραμματισμού σε αυτήν. Το πιο πρόσφατο πρότυπο κυκλοφόρησε το 2017 και ονομάζεται C++17. Το επόμενο πρότυπο δεν θα αργήσει να έρθει και αναμένεται να εμφανιστεί το 2020.
Κανείς δεν κατέχει τα δικαιώματα στη γλώσσα C++, είναι δωρεάν. Τον Μάρτιο του 2016, η Ρωσία ίδρυσε ομάδα εργασίας WG21 C++. Η ομάδα οργανώθηκε για να συγκεντρώσει προτάσεις για το πρότυπο C++, να τις υποβάλει στην επιτροπή και να τις υπερασπιστεί σε γενικές συνελεύσεις του Διεθνούς Οργανισμού Τυποποίησης.
Η C++ είναι μια γλώσσα πολλαπλών παραδειγμάτων (από τη λέξη paradigm - στυλ γραφής προγράμματα υπολογιστή), το οποίο περιλαμβάνει ένα ευρύ φάσμα διαφορετικών στυλ και τεχνολογιών προγραμματισμού. Συχνά αναφέρεται ως αντικειμενοστρεφής γλώσσα, αλλά, αυστηρά, αυτό δεν συμβαίνει. Στη διαδικασία της εργασίας, ο προγραμματιστής αποκτά απόλυτη ελευθερία στην επιλογή εργαλείων, έτσι ώστε το πρόβλημα που επιλύεται χρησιμοποιώντας τη μία ή την άλλη προσέγγιση να επιλύεται όσο το δυνατόν πιο αποτελεσματικά. Με άλλα λόγια, η C++ δεν αναγκάζει τον προγραμματιστή να τηρεί μόνο ένα στυλ ανάπτυξης προγράμματος (για παράδειγμα, αντικειμενοστραφή).
Η C++ διαθέτει μια πλούσια τυπική βιβλιοθήκη που περιλαμβάνει κοινά κοντέινερ και αλγόριθμους, I/O, κανονικές εκφράσεις, υποστήριξη πολλαπλών νημάτων και άλλες δυνατότητες. Η C++ έχει επηρεάσει πολλές γλώσσες προγραμματισμού, όπως: Java, C#, D. Δεδομένου ότι η C++ ανήκει σε μια οικογένεια γλωσσών που βασίζεται στη σύνταξη της γλώσσας C, άλλες γλώσσες προγραμματισμού αυτής της οικογένειας μπορούν εύκολα να κατακτηθούν: JavaScript , PHP, Perl, Objective-C και πολλά άλλα. . κ.λπ., συμπεριλαμβανομένης της ίδιας της μητρικής γλώσσας - Γ. ()
Κατά τη διάρκεια της ύπαρξής του, στη γλώσσα C ++ έχουν εδραιωθεί σταθεροί μύθοι, οι οποίοι διαψεύδονται εύκολα (δείτε εδώ: Μέρος 1 και Μέρος 2)

Η ιστορία της γλώσσας και η απελευθέρωση προτύπων

1983

Δημιουργός γλώσσας - Bjorn Stroustrup, στα Bell Labs, παρουσίασε μια πρώιμη έκδοση της C++ ("C with Classes")

1985

Πρώτη εμπορική κυκλοφορία της C++, η γλώσσα παίρνει σύγχρονο όνομα

1986

Κυκλοφορία της πρώτης έκδοσης της γλώσσας προγραμματισμού C++, ενός βιβλίου C++ γραμμένο από τον Bjorn Stroustrup

1998

Το διεθνές πρότυπο γλώσσας C++ επικυρώθηκε: ISO/IEC 14882:1998 "Standard for the C++ Programming Language"

2003
2005

Κυκλοφόρησε η Τεχνική Έκθεση Βιβλιοθήκης 1 (TR1). Αν και δεν αποτελεί επίσημα μέρος του προτύπου, η αναφορά περιέγραφε επεκτάσεις στην τυπική βιβλιοθήκη που θα έπρεπε να περιλαμβάνονται επόμενη έκδοσηΓλώσσα C++

2011

Έκδοση νέου προτύπου - C++11 ή ISO/IEC 14882:2011. νέο πρότυποπεριελάμβανε προσθήκες στον πυρήνα της γλώσσας και μια επέκταση στην τυπική βιβλιοθήκη, συμπεριλαμβανομένου μεγάλου μέρους του TR1

2014

Έκδοση του προτύπου C++14 («Διεθνές Πρότυπο ISO/IEC 14882:2014(E) Γλώσσα προγραμματισμού C++»); Η C++14 μπορεί να θεωρηθεί ως μια μικρή επέκταση της C++11, η οποία περιέχει κυρίως διορθώσεις σφαλμάτων και μικρές βελτιώσεις.

2017

Η κυκλοφορία του νέου προτύπου είναι C++1z (C++17). Αυτό το πρότυπο έχει κάνει πολλές αλλαγές και προσθήκες. Για παράδειγμα, το STD περιελάμβανε τυπικές βιβλιοθήκες C11, σύστημα αρχείων, βασισμένο στο boost::filesystem, ένα μεγάλο μέρος της πειραματικής βιβλιοθήκης TS I.

2020

Το C++20 είναι το ανεπίσημο όνομα για το πρότυπο ISO/IEC για τη γλώσσα προγραμματισμού C++, το οποίο αναμένεται μετά τη C++17. Προσχέδιο του προτύπου N4800.

Φιλοσοφία C++

Στο The Design and Evolution of C++ (2007), ο Bjorn Stroustrup περιγράφει τις αρχές που ακολούθησε κατά τον σχεδιασμό της C++ (δίνονται σε συντομογραφία):

  • Αποκτήστε μια καθολική γλώσσα με στατικούς τύπους δεδομένων, την αποτελεσματικότητα και τη φορητότητα του C.
  • Άμεση και ολοκληρωμένη υποστήριξη ποικίλων στυλ προγραμματισμού.
  • Δώστε στον προγραμματιστή ελευθερία επιλογής, ακόμα κι αν του δίνει τη δυνατότητα να επιλέξει λανθασμένα.
  • Διατηρήστε τη συμβατότητα με το C όσο το δυνατόν περισσότερο, καθιστώντας έτσι δυνατή την εύκολη εναλλαγή από τον προγραμματισμό στο C.
  • Αποφύγετε τις ασυνέπειες μεταξύ C και C++: κάθε κατασκευή που είναι έγκυρη και στις δύο γλώσσες πρέπει να σημαίνει το ίδιο πράγμα σε καθεμία από αυτές και να οδηγεί στην ίδια συμπεριφορά προγράμματος.
  • Αποφύγετε λειτουργίες που εξαρτώνται από την πλατφόρμα ή δεν είναι καθολικές.
  • "Μην πληρώνετε για ό,τι δεν χρησιμοποιείτε" - Καμία δυνατότητα γλώσσας δεν πρέπει να προκαλεί υποβάθμιση της απόδοσης για προγράμματα που δεν τη χρησιμοποιούν.
  • Μην απαιτείτε πολύ περίπλοκο περιβάλλον προγραμματισμού.

C και C++

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

Πρόγραμμα 9.1

#περιλαμβάνω int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

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

Μοντέλα κύκλου ζωής εφαρμογής

Κύκλος ζωής λογισμικό- αυτή είναι η χρονική περίοδος που ξεκινά από τη στιγμή που λαμβάνεται απόφαση σχετικά με την ανάγκη δημιουργίας ενός προϊόντος λογισμικού και λήγει τη στιγμή της πλήρους απόσυρσής του από τη λειτουργία. Αυτός ο κύκλος είναι η διαδικασία δημιουργίας και ανάπτυξης λογισμικού (SW). Υπάρχουν πολλά μοντέλα κύκλος ζωής.
Cascade μοντέλοο κύκλος ζωής (αγγλικό μοντέλο καταρράκτη) προτάθηκε το 1970 από τον Winston Royce. Προβλέπει τη διαδοχική υλοποίηση όλων των σταδίων του έργου με αυστηρά καθορισμένη σειρά. Η μετάβαση στο επόμενο στάδιο σημαίνει την πλήρη ολοκλήρωση της εργασίας στο προηγούμενο στάδιο. Οι απαιτήσεις που ορίζονται στο στάδιο δημιουργίας απαιτήσεων τεκμηριώνονται αυστηρά στο έντυπο όροι αναφοράςκαι καθορίζονται για τη διάρκεια του έργου. Κάθε στάδιο τελειώνει με την απελευθέρωση πλήρες σετεπαρκή τεκμηρίωση ώστε η ανάπτυξη να μπορεί να συνεχιστεί από άλλη ομάδα ανάπτυξης.
Στάδια έργου σύμφωνα με το μοντέλο καταρράκτη:

  1. Διαμόρφωση απαιτήσεων;
  2. Σχέδιο;
  3. Εκτέλεση;
  4. Δοκιμές;
  5. εκτέλεση;
  6. Λειτουργία και συντήρηση.

Στο μοντέλο καταρράκτη, η μετάβαση από τη μια φάση του έργου στην άλλη προϋποθέτει την πλήρη ορθότητα του αποτελέσματος της προηγούμενης φάσης. Σε μεγάλα έργα, αυτό είναι σχεδόν αδύνατο να επιτευχθεί. Επομένως, ένα τέτοιο μοντέλο είναι κατάλληλο μόνο για την ανάπτυξη ενός μικρού έργου. (Ο ίδιος ο W. Royce δεν τηρούσε αυτό το μοντέλο και χρησιμοποίησε ένα επαναληπτικό μοντέλο).
Επαναληπτικό μοντέλο
Μια εναλλακτική λύση στο μοντέλο του καταρράκτη είναι το μοντέλο της επαναληπτικής και επαυξητικής ανάπτυξης (IID), το οποίο έλαβε από τον T. Gilb τη δεκαετία του '70. το όνομα του εξελικτικού μοντέλου. Το μοντέλο IID αναλύει τον κύκλο ζωής ενός έργου σε μια σειρά επαναλήψεων, καθεμία από τις οποίες μοιάζει με ένα «μίνι-έργο», συμπεριλαμβανομένων όλων των διαδικασιών ανάπτυξης που εφαρμόζονται για τη δημιουργία μικρότερων τμημάτων λειτουργικότητας, σε σύγκριση με το έργο ως σύνολο. Ο στόχος κάθε επανάληψης είναι να αποκτήσετε μια λειτουργική έκδοση σύστημα λογισμικού, το οποίο περιλαμβάνει τη λειτουργικότητα που ορίζεται από το ενσωματωμένο περιεχόμενο όλων των προηγούμενων και των τρεχουσών επαναλήψεων. Το αποτέλεσμα της τελικής επανάληψης περιέχει όλη την απαιτούμενη λειτουργικότητα του προϊόντος. Έτσι, με την ολοκλήρωση κάθε επανάληψης, το προϊόν λαμβάνει μια αύξηση - μια προσαύξηση - των δυνατοτήτων του, οι οποίες, επομένως, αναπτύσσονται εξελικτικά.


Διάφορες παραλλαγές της επαναληπτικής προσέγγισης εφαρμόζονται στις περισσότερες σύγχρονες μεθοδολογίες ανάπτυξης:

Διαδικασία ανάπτυξης - Ορθολογική ενοποιημένη διαδικασία (RUP)

Ορθολογική ενοποιημένη διαδικασία (RUP)(λογικός ενιαία διαδικασία) είναι μια μεθοδολογία ανάπτυξης λογισμικού που διατηρεί η Rational Software (IBM). Η μεθοδολογία παρέχει συστάσεις για όλα τα στάδια ανάπτυξης: από το επιχειρηματικό μοντέλο μέχρι τη δοκιμή και την έναρξη λειτουργίας του ολοκληρωμένου προγράμματος. Ως γλώσσα μοντελοποίησης χρησιμοποιείται η Unified Modeling Language (UML).
Ο πλήρης κύκλος ζωής ανάπτυξης προϊόντος αποτελείται από τέσσερις φάσεις, καθεμία από τις οποίες περιλαμβάνει μία ή περισσότερες επαναλήψεις.

  • Αρχικό στάδιο (Έναρξη)
  • Προσδιορισμός του αντικειμένου του έργου και του ποσού των απαιτούμενων πόρων. Καθορίζονται οι κύριες απαιτήσεις, οι περιορισμοί και η βασική λειτουργικότητα του προϊόντος. Οι κίνδυνοι αξιολογούνται. Σχεδιασμός δράσης. Στο τέλος της αρχικής φάσης, αξιολογείται η επίτευξη του Ορόσημου του Στόχου του Κύκλου Ζωής, που συνεπάγεται συμφωνία μεταξύ των ενδιαφερομένων για τη συνέχιση του έργου.

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

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

  • Υλοποίηση (Μετάβαση)
  • Στη φάση «Υλοποίηση» δημιουργείται η τελική έκδοση του προϊόντος και μεταφέρεται από τον προγραμματιστή στον πελάτη. Αυτό περιλαμβάνει ένα πρόγραμμα δοκιμών beta, εκπαίδευση χρηστών και διασφάλιση ποιότητας προϊόντων. Σε περίπτωση που η ποιότητα δεν ανταποκρίνεται στις προσδοκίες των χρηστών ή τα κριτήρια που τέθηκαν στη φάση Έναρξης, η φάση υλοποίησης επαναλαμβάνεται ξανά. Η επίτευξη όλων των στόχων σημαίνει την επίτευξη του ορόσημου του τελικού προϊόντος (Κυκλοφορία προϊόντος) και την ολοκλήρωση του πλήρους κύκλου ανάπτυξης.



« ΤΕΧΝΟΛΟΓΙΑ της ΠΛΗΡΟΦΟΡΙΑΣ. Μηχανική συστημάτων και λογισμικού. Διαδικασίες κύκλου ζωής εργαλεία λογισμικού» . Αυτό το πρότυπο έχει υιοθετηθεί από την Ομοσπονδιακή Υπηρεσία Τεχνικού Κανονισμού και Μετρολογίας της Ρωσικής Ομοσπονδίας και είναι παρόμοιο με το διεθνές πρότυπο ISO/IEC 12207:2008. Αυτό το πρότυπο, καθιερώνει ένα γενικό πλαίσιο για τις διαδικασίες του κύκλου ζωής του λογισμικού που μπορεί να χρησιμοποιηθεί ως καθοδήγηση στη βιομηχανία λογισμικού. Το πρότυπο δεν προσφέρει συγκεκριμένο μοντέλοκύκλος ζωής. Οι διατάξεις του είναι κοινές σε οποιαδήποτε μοντέλα κύκλου ζωής, μεθόδους και τεχνολογίες για τη δημιουργία λογισμικού. Περιγράφει τη δομή των διαδικασιών του κύκλου ζωής χωρίς να προσδιορίζει τον τρόπο υλοποίησης ή εκτέλεσης των δραστηριοτήτων και των εργασιών που περιλαμβάνονται σε αυτές τις διαδικασίες.

Παρουσίαση για το μάθημα
Θέματα μηνυμάτων
  • Ίδρυμα Ελεύθερου Λογισμικού (FSF)
  • Άδειες χρήσης ελεύθερου λογισμικού
  • Ελεύθερο Λογισμικό και Ανοιχτό Κώδικα
  • Ιστορία της ανάπτυξης των γλωσσών προγραμματισμού
  • Ιστορία C. C και C++
  • Ιστορία
  • Κριτική της C++
  • Ιστορία του UNIX
  • Μοντέλο Κύκλου Ζωής Λογισμικού Spiral
  • UML (Αγγλική ενοποιημένη γλώσσα μοντελοποίησης - ενοποιημένη γλώσσα μοντελοποίησης)
  • Microsoft Solutions Framework
  • IDE για προγραμματισμό C/C++ σε Windows
  • Μεταγλωττιστές C/C++
  • Δημιουργία εφαρμογής Κονσόλας στα Windows
Ερωτήσεις
  1. Γιατί το μοντέλο ανάπτυξης λογισμικού waterfall δεν χρησιμοποιείται σε μεγάλα έργα;
  2. Ποια είναι η διαφορά μεταξύ μοντέλων καταρράκτη και επαναληπτικής ανάπτυξης;
  3. Καταγράψτε τα στάδια ανάπτυξης λογισμικού στη μεθοδολογία Rational Unified Process (RUP).

Μαθαίνοντας τα βασικά και τις λεπτές λεπτομέρειες της γλώσσας προγραμματισμού C++. Φροντιστήριο με πρακτικές εργασίεςκαι δοκιμές. Θέλετε να μάθετε πώς να προγραμματίζετε; Τότε είστε στο σωστό μέρος - εδώ δωρεάν εκπαίδευσηπρογραμματισμός. Είτε έχετε εμπειρία είτε όχι, αυτά τα μαθήματα προγραμματισμού θα σας βοηθήσουν να ξεκινήσετε τη δημιουργία, τη μεταγλώττιση και τον εντοπισμό σφαλμάτων προγραμμάτων C++ σε διαφορετικά περιβάλλοντα ανάπτυξης: οπτικό στούντιο, Code::Blocks, Xcode ή Eclipse.

Πολλά παραδείγματα και λεπτομερείς εξηγήσεις. Ιδανικό τόσο για αρχάριους (ανδρείκελα) όσο και για πιο προχωρημένους. Όλα εξηγούνται από την αρχή μέχρι την παραμικρή λεπτομέρεια. Αυτά τα μαθήματα (200+) θα σας δώσουν μια καλή βάση / βάση για την κατανόηση του προγραμματισμού όχι μόνο στη C ++, αλλά και σε άλλες γλώσσες προγραμματισμού. Και είναι εντελώς δωρεάν!

Καλύπτει επίσης τη δημιουργία βήμα προς βήμα ενός παιχνιδιού σε C ++, τη βιβλιοθήκη γραφικών SFML και περισσότερες από 50 εργασίες για να δοκιμάσετε τις δεξιότητες και τις γνώσεις σας στη C ++. Ένα πρόσθετο μπόνους είναι .

Για αναδημοσίευση +20 στο κάρμα και την ευγνωμοσύνη μου!

Κεφάλαιο αριθμός 0. Εισαγωγή. Έναρξη εργασιών

Κεφάλαιο αριθμός 1. Βασικά στοιχεία της C++

Κεφάλαιο αριθμός 2. Μεταβλητές και βασικοί τύποι δεδομένων στη C++

Κεφάλαιο αριθμός 3. Χειριστές σε C++

Κεφάλαιο αριθμός 4. Πεδίο εφαρμογής και άλλοι τύποι μεταβλητών στη C++

Κεφάλαιο αριθμός 5. Η σειρά με την οποία εκτελείται ο κώδικας σε ένα πρόγραμμα. Βρόχοι, διακλαδώσεις σε C++

Η C/C++ Standard Library περιλαμβάνει μια σειρά από λειτουργίες για ανάγνωση και εγγραφή στην κονσόλα (πληκτρολόγιο και οθόνη). Αυτές οι λειτουργίες διαβάζουν και γράφουν δεδομένα ως μια απλή ροή χαρακτήρων.

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

τυπική συνάρτηση εξόδου printf().

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

Η συνάρτηση printf() έχει ένα πρωτότυπο στο αρχείο stdio.h
int printf(char *συμβολοσειρά ελέγχου, ...);

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

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

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

Προσδιοριστές μορφής:

%Με σύμβολο
%ρε ακέραιος δεκαδικός αριθμός
%Εγώ ακέραιος δεκαδικός αριθμός
%μι δεκαδικός αριθμός με τη μορφή x.xx e+xx
%ΜΙ δεκαδικός αριθμός με τη μορφή x.xx E+xx
%φά
%ΦΑ δεκαδική κινητή υποδιαστολή xx.xxxx
%σολ %f ή %e όποιο είναι μικρότερο
%ΣΟΛ %F ή %E όποιο είναι μικρότερο
%o οκταδικός αριθμός
%μικρό συμβολοσειρά χαρακτήρων
%u ανυπόγραφο δεκαδικό αριθμό
δεκαεξαδικός αριθμός
δεκαεξαδικός αριθμός
%% σύμβολο %
δείκτης
%n δείκτης

Επιπλέον, οι τροποποιητές l και h μπορούν να εφαρμοστούν σε εντολές μορφοποίησης.

%ld εκτύπωση μακροσκελής εντ
%hu εκτύπωση σύντομη ανυπόγραφη
%Lf εκτυπώστε μακρύ διπλό

Στον προσδιοριστή μορφής, μετά το σύμβολο %, μπορεί να καθοριστεί η ακρίβεια (ο αριθμός των ψηφίων μετά την υποδιαστολή). Η ακρίβεια ορίζεται ως εξής: %.n<код формата>. Όπου n είναι ο αριθμός των ψηφίων μετά την υποδιαστολή, και<код формата>- ένας από τους παραπάνω κωδικούς.

Για παράδειγμα, αν έχουμε μια μεταβλητή x=10.3563 τύπου float και θέλουμε να εμφανίσουμε την τιμή της με ακρίβεια 3 δεκαδικών ψηφίων, τότε θα πρέπει να γράψουμε:

printf("Μεταβλητή x = %.3f",x);

Αποτέλεσμα:
Μεταβλητή x = 10,356

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

Για παράδειγμα, αν γράψετε:

printf("%5d",20);

τότε το αποτέλεσμα θα είναι:
20

Σημειώστε ότι ο αριθμός 20 δεν τυπώθηκε από την αρχή της γραμμής. Εάν θέλετε οι αχρησιμοποίητες θέσεις του πεδίου να γεμίζουν με μηδενικά, τότε πρέπει να βάλετε τον χαρακτήρα 0 μπροστά από το πλάτος του πεδίου.

Για παράδειγμα:

printf("%05d",20);

Αποτέλεσμα:
00020

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

\σι BS, κάτω τρύπα
\φά Νέα σελίδα, μετάφραση σελίδας
\n Νέα γραμμή, τροφοδοσία γραμμής
\r Επιστροφή άμαξα
\ t Οριζόντια καρτέλα
\v Κάθετη καρτέλα
\" διπλό απόσπασμα
\" Απόστροφος
\\ Πίσω κάθετο
\0 Μηδενικός χαρακτήρας, μηδενικό byte
\ένα Σήμα
\N Οκταδική σταθερά
\xN Δεκαεξαδική σταθερά
\? Ερωτηματικό

Τις περισσότερες φορές θα χρησιμοποιήσετε τον χαρακτήρα \n. Με αυτόν τον χαρακτήρα ελέγχου θα μπορείτε να μεταβείτε σε μια νέα γραμμή. Δείτε τα παραδείγματα προγραμμάτων και θα καταλάβετε τα πάντα.

Παραδείγματα προγραμμάτων.

/* Παράδειγμα 1 */
#περιλαμβάνω

κενό κύριο (κενό)
{
int a,b,c; // Ανακοίνωση μεταβλητές a,b,c
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Το αποτέλεσμα του προγράμματος:
a=5, b=6, c=9

/* Παράδειγμα 2 */
#περιλαμβάνω

κενό κύριο (κενό)
{
float x,y,z;

X=10,5;
y=130,67;
z=54;

Printf("Συντεταγμένες αντικειμένου: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Το αποτέλεσμα του προγράμματος:
Συντεταγμένες αντικειμένου: x:10.50, y:130.67, z:54.00

/* Παράδειγμα 3 */
#περιλαμβάνω

void main()
{
intx;

X=5;
printf("x=%d", x*2);
}

Το αποτέλεσμα του προγράμματος:
x=10

/* Παράδειγμα 4 */
#περιλαμβάνω

κενό κύριο (κενό)
{
printf("\"Κείμενο σε εισαγωγικά\"");
printf("\nΠεριεκτικότητα οξυγόνου: 100%%");
}

Το αποτέλεσμα του προγράμματος:
"Κείμενο σε εισαγωγικά"
Περιεκτικότητα σε οξυγόνο: 100%

/* Παράδειγμα 5 */
#περιλαμβάνω

κενό κύριο (κενό)
{
int a?

A=11; // 11 σε δεκαδικό ίσο b στο εξάγωνο
printf("a-dec=%d, a-hex=%X",a,a);
}

Το αποτέλεσμα του προγράμματος:
a-dec=11, a-hex=b

/* Παράδειγμα 6 */
#περιλαμβάνω

κενό κύριο (κενό)
{
char ch1,ch2,ch3;

Ch1="A";
ch2="B";
ch3="C";

Printf("%c%c%c",ch1,ch2,ch3);
}

Το αποτέλεσμα του προγράμματος:
αλφάβητο

/* Παράδειγμα 7 */
#περιλαμβάνω

κενό κύριο (κενό)
{
char *str="Η συμβολοσειρά μου.";

Printf("Αυτό είναι %s",str);
}

Το αποτέλεσμα του προγράμματος:
Αυτή είναι η γραμμή μου.

/* Παράδειγμα 8 */
#περιλαμβάνω

κενό κύριο (κενό)
{
printf("Γεια!\n"); // Μετά την εκτύπωση, θα υπάρχει μια νέα γραμμή - \n
printf("Με λένε Παύλο."); // Αυτό θα εκτυπωθεί σε μια νέα γραμμή
}

Το αποτέλεσμα του προγράμματος:
Γειά σου!
Με λένε Πάβελ.

scanf() τυπική συνάρτηση εισαγωγής

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

Η συνάρτηση scanf() έχει το ακόλουθο πρωτότυπο στο stdio.h:
int scanf(char *συμβολοσειρά ελέγχου);

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

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

Προσδιοριστές μορφής:

Όταν εισάγετε μια συμβολοσειρά χρησιμοποιώντας τη συνάρτηση scanf() (προσδιοριστής μορφής %s), η συμβολοσειρά εισάγεται μέχρι το πρώτο διάστημα!! εκείνοι. αν εισαγάγετε τη συμβολοσειρά "Γεια σου κόσμο!" χρησιμοποιώντας τη συνάρτηση scanf().


scanf("%s",str);

στη συνέχεια, αφού εισαγάγετε τη συμβολοσειρά που προκύπτει, η οποία θα αποθηκευτεί στον πίνακα str, θα αποτελείται από μία λέξη "Hello". Η ΛΕΙΤΟΥΡΓΙΑ ΙΣΧΥΕΙ ΜΙΑ ΣΧΟΛΟΣΗ ΜΕΧΡΙ ΤΟ ΠΡΩΤΟ ΚΕΝΤΡΟ! Εάν θέλετε να εισαγάγετε συμβολοσειρές με κενά, χρησιμοποιήστε τη συνάρτηση

char *gets(char *buf);

Με τη συνάρτηση gets(), μπορείτε να εισάγετε πλήρεις συμβολοσειρές. Η συνάρτηση gets() διαβάζει χαρακτήρες από το πληκτρολόγιο μέχρι να εμφανιστεί ένας χαρακτήρας νέα γραμμή(\n). Ο ίδιος ο χαρακτήρας νέας γραμμής εμφανίζεται όταν πατάτε το πλήκτρο enter. Η συνάρτηση επιστρέφει έναν δείκτη στο buf. buf - buffer (μνήμη) για τη συμβολοσειρά εισόδου.

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

#περιλαμβάνω

κενό κύριο (κενό)
{
charbuffer? // πίνακας (buffer) για τη συμβολοσειρά εισόδου

Gets(buffer); // εισάγετε μια συμβολοσειρά και πατήστε enter
printf("%s", buffer); // εξάγετε την εισαγόμενη συμβολοσειρά στην οθόνη
}

Άλλη μια σημαντική σημείωση! Για να εισαγάγετε δεδομένα χρησιμοποιώντας τη συνάρτηση scanf(), πρέπει να μεταβιβάσετε τις διευθύνσεις των μεταβλητών ως παραμέτρους και όχι τις ίδιες τις μεταβλητές. Για να λάβετε τη διεύθυνση μιας μεταβλητής, προηγείστε το όνομα της μεταβλητής με το & (συμφράσεις). Το σύμβολο & σημαίνει λήψη της διεύθυνσης.

Τι σημαίνει διεύθυνση; Θα προσπαθήσω να εξηγήσω. Στο πρόγραμμα έχουμε μια μεταβλητή. Μια μεταβλητή αποθηκεύει την τιμή της στη μνήμη του υπολογιστή. Έτσι, η διεύθυνση που παίρνουμε με το & είναι η διεύθυνση στη μνήμη του υπολογιστή όπου είναι αποθηκευμένη η τιμή της μεταβλητής.

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

#περιλαμβάνω

κενό κύριο (κενό)
{
intx;

Printf("Εισαγάγετε τη μεταβλητή x:");
scanf("%d",&x);
printf("Μεταβλητή x=%d",x);
}

Τώρα ας επιστρέψουμε στη γραμμή ελέγχου της συνάρτησης scanf(). Πάλι:

int scanf(char *συμβολοσειρά ελέγχου);

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

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

Για παράδειγμα:

scanf("%d%*c%d",&i,&j);

πληκτρολογώντας 50+20 θα ορίσετε το i σε 50, το j σε 20 και το + θα διαβαστεί και θα αγνοηθεί.

Η εντολή format μπορεί να καθορίσει το μεγαλύτερο πλάτος πεδίου προς ανάγνωση.

Για παράδειγμα:

scanf("%5s",str);

καθορίζει την ανάγνωση των πρώτων 5 χαρακτήρων από τη ροή εισόδου. Εάν εισαγάγετε 1234567890ABC, ο πίνακας str θα περιέχει μόνο 12345, οι υπόλοιποι χαρακτήρες θα αγνοηθούν. Διαχωριστικά: διάστημα, καρτέλα και νέα γραμμή - όταν εισάγετε έναν χαρακτήρα, αντιμετωπίζονται όπως όλοι οι άλλοι χαρακτήρες.

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

scanf("%dplus%d",&x,&y);

θα εκχωρήσει το x στο 10, το y στο 20 και θα παραλείψει τους χαρακτήρες συν επειδή εμφανίζονται στη γραμμή ελέγχου.

Ένα από τα ισχυρά χαρακτηριστικά της συνάρτησης scanf() είναι η δυνατότητα καθορισμού ενός συνόλου σάρωσης (scanset). Το σύνολο αναζήτησης ορίζει το σύνολο χαρακτήρων με τους οποίους θα συγκριθούν χαρακτήρες που διαβάζονται από scanf(). Η συνάρτηση scanf() διαβάζει χαρακτήρες όσο εμφανίζονται στο σύνολο αναζήτησης. Μόλις ο χαρακτήρας που έχει εισαχθεί δεν βρεθεί στο σύνολο αναζήτησης, η συνάρτηση scanf() μεταβαίνει στον επόμενο προσδιοριστή μορφής. Το σύνολο αναζήτησης ορίζεται από μια λίστα χαρακτήρων που περικλείεται σε αγκύλες. Πριν από την αρχική παρένθεση υπάρχει ένα σύμβολο %. Ας το δούμε αυτό με ένα παράδειγμα.

#περιλαμβάνω

κενό κύριο (κενό)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Ας εισάγουμε ένα σύνολο χαρακτήρων:
12345abcdefg456

Στην οθόνη, το πρόγραμμα θα εμφανίσει:
12345
abcdefg456

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

scanf("%10", str1);

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

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

char str; // πίνακας για 80 χαρακτήρες
scanf("%s",str);

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

Παραδείγματα προγραμμάτων.

Παράδειγμα 1
Αυτό το πρόγραμμα εμφανίζει το ερώτημα "Πόσο χρονών είσαι;:" και περιμένει για εισαγωγή. Εάν, για παράδειγμα, πληκτρολογήσετε τον αριθμό 20, το πρόγραμμα θα εμφανίσει τη συμβολοσειρά "Είσαι 20 ετών.". Όταν καλέσαμε τη συνάρτηση scanf(), βάλαμε πρόθεμα στη μεταβλητή ηλικία με ένα &, επειδή η συνάρτηση scanf() χρειάζεται τις διευθύνσεις των μεταβλητών. Η συνάρτηση scanf() θα γράψει την εισαγόμενη τιμή σύμφωνα με καθορισμένη διεύθυνση. Στην περίπτωσή μας, η εισαγόμενη τιμή 20 θα γραφτεί στη διεύθυνση της μεταβλητής ηλικίας.

/* Παράδειγμα 1 */

#περιλαμβάνω

κενό κύριο (κενό)
{
int ηλικία?

Printf("\nΠόσο χρονών είσαι;:");
scanf("%d",&age);
printf("Είσαι %d χρονών.", ηλικία);
}

Παράδειγμα 2
Πρόγραμμα αριθμομηχανής. Αυτή η αριθμομηχανή μπορεί να προσθέσει μόνο αριθμούς. Εάν εισάγετε 100+34, το πρόγραμμα θα επιστρέψει το αποτέλεσμα: 100+34=134.

/* Παράδειγμα 2 */

#περιλαμβάνω

κενό κύριο (κενό)
{
int x, y;

Printf("\nΑριθμομηχανή:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Παράδειγμα 3
Αυτό το παράδειγμα δείχνει πώς να ορίσετε το πλάτος του πεδίου ανάγνωσης. Στο παράδειγμά μας, το πλάτος του πεδίου είναι πέντε χαρακτήρες. Εάν εισαγάγετε μια συμβολοσειρά με περισσότερους χαρακτήρες, τότε όλοι οι χαρακτήρες μετά τον 5ο θα απορριφθούν. Δώστε προσοχή στην κλήση της συνάρτησης scanf(). Το σύμβολο & δεν προηγείται του ονόματος του ονόματος του πίνακα, επειδή το όνομα του ονόματος του πίνακα είναι η διεύθυνση του πρώτου στοιχείου του πίνακα.

/* Παράδειγμα 3 */

#περιλαμβάνω

κενό κύριο (κενό)
{
όνομα χαρακτήρα;

Printf("\nΕισαγάγετε το όνομα χρήστη σας (μέγιστο 5 χαρακτήρες):");
scanf("%5s", όνομα);
printf("\nΕισαγάγατε %s", όνομα);
}

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

/* Παράδειγμα 4 */

#περιλαμβάνω

κενό κύριο (κενό)
{
charbal?

Printf("Η βαθμολογία σας είναι 2,3,4,5:");
scanf("%", &bal);
printf("\nΒαθμολογία %c", bal);
}

Οι υπολογιστές είναι ίσως τα πιο ευέλικτα εργαλεία που έχει στη διάθεσή της η ανθρωπότητα. Είναι σε θέση να κάνουν απίστευτους υπολογισμούς, σας επιτρέπουν να αποθηκεύετε μεγάλο ποσόπληροφορίες, εντελώς σε διαφορετικά μέρη του πλανήτη, και ταυτόχρονα είναι εύκολη η ανταλλαγή τους, ανεξαρτήτως τοποθεσίας. Οι υπολογιστές κάνουν τα πράγματα πιο εύκολα καθημερινές εργασίες, και σας επιτρέπουν να αυτοματοποιήσετε πολλές διαδικασίες ρουτίνας που θα ήταν πολύ κουραστικές και βαρετές για ένα άτομο να εκτελέσει. Υπάρχουν τόσα πολλά που μπορούν να κάνουν οι υπολογιστές, αλλά και πάλι, οι υπολογιστές δεν είναι τόσο έξυπνοι όσο οι άνθρωποι. Για να αυτοματοποιήσετε ακόμη και την πιο απλή διαδικασία, πρέπει να πείτε στον υπολογιστή ξεκάθαρα και ξεκάθαρα τι ακριβώς πρέπει να κάνει. Δυστυχώς, η γλώσσα μας και η γλώσσα του υπολογιστή είναι τελείως διαφορετική. Έτσι, υπάρχει ένα σοβαρό γλωσσικό εμπόδιο μεταξύ ενός μηχανήματος και ενός ανθρώπου, το οποίο πρέπει με κάποιο τρόπο να ξεπεραστεί, διαφορετικά ο υπολογιστής δεν θα μας καταλάβει. Και ενώ οι υπολογιστές δεν μας καταλαβαίνουν, δεν θα κάνουν τίποτα μόνοι τους. Ως μέσο επικοινωνίας μεταξύ ενός ατόμου και ενός υπολογιστή, έχει εφευρεθεί ένας τεράστιος αριθμός γλωσσών προγραμματισμού. Με τη βοήθεια γλωσσών προγραμματισμού, δημιουργούμε προγράμματα και ο υπολογιστής ήδη λειτουργεί άμεσα με προγράμματα. Τα ίδια τα προγράμματα είναι σύνολα εντολών που ένας υπολογιστής μπορεί να κατανοήσει και να εκτελέσει.

Τύποι προγραμμάτων

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

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

Σύνταξη, ερμηνεία και σύνταξη ΚΟΕ

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

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

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

Υψηλά ή χαμηλά επίπεδα προγραμματισμού

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

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

Συστήματα τύπων δεδομένων γλωσσών προγραμματισμού

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

Ισχυρό ή αδύναμο σύστημα τύπων δεδομένων

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

// δείγμα προγράμματος C++ #include χρησιμοποιώντας namespace std? int main()( char string = "παράδειγμα"; int αριθμός = 5; cout<< string * number << endl; // умножаем строку на число }

Ως αποτέλεσμα, ο μεταγλωττιστής θα αναφέρει ένα σφάλμα:

σφάλμα: μη έγκυροι τελεστές των τύπων 'char' και 'int' σε δυαδικό 'operator*'

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

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

Καθορισμένος ή μη καθορισμένος τύπος δεδομένων

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

Στατικός ή δυναμικός τύπος δεδομένων

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

Ασφαλές ή μη ασφαλές σύστημα τύπων δεδομένων

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

Αυτοί οι παράγοντες μπορούν να χαρακτηρίσουν τόσο μία όσο και πολλές γλώσσες προγραμματισμού.

Υποστηριζόμενα παραδείγματα προγραμματισμού

Τα παραδείγματα προγραμματισμού είναι μεθοδολογίες ή τρόποι προγραμματισμού που υποστηρίζει μια γλώσσα προγραμματισμού. Ακολουθεί μια λίστα με τα κύρια παραδείγματα:

Δηλωτικό παράδειγμα

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

Λειτουργικό παράδειγμα

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

Γενικευμένο παράδειγμα

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

επιτακτικό παράδειγμα

Οι επιτακτική γλώσσα επιτρέπουν στους προγραμματιστές να δώσουν στον υπολογιστή μια ταξινομημένη λίστα οδηγιών που απαιτούνται για την ολοκλήρωση μιας εργασίας. Οι επιτακτικές γλώσσες προγραμματισμού είναι αντίθετες με τις δηλωτικές γλώσσες προγραμματισμού.

Δομικό παράδειγμα

Οι δομικές γλώσσες προγραμματισμού στοχεύουν στην παροχή κάποιας μορφής κώδικα - μια ιεραρχική δομή. Όταν η δομή του κώδικα είναι καθαρά ορατή, η σειρά με την οποία εκτελούνται οι εντολές γίνεται διαισθητική. Τέτοιες γλώσσες συνήθως συνοφρυώνονται όταν «πηδούν» από το ένα κομμάτι κώδικα στο άλλο, όπως ο γνωστός τελεστής goto που ορίζεται σε C και C++.

διαδικαστικό παράδειγμα

Μια διαδικαστική γλώσσα προγραμματισμού αναφέρεται σε μια δομημένη γλώσσα προγραμματισμού που υποστηρίζει την έννοια μιας διαδικασίας ή μιας υπορουτίνας.

Αντικειμενοστρεφές Παράδειγμα

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

Τυποποίηση

Οι γλώσσες έχουν επίσημο πρότυπο; Η τυποποίηση είναι πολύ σημαντική για να διασφαλιστεί η κατανόηση του προγράμματος χωρίς συγκρούσεις από διαφορετικούς μεταγλωττιστές / διερμηνείς. Ορισμένες γλώσσες είναι τυποποιημένες από το Αμερικανικό Εθνικό Ινστιτούτο Προτύπων (ANSI), άλλες τυποποιούνται από τον Διεθνή Οργανισμό Τυποποίησης (ISO). Όλες οι γλώσσες προγραμματισμού πρέπει να είναι τυποποιημένες, διαφορετικά δεν θα είναι δυνατό να συμφωνήσουμε για το τι είναι σωστό και τι λάθος στη σύνταξη.

Ας χαρακτηρίσουμε τη γλώσσα προγραμματισμού C++

Τώρα που εξετάσαμε τα κύρια χαρακτηριστικά των γλωσσών προγραμματισμού, ας προσδιορίσουμε ποιους παράγοντες ικανοποιεί η γλώσσα προγραμματισμού C++.

Η C++ είναι μια τυποποιημένη γλώσσα προγραμματισμού ISO.

Για κάποιο χρονικό διάστημα, η C++ δεν είχε επίσημο πρότυπο, ωστόσο, από το 1998, η C++ έχει τυποποιηθεί από την επιτροπή ISO.

C++ μεταγλωττισμένη γλώσσα.

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

Η C++ είναι μια γλώσσα με έντονη πληκτρολόγηση.

Το C++ υπονοεί ότι ο προγραμματιστής ξέρει τι κάνει και δίνει απίστευτες δυνατότητες, περιορισμένες μόνο από τη φαντασία.

Η C++ υποστηρίζει στατικούς και δυναμικούς τύπους δεδομένων.

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

Η C++ υποστηρίζει πολλά παραδείγματα.

Η C++ υποστηρίζει διαδικαστικά, γενικά και αντικειμενοστραφή παραδείγματα προγραμματισμού, μεταξύ πολλών άλλων παραδειγμάτων.

Η C++ είναι μια φορητή γλώσσα προγραμματισμού.

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

Η C++ είναι πλήρως συμβατή με τη γλώσσα C

Στην C++ μπορείτε να χρησιμοποιήσετε βιβλιοθήκες C και θα λειτουργήσουν σωστά.