1. مقدمه

برنامه نویسی به مدل های الگوریتمی جهانی جدید نیاز دارد و سخت افزار الگوریتم ها را نه تنها به شکلی متفاوت، بلکه بر اساس مدل الگوریتمی دیگر - خودکار پیاده سازی می کند. وام گرفتن فناوری از توسعه سخت افزار، ایده کلیدی پشت برنامه نویسی خودکار است. با این حال، سنتز دستگاه های دیجیتالمتفاوت از برنامه نویسی اما با وام گرفتن مدل، از یک سو، تغییر قابل توجهی در آن مطلوب نیست و از سوی دیگر، نمی توان تئوری و عمل موجود برنامه نویسی را در نظر گرفت.

در مرحله بعد، ما فناوری SWITCH را برای طراحی برنامه های خودکار در نظر خواهیم گرفت، که در آن شما همیشه با فرآیندهای مشابه مواجه می شوید. از یک طرف، او مدل را خیلی تغییر داد ماشین حالت، که در واقع آن را از محدوده تئوری اتوماتا خارج کرد. و از سوی دیگر، مفاهیمی را وارد برنامه نویسی می کند که به سختی توسط برنامه نویسان درک می شوند و در برخی مواقع صرفاً زائد هستند، زیرا آنالوگ های آشناتری از تئوری برنامه ها و عمل برنامه نویسی وجود دارد.

به عنوان پایه ای برای بحث در مورد مشکلات برنامه نویسی خودکار، ما یک سخنرانی اخیر توسط Shalyto A.A. و مقالات "نرم افزار" او به تعریف پارادایم برنامه نویسی خودکار.

آموزش اصول و ظرافت های زبان برنامه نویسی C++. آموزش با وظایف عملیو تست ها آیا می خواهید برنامه نویسی را یاد بگیرید؟ سپس شما در مکان مناسب هستید - اینجا آموزش رایگانبرنامه نويسي. چه تجربه داشته باشید و چه نداشته باشید، این درس های برنامه نویسی به شما کمک می کند تا شروع به ایجاد، کامپایل و اشکال زدایی برنامه های C++ در محیط های مختلف توسعه کنید: استودیوی تصویری، کد:: بلوک ها، Xcode یا Eclipse.

مثال های فراوان و توضیحات مفصل. ایده آل برای هر دو مبتدی (قلمک) و پیشرفته تر. همه چیز از ابتدا تا ریزترین جزئیات توضیح داده شده است. این درس ها (200+) به شما پایه / پایه خوبی در درک برنامه نویسی نه تنها در C ++، بلکه در سایر زبان های برنامه نویسی می دهد. و کاملا رایگان است!

همچنین ایجاد گام به گام یک بازی در C ++، کتابخانه گرافیکی SFML و بیش از 50 کار را برای آزمایش مهارت ها و دانش شما در C ++ پوشش می دهد. یک امتیاز اضافه شده است.

برای بازنشر +20 به کارما و سپاسگزاری من!

فصل شماره 0. مقدمه. شروع کار

فصل شماره 1. مبانی C++

فصل شماره 2. متغیرها و انواع داده های پایه در C++

فصل شماره 3. اپراتورها در C++

فصل شماره 4. دامنه و انواع دیگر متغیرها در C++

فصل شماره 5. ترتیبی که کد در یک برنامه اجرا می شود. حلقه ها، شاخه ها در C++

C++ (تلفظ c-plus-plus) یک زبان برنامه نویسی کامپایل شده، تایپ ایستا و همه منظوره است که می تواند برای ایجاد برنامه هایی با هر سطح از پیچیدگی استفاده شود.
بیش از 20 سال است که این زبان جزو سه زبان برنامه نویسی محبوب و پرتقاضا بوده است. (این را می توان با مراجعه به وب سایت TIOBE تأیید کرد).
این زبان در اوایل دهه 1980 سرچشمه گرفت، زمانی که کارمند آزمایشگاه بل، بیورن استروستروپ، تعدادی پیشرفت در زبان C برای نیازهای خود ارائه کرد.

Bjarne Stroustrup - خالق زبان C++

Stroustrup تصمیم گرفت زبان C را با ویژگی های موجود در زبان Simula گسترش دهد. زبان C که زبان پایه سیستم یونیکس است که رایانه‌های بل روی آن کار می‌کردند، سریع، دارای ویژگی‌های غنی و قابل حمل است. Stroustrup توانایی کار با کلاس ها و اشیاء را به آن اضافه کرد. در نتیجه، مشکلات مدل‌سازی عملی هم از نظر زمان توسعه (به دلیل استفاده از کلاس‌های شبیه به Simula) و هم از نظر زمان محاسبه (به دلیل سرعت C) قابل دسترسی بودند.
در اینجا نحوه بیان خود توسعه دهنده زبان آمده است:



در سال 1998 اولین استاندارد زبان معروف به C++98 توسط کمیته استاندارد منتشر شد. C++ برای برآوردن نیازهای مدرن به تکامل خود ادامه می دهد. یکی از گروه هایی که زبان C++ را توسعه می دهد و پیشنهاداتی را برای بهبود آن به کمیته استانداردسازی C++ ارسال می کند. تقویت کنید، که از جمله به بهبود قابلیت های زبان با افزودن ویژگی های فرابرنامه نویسی به آن می پردازد. آخرین استاندارد در سال 2017 منتشر شد و نام دارد C++17. استاندارد بعدی دیری نخواهد آمد و انتظار می رود در سال 2020 ظاهر شود.
هیچکس حقوق زبان C++ را ندارد، این زبان رایگان است. در مارس 2016، روسیه تاسیس شد گروه کاری WG21 C++. این گروه برای جمع آوری پیشنهادات برای استاندارد ++C، ارائه آنها به کمیته و دفاع از آنها در جلسات عمومی سازمان بین المللی استاندارد سازماندهی شد.
C++ یک زبان چند پارادایم است (از کلمه پارادایم - سبک نوشتن برنامه های کامپیوتری) که شامل طیف گسترده ای از سبک ها و فناوری های مختلف برنامه نویسی است. اغلب از آن به عنوان یک زبان شی گرا یاد می شود، اما، به طور دقیق، این مورد نیست. در فرآیند کار، توسعه دهنده در انتخاب ابزارها آزادی مطلق به دست می آورد تا مشکل حل شده با استفاده از یک یا روش دیگر تا حد امکان کارآمد حل شود. به عبارت دیگر، C++ برنامه نویس را مجبور نمی کند که تنها به یک سبک توسعه برنامه (مثلاً شی گرا) پایبند باشد.
C++ دارای یک کتابخانه استاندارد غنی است که شامل کانتینرها و الگوریتم های رایج، I/O، عبارات با قاعده، پشتیبانی از چند رشته و سایر ویژگی ها. ++C بر بسیاری از زبان‌های برنامه‌نویسی تأثیر گذاشته است، از جمله: Java، C#، D. از آنجایی که C++ متعلق به خانواده زبان‌های مبتنی بر نحو زبان C است، سایر زبان‌های برنامه‌نویسی این خانواده به راحتی قابل تسلط هستند: JavaScript. ، PHP، Perl، Objective-C و بسیاری موارد دیگر. . و غیره، از جمله خود زبان مادر - C. ()
در طول مدت وجود آن، افسانه های پایدار در زبان C ++ جا افتاده است که به راحتی رد می شوند (اینجا را ببینید: قسمت 1 و قسمت 2)

تاریخچه زبان و انتشار استانداردها

1983

خالق زبان - بیورن استروستروپ، در آزمایشگاه بل، نسخه اولیه C++ را معرفی کرد ("C با کلاس ها")

1985

اولین نسخه تجاری C++، زبان نام مدرن به خود می گیرد

1986

انتشار اولین ویرایش از زبان برنامه نویسی C++، یک کتاب C++ نوشته بیورن استراستروپ

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

بیورن استراستروپ در طراحی و تکامل C++ (2007)، اصولی را که هنگام طراحی C++ دنبال می‌کرد (به صورت اختصار شده) شرح می‌دهد:

  • دریافت یک زبان جهانی با انواع داده های ایستا، کارایی و قابلیت حمل C.
  • پشتیبانی مستقیم و جامع از انواع سبک های برنامه نویسی.
  • به برنامه نویس آزادی انتخاب بدهید، حتی اگر به او فرصت انتخاب نادرست را بدهد.
  • تا آنجا که ممکن است سازگاری با C را حفظ کنید، در نتیجه امکان تغییر آسان از برنامه نویسی به C را فراهم می کند.
  • اجتناب از سردرگمی بین C و C++: هر ساختاری که در هر دو زبان مجاز است باید در هر یک از آنها معنی یکسانی داشته باشد و به رفتار برنامه یکسان منجر شود.
  • از ویژگی هایی که وابسته به پلتفرم هستند یا جهانی نیستند اجتناب کنید.
  • «برای چیزی که استفاده نمی‌کنید پولی پرداخت نکنید» - هیچ ویژگی زبانی نباید باعث کاهش عملکرد برنامه‌هایی شود که از آن استفاده نمی‌کنند.
  • به محیط برنامه نویسی خیلی پیچیده نیاز ندارید.

C و C++

نحو C++ از زبان C به ارث رسیده است. اگرچه به طور رسمی، یکی از اصول C++ حفظ سازگاری با زبان C باقی مانده است، اما در واقع گروه های استانداردسازی این زبان ها با هم تعامل ندارند و تغییراتی که در آنها ایجاد می شود. نه تنها همبستگی ندارند، بلکه اغلب از نظر ایدئولوژیک نیز اساساً با یکدیگر در تضاد هستند. بنابراین، عناصری که استانداردهای جدید C به هسته اضافه می کنند، عناصر کتابخانه استاندارد در استاندارد C ++ هستند و به طور کلی در هسته وجود ندارند، به عنوان مثال، آرایه های پویا، آرایه هایی با مرزهای ثابت، امکانات پردازش موازی. استروستروپ معتقد است که ترکیب توسعه این دو زبان سود زیادی خواهد داشت، اما به دلایل سیاسی به سختی امکان پذیر است. بنابراین سازگاری عملی بین C و C++ به تدریج از بین خواهد رفت.
AT این مثالبسته به کامپایلر مورد استفاده، "C++" یا "C" خروجی خواهد شد:

برنامه 9.1

#عبارتند از int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); بازگشت 0؛ )

این به این دلیل است که ثابت های کاراکتر در C از نوع int و در C++ از نوع char هستند، اما اندازه این نوع ها متفاوت است.

مدل های چرخه عمر برنامه

چرخه زندگی نرم افزاردوره زمانی است که از لحظه تصمیم گیری در مورد نیاز به ایجاد شروع می شود محصول نرم افزاریو در لحظه خروج کامل آن از عملیات پایان می یابد. این چرخه فرآیند ساخت و توسعه نرم افزار (SW) است. چندین مدل وجود دارد چرخه زندگی.
مدل آبشاریچرخه زندگی (مدل آبشار انگلیسی) در سال 1970 توسط وینستون رویس پیشنهاد شد. اجرای متوالی تمام مراحل پروژه را به ترتیب کاملاً ثابت فراهم می کند. انتقال به مرحله بعدی به معنای تکمیل کامل کار در مرحله قبل است. الزامات تعریف شده در مرحله تولید نیازمندی ها کاملاً در فرم مستند شده است شرایط مرجعو در طول مدت پروژه ثابت می شوند. هر مرحله با انتشار به پایان می رسد مجموعه کاملمستندات کافی برای ادامه توسعه توسط تیم توسعه دیگری.
مراحل پروژه با توجه به مدل آبشار:

  1. تشکیل الزامات؛
  2. طرح؛
  3. پیاده سازی؛
  4. آزمایش کردن؛
  5. پیاده سازی؛
  6. عملیات و نگهداری.

در مدل آبشار، انتقال از یک فاز پروژه به فاز دیگر، صحت کامل نتیجه فاز قبلی را فرض می کند. در پروژه های بزرگ، دستیابی به این امر تقریبا غیرممکن است. بنابراین، چنین مدلی فقط برای توسعه یک پروژه کوچک مناسب است. (خود دبلیو رویس به این مدل پایبند نبود و از مدل تکراری استفاده کرد).
مدل تکراری
یک جایگزین برای مدل آبشار، مدل توسعه تکراری و افزایشی (IID) است که در دهه 70 از T. Gilb دریافت شد. نام مدل تکاملی مدل IID چرخه عمر یک پروژه را به دنباله‌ای از تکرارها تقسیم می‌کند، که هر کدام شبیه یک پروژه کوچک است، که شامل تمام فرآیندهای توسعه اعمال شده برای ایجاد قطعات کوچک‌تر از عملکرد، در مقایسه با پروژه به عنوان یک کل است. هدف از هر تکرار، به دست آوردن یک نسخه کارآمد از سیستم نرم افزار، از جمله عملکرد تعریف شده توسط محتوای یکپارچه تمام تکرارهای قبلی و فعلی است. نتیجه تکرار نهایی شامل تمام عملکردهای مورد نیاز محصول است. بنابراین، با تکمیل هر تکرار، محصول یک افزایش - یک افزایش - به قابلیت های خود دریافت می کند، که بنابراین، به طور تکاملی توسعه می یابد.


انواع مختلفی از رویکرد تکراری در اکثر متدولوژی های توسعه مدرن اجرا می شود:

فرآیند توسعه - فرآیند یکپارچه منطقی (RUP)

فرآیند یکپارچه منطقی (RUP)(گویا فرآیند یکپارچه) یک متدولوژی توسعه نرم افزار است که توسط Rational Software (IBM) نگهداری می شود. این روش توصیه هایی را برای تمام مراحل توسعه ارائه می دهد: از مدل سازی کسب و کار تا آزمایش و راه اندازی برنامه نهایی. زبان مدل سازی یکپارچه (UML) به عنوان زبان مدل سازی استفاده می شود.
چرخه عمر کامل توسعه محصول شامل چهار مرحله است که هر مرحله شامل یک یا چند تکرار است.

  • مرحله اولیه (شروع)
  • تعیین محدوده پروژه و میزان منابع مورد نیاز. الزامات اصلی، محدودیت ها و عملکرد کلیدی محصول تعیین می شود. خطرات ارزیابی می شود. برنامه ریزی اقدام. در پایان مرحله آغازین، دستیابی به نقطه عطف هدف چرخه حیات مورد ارزیابی قرار می گیرد، که دلالت بر توافق بین ذینفعان برای ادامه پروژه دارد.

  • پیچیدگی
  • مستندات مورد نیاز طراحی، پیاده سازی و تست معماری اجرایی. تعیین شرایط و هزینه. کاهش خطرات اصلی تکمیل موفقیت آمیز مرحله توسعه به معنای رسیدن به نقطه عطف معماری چرخه حیات است.

  • ساخت و ساز
  • در مرحله "ساخت"، بیشتر قابلیت های محصول اجرا می شود: طراحی برنامه تکمیل شده است، منبعنوشته شده است. مرحله ساخت با اولین نسخه خارجی سیستم و نقطه عطف قابلیت عملیاتی اولیه به پایان می رسد.

  • پیاده سازی (انتقال)
  • در مرحله "پیاده سازی"، نسخه نهایی محصول ایجاد و از توسعه دهنده به مشتری منتقل می شود. این شامل یک برنامه آزمایش بتا، آموزش کاربر و تضمین کیفیت محصول است. در صورتی که کیفیت انتظارات کاربران یا معیارهای تعیین شده در مرحله شروع را برآورده نکند، مرحله پیاده سازی مجددا تکرار می شود. دستیابی به همه اهداف به معنای رسیدن به نقطه عطف محصول نهایی (انتشار محصول) و تکمیل چرخه توسعه کامل است.



« فناوری اطلاعات. مهندسی سیستم و نرم افزار. فرآیندهای چرخه زندگی ابزارهای نرم افزاری» . این استاندارد توسط آژانس فدرال مقررات فنی و مترولوژی فدراسیون روسیه پذیرفته شده است و مشابه استاندارد بین المللی ISO/IEC 12207:2008 است. این استاندارد، یک چارچوب کلی برای فرآیندهای چرخه عمر نرم افزار ایجاد می کند که می تواند به عنوان راهنمایی در صنعت نرم افزار استفاده شود. استاندارد ارائه نمی دهد مدل خاصچرخه زندگی. مفاد آن برای هر مدل چرخه عمر، روش ها و فناوری های ایجاد نرم افزار مشترک است. ساختار فرآیندهای چرخه عمر را بدون مشخص کردن نحوه پیاده سازی یا انجام فعالیت ها و وظایف موجود در این فرآیندها توصیف می کند.

ارائه برای درس
موضوعات پیام
  • بنیاد نرم افزار آزاد (FSF)
  • مجوزهای نرم افزار رایگان
  • نرم افزار آزاد و منبع باز
  • تاریخچه توسعه زبان های برنامه نویسی
  • تاریخچه C. C و C++
  • داستان
  • انتقاد از C++
  • تاریخچه یونیکس
  • مدل چرخه عمر نرم افزار مارپیچ
  • UML (زبان مدلسازی یکپارچه انگلیسی - زبان مدلسازی یکپارچه)
  • چارچوب راه حل های مایکروسافت
  • IDE برای برنامه نویسی C/C++ در ویندوز
  • کامپایلرهای C/C++
  • ایجاد یک برنامه کنسول در ویندوز
سوالات
  1. چرا از مدل توسعه نرم افزار آبشار در پروژه های بزرگ استفاده نمی شود؟
  2. تفاوت بین مدل های توسعه آبشار و تکراری چیست؟
  3. مراحل توسعه نرم افزار را در متدولوژی فرآیند یکپارچه منطقی (RUP) فهرست کنید

در این مقاله، تابع scanf() به صورت کلی بدون ارجاع به یک استاندارد خاص در نظر گرفته شده است، بنابراین داده های هر استاندارد C99، C11، C++11، C++14 در اینجا گنجانده شده است. شاید، در برخی استانداردها، عملکرد با تفاوت هایی با مطالب ارائه شده در مقاله کار می کند.

تابع scanf C - توضیحات

scanf() تابعی است که در فایل های هدر stdio.h(C) و cstdio(C++) قرار دارد که به عنوان ورودی برنامه فرمت شده نیز شناخته می شود. scanf کاراکترها را از جریان ورودی استاندارد (stdin) می خواند و آنها را بر اساس فرمت تبدیل می کند، سپس آنها را روی متغیرهای مشخص شده می نویسد. فرمت - به این معنی است که داده ها پس از دریافت به فرم خاصی تبدیل می شوند. بنابراین تابع scanf C توضیح داده شده است:

scanf("%format"، &variable1[، &variable2،[…]])،

که در آن متغیرها به عنوان آدرس ارسال می شوند. دلیل ارسال متغیرها به این روش به یک تابع واضح است: در نتیجه کار، مقداری را نشان می دهد که وجود خطا را نشان می دهد، بنابراین تنها راه تغییر مقادیر متغیرها عبور از آدرس است. همچنین، به لطف این روش، تابع می تواند داده ها را از هر نوع پردازش کند.

برخی از برنامه نویسان به دلیل تشابه با زبان های دیگر به توابعی مانند scanf() یا printf() به عنوان رویه ها اشاره می کنند.

Scanf به شما امکان می دهد تمام انواع اصلی زبان را وارد کنید: char، int، float، string و غیره. در مورد متغیرها نوع رشتهنیازی به تعیین علامت آدرس - "&" نیست زیرا متغیر نوعرشته یک آرایه است و نام آن آدرس اولین عنصر آرایه در حافظه کامپیوتر است.

قالب ورودی یا رشته کنترل

بیایید با نگاهی به مثالی از استفاده از تابع scanf C از توضیحات شروع کنیم.

#عبارتند از int main() (int x; while (scanf("%d"، &x) == 1) printf("%d\n"، x); بازگشت 0؛ //نیاز برای سیستم های لینوکس)

فرمت ورودی از چهار پارامتر زیر تشکیل شده است: نوع %[*][width][modifiers]. در این مورد، علامت "%" و نوع پارامترهای اجباری هستند. یعنی حداقل فرم فرمت به این صورت است: "%s"، "%d" و غیره.

به طور کلی کاراکترهایی که رشته قالب را تشکیل می دهند به دو دسته تقسیم می شوند:

  • مشخص کننده های قالب - هر چیزی که با کاراکتر % شروع می شود.
  • کاراکترهای جداکننده یا فاصله - آنها space، tab (\t) هستند، خط جدید(\n)؛
  • کاراکترهای غیر از فضای خالی

عملکرد ممکن است ایمن نباشد.

به جای scanf() از تابع scanf_s() استفاده کنید.

(پست از ویژوال استودیو)

تایپ، یا فرمت مشخص کننده ها، یا نویسه های تبدیل، یا نویسه های کنترل

یک اعلان scanf C باید حداقل حاوی یک فرمت مشخص کننده باشد که در انتهای عباراتی که با علامت "%" شروع می شوند مشخص شده است. به برنامه می‌گوید چه نوع داده‌هایی را که باید هنگام وارد کردن، معمولاً از صفحه کلید، انتظار داشته باشد. لیست تمام فرمت های مشخص کننده در جدول زیر.

معنی

برنامه منتظر یک ورودی کاراکتر است. متغیری که باید نوشته شود باید از نوع char باشد.

برنامه منتظر ورودی است عدد اعشارینوع عدد صحیح متغیر باید از نوع int باشد.

برنامه ورودی یک عدد ممیز شناور (کاما) را به صورت نمایی انتظار دارد. متغیر باید از نوع float باشد.

برنامه انتظار ورودی یک عدد ممیز شناور (کاما) را دارد. متغیر باید از نوع float باشد.

7

برنامه انتظار ورودی یک عدد ممیز شناور (کاما) را دارد. متغیر باید از نوع float باشد.

برنامه منتظر ورودی است عدد اکتال. متغیر باید از نوع int باشد.

برنامه منتظر ورودی رشته است. رشته مجموعه‌ای از هر کاراکتر تا اولین کاراکتر جداکننده است. متغیر باید از نوع رشته باشد.

برنامه انتظار دارد یک عدد هگزادسیمال وارد شود. متغیر باید از نوع int باشد.

متغیر انتظار ورودی اشاره گر را دارد. متغیر باید دارای یک نوع اشاره گر باشد.

یک مقدار صحیح برابر با تعداد کاراکترهای خوانده شده توسط تابع scanf روی متغیر می نویسد.

برنامه یک عدد صحیح بدون علامت را می خواند. نوع متغیر باید عدد صحیح بدون علامت باشد.

برنامه انتظار دارد که یک عدد باینری وارد شود. متغیر باید از نوع int باشد.

مجموعه کاراکترهایی که باید اسکن شوند. برنامه منتظر می ماند تا ورودی کاراکترها از استخر محدود مشخص شده بین scanf تا زمانی که کاراکترهایی از مجموعه مشخص شده در جریان ورودی وجود داشته باشد کار خواهد کرد.

کاراکترها در رشته قالب

علامت ستاره (*)

ستاره (*) پرچمی است که نشان می دهد عملیات انتساب باید سرکوب شود. یک ستاره بلافاصله بعد از علامت "%" قرار می گیرد. مثلا،

Scanf("%d%*c%d"، &x، &y); //نادیده گرفتن کاراکتر بین دو عدد صحیح. scanf("%s%*d%s", str, str2); //عدد صحیح بین دو رشته را نادیده بگیرید.

یعنی اگر خط "45-20" را در کنسول وارد کنید، برنامه به صورت زیر عمل می کند:

  1. به متغیر "x" مقدار 45 اختصاص داده می شود.
  2. به متغیر "y" مقدار 20 اختصاص داده می شود.
  3. و علامت منفی (خط تیره) "-" به لطف "%*c" نادیده گرفته می شود.

عرض (یا عرض حاشیه)

این یک عدد صحیح بین علامت "%" و مشخص کننده قالبی است که مشخص می کند بیشترین مقدارکاراکترهایی برای خواندن برای عملیات خواندن فعلی.

چند مورد را در نظر داشته باشید نکات مهم:

  1. scanf اگر با یک کاراکتر جداکننده مواجه شود قطع می شود، حتی اگر 20 کاراکتر را شمرده باشد.
  2. اگر بیش از 20 کاراکتر وارد شود، فقط 20 کاراکتر اول در str نوشته می شود.

اصلاح کننده های نوع (یا دقیق)

اینها پرچم های خاصی هستند که نوع داده های مورد انتظار برای ورودی را تغییر می دهند. پرچم در سمت چپ مشخص کننده نوع مشخص شده است:

  • L یا l (L کوچک) هنگامی که "l" با مشخص کننده های d، i، o، u، x استفاده می شود، پرچم به برنامه می گوید که ورودی int طولانی مورد انتظار است. هنگام استفاده از "l" با مشخص کننده e یا f، پرچم به برنامه می گوید که باید مقدار دو برابری را انتظار داشته باشد. استفاده از "L" به برنامه می گوید که انتظار می رود دوبل طولانی باشد. استفاده از "l" با مشخص کننده های "c" و "s" به برنامه می گوید که کاراکترهای دو بایتی مانند wchar_t مورد انتظار هستند. به عنوان مثال، "%lc"، "%ls"، "%l".
  • h پرچمی است که نوع کوتاه را نشان می دهد.
  • hh - نشان می دهد که متغیر یک اشاره گر به مقداری از نوع علامت char یا char بدون علامت است. پرچم را می توان با مشخص کننده های d، i، o، u، x، n استفاده کرد.
  • ll (دو L کوچک) نشان می دهد که متغیر یک اشاره گر به یک مقدار از نوع signed int یا unsigned long long int است. پرچم با مشخص کننده ها استفاده می شود: d, i, o, u, x, n.
  • j - نشان می دهد که متغیر یک اشاره گر برای تایپ intmax_t یا uintmax_t از آن است. فایل هدر stdint.h با مشخص کننده ها استفاده می شود: d، i، o، u، x، n.
  • z - نشان می دهد که متغیر یک اشاره گر به نوع size_t است که تعریف آن در stddef.h است. با مشخص کننده ها استفاده می شود: d، i، o، u، x، n.
  • t - نشان می دهد که متغیر یک اشاره گر به نوع ptrdiff_t است. تعریف این نوع در stddef.h است. با مشخص کننده ها استفاده می شود: d، i، o، u، x، n.

واضح تر، تصویر با اصلاح کننده ها را می توان در قالب یک جدول ارائه کرد. چنین توصیفی از scanf C برای برنامه نویسان واضح تر خواهد بود.

شخصیت های دیگر

هر نویسه ای که در قالب با آن مواجه می شود کنار گذاشته می شود. در عین حال، باید توجه داشت که وجود کاراکترهای فضای خالی یا جداکننده (خط جدید، فاصله، تب) در رشته کنترل می تواند منجر به رفتار متفاوت تابع شود. در یک نسخه، scanf() بدون ذخیره کردن تعداد جداکننده می خواند تا زمانی که با کاراکتری غیر از جداکننده مواجه شود، و در نسخه دیگر، فاصله ها (فقط آنها) نقشی ندارند و عبارت "%d + %d" را بازی نمی کند. معادل "% d+%d" است.

مثال ها

بیایید تعدادی مثال را در نظر بگیریم که به شما امکان می دهد فکر کنید و عملکرد عملکرد را با دقت بیشتری درک کنید.

scanf("%3s"، str); //اگر رشته "1d2s3d1;3" را در کنسول وارد کنید، فقط "1d2" در str scanf نوشته می شود("%dminus%d", &x, &y); //کاراکترهای منهای بین دو عدد حذف خواهند شد scanf("%5", str); // کاراکترها در str وارد می شوند تا زمانی که 5 کاراکتر و کاراکترها اعدادی از 0 تا 9 باشند. scanf("%lf", &d); //expect double input scanf("%hd", &x); //تعداد مورد انتظار از نوع short scanf("%hu", &y); //expect number unsigned short scanf("lx", &z); //تعداد مورد انتظار از نوع long int

از مثال های داده شده، می توانید ببینید که چگونه عدد مورد انتظار با استفاده از نمادهای مختلف تغییر می کند.

scanf C - توضیحات برای مبتدیان

این بخشبرای مبتدیان مفید خواهد بود. اغلب شما نیاز دارید که در دست داشته باشید نه چندان توضیحات کامل scanf C چگونه بسیاری از جزئیات عملکرد تابع را بررسی کنید.

  • این ویژگی تا حدودی منسوخ شده است. چندین پیاده سازی مختلف در کتابخانه های نسخه های مختلف وجود دارد. به عنوان مثال، عملکرد بهبود یافته scanf S C، که شرح آن را می توان در مایکروسافت یافت.
  • تعداد مشخص کننده ها در قالب باید با تعداد آرگومان های ارسال شده به تابع مطابقت داشته باشد.
  • عناصر جریان ورودی باید فقط با کاراکترهای جداکننده از هم جدا شوند: فاصله، برگه، خط جدید. کاما، نقطه ویرگول، نقطه و غیره - این کاراکترها جداکننده تابع scanf() نیستند.
  • اگر scanf با یک کاراکتر جداکننده مواجه شود، ورودی متوقف خواهد شد. اگر بیش از یک متغیر برای خواندن وجود داشته باشد، scanf به خواندن متغیر بعدی می‌رود.
  • کوچکترین ناهماهنگی در قالب داده های ورودی منجر به نتایج غیرقابل پیش بینی برنامه می شود. خوب، اگر برنامه فقط با یک خطا به پایان برسد. اما اغلب برنامه به کار خود ادامه می دهد و آن را اشتباه انجام می دهد.
  • scanf("%20s..."،...); اگر جریان ورودی بیش از 20 کاراکتر باشد، scanf 20 کاراکتر اول را می‌خواند و در صورت مشخص شدن متغیر بعدی، یا لغو می‌شود یا به خواندن متغیر بعدی می‌رود. در این حالت، تماس بعدی به scanf به خواندن جریان ورودی از نقطه‌ای که کار تماس قبلی با scanf متوقف شده است، ادامه می‌دهد. اگر هنگام خواندن 20 کاراکتر اول با یک کاراکتر جداکننده مواجه شد، scanf قطع می‌شود یا به خواندن متغیر بعدی می‌رود، حتی اگر 20 کاراکتر را برای متغیر اول نخوانده باشد. در این حالت، تمام کاراکترهای خوانده نشده به متغیر بعدی متصل می شوند.
  • اگر مجموعه کاراکترهای اسکن شده با علامت "^" شروع شود، scanf داده ها را تا زمانی که با یک کاراکتر جداکننده یا یک کاراکتر از مجموعه مواجه شود، می خواند. برای مثال، "%[^A-E1-5]" داده ها را از جریان می خواند تا زمانی که یکی از نویسه های انگلیسی از A تا E در حروف بزرگیا یکی از اعداد 1 تا 5.
  • تابع scanf C، طبق تعریف، عددی برابر با تعداد نوشتن موفقیت آمیز متغیرها برمی گرداند. اگر scanf 3 متغیر بنویسد، نتیجه موفقیت آمیز تابع عدد 3 را برمی گرداند. اگر scanf نتوانست هیچ متغیری بنویسد، نتیجه 0 خواهد بود. و در نهایت، اگر scanf به دلایلی اصلاً شروع نشد، نتیجه EOF خواهد بود.
  • اگر تابع scanf() کار خود را اشتباه انجام داده باشد. به عنوان مثال، scanf("%d"، &x) - یک عدد مورد انتظار بود، اما ورودی کاراکترها را دریافت کرد. فراخوانی بعدی به scanf() از نقطه‌ای در جریان ورودی شروع می‌شود که فراخوانی تابع قبلی متوقف شد. برای غلبه بر این مشکل، لازم است از شر شخصیت های مشکل خلاص شوید. این را می توان برای مثال با فراخوانی scanf("%*s") انجام داد. یعنی تابع یک رشته از کاراکترها را می خواند و آن را دور می اندازد. در این روش دشوار، می توانید به وارد کردن داده های لازم ادامه دهید.
  • برخی از پیاده سازی scanf() اجازه نمی دهد "-" در مجموعه کاراکتر اسکن شود.
  • مشخص کننده "%c" هر کاراکتر از جریان را می خواند. یعنی کاراکتر جداکننده را هم می خواند. برای رد شدن از کاراکتر جداکننده و ادامه خواندن کاراکتر مورد نظر، می توان از "%1s" استفاده کرد.
  • هنگام استفاده از مشخص کننده "c"، استفاده از عرض "% 10c" قابل قبول است، اما سپس به شکل متغیر تابع scanf باید آرایه ای از عناصر از نوع char را ارسال کند.
  • "%" به معنای "همه حروف کوچک الفبای انگلیسی" است، و "%" به معنای فقط 3 کاراکتر است: "z"، "a"، "-". به عبارت دیگر، کاراکتر "-" تنها در صورتی به معنای محدوده است که بین دو کاراکتر که ترتیب صحیحی دارند باشد. اگر "-" در انتهای یک عبارت، در ابتدا یا در ترتیب اشتباه کاراکترهای دو طرف آنها باشد، آنگاه فقط یک کاراکتر خط فاصله است، نه یک محدوده.

نتیجه

این توضیح scanf C را به پایان می‌رساند. این یک عملکرد مفید برای کار با آن است برنامه های کوچکو هنگام استفاده از روش رویه ای برنامه نویسی. با این حال، نقطه ضعف اصلی تعداد خطاهای غیر قابل پیش بینی است که می تواند هنگام استفاده از scanf رخ دهد. بنابراین، توضیحات scanf C هنگام برنامه نویسی بهتر است جلوی چشمان شما باشد. در پروژه های بزرگ حرفه ای از iostream ها استفاده می شود، به دلیل اینکه قابلیت های سطح بالاتری دارند، بهتر می توانند خطاها را بگیرند و رسیدگی کنند و همچنین با حجم قابل توجهی از اطلاعات کار کنند. همچنین لازم به ذکر است که شرح scanf C به زبان روسی در بسیاری از منابع آنلاین و همچنین نمونه هایی از استفاده از آن با توجه به سن عملکرد موجود است. بنابراین، در صورت لزوم، همیشه می توانید پاسخ را در انجمن های موضوعی پیدا کنید.

زبان برنامه نویسی C++

آخرین به روز رسانی: 1396/08/28

زبان برنامه نویسی C++ یک زبان برنامه نویسی سطح بالا، همه منظوره، تایپ ایستا و کامپایل شده است که برای ساختن بیشتر مناسب است. برنامه های کاربردی مختلف. C++ یکی از محبوب ترین و گسترده ترین زبان های امروزی است.

این زبان ریشه در زبان C دارد که در سال‌های 1969-1973 در آزمایشگاه‌های بل توسط برنامه‌نویس دنیس ریچی توسعه یافت. در اوایل دهه 1980، برنامه نویس دانمارکی Bjarne Stroustrup که در آن زمان در آزمایشگاه Bell Labs مشغول به کار بود، C++ را به عنوان پسوند زبان C توسعه داد. در واقع، در ابتدا، C++ به سادگی زبان C را با برخی از ویژگی های برنامه نویسی شی گرا تکمیل کرد. و بنابراین خود استروستروپ در ابتدا آن را "C با کلاس ها" ("C با کلاس ها") نامید.

پس از آن، زبان جدید شروع به محبوبیت کرد. ویژگی های جدیدی به آن اضافه شد که آن را نه تنها یک زبان برنامه نویسی جدید، بلکه به زبان C اضافه کرد. در نتیجه، "C با کلاس ها" به C++ تغییر نام داد. و از آن زمان، هر دو زبان شروع به توسعه مستقل از یکدیگر کردند.

C++ یک زبان قدرتمند است که قابلیت های حافظه غنی را از C به ارث برده است. بنابراین، C++ اغلب کاربرد خود را در برنامه نویسی سیستم پیدا می کند، به ویژه هنگام ایجاد سیستم های عامل، درایورها، ابزارهای مختلف، آنتی ویروس ها و غیره. ضمناً ویندوز بیشتر به زبان C++ نوشته شده است. اما تنها برنامه نویسی سیستماستفاده از این زبان محدود نیست. C++ را می توان در برنامه های هر سطحی که سرعت و عملکرد مهم هستند استفاده کرد. اغلب برای ایجاد استفاده می شود برنامه های گرافیکی، برنامه های کاربردی مختلف. همچنین اغلب برای ایجاد بازی هایی با تصاویری غنی استفاده می شود. علاوه بر این، جهت موبایل اخیراً شتاب بیشتری گرفته است، جایی که C ++ نیز کاربرد خود را پیدا کرده است. و حتی در توسعه وب، می‌توانید از C++ برای ایجاد برنامه‌های کاربردی وب یا نوعی خدمات کمکی که به برنامه‌های کاربردی وب سرویس می‌دهند، استفاده کنید. به طور کلی، C++ یک زبان پرکاربرد است که تقریباً می توانید هر نوع برنامه ای را با آن بنویسید.

C++ یک زبان کامپایل شده است، به این معنی که کامپایلر کد منبع C++ را به یک فایل اجرایی که حاوی مجموعه‌ای از دستورالعمل‌های ماشین است، ترجمه می‌کند. ولی پلتفرم های مختلفویژگی های خاص خود را دارند، بنابراین برنامه های کامپایل شده نمی توانند به سادگی از یک پلتفرم به پلتفرم دیگر منتقل شوند و قبلاً در آنجا اجرا شوند. با این حال، در سطح کد منبع، برنامه های C++ عمدتا قابل حمل هستند مگر اینکه از برخی ویژگی های خاص سیستم عامل استفاده شود. و در دسترس بودن کامپایلرها، کتابخانه‌ها و ابزارهای توسعه برای تقریباً همه پلتفرم‌های رایج، امکان کامپایل کد منبع C++ را در برنامه‌های کاربردی این پلتفرم‌ها ممکن می‌سازد.

برخلاف C، زبان C++ به شما اجازه می‌دهد تا برنامه‌ها را به سبک شی گرا بنویسید، که یک برنامه را به عنوان مجموعه‌ای از کلاس‌ها و اشیاء در تعامل با یکدیگر نشان می‌دهد. این امر ایجاد برنامه های کاربردی بزرگ را ساده می کند.

نقاط عطف توسعه

در سال‌های 1979-1980، Bjarne Stroustrup توسعه‌ای برای زبان C ایجاد کرد - "C با کلاس‌ها". در سال 1983 این زبان به C++ تغییر نام داد.

در سال 1985 اولین نسخه تجاری زبان C++ و همچنین اولین ویرایش کتاب "The C++ Programming Language" منتشر شد که نشان دهنده اولین توصیف این زبان در غیاب استاندارد رسمی بود.

در سال 1989 منتشر شد یک نسخه جدید C++ 2.0 که شامل تعدادی ویژگی جدید بود. پس از آن، این زبان تا سال 2011 به آرامی توسعه یافت. اما در همان زمان در سال 1998 اولین تلاش برای استانداردسازی زبان توسط ISO (سازمان بین المللی استانداردسازی) انجام شد. اولین استاندارد ISO/IEC 14882:1998 یا به اختصار C++98 نام داشت. بعداً در سال 2003 نسخه جدیدی از استاندارد C++03 منتشر شد.

در سال 2011، استاندارد جدید C++11 منتشر شد که حاوی اضافات بسیاری بود و زبان C++ را با تعداد زیادی ویژگی جدید غنی کرد. این امر در سال 2014 با اضافه شدن جزئی به استاندارد که به نام C++14 نیز شناخته می شود، دنبال شد. و یکی دیگر انتشار کلیدزبان برای سال 2017 برنامه ریزی شده است.

کامپایلرها و محیط های توسعه

برای توسعه برنامه‌ها در C++، به یک کامپایلر نیاز دارید - کد منبع C++ را به یک فایل اجرایی ترجمه می‌کند، که سپس می‌تواند اجرا شود. ولی در این لحظهتعداد زیادی کامپایلر مختلف وجود دارد. آنها ممکن است در جنبه های مختلف، به ویژه در اجرای استانداردها، متفاوت باشند. یک لیست اولیه از کامپایلرها برای C++ را می توان در ویکی پدیا یافت. برای توسعه توصیه می شود کامپایلرهایی را انتخاب کنید که آخرین استانداردها را توسعه و پیاده سازی می کنند. به عنوان مثال، در سراسر این آموزش، کامپایلر رایگان در دسترس g++، که توسط پروژه GNU توسعه یافته است، به طور عمده استفاده خواهد شد.

همچنین می توانید از IDE هایی مانند Visual Studio، Netbeans، Eclipse، Qt و غیره برای ایجاد برنامه استفاده کنید.