ภาษาโปรแกรมที่พิมพ์ §1 ข้อมูลทั่วไปเกี่ยวกับภาษา ขั้นตอนการออกแบบโปรแกรม โมเดลวงจรชีวิตของแอปพลิเคชัน ประเภท หรือตัวระบุรูปแบบ หรืออักขระการแปลง หรืออักขระควบคุม

C++ (อ่าน c-plus-plus) เป็นภาษาโปรแกรมทั่วไปที่คอมไพล์และพิมพ์คงที่ ซึ่งคุณสามารถสร้างโปรแกรมที่ซับซ้อนได้ทุกระดับ
เป็นเวลากว่า 20 ปีแล้วที่ภาษานี้เป็นหนึ่งในสามภาษาการเขียนโปรแกรมที่ได้รับความนิยมและเป็นที่ต้องการมากที่สุด (คุณสามารถตรวจสอบได้โดยไปที่เว็บไซต์ TIOBE)
ภาษานี้มีต้นกำเนิดในช่วงต้นทศวรรษ 1980 เมื่อบียอร์น สตรุสทรัป พนักงานของ Bell Labs ได้พัฒนาภาษา C หลายอย่างตามความต้องการของเขาเอง

Bjarne Stroustrup – ผู้สร้างภาษา C++

Stroustrup ตัดสินใจขยายภาษา C ด้วยความสามารถที่พบในภาษา Simula C ซึ่งเป็นภาษาพื้นฐานของระบบ UNIX ที่คอมพิวเตอร์ Bell ใช้นั้น มีความรวดเร็ว มีคุณสมบัติหลากหลาย และพกพาได้ Stroustrup เพิ่มความสามารถในการทำงานกับคลาสและวัตถุ เป็นผลให้ปัญหาการสร้างแบบจำลองเชิงปฏิบัติกลายเป็นเรื่องง่ายที่จะแก้ไขทั้งในแง่ของเวลาในการพัฒนา (ขอบคุณการใช้คลาสที่คล้าย Simula) และในแง่ของเวลาในการคำนวณ (ขอบคุณความเร็ว C)
นักพัฒนาภาษาพูดถึงเรื่องนี้อย่างไร:



ในปี 1998 มาตรฐานภาษาแรกที่เรียกว่า C++98 ได้รับการเผยแพร่โดยคณะกรรมการมาตรฐาน C++ มีการพัฒนาอย่างต่อเนื่องเพื่อตอบสนองความต้องการในปัจจุบัน หนึ่งในกลุ่มที่พัฒนาภาษา C++ และส่งข้อเสนอเพื่อปรับปรุงต่อคณะกรรมการมาตรฐาน C++ คือ บูสต์ซึ่งมีส่วนร่วมในการปรับปรุงความสามารถของภาษาโดยการเพิ่มคุณสมบัติเมตาโปรแกรมมิงเหนือสิ่งอื่นใด มาตรฐานล่าสุดเปิดตัวในปี 2560 และมีชื่อว่า ค++17. มาตรฐานถัดไปจะมาในเร็วๆ นี้ และคาดว่าจะปรากฏในปี 2020
ไม่มีใครเป็นเจ้าของสิทธิ์ในภาษา C++ มันฟรี ในเดือนมีนาคม 2559 คณะทำงาน WP21 C++ ถูกสร้างขึ้นในรัสเซีย กลุ่มนี้จัดขึ้นเพื่อรวบรวมข้อเสนอสำหรับมาตรฐาน C++ ส่งไปยังคณะกรรมการ และปกป้องข้อเสนอเหล่านั้นในการประชุมใหญ่ขององค์การระหว่างประเทศเพื่อการมาตรฐาน
C++ เป็นภาษาที่มีหลายกระบวนทัศน์ (จากคำว่า Paradigm ซึ่งเป็นรูปแบบของการเขียนโปรแกรมคอมพิวเตอร์) รวมถึงรูปแบบการเขียนโปรแกรมและเทคโนโลยีที่หลากหลาย มักถูกจัดว่าเป็นภาษาเชิงวัตถุ แต่หากพูดอย่างเคร่งครัด ในกรณีนี้ไม่เป็นเช่นนั้น ในระหว่างขั้นตอนการทำงาน นักพัฒนาจะได้รับอิสระอย่างเต็มที่ในการเลือกเครื่องมือ เพื่อให้ปัญหาที่ได้รับการแก้ไขโดยใช้แนวทางเฉพาะได้รับการแก้ไขอย่างมีประสิทธิภาพมากที่สุด กล่าวอีกนัยหนึ่ง C++ ไม่ได้บังคับให้โปรแกรมเมอร์ยึดติดกับรูปแบบการพัฒนาโปรแกรมเพียงรูปแบบเดียว (เช่น เชิงวัตถุ)
C++ มีไลบรารีมาตรฐานที่หลากหลายซึ่งประกอบด้วยคอนเทนเนอร์และอัลกอริธึมทั่วไป, I/O, นิพจน์ทั่วไป, การสนับสนุนมัลติเธรด และคุณลักษณะอื่นๆ C++ มีอิทธิพลต่อภาษาการเขียนโปรแกรมหลายภาษา รวมถึง: Java, C#, D เนื่องจาก C++ เป็นของตระกูลภาษาตามไวยากรณ์ของภาษา C คุณจึงสามารถเชี่ยวชาญภาษาการเขียนโปรแกรมอื่นในตระกูลนี้ได้อย่างง่ายดาย: JavaScript, PHP , Perl, Objective-C และอื่นๆ อีกมากมาย ฯลฯ รวมถึงภาษาแม่ด้วย - C. ()
ในระหว่างที่มันดำรงอยู่ ภาษา C++ ได้รับความเชื่อผิด ๆ ที่ไม่หยุดยั้งซึ่งถูกหักล้างอย่างง่ายดาย (ดูที่นี่: ส่วนที่ 1 และส่วนที่ 2)

ประวัติความเป็นมาของภาษาและมาตรฐานการเผยแพร่

1983

ผู้สร้างภาษาคือ Björn Stroustrupซึ่งเป็นพนักงานของ Bell Labs ได้เปิดตัวภาษา C++ เวอร์ชันแรกๆ (“C พร้อมคลาส”)

1985

การเปิดตัวเชิงพาณิชย์ครั้งแรกของ C++ ภาษานี้ใช้ชื่อที่ทันสมัย

1986

การเปิดตัว The C++ Programming Language ฉบับพิมพ์ครั้งแรก - หนังสือเกี่ยวกับ C++ ที่เขียนโดย Björn Stroustrup

1998

มาตรฐานสากลสำหรับภาษา C++ ได้รับการรับรองแล้ว: ISO/IEC 14882:1998 “มาตรฐานสำหรับภาษาการเขียนโปรแกรม C++”

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) Björn Stroustrup อธิบายถึงหลักการที่เขาปฏิบัติตามเมื่อออกแบบ 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 แต่ขนาดของประเภทเหล่านี้แตกต่างกัน

โมเดลวงจรการใช้งานของแอปพลิเคชัน

วงจรชีวิตซอฟต์แวร์คือช่วงเวลาที่เริ่มต้นจากช่วงเวลาที่ตัดสินใจเกี่ยวกับความจำเป็นในการสร้างผลิตภัณฑ์ซอฟต์แวร์และสิ้นสุดในขณะที่ถูกถอนออกจากบริการโดยสมบูรณ์ วงจรนี้เป็นกระบวนการสร้างและพัฒนาซอฟต์แวร์ มีโมเดลวงจรชีวิตหลายแบบ
โมเดลน้ำตกวงจรชีวิต (แบบจำลองน้ำตกภาษาอังกฤษ) ถูกเสนอในปี 1970 โดย Winston Royce จัดให้มีการดำเนินการตามลำดับของทุกขั้นตอนของโครงการในลำดับคงที่อย่างเคร่งครัด การเปลี่ยนไปสู่ขั้นต่อไปหมายถึงงานที่สมบูรณ์ในขั้นก่อนหน้า ข้อกำหนดที่กำหนดในขั้นตอนของการสร้างข้อกำหนดนั้นได้รับการบันทึกไว้อย่างเคร่งครัดในรูปแบบของข้อกำหนดทางเทคนิคและจะถูกบันทึกไว้สำหรับการพัฒนาทั้งหมดของโครงการ แต่ละขั้นตอนจะสิ้นสุดลงด้วยการปล่อยชุดเอกสารที่สมบูรณ์เพียงพอเพื่อให้ทีมพัฒนาอื่นสามารถดำเนินการพัฒนาต่อไปได้
ขั้นตอนโครงการตามแบบจำลองน้ำตก:

  1. การก่อตัวของข้อกำหนด
  2. ออกแบบ;
  3. การดำเนินงาน;
  4. การทดสอบ;
  5. การดำเนินงาน;
  6. การดำเนินงานและการบำรุงรักษา.

ในแบบจำลองแบบเรียงซ้อน การเปลี่ยนจากระยะโครงการหนึ่งไปยังอีกระยะหนึ่งจะถือว่าผลลัพธ์ของระยะก่อนหน้านั้นถูกต้องโดยสมบูรณ์ ในโครงการขนาดใหญ่ แทบจะเป็นไปไม่ได้เลยที่จะบรรลุผลสำเร็จ ดังนั้นโมเดลนี้จึงเหมาะสำหรับการพัฒนาโครงการขนาดเล็กเท่านั้น (ดับเบิลยู. รอยซ์เองไม่ได้ยึดติดกับแบบจำลองนี้และใช้แบบจำลองซ้ำ)
รูปแบบการวนซ้ำ
อีกทางเลือกหนึ่งสำหรับแบบจำลองแบบเรียงซ้อนคือแบบจำลองการพัฒนาซ้ำและแบบเพิ่มหน่วย (IID) ซึ่งได้รับจาก T. Gilb ในยุค 70 ชื่อของแบบจำลองวิวัฒนาการ โมเดล IID เกี่ยวข้องกับการแบ่งวงจรชีวิตของโปรเจ็กต์ออกเป็นลำดับของการวนซ้ำ ซึ่งแต่ละรอบจะมีลักษณะคล้ายกับ "มินิโปรเจ็กต์" รวมถึงกระบวนการพัฒนาทั้งหมดที่นำไปใช้กับการสร้างฟังก์ชันการทำงานเล็กๆ น้อยๆ เมื่อเปรียบเทียบกับโปรเจ็กต์โดยรวม เป้าหมายของการวนซ้ำแต่ละครั้งคือการได้รับเวอร์ชันที่ใช้งานได้ของระบบซอฟต์แวร์ รวมถึงฟังก์ชันการทำงานที่กำหนดโดยเนื้อหาที่ผสานรวมของการวนซ้ำก่อนหน้าและปัจจุบันทั้งหมด ผลลัพธ์ของการวนซ้ำครั้งสุดท้ายประกอบด้วยฟังก์ชันที่จำเป็นทั้งหมดของผลิตภัณฑ์ ดังนั้น เมื่อเสร็จสิ้นการวนซ้ำแต่ละครั้ง ผลิตภัณฑ์จะได้รับการเพิ่มขึ้น - เพิ่มขึ้น - ขีดความสามารถของผลิตภัณฑ์ ซึ่งดังนั้นจึงพัฒนาแบบวิวัฒนาการ


แนวทางการพัฒนาซ้ำหลายแบบถูกนำมาใช้ในวิธีการพัฒนาที่ทันสมัยที่สุด:

กระบวนการพัฒนา - กระบวนการรวมเหตุผล (RUP)

กระบวนการรวมเหตุผลแบบมีเหตุผล (RUP)(กระบวนการแบบรวมเหตุผล) เป็นวิธีการพัฒนาซอฟต์แวร์ที่ดูแลโดย Rational Software (IBM) วิธีการให้คำแนะนำสำหรับทุกขั้นตอนของการพัฒนา: ตั้งแต่การสร้างแบบจำลองธุรกิจไปจนถึงการทดสอบและการว่าจ้างโปรแกรมที่เสร็จสมบูรณ์ Unified Modeling Language (UML) ใช้เป็นภาษาการสร้างแบบจำลอง
วงจรชีวิตการพัฒนาผลิตภัณฑ์ที่สมบูรณ์ประกอบด้วยสี่ระยะ ซึ่งแต่ละระยะจะมีการทำซ้ำอย่างน้อยหนึ่งครั้ง

  • ระยะเริ่มแรก (Inception)
  • การกำหนดขอบเขตของโครงการและปริมาณทรัพยากรที่ต้องการ มีการกำหนดข้อกำหนดพื้นฐาน ข้อจำกัด และฟังก์ชันการทำงานที่สำคัญของผลิตภัณฑ์ มีการประเมินความเสี่ยง การวางแผนปฏิบัติการ เมื่อสิ้นสุดระยะเริ่มแรก จะมีการประเมินความสำเร็จของเป้าหมายวงจรชีวิต ซึ่งคาดว่าจะมีข้อตกลงระหว่างผู้มีส่วนได้ส่วนเสียในการดำเนินโครงการต่อไป

  • ชี้แจง
  • ข้อกำหนดด้านเอกสาร การออกแบบ การใช้งาน และการทดสอบสถาปัตยกรรมปฏิบัติการ ชี้แจงข้อกำหนดและค่าใช้จ่าย การลดความเสี่ยงที่สำคัญ การบรรลุผลสำเร็จของขั้นตอนการพัฒนาหมายถึงการบรรลุเป้าหมายสำคัญของ Lifecycle Architecture

  • การก่อสร้าง
  • ในขั้นตอน "สร้าง" ฟังก์ชันส่วนใหญ่ของผลิตภัณฑ์จะถูกนำไปใช้: การออกแบบแอปพลิเคชันเสร็จสมบูรณ์ มีการเขียนซอร์สโค้ด ขั้นตอนการสร้างจะสิ้นสุดด้วยการเปิดตัวระบบภายนอกครั้งแรกและหลักชัยของความสามารถในการปฏิบัติงานเบื้องต้น

  • การแนะนำ
  • ในขั้นตอน "การนำไปใช้งาน" เวอร์ชันสุดท้ายของผลิตภัณฑ์จะถูกสร้างขึ้นและถ่ายโอนจากนักพัฒนาไปยังลูกค้า ซึ่งรวมถึงโปรแกรมการทดสอบเบต้า การฝึกอบรมผู้ใช้ และการพิจารณาคุณภาพของผลิตภัณฑ์ ในกรณีที่คุณภาพไม่เป็นไปตามความคาดหวังของผู้ใช้หรือเกณฑ์ที่กำหนดไว้ในระยะเริ่มต้น ระยะการใช้งานจะถูกทำซ้ำอีกครั้ง การบรรลุเป้าหมายทั้งหมดหมายถึงการบรรลุเป้าหมายการเปิดตัวผลิตภัณฑ์และดำเนินการวงจรการพัฒนาทั้งหมดให้เสร็จสิ้น



“เทคโนโลยีสารสนเทศ วิศวกรรมระบบและซอฟต์แวร์ กระบวนการวงจรชีวิตของซอฟต์แวร์" มาตรฐานนี้ได้รับการรับรองโดยหน่วยงานกลางด้านกฎระเบียบทางเทคนิคและมาตรวิทยาแห่งสหพันธรัฐรัสเซีย และคล้ายคลึงกับมาตรฐานสากล ISO/IEC 12207:2008 มาตรฐานนี้กำหนดโครงสร้างทั่วไปของกระบวนการวงจรชีวิตซอฟต์แวร์ที่สามารถปฏิบัติตามได้ในอุตสาหกรรมซอฟต์แวร์ มาตรฐานไม่ได้เสนอแบบจำลองวงจรชีวิตที่เฉพาะเจาะจง ข้อกำหนดนี้เป็นเรื่องปกติสำหรับโมเดลวงจรชีวิต วิธีการ และเทคโนโลยีสำหรับการสร้างซอฟต์แวร์ อธิบายโครงสร้างของกระบวนการวงจรชีวิตโดยไม่ระบุวิธีดำเนินการหรือทำกิจกรรมและงานที่รวมอยู่ในกระบวนการเหล่านั้น

การนำเสนอสำหรับบทเรียน
หัวข้อข้อความ
  • มูลนิธิซอฟต์แวร์เสรี (FSF)
  • ลิขสิทธิ์ซอฟต์แวร์ฟรี
  • ซอฟต์แวร์ฟรีและโอเพ่นซอร์ส
  • ประวัติความเป็นมาของการพัฒนาภาษาโปรแกรม
  • ประวัติความเป็นมาของภาษาซี C และ C++
  • เรื่องราว
  • คำติชมของ C++
  • ประวัติความเป็นมาของยูนิกซ์
  • แบบจำลองวงจรชีวิตของซอฟต์แวร์แบบเกลียว
  • UML (ภาษาการสร้างแบบจำลองแบบรวม)
  • กรอบโซลูชันของ Microsoft
  • IDE สำหรับการเขียนโปรแกรม C/C++ บน Windows
  • คอมไพเลอร์ C/C++
  • การสร้างแอปพลิเคชันคอนโซลบน Windows
คำถาม
  1. เหตุใดการพัฒนาซอฟต์แวร์โมเดลน้ำตกจึงไม่ใช้ในโครงการขนาดใหญ่
  2. อะไรคือความแตกต่างระหว่างโมเดลการพัฒนาแบบน้ำตกและแบบวนซ้ำ?
  3. แสดงรายการขั้นตอนของการพัฒนาซอฟต์แวร์ในระเบียบวิธี Rational Unified Process (RUP)

ภาษาโปรแกรม C++

อัปเดตครั้งล่าสุด: 08/28/2017

ภาษาการเขียนโปรแกรม C++ เป็นภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปที่มีการพิมพ์แบบคงที่ระดับสูง ซึ่งเหมาะสำหรับการสร้างแอปพลิเคชันที่หลากหลาย ปัจจุบัน C++ เป็นหนึ่งในภาษาที่ได้รับความนิยมและแพร่หลายมากที่สุด

มีรากฐานมาจากภาษา C ซึ่งได้รับการพัฒนาในปี 1969-1973 ที่ Bell Labs โดยโปรแกรมเมอร์ Dennis Ritchie ในช่วงต้นทศวรรษ 1980 โปรแกรมเมอร์ชาวเดนมาร์ก Bjarne Stroustrup ซึ่งในขณะนั้นทำงานที่ Bell Labs ได้พัฒนา C++ เป็นส่วนเสริมของภาษา C ในความเป็นจริง ในตอนแรก C++ เพียงแต่เสริมภาษา C ด้วยความสามารถด้านการเขียนโปรแกรมเชิงวัตถุบางอย่าง และนั่นคือสาเหตุที่ Stroustrup เรียกมันว่า "C พร้อมคลาส" ในตอนแรก

ต่อมาภาษาใหม่เริ่มได้รับความนิยม มีการเพิ่มคุณสมบัติใหม่ซึ่งทำให้ไม่เพียงแต่เป็นส่วนเสริมของ C แต่ยังเป็นภาษาการเขียนโปรแกรมใหม่ทั้งหมด ด้วยเหตุนี้ “C พร้อมคลาส” จึงถูกเปลี่ยนชื่อเป็น C++ และตั้งแต่นั้นเป็นต้นมาทั้งสองภาษาก็เริ่มพัฒนาแยกจากกัน

C++ เป็นภาษาที่ทรงพลัง ซึ่งสืบทอดความสามารถด้านหน่วยความจำที่หลากหลายจากภาษา C ดังนั้น C++ จึงมักพบการใช้งานในการเขียนโปรแกรมระบบ โดยเฉพาะอย่างยิ่งเมื่อสร้างระบบปฏิบัติการ ไดรเวอร์ ยูทิลิตี้ต่างๆ โปรแกรมป้องกันไวรัส ฯลฯ อย่างไรก็ตาม Windows OS ส่วนใหญ่เขียนด้วยภาษา C++ แต่การใช้ภาษานี้ไม่จำกัดเฉพาะการเขียนโปรแกรมระบบเท่านั้น สามารถใช้ C++ ในโปรแกรมทุกระดับที่ความเร็วและประสิทธิภาพมีความสำคัญ มักใช้เพื่อสร้างแอพพลิเคชั่นกราฟิกและแอพพลิเคชั่นต่างๆ โดยเฉพาะอย่างยิ่งมักใช้เพื่อสร้างเกมที่มีการแสดงภาพที่สมบูรณ์และสมบูรณ์ นอกจากนี้ เมื่อเร็ว ๆ นี้ ทิศทางของมือถือได้รับแรงผลักดัน โดยที่ C++ ก็ค้นพบแอปพลิเคชันของมันเช่นกัน และแม้กระทั่งในการพัฒนาเว็บ คุณยังสามารถใช้ C++ เพื่อสร้างเว็บแอปพลิเคชันหรือบริการสนับสนุนบางอย่างที่ให้บริการเว็บแอปพลิเคชันได้ โดยทั่วไป C++ เป็นภาษาที่ใช้กันอย่างแพร่หลายซึ่งคุณสามารถสร้างโปรแกรมได้เกือบทุกประเภท

C++ เป็นภาษาที่คอมไพล์ ซึ่งหมายความว่าคอมไพลเลอร์แปลซอร์สโค้ด C++ เป็นไฟล์ปฏิบัติการที่มีชุดคำสั่งของเครื่อง แต่แพลตฟอร์มที่ต่างกันก็มีลักษณะเฉพาะของตัวเอง ดังนั้นโปรแกรมที่คอมไพล์แล้วจึงไม่สามารถถ่ายโอนจากแพลตฟอร์มหนึ่งไปอีกแพลตฟอร์มหนึ่งและรันที่นั่นได้ อย่างไรก็ตาม ในระดับซอร์สโค้ด โปรแกรม C++ ส่วนใหญ่จะพกพาได้ เว้นแต่จะใช้ฟังก์ชันเฉพาะระบบปฏิบัติการบางอย่าง และความพร้อมใช้งานของคอมไพเลอร์ ไลบรารี และเครื่องมือการพัฒนาสำหรับแพลตฟอร์มทั่วไปเกือบทั้งหมด ทำให้คุณสามารถคอมไพล์ซอร์สโค้ด C++ เดียวกันลงในแอปพลิเคชันสำหรับแพลตฟอร์มเหล่านี้ได้

ต่างจากภาษา C ตรงที่ภาษา C++ อนุญาตให้คุณเขียนแอปพลิเคชันในรูปแบบเชิงวัตถุ โดยเป็นตัวแทนของโปรแกรมในรูปของชุดของคลาสและอ็อบเจ็กต์ที่มีปฏิสัมพันธ์ระหว่างกัน ซึ่งช่วยลดความยุ่งยากในการสร้างแอพพลิเคชั่นขนาดใหญ่

ขั้นตอนหลักของการพัฒนา

ในปี 1979-80 Bjarne Stroustrup ได้พัฒนาส่วนขยายของภาษา C - "C with Classes" ในปี 1983 ภาษาถูกเปลี่ยนชื่อเป็น C++

ในปี พ.ศ. 2528 ภาษา C++ เวอร์ชันเชิงพาณิชย์รุ่นแรกได้รับการเผยแพร่ เช่นเดียวกับหนังสือ "The C++ Programming Language" ฉบับพิมพ์ครั้งแรก ซึ่งแสดงถึงคำอธิบายแรกของภาษานี้ในกรณีที่ไม่มีมาตรฐานอย่างเป็นทางการ

ในปี 1989 เวอร์ชันใหม่ของภาษา C++ 2.0 ได้รับการเผยแพร่ ซึ่งรวมถึงฟีเจอร์ใหม่ๆ มากมาย หลังจากนั้นภาษาก็พัฒนาค่อนข้างช้าจนถึงปี 2554 แต่ในเวลาเดียวกันในปี 1998 มีความพยายามครั้งแรกในการสร้างมาตรฐานภาษาโดยองค์กร ISO (องค์การระหว่างประเทศเพื่อการมาตรฐาน) มาตรฐานแรกเรียกว่า ISO/IEC 14882:1998 หรือเรียกสั้น ๆ ว่า C++98 ต่อมาในปี พ.ศ. 2546 ได้มีการเผยแพร่มาตรฐาน C++03 เวอร์ชันใหม่

ในปี 2011 มาตรฐาน C++11 ใหม่ได้รับการเผยแพร่ ซึ่งมีการเพิ่มเติมมากมายและทำให้ภาษา C++ สมบูรณ์ด้วยฟังก์ชันใหม่จำนวนมาก ต่อจากนี้ มีการเผยแพร่ส่วนเพิ่มเติมเล็กน้อยจากมาตรฐานหรือที่เรียกว่า C++14 ในปี 2014 และภาษาหลักอีกฉบับหนึ่งมีกำหนดเปิดตัวในปี 2560

คอมไพเลอร์และสภาพแวดล้อมการพัฒนา

ในการพัฒนาโปรแกรมในภาษา C++ คุณต้องมีคอมไพลเลอร์ โดยจะแปลซอร์สโค้ดในภาษา C++ ให้เป็นไฟล์ปฏิบัติการ ซึ่งคุณสามารถเรียกใช้ได้ แต่ในขณะนี้มีคอมไพเลอร์ที่แตกต่างกันมากมาย อาจแตกต่างกันในแง่มุมต่าง ๆ โดยเฉพาะในการดำเนินการตามมาตรฐาน รายการคอมไพเลอร์พื้นฐานสำหรับ C++ มีอยู่ใน Wikipedia ขอแนะนำให้พัฒนาเลือกคอมไพเลอร์ที่กำลังพัฒนาและใช้มาตรฐานล่าสุดทั้งหมด ดังนั้น ตลอดบทช่วยสอนนี้ เราจะใช้คอมไพเลอร์ g++ ที่เปิดให้ใช้งานได้ฟรีซึ่งพัฒนาโดยโครงการ GNU เป็นหลัก

คุณยังสามารถใช้ IDE เช่น Visual Studio, Netbeans, Eclipse, Qt ฯลฯ เพื่อสร้างโปรแกรมได้

บทช่วยสอนเหล่านี้เหมาะสำหรับทุกคน ไม่ว่าคุณจะเพิ่งเริ่มเขียนโปรแกรมหรือมีประสบการณ์ด้านการเขียนโปรแกรมในภาษาอื่นมาอย่างยาวนานก็ตาม! เนื้อหานี้เหมาะสำหรับผู้ที่ต้องการเรียนรู้ภาษา C/C++ ตั้งแต่พื้นฐานไปจนถึงโครงสร้างที่ซับซ้อนที่สุด

C++ เป็นภาษาโปรแกรม ความรู้เกี่ยวกับภาษาโปรแกรมนี้จะช่วยให้คุณสามารถควบคุมคอมพิวเตอร์ของคุณได้ในระดับสูงสุด ตามหลักการแล้ว คุณจะสามารถทำให้คอมพิวเตอร์ทำทุกอย่างที่คุณต้องการได้ เว็บไซต์ของเราจะช่วยให้คุณเชี่ยวชาญภาษาการเขียนโปรแกรม C++

การติดตั้ง /IDE

สิ่งแรกที่คุณควรทำก่อนเริ่มเรียน C++ คือต้องแน่ใจว่าคุณมี IDE ซึ่งเป็นสภาพแวดล้อมการพัฒนาแบบรวม (โปรแกรมที่คุณจะเขียนโปรแกรม) หากคุณไม่มี IDE คุณก็ไปได้เลย เมื่อคุณตัดสินใจเลือก IDE แล้ว ให้ติดตั้งและฝึกสร้างโปรเจ็กต์ง่ายๆ

รู้เบื้องต้นเกี่ยวกับ C ++

ภาษา C++ คือชุดคำสั่งที่บอกให้คอมพิวเตอร์ทราบว่าต้องทำอย่างไร ชุดคำสั่งนี้มักเรียกว่าซอร์สโค้ดหรือโค้ดเพียงอย่างเดียว คำสั่งอาจเป็น "ฟังก์ชัน" หรือ "คำสำคัญ" คำหลัก (คำสงวน C/C++) เป็นองค์ประกอบพื้นฐานของภาษา ฟังก์ชันต่างๆ เป็นองค์ประกอบที่ซับซ้อนเนื่องจากเขียนขึ้นในแง่ของฟังก์ชันที่เรียบง่ายกว่า คุณจะเห็นสิ่งนี้ในโปรแกรมแรกของเรา ซึ่งแสดงไว้ด้านล่าง โครงสร้างของฟังก์ชันนี้มีลักษณะคล้ายกับเนื้อหาของหนังสือ เนื้อหาสามารถแสดงบทต่างๆ ของหนังสือ แต่ละบทในหนังสือสามารถมีเนื้อหาเป็นของตัวเองซึ่งประกอบด้วยย่อหน้า แต่ละย่อหน้าสามารถมีย่อหน้าย่อยของตัวเองได้ แม้ว่า C++ จะมีฟังก์ชันทั่วไปและคำสงวนมากมายที่คุณสามารถใช้ได้ แต่ก็ยังจำเป็นต้องเขียนฟังก์ชันของคุณเอง

เริ่มที่ส่วนไหนของโปรแกรม? แต่ละโปรแกรมในภาษา C++ มีฟังก์ชันเดียว เรียกว่าฟังก์ชันหลักหรือฟังก์ชันหลัก การทำงานของโปรแกรมจะเริ่มต้นด้วยฟังก์ชันนี้ จากฟังก์ชันหลัก คุณยังสามารถเรียกใช้ฟังก์ชันอื่นๆ ได้ ไม่ว่าจะเป็นฟังก์ชันที่เราเขียนหรือตามที่คอมไพเลอร์จัดเตรียมไว้ข้างต้น

แล้วคุณจะเข้าถึงคุณสมบัติมาตรฐานเหล่านี้ได้อย่างไร? ในการเข้าถึงฟังก์ชันมาตรฐานที่มาพร้อมกับคอมไพเลอร์ คุณต้องรวมไฟล์ส่วนหัวโดยใช้คำสั่ง preprocessor - #include เหตุใดสิ่งนี้จึงมีประสิทธิภาพ? ลองดูตัวอย่างโปรแกรมการทำงาน:

#รวม << "Моя первая программа на С++\n"; cin.get(); }

ให้เราพิจารณารายละเอียดองค์ประกอบของโปรแกรม #include เป็นคำสั่ง "ตัวประมวลผลล่วงหน้า" ที่บอกให้คอมไพเลอร์ใส่โค้ดจากไฟล์ส่วนหัว iostream ลงในโปรแกรมของเราก่อนที่จะสร้างไฟล์ปฏิบัติการ ด้วยการเชื่อมต่อไฟล์ส่วนหัวเข้ากับโปรแกรม คุณจะสามารถเข้าถึงฟังก์ชันต่างๆ มากมายที่คุณสามารถใช้ในโปรแกรมของคุณได้ ตัวอย่างเช่น ตัวดำเนินการ cout ต้องการ iostream บรรทัดโดยใช้เนมสเปซ std; บอกให้คอมไพเลอร์ใช้กลุ่มของฟังก์ชันที่เป็นส่วนหนึ่งของไลบรารีมาตรฐานมาตรฐาน บรรทัดนี้ยังอนุญาตให้โปรแกรมใช้ตัวดำเนินการ เช่น cout อัฒภาคเป็นส่วนหนึ่งของไวยากรณ์ C++ มันบอกคอมไพเลอร์ว่านี่คือจุดสิ้นสุดของคำสั่ง คุณจะเห็นทันทีว่ามีการใช้เครื่องหมายอัฒภาคเพื่อยุติคำสั่งส่วนใหญ่ใน C++

บรรทัดถัดไปที่สำคัญของโปรแกรมคือ int main() บรรทัดนี้จะบอกคอมไพลเลอร์ว่ามีฟังก์ชันที่เรียกว่า main และฟังก์ชันส่งคืนจำนวนเต็ม วงเล็บปีกกา ( และ ) ส่งสัญญาณการเริ่มต้น (และสิ้นสุด) ของฟังก์ชัน วงเล็บปีกกายังใช้ในบล็อกโค้ดอื่น ๆ แต่จะระบุสิ่งหนึ่งเสมอ - จุดเริ่มต้นและจุดสิ้นสุดของบล็อกตามลำดับ

ในภาษา C++ วัตถุ cout ใช้เพื่อแสดงข้อความ (ออกเสียงว่า "C out") เขาใช้สัญลักษณ์<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

คำสั่งถัดไปคือ cin.get() นี่คือการเรียกใช้ฟังก์ชันอื่นที่อ่านข้อมูลจากสตรีมข้อมูลอินพุตและรอให้กดปุ่ม ENTER คำสั่งนี้ป้องกันไม่ให้หน้าต่างคอนโซลปิดจนกว่าจะกดปุ่ม ENTER ซึ่งจะทำให้คุณมีเวลาในการดูผลลัพธ์ของโปรแกรม

เมื่อถึงจุดสิ้นสุดของฟังก์ชันหลัก (วงเล็บปีกกาปิด) โปรแกรมของเราจะส่งคืนค่า 0 ให้กับระบบปฏิบัติการ ค่าที่ส่งคืนนี้มีความสำคัญเนื่องจากโดยการวิเคราะห์ระบบปฏิบัติการสามารถตัดสินได้ว่าโปรแกรมของเราเสร็จสมบูรณ์หรือไม่ ค่าที่ส่งคืนเป็น 0 หมายถึงสำเร็จและส่งคืนโดยอัตโนมัติ (แต่สำหรับประเภทข้อมูล int เท่านั้น ฟังก์ชันอื่นๆ ต้องการให้คุณส่งคืนค่าด้วยตนเอง) แต่ถ้าเราต้องการส่งคืนอย่างอื่น เช่น 1 เราก็จะต้องดำเนินการ ด้วยตนเอง

#รวม ใช้เนมสเปซมาตรฐาน; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

หากต้องการรวมวัสดุ ให้พิมพ์โค้ดโปรแกรมใน IDE ของคุณแล้วรัน เมื่อโปรแกรมรันและคุณเห็นผลลัพธ์แล้ว ให้ทดลองคำสั่ง cout เล็กน้อย สิ่งนี้จะช่วยให้คุณคุ้นเคยกับภาษา

อย่าลืมแสดงความคิดเห็นเกี่ยวกับโปรแกรมของคุณ!

เพิ่มความคิดเห็นลงในโค้ดของคุณเพื่อให้ชัดเจนยิ่งขึ้นไม่เพียงแต่สำหรับตัวคุณเองเท่านั้น แต่ยังรวมถึงผู้อื่นด้วย คอมไพเลอร์จะละเว้นความคิดเห็นเมื่อรันโค้ด ทำให้คุณสามารถใช้ความคิดเห็นจำนวนเท่าใดก็ได้เพื่ออธิบายโค้ดจริง หากต้องการสร้างความคิดเห็น ให้ใช้ หรือ // ซึ่งบอกคอมไพเลอร์ว่าบรรทัดที่เหลือคือความคิดเห็น หรือ /* แล้วตามด้วย */ เมื่อคุณกำลังเรียนรู้การเขียนโปรแกรม การแสดงความคิดเห็นในส่วนต่างๆ ของโค้ดเพื่อดูว่าผลลัพธ์ของโปรแกรมเปลี่ยนแปลงไปอย่างไรจะเป็นประโยชน์ คุณสามารถอ่านรายละเอียดเกี่ยวกับเทคนิคการแสดงความคิดเห็นได้

จะทำอย่างไรกับตัวแปรประเภทนี้?

บางครั้งการมีตัวแปรหลายประเภทอาจทำให้สับสนได้ เมื่อตัวแปรบางประเภทดูเหมือนจะซ้ำซ้อน การใช้ประเภทตัวแปรที่ถูกต้องเป็นสิ่งสำคัญมาก เนื่องจากตัวแปรบางตัวต้องการหน่วยความจำมากกว่าตัวอื่น นอกจากนี้ เนื่องจากวิธีการจัดเก็บไว้ในหน่วยความจำ หมายเลขจุดลอยตัว ประเภทข้อมูลทศนิยมและคู่จึง "ไม่แม่นยำ" และไม่ควรใช้เมื่อจำเป็นต้องจัดเก็บค่าจำนวนเต็มที่แม่นยำ

การประกาศตัวแปรในภาษา C++

หากต้องการประกาศตัวแปร ให้ใช้ประเภทไวยากรณ์<имя>; . นี่คือตัวอย่างบางส่วนของการประกาศตัวแปร:

หมายเลขภายใน; อักขระถ่าน; ลอย num_float;

อนุญาตให้ประกาศตัวแปรประเภทเดียวกันหลายรายการในบรรทัดเดียว โดยต้องคั่นแต่ละรายการด้วยเครื่องหมายจุลภาค

Int x, y, z, d;

หากคุณพิจารณาอย่างละเอียด คุณอาจพบว่าการประกาศตัวแปรมักจะตามด้วยเครื่องหมายอัฒภาคเสมอ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับแบบแผน “ในการตั้งชื่อตัวแปร”

ข้อผิดพลาดทั่วไปในการประกาศตัวแปรในภาษา C++

หากคุณพยายามใช้ตัวแปรที่ไม่ได้ประกาศ โปรแกรมของคุณจะไม่คอมไพล์และคุณจะได้รับข้อความแสดงข้อผิดพลาด ในภาษา C++ คีย์เวิร์ดภาษาทั้งหมด ฟังก์ชันทั้งหมด และตัวแปรทั้งหมดจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

การใช้ตัวแปร

ตอนนี้คุณรู้วิธีการประกาศตัวแปรแล้ว นี่คือตัวอย่างโปรแกรมที่สาธิตการใช้ตัวแปร:

#รวม ใช้เนมสเปซมาตรฐาน; int main() ( หมายเลข int; cout<< "Введите число: "; cin >>หมายเลข; cin.ละเว้น(); ศาล<< "Вы ввели: "<< number <<"\n"; cin.get(); }

ลองมาดูโปรแกรมนี้และตรวจสอบโค้ดของมันทีละบรรทัด คีย์เวิร์ด int ระบุว่าตัวเลขนั้นเป็นจำนวนเต็ม ฟังก์ชัน cin >> อ่านค่าเป็นตัวเลข ผู้ใช้ต้องกด Enter หลังตัวเลขที่ป้อน cin.ignore() เป็นฟังก์ชันที่อ่านอักขระและละเว้นอักขระนั้น เราได้จัดระเบียบอินพุตของเราลงในโปรแกรม หลังจากป้อนตัวเลข เรากดปุ่ม ENTER ซึ่งเป็นสัญลักษณ์ที่ถูกส่งไปยังสตรีมอินพุตด้วย เราไม่ต้องการมัน เราก็เลยทิ้งมันไป โปรดทราบว่าตัวแปรได้รับการประกาศเป็นประเภทจำนวนเต็ม หากผู้ใช้พยายามป้อนเลขฐานสิบ ตัวแปรนั้นจะถูกตัดทอน (นั่นคือ ส่วนทศนิยมของตัวเลขจะถูกละเว้น) ลองป้อนเลขทศนิยมหรือลำดับอักขระ เมื่อคุณรันโปรแกรมตัวอย่าง คำตอบจะขึ้นอยู่กับค่าอินพุต

โปรดทราบว่าเมื่อพิมพ์จากตัวแปร จะไม่มีการใช้เครื่องหมายคำพูด การไม่มีเครื่องหมายคำพูดจะบอกคอมไพเลอร์ว่ามีตัวแปร ดังนั้นโปรแกรมควรตรวจสอบค่าของตัวแปรเพื่อที่จะแทนที่ชื่อตัวแปรด้วยค่าของมันในขณะดำเนินการ คำสั่ง shift หลายรายการในบรรทัดเดียวกันเป็นที่ยอมรับได้อย่างสมบูรณ์ และผลลัพธ์จะดำเนินการในลำดับเดียวกัน คุณควรแยกตัวอักษรสตริง (สตริงที่อยู่ในเครื่องหมายคำพูด) และตัวแปร โดยให้แต่ละตัวดำเนินการกะของตัวเอง<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

การเปลี่ยนแปลงและการเปรียบเทียบค่า

แน่นอนว่าไม่ว่าคุณจะใช้ข้อมูลประเภทใดก็ตาม ตัวแปรจะไม่น่าสนใจมากนักหากไม่มีความสามารถในการเปลี่ยนค่าของมัน ต่อไปนี้จะแสดงโอเปอเรเตอร์บางตัวที่ใช้ร่วมกับตัวแปร:

  • * การคูณ
  • - การลบ
  • + นอกจากนี้
  • / แผนก,
  • = งานที่ได้รับมอบหมาย
  • == ความเท่าเทียมกัน
  • >เพิ่มเติม
  • < меньше.
  • != ไม่เท่ากัน
  • >= มากกว่าหรือเท่ากับ
  • <= меньше или равно

ตัวดำเนินการที่ทำหน้าที่ทางคณิตศาสตร์จะต้องใช้ทางด้านขวาของเครื่องหมายกำหนดเพื่อกำหนดผลลัพธ์ให้กับตัวแปรทางด้านซ้าย

นี่คือตัวอย่างบางส่วน:

ก = 4 * 6; // ใช้ความคิดเห็นบรรทัดและอัฒภาค a เท่ากับ 24 a = a + 5; // เท่ากับผลรวมของค่าเดิมและห้า a == 5 // ไม่ได้กำหนดห้า ตรวจสอบว่ามีค่าเท่ากับ 5 หรือไม่

คุณมักจะใช้ == ในโครงสร้าง เช่น คำสั่งแบบมีเงื่อนไขและลูป

ก< 5 // Проверка, a менее пяти? a >5 // ตรวจสอบมากกว่าห้าหรือเปล่า? a == 5 // กำลังตรวจสอบเท่ากับห้าใช่ไหม? a != 5 // เช็คสิ มันไม่เท่ากับห้าเหรอ? a >= 5 // ตรวจสอบว่า a มากกว่าหรือเท่ากับ 5 หรือไม่? ก<= 5 // Проверка, a меньше или равно пяти?

ตัวอย่างเหล่านี้ไม่ได้แสดงการใช้เครื่องหมายเปรียบเทียบอย่างชัดเจน แต่เมื่อเราเริ่มศึกษาตัวดำเนินการคัดเลือก คุณจะเข้าใจว่าทำไมจึงจำเป็น

1. บทนำ

การเขียนโปรแกรมต้องใช้โมเดลอัลกอริธึมสากลใหม่และฮาร์ดแวร์ใช้อัลกอริธึมไม่เพียง แต่ในรูปแบบที่แตกต่างกัน แต่ยังอยู่บนพื้นฐานของโมเดลอัลกอริธึมที่แตกต่างกัน - ออโตมาตะ การยืมเทคโนโลยีจากการพัฒนาฮาร์ดแวร์เป็นแนวคิดหลักเบื้องหลังการเขียนโปรแกรมออโตมาตะ อย่างไรก็ตาม การสังเคราะห์อุปกรณ์ดิจิทัลแตกต่างจากการเขียนโปรแกรม แต่ในแง่หนึ่งเมื่อยืมแบบจำลองมา ไม่แนะนำให้เปลี่ยนแปลงอย่างมีนัยสำคัญ และในทางกลับกัน เราไม่สามารถเพิกเฉยต่อทฤษฎีและแนวปฏิบัติของการเขียนโปรแกรมที่มีอยู่แล้วได้

ต่อไป เราจะมาดูเทคโนโลยี SWITCH สำหรับการออกแบบโปรแกรมออโตมาตะ ซึ่งคุณจะพบกับกระบวนการที่คล้ายกันตลอดเวลา ในด้านหนึ่ง มันเปลี่ยนโมเดลเครื่องจักรสถานะจำกัดมากจนเกินขอบเขตของทฤษฎีออโตมาตะจริงๆ และในทางกลับกัน มันแนะนำแนวคิดในการเขียนโปรแกรมที่ยากสำหรับโปรแกรมเมอร์ที่จะรับรู้ และในบางครั้งก็เป็นเพียงสิ่งฟุ่มเฟือยเพราะ มีอะนาล็อกที่คุ้นเคยมากกว่าจากทฤษฎีโปรแกรมและการฝึกเขียนโปรแกรม

เพื่อเป็นพื้นฐานในการอภิปรายปัญหาของการเขียนโปรแกรมอัตโนมัติ เราจะบรรยายล่าสุดโดย Shalyto A.A. และบทความ “การเขียนโปรแกรม” ของเขาเกี่ยวกับคำจำกัดความของกระบวนทัศน์การเขียนโปรแกรมอัตโนมัติ

ไลบรารีมาตรฐาน C/C++ มีฟังก์ชันจำนวนหนึ่งสำหรับการอ่านและเขียนไปยังคอนโซล (คีย์บอร์ดและจอภาพ) ฟังก์ชันเหล่านี้อ่านและเขียนข้อมูลเป็นสตรีมอักขระอย่างง่าย

แนวคิดของสตรีมที่ใช้ในการเขียนโปรแกรมมีความสัมพันธ์อย่างใกล้ชิดกับความเข้าใจทั่วไปของคำนี้ในชีวิตประจำวัน กระแสอินพุตสามารถเปรียบเทียบได้กับท่อที่น้ำ (ข้อมูล) เข้าสู่สระน้ำ (หน่วยความจำคอมพิวเตอร์) และกระแสเอาต์พุตสามารถเปรียบเทียบได้กับท่อที่น้ำออกจากสระน้ำ คุณลักษณะที่สำคัญของไปป์นี้คือข้อมูลสามารถเคลื่อนที่ไปในทิศทางเดียวเท่านั้นในแต่ละครั้ง แม้ว่าจะใช้ไปป์เดียวกันสำหรับอินพุตและเอาต์พุต สิ่งนี้ไม่สามารถเกิดขึ้นพร้อมกันได้: หากต้องการเปลี่ยนทิศทางการไหล จะต้องหยุด จะต้องดำเนินการบางอย่าง และมีเพียงเท่านั้นจึงจะสามารถกำหนดทิศทางการไหลไปในทิศทางตรงกันข้ามได้ คุณลักษณะอีกประการหนึ่งของกระแสน้ำคือแทบไม่เคยแห้งเลย บางครั้งก็แห้งไป แต่ระยะเวลานี้ไม่นานหากระบบทำงานได้ตามปกติ

ฟังก์ชันเอาต์พุตมาตรฐาน printf()

ฟังก์ชัน printf() เป็นฟังก์ชันเอาต์พุตมาตรฐาน การใช้ฟังก์ชันนี้ทำให้คุณสามารถแสดงสตริงอักขระ ตัวเลข ค่าของตัวแปรบนหน้าจอมอนิเตอร์ได้...

ฟังก์ชัน printf() มีต้นแบบใน stdio.h
int printf(ถ่าน *สตริงควบคุม, ...);

หากสำเร็จ printf() จะส่งกลับจำนวนอักขระที่พิมพ์

บรรทัดควบคุมประกอบด้วยข้อมูลสองประเภท: อักขระที่พิมพ์ลงบนหน้าจอโดยตรง และตัวระบุรูปแบบที่ระบุวิธีการพิมพ์อาร์กิวเมนต์

ฟังก์ชัน printf() เป็นฟังก์ชันเอาต์พุตที่จัดรูปแบบแล้ว ซึ่งหมายความว่าในพารามิเตอร์ฟังก์ชันจำเป็นต้องระบุรูปแบบของข้อมูลที่จะส่งออก รูปแบบข้อมูลถูกระบุโดยตัวระบุรูปแบบ ตัวระบุรูปแบบเริ่มต้นด้วยอักขระ % ตามด้วยโค้ดรูปแบบ

ตัวระบุรูปแบบ:

%กับ เครื่องหมาย
%d เลขทศนิยมจำนวนเต็ม
%ฉัน เลขทศนิยมจำนวนเต็ม
%อี เลขทศนิยมในรูปแบบ x.xx e+xx
%อี เลขทศนิยมในรูปแบบ x.xx E+xx
%ฉ
%เอฟ เลขทศนิยมทศนิยม xx.xxxx
%กรัม %f หรือ %e แล้วแต่จำนวนใดจะสั้นกว่า
%กรัม %F หรือ %E แล้วแต่จำนวนใดจะสั้นกว่า
%o เลขฐานแปด
%s สายอักขระ
%ยู เลขทศนิยมที่ไม่ได้ลงนาม
%x เลขฐานสิบหก
%X เลขฐานสิบหก
%% เครื่องหมาย %
%พี ตัวชี้
%n ตัวชี้

นอกจากนี้ โมดิฟายเออร์ l และ h สามารถใช้กับคำสั่งรูปแบบได้

%ld พิมพ์ int ยาวๆ
%hu แสตมป์สั้นไม่ได้ลงนาม
%แอลเอฟ แสตมป์คู่ยาว

ในตัวระบุรูปแบบ หลังจากสัญลักษณ์ % จะสามารถระบุความแม่นยำ (จำนวนหลักหลังจุดทศนิยม) ได้ ความแม่นยำถูกตั้งค่าดังนี้: %.n<код формата>. โดยที่ n คือจำนวนหลักหลังจุดทศนิยม และ<код формата>- หนึ่งในรหัสที่ให้ไว้ข้างต้น

ตัวอย่างเช่น หากเรามีตัวแปร x=10.3563 ประเภท float และเราต้องการแสดงค่าของมันให้แม่นยำถึงทศนิยม 3 ตำแหน่ง เราควรเขียนว่า:

printf("ตัวแปร x = %.3f",x);

ผลลัพธ์:
ตัวแปร x = 10.356

คุณยังสามารถระบุความกว้างขั้นต่ำของฟิลด์ที่จัดสรรสำหรับการพิมพ์ได้ หากบรรทัดหรือหมายเลขมีขนาดใหญ่กว่าความกว้างของฟิลด์ที่ระบุ บรรทัดหรือหมายเลขจะถูกพิมพ์เต็ม

ตัวอย่างเช่น หากคุณเขียนว่า:

printf("%5d",20);

จากนั้นผลลัพธ์จะเป็นดังนี้:
20

โปรดทราบว่าหมายเลข 20 ไม่ได้พิมพ์ตั้งแต่ต้นบรรทัด หากคุณต้องการให้ช่องว่างที่ไม่ได้ใช้ของฟิลด์เต็มไปด้วยศูนย์ คุณจะต้องใส่สัญลักษณ์ 0 ที่หน้าความกว้างของฟิลด์

ตัวอย่างเช่น:

printf("%05d",20);

ผลลัพธ์:
00020

นอกเหนือจากตัวระบุรูปแบบข้อมูลแล้ว บรรทัดควบคุมอาจมีอักขระควบคุม:

\ข บีเอส ล่างสุด
\ฉ เพจใหม่ เปลี่ยนเพจ
\n ขึ้นบรรทัดใหม่ ป้อนบรรทัด
\r การรับรถคืน
\t การจัดตารางแนวนอน
\v แท็บแนวตั้ง
\" คำพูดคู่
\" เครื่องหมายอะพอสทรอฟี
\\ แบ็กสแลช
\0 อักขระ Null, ไบต์ว่าง
\a สัญญาณ
\N ค่าคงที่ฐานแปด
\xN ค่าคงที่เลขฐานสิบหก
\? เครื่องหมายคำถาม

ส่วนใหญ่คุณจะใช้อักขระ \n ด้วยอักขระควบคุมนี้ คุณสามารถไปที่บรรทัดใหม่ได้ ดูโปรแกรมตัวอย่างแล้วคุณจะเข้าใจทุกอย่าง

ตัวอย่างของโปรแกรม

/* ตัวอย่างที่ 1 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
อินท์ ก,บี,ซี; // การประกาศตัวแปร a,b,c
ก=5;
ข=6;
ค=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

ผลลัพธ์ของโปรแกรม:
ก=5, ข=6, ค=9

/* ตัวอย่างที่ 2 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
ลอย x,y,z;

X=10.5;
ย=130.67;
ซ=54;

Printf("พิกัดวัตถุ: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

ผลลัพธ์ของโปรแกรม:
พิกัดวัตถุ: x:10.50, y:130.67, z:54.00

/* ตัวอย่างที่ 3 */
#รวม

เป็นโมฆะหลัก ()
{
อินท์ x;

เอ็กซ์=5;
printf("x=%d", x*2);
}

ผลลัพธ์ของโปรแกรม:
x=10

/* ตัวอย่างที่ 4 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
printf("\"ข้อความอยู่ในเครื่องหมายคำพูด\"");
printf("\nปริมาณออกซิเจน: 100%%");
}

ผลลัพธ์ของโปรแกรม:
"ข้อความในเครื่องหมายคำพูด"
ปริมาณออกซิเจน: 100%

/* ตัวอย่างที่ 5 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
อินท์เอ;

ก=11; // 11 ในฐานสิบเท่ากับ b ในฐานสิบหก
printf("a-dec=%d, a-hex=%X",a,a);
}

ผลลัพธ์ของโปรแกรม:
a-ธันวาคม=11, a-ฐานสิบหก=b

/* ตัวอย่างที่ 6 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
ถ่าน ch1,ch2,ch3;

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

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

ผลลัพธ์ของโปรแกรม:
เอบีซี

/* ตัวอย่างที่ 7 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
ถ่าน *str="สตริงของฉัน";

Printf("นี่คือ %s",str);
}

ผลลัพธ์ของโปรแกรม:
นี่คือสายของฉัน

/* ตัวอย่างที่ 8 */
#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
printf("สวัสดี!\n"); // หลังจากพิมพ์แล้ว จะมีการเปลี่ยนแปลงเป็นบรรทัดใหม่ - \n
printf("ฉันชื่อพาเวล"); // สิ่งนี้จะถูกพิมพ์ในบรรทัดใหม่
}

ผลลัพธ์ของโปรแกรม:
สวัสดี!
ฉันชื่อพาเวล

ฟังก์ชั่นอินพุตมาตรฐาน scanf()

ฟังก์ชัน scanf() เป็นฟังก์ชันอินพุตที่จัดรูปแบบแล้ว ด้วยความช่วยเหลือนี้ คุณสามารถป้อนข้อมูลจากอุปกรณ์อินพุตมาตรฐาน (คีย์บอร์ด) ข้อมูลอินพุตอาจเป็นจำนวนเต็ม ตัวเลขทศนิยม อักขระ สตริง และพอยน์เตอร์

ฟังก์ชัน scanf() มีต้นแบบต่อไปนี้ใน stdio.h:
int scanf(ถ่าน *สตริงควบคุม);

ฟังก์ชันส่งคืนจำนวนตัวแปรที่ได้รับการกำหนดค่า

สตริงควบคุมประกอบด้วยอักขระสามประเภท: ตัวระบุรูปแบบ ช่องว่าง และอักขระอื่นๆ ตัวระบุรูปแบบเริ่มต้นด้วยอักขระ %

ตัวระบุรูปแบบ:

เมื่อป้อนสตริงโดยใช้ฟังก์ชัน scanf() (ตัวระบุรูปแบบ %s) สตริงจะถูกป้อนก่อนช่องว่างแรก!! เหล่านั้น. หากคุณป้อนสตริง "Hello world!" ใช้ฟังก์ชัน scanf()


scanf("%s",str);

จากนั้นหลังจากป้อนสตริงผลลัพธ์ซึ่งจะถูกเก็บไว้ในอาร์เรย์ str จะประกอบด้วยคำเดียวว่า "Hello" ฟังก์ชั่นเข้าสู่สตริงก่อนช่องว่างแรก! หากคุณต้องการป้อนสตริงด้วยการเว้นวรรค ให้ใช้ฟังก์ชัน

ถ่าน *gets(ถ่าน *buf);

ด้วยฟังก์ชัน gets() คุณสามารถป้อนสตริงแบบเต็มได้ ฟังก์ชั่น gets() อ่านอักขระจากแป้นพิมพ์จนกระทั่งอักขระขึ้นบรรทัดใหม่ (\n) ปรากฏขึ้น อักขระขึ้นบรรทัดใหม่จะปรากฏขึ้นเมื่อคุณกด Enter ฟังก์ชั่นส่งคืนตัวชี้ไปที่ buf buf - บัฟเฟอร์ (หน่วยความจำ) สำหรับสตริงอินพุต

แม้ว่า gets() จะไม่ใช่หัวข้อของบทความนี้ เราจะมาเขียนโปรแกรมตัวอย่างที่ให้คุณป้อนบรรทัดทั้งหมดจากคีย์บอร์ดและแสดงบนหน้าจอ

#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
บัฟเฟอร์ถ่าน; // อาร์เรย์ (บัฟเฟอร์) สำหรับสตริงอินพุต

ได้รับ (บัฟเฟอร์); // ป้อนบรรทัดแล้วกด Enter
printf("%s",บัฟเฟอร์); // ส่งออกสตริงที่ป้อนไปที่หน้าจอ
}

อีกหนึ่งหมายเหตุสำคัญ! หากต้องการป้อนข้อมูลโดยใช้ฟังก์ชัน scanf() จะต้องส่งที่อยู่ของตัวแปรเป็นพารามิเตอร์ ไม่ใช่ตัวตัวแปรเอง ในการรับที่อยู่ของตัวแปร คุณต้องนำหน้าชื่อตัวแปรด้วยเครื่องหมาย & (เครื่องหมายและ) เครื่องหมาย & หมายถึงการรับที่อยู่

ที่อยู่หมายถึงอะไร? ฉันจะพยายามอธิบาย ในโปรแกรมเรามีตัวแปร ตัวแปรเก็บค่าไว้ในหน่วยความจำคอมพิวเตอร์ นี่คือที่อยู่ที่เราใช้ & คือที่อยู่ในหน่วยความจำคอมพิวเตอร์ที่เก็บค่าของตัวแปรไว้

มาดูตัวอย่างโปรแกรมที่แสดงวิธีการใช้งาน &

#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
อินท์ x;

Printf("ป้อนตัวแปร x:");
scanf("%d",&x);
printf("ตัวแปร x=%d",x);
}

ตอนนี้เรากลับมาที่บรรทัดควบคุมของฟังก์ชัน scanf() อีกครั้ง:

int scanf(ถ่าน *สตริงควบคุม);

อักขระช่องว่างบนสตริงควบคุมสั่งให้ข้ามช่องว่างหนึ่งช่องขึ้นไปในสตรีมอินพุต นอกจากช่องว่างแล้ว ยังสามารถรับรู้แท็บหรืออักขระขึ้นบรรทัดใหม่ได้ อักขระที่ไม่ใช่ค่าว่างบ่งชี้ว่าอักขระนั้นถูกอ่านและละทิ้ง

ตัวคั่นระหว่างตัวเลขสองตัวที่คุณป้อนคือช่องว่าง แท็บ หรือการขึ้นบรรทัดใหม่ * หลัง % และก่อนโค้ดรูปแบบ (ตัวระบุรูปแบบ) ​​จะสั่งให้อ่านประเภทข้อมูล แต่ไม่ได้กำหนดให้กับค่านั้น

ตัวอย่างเช่น:

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

การป้อน 50+20 จะตั้งค่าตัวแปร i เป็น 50, ตัวแปร j เป็น 20 และอักขระ + จะถูกอ่านและละเว้น

คำสั่งรูปแบบสามารถระบุความกว้างของฟิลด์ที่ใหญ่ที่สุดที่จะอ่านได้

ตัวอย่างเช่น:

scanf("%5s",str);

บ่งบอกถึงความจำเป็นในการอ่านอักขระ 5 ตัวแรกจากอินพุตสตรีม หากคุณป้อน 1234567890ABC อาร์เรย์ str จะมีเพียง 12345 อักขระที่เหลือจะถูกละเว้น ตัวคั่น: เว้นวรรค แท็บ และขึ้นบรรทัดใหม่ - เมื่อป้อนสัญลักษณ์ ระบบจะถือว่าสัญลักษณ์เหล่านั้นเหมือนกับอักขระอื่นๆ ทั้งหมด

หากมีอักขระอื่นใดเกิดขึ้นในสตริงควบคุม อักขระเหล่านั้นมีไว้เพื่อระบุและข้ามอักขระที่เกี่ยวข้อง ตัวดำเนินการสตรีมอักขระ 10plus20

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

จะกำหนดค่า 10 ให้กับตัวแปร x ค่า 20 ให้กับตัวแปร y และจะข้ามอักขระบวกเนื่องจากอักขระเหล่านั้นเกิดขึ้นในสตริงควบคุม

หนึ่งในคุณสมบัติอันทรงพลังของฟังก์ชัน scanf() คือความสามารถในการระบุชุดสแกน ชุดการค้นหาจะกำหนดชุดอักขระที่จะใช้เปรียบเทียบอักขระที่อ่านโดยฟังก์ชัน scanf() ฟังก์ชัน scanf() อ่านอักขระตราบเท่าที่ปรากฏในชุดการค้นหา ทันทีที่ไม่พบอักขระที่ป้อนในชุดการค้นหา ฟังก์ชัน scanf() จะย้ายไปยังตัวระบุรูปแบบถัดไป ชุดการค้นหาถูกกำหนดโดยรายการอักขระที่อยู่ในวงเล็บเหลี่ยม เครื่องหมาย % จะอยู่หน้าวงเล็บเปิด ลองดูตัวอย่างนี้

#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
ถ่าน str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
มาป้อนชุดอักขระกัน:
12345abcdefg456

โปรแกรมจะแสดงบนหน้าจอ:
12345
abcdefg456

เมื่อระบุชุดการค้นหา คุณยังสามารถใช้อักขระยัติภังค์เพื่อระบุระยะห่าง รวมถึงความกว้างสูงสุดของฟิลด์อินพุตได้ด้วย

scanf("%10", str1);

คุณยังสามารถกำหนดอักขระที่ไม่รวมอยู่ในชุดการค้นหาได้ อักขระตัวแรกนำหน้าด้วย ^ อักขระหลายตัวแยกความแตกต่างระหว่างอักษรตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

ฉันขอเตือนคุณว่าเมื่อใช้ฟังก์ชัน scanf() คุณจะต้องส่งที่อยู่ตัวแปรให้เป็นพารามิเตอร์ รหัสด้านบนถูกเขียน:

ถ่าน STR; // อาร์เรย์ 80 ตัวอักษร
scanf("%s",str);

โปรดทราบว่า str ไม่ได้นำหน้าด้วย & สิ่งนี้เกิดขึ้นเนื่องจาก str เป็นอาร์เรย์และชื่ออาร์เรย์ - str เป็นตัวชี้ไปยังองค์ประกอบแรกของอาร์เรย์ ดังนั้นจึงไม่ควรใช้เครื่องหมาย & เราได้ส่งที่อยู่ไปยังฟังก์ชัน scanf() แล้ว พูดง่ายๆ ก็คือ str คือที่อยู่ในหน่วยความจำคอมพิวเตอร์ที่จะจัดเก็บค่าขององค์ประกอบแรกของอาร์เรย์

ตัวอย่างของโปรแกรม

ตัวอย่างที่ 1
โปรแกรมนี้แสดงคำขอ "คุณอายุเท่าไหร่:" และรอการป้อนข้อมูล ตัวอย่างเช่น หากคุณป้อนหมายเลข 20 โปรแกรมจะแสดงบรรทัด “คุณอายุ 20 ปี” เมื่อเรียกใช้ฟังก์ชัน scanf() เราจะใส่เครื่องหมาย & ไว้หน้าตัวแปรอายุ เนื่องจากฟังก์ชัน scanf() จำเป็นต้องมีที่อยู่ของตัวแปร ฟังก์ชัน scanf() จะเขียนค่าที่ป้อนไปยังที่อยู่ที่ระบุ ในกรณีของเรา ค่าที่ป้อน 20 จะถูกเขียนไปยังที่อยู่ของตัวแปรอายุ

/* ตัวอย่างที่ 1 */

#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
อายุจริง;

Printf("\nคุณอายุเท่าไหร่:");
scanf("%d",&อายุ);
printf("คุณอายุ %d ปี", อายุ);
}

ตัวอย่างที่ 2
โปรแกรมเครื่องคิดเลข. เครื่องคิดเลขนี้สามารถเพิ่มได้เฉพาะตัวเลขเท่านั้น เมื่อคุณป้อน 100+34 โปรแกรมจะให้ผลลัพธ์: 100+34=134

/* ตัวอย่างที่ 2 */

#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
อินท์ 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 */

#รวม

เป็นโมฆะหลัก (เป็นโมฆะ)
{
ถ่านบาล;

Printf("คะแนนของคุณคือ 2,3,4,5:");
scanf("%", &bal);
printf("\nเรตติ้ง %c", bal);
}