1. Въведение

Програмирането се нуждае от нови универсални алгоритмични модели, а хардуерът реализира алгоритми не само в различна форма, но и на базата на друг алгоритмичен модел - автомат. Заемането на технология от разработката на хардуер е ключовата идея зад автоматичното програмиране. Синтезът обаче цифрови устройстваразлично от програмирането. Но, заемайки модела, от една страна, не е желателно да се променя значително, а от друга страна е невъзможно да не се вземе предвид съществуващата теория и практика на програмиране.

След това ще разгледаме технологията SWITCH за проектиране на автоматични програми, в които се сблъсквате с подобни процеси през цялото време. От една страна, тя смени модела толкова много държавна машина, което всъщност го изведе извън обхвата на теорията на автоматите. И, от друга страна, въвежда в програмирането концепции, които трудно се възприемат от програмистите и понякога са просто излишни, т.к. има по-познати аналози от теорията на програмите и практиката на програмирането.

Като основа за обсъждане на проблемите на автоматичното програмиране, ние приемаме скорошна лекция на Shalyto A.A. и неговите "софтуерни" документи към дефиницията на парадигмата за програмиране на автомати.

C++ (произнася се c-plus-plus) е компилиран, статично типизиран език за програмиране с общо предназначение, който може да се използва за създаване на програми от всякакво ниво на сложност.
Повече от 20 години този език е сред първите три най-популярни и търсени езици за програмиране. (Това може да се провери, като посетите уебсайта на TIOBE).
Езикът възниква в началото на 80-те години на миналия век, когато служителят на Bell Labs Björn Stroustrup предлага редица подобрения на езика C за собствените си нужди.

Bjarne Stroustrup - създател на езика C++

Straustrup реши да разшири езика 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. ()
По време на неговото съществуване в езика C ++ са се утвърдили стабилни митове, които лесно се опровергават (вижте тук: Част 1 и Част 2)

Историята на езика и издаването на стандарти

1983

Създател на езика - Бьорн Страуструп, в Bell Labs, представи ранна версия на C++ („C с класове“)

1985

Първо търговско издание на C++, езикът приема модерно име

1986

Издаване на първото издание на The C++ Programming Language, книга за C++, написана от Bjorn 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), Bjorn Stroustrup описва принципите, които е следвал при проектирането на C++ (дадени в съкратена форма):

  • Вземете универсален език със статични типове данни, ефективността и преносимостта на C.
  • Директно и цялостно поддържа различни стилове на програмиране.
  • Дайте на програмиста свобода на избор, дори ако това му дава възможност да избере неправилно.
  • Поддържайте възможно най-голяма съвместимост със C, което прави възможно лесното превключване от програмиране към C.
  • Избягвайте объркване между C и C++: всяка конструкция, разрешена и на двата езика, трябва да означава едно и също нещо във всеки от тях и да води до едно и също поведение на програмата.
  • Избягвайте функции, които зависят от платформата или не са универсални.
  • „Не плащайте за това, което не използвате“ – никоя езикова функция не трябва да причинява влошаване на производителността за програми, които не я използват.
  • Не изисквайте твърде сложна среда за програмиране.

C и C++

Синтаксисът на C++ е наследен от езика C. Въпреки че формално един от принципите на C++ остава да поддържа съвместимост с езика C, всъщност групите за стандартизация на тези езици не взаимодействат и промените, които make не само не корелират, но често фундаментално си противоречат идеологически. И така, елементите, които новите C стандарти добавят към ядрото, са елементи от стандартната библиотека в стандарта C ++ и обикновено липсват в ядрото, например динамични масиви, масиви с фиксирани граници, паралелни съоръжения за обработка. Страуструп смята, че комбинирането на развитието на тези два езика би било от голяма полза, но едва ли е възможно по политически причини. Така че практическата съвместимост между C и C++ постепенно ще бъде загубена.
AT този пример, в зависимост от използвания компилатор, ще бъде изведен или "C++", или "C":

Програма 9.1

#включи int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

Това се дължи на факта, че символните константи в C са от тип int, а в C++ са от тип char, но размерите на тези типове се различават.

Модели на жизнения цикъл на приложението

Кръговат на живота софтуере периодът от време, който започва от момента на вземане на решение за необходимостта от създаване софтуерен продукти приключва в момента на пълното му изваждане от експлоатация. Този цикъл е процесът на изграждане и разработване на софтуер (SW). Има няколко модела кръговат на живота.
Каскаден моделжизнен цикъл (английски водопаден модел) е предложен през 1970 г. от Уинстън Ройс. Той предвижда последователно изпълнение на всички етапи на проекта в строго фиксиран ред. Преходът към следващия етап означава пълно завършване на работата на предишния етап. Изискванията, определени на етапа на генериране на изискванията, са строго документирани във формуляра техническо заданиеи са фиксирани за срока на проекта. Всеки етап завършва с освобождаването пълен комплектдостатъчна документация, така че разработката да може да бъде продължена от друг екип за разработка.
Етапи на проекта според модела на водопада:

  1. Формиране на изисквания;
  2. Дизайн;
  3. внедряване;
  4. Тестване;
  5. изпълнение;
  6. Експлоатация и поддръжка.

В модела на водопада преходът от една фаза на проекта към друга предполага пълната коректност на резултата от предишната фаза. При големи проекти това е почти невъзможно да се постигне. Следователно такъв модел е подходящ само за разработване на малък проект. (Самият У. Ройс не се придържа към този модел и използва итеративен модел).
Итеративен модел
Алтернатива на модела на водопада е моделът на итеративно и инкрементално развитие (IID), получен от Т. Гилб през 70-те години. името на еволюционния модел. Моделът IID разделя жизнения цикъл на проекта на поредица от итерации, всяка от които прилича на „мини-проект“, включително всички процеси на разработка, приложени към създаването на по-малки части от функционалност, в сравнение с проекта като цяло. Целта на всяка итерация е да се получи работеща версия на софтуерната система, включително функционалността, дефинирана от интегрираното съдържание на всички предишни и текущи итерации. Резултатът от последната итерация съдържа цялата необходима функционалност на продукта. Така със завършването на всяка итерация продуктът получава прираст - прираст - към своите възможности, които следователно се развиват еволюционно.


В повечето съвременни методологии за разработка се прилагат различни варианти на итеративния подход:

Процес на разработка - Rational Unified Process (RUP)

Рационален унифициран процес (RUP)(рационален унифициран процес) е методология за разработка на софтуер, поддържана от Rational Software (IBM). Методологията дава препоръки за всички етапи на разработка: от бизнес моделиране до тестване и въвеждане в експлоатация на готовата програма. Унифицираният език за моделиране (UML) се използва като език за моделиране.
Пълният жизнен цикъл на разработване на продукта се състои от четири фази, всяка от които включва една или повече итерации.

  • Начален етап (начало)
  • Определяне на обхвата на проекта и размера на необходимите ресурси. Определят се основните изисквания, ограничения и ключова функционалност на продукта. Оценяват се рисковете. Планиране на действие. В края на началната фаза се оценява постигането на етапа на жизнения цикъл на целта на целта, което предполага споразумение между заинтересованите страни за продължаване на проекта.

  • Разработване
  • Документация за изискванията. Проектиране, внедряване и тестване на изпълнимата архитектура. Уточняване на срокове и цена. Намаляване на основните рискове. Успешното завършване на фазата на разработка означава достигане на етапа на жизнения цикъл на архитектурата.

  • Строителство
  • Във фаза "Изграждане" се реализира по-голямата част от функционалността на продукта: дизайнът на приложението е завършен, източникнаписана. Фазата на изграждане завършва с първото външно издание на системата и етапа на първоначалната оперативна способност.

  • Изпълнение (преход)
  • Във фаза „Внедряване“ се създава окончателната версия на продукта и се прехвърля от разработчика към клиента. Това включва програма за бета тестване, обучение на потребителите и осигуряване на качеството на продукта. В случай, че качеството не отговаря на очакванията на потребителите или на критериите, зададени в началната фаза, фазата на внедряване се повтаря отново. Постигането на всички цели означава достигане на крайъгълния камък на готовия продукт (Пускане на продукта) и завършване на пълния цикъл на разработка.



« Информационни технологии. Системно и софтуерно инженерство. Процеси на жизнения цикъл софтуерни инструменти» . Този стандарт е приет от Федералната агенция за техническо регулиране и метрология на Руската федерация и е подобен на международния стандарт ISO/IEC 12207:2008. Този стандарт, установява обща рамка за процесите на жизнения цикъл на софтуера, която може да се използва като насока в софтуерната индустрия. Стандартът не предлага специфичен моделкръговат на живота. Неговите разпоредби са общи за всички модели на жизнения цикъл, методи и технологии за създаване на софтуер. Той описва структурата на процесите от жизнения цикъл, без да уточнява как да се изпълняват или изпълняват дейностите и задачите, включени в тези процеси.

Презентация към урока
Теми за съобщения
  • Фондация за свободен софтуер (FSF)
  • Лицензи за безплатен софтуер
  • Безплатен софтуер и отворен код
  • История на развитието на езиците за програмиране
  • История на C. C и C++
  • История
  • Критика на C++
  • История на UNIX
  • Спирален модел на жизнения цикъл на софтуера
  • UML (English Unified Modeling Language - унифициран език за моделиране)
  • Microsoft Solutions Framework
  • IDE за програмиране на C/C++ под Windows
  • C/C++ компилатори
  • Създаване на конзолно приложение в Windows
Въпроси
  1. Защо водопадният модел за разработка на софтуер не се използва в големи проекти?
  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() е форматирана изходна функция. Това означава, че в параметрите на функцията е необходимо да посочите формата на данните, които да бъдат изведени. Форматът на данните се определя от спецификатори на формат. Спецификаторът на формата започва с %, последван от код на формат.

Спецификатори на формат:

символ
цяло десетично число
%i цяло десетично число
%e десетично число във формата x.xx e+xx
%E десетично число във формата x.xx E+xx
%f
%F десетична плаваща запетая xx.xxxx
%g %f или %e, което е по-кратко
%G %F или %E, което е по-кратко
%o осмично число
символен низ
%u десетично число без знак
шестнадесетично число
шестнадесетично число
%% символ %
%p показалец
показалец

Освен това модификаторите 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

В допълнение към спецификаторите на формата на данните, контролният низ може да съдържа контролни знаци:

\b BS, дънна дупка
\f Нова страница, превод на страница
Нов ред, подаване на ред
\r Връщане на каретка
\T Хоризонтален раздел
\v Вертикален раздел
\" двойни кавички
\" апостроф
\\ Наклонена черта
\0 Нулев знак, нулев байт
\a Сигнал
Осмична константа
\xN Шестнадесетична константа
\? Въпросителен знак

Най-често ще използвате знака \n. С този контролен символ ще можете да прескачате на нов ред. Вижте примерите за програми и ще разберете всичко.

Примери за програми.

/* Пример 1 */
#включи

void main(void)
{
int a,b,c; // Реклама променливи a,b,c
а=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Резултатът от програмата:
a=5, b=6, c=9

/* Пример 2 */
#включи

void main(void)
{
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);
}

Резултатът от програмата:
х=10

/* Пример 4 */
#включи

void main(void)
{
printf("\"Текст в кавички\"");
printf("\nСъдържание на кислород: 100%%");
}

Резултатът от програмата:
"Текст в кавички"
Съдържание на кислород: 100%

/* Пример 5 */
#включи

void main(void)
{
int a;

А=11; // 11 в десетичен е равен на b в шестнадесетичен
printf("a-dec=%d, a-hex=%X",a,a);
}

Резултатът от програмата:
a-dec=11, a-hex=b

/* Пример 6 */
#включи

void main(void)
{
char ch1,ch2,ch3;

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

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

Резултатът от програмата:
ABC

/* Пример 7 */
#включи

void main(void)
{
char *str="Моят низ.";

Printf("Това е %s",str);
}

Резултатът от програмата:
Това е моята линия.

/* Пример 8 */
#включи

void main(void)
{
printf("Здравей!\n"); // След отпечатването ще има нов ред - \n
printf("Казвам се Пол."); // Това ще бъде отпечатано на нов ред
}

Резултатът от програмата:
Здравейте!
Казвам се Павел.

scanf() стандартна функция за въвеждане

Функцията scanf() е форматирана функция за въвеждане. С него можете да въвеждате данни от стандартното устройство за въвеждане (клавиатура). Входните данни могат да бъдат цели числа, числа с плаваща запетая, знаци, низове и указатели.

Функцията scanf() има следния прототип в stdio.h:
int scanf(char *контролен низ);

Функцията връща броя променливи, на които е присвоена стойност.

Контролният низ съдържа три вида знаци: спецификатори на формат, интервали и други знаци. Спецификаторите на формата започват със знака %.

Спецификатори на формат:

При въвеждане на низ чрез функцията scanf() (спецификатор на формат %s), низът се въвежда до първия интервал!! тези. ако въведете низа "Hello world!" с помощта на функцията scanf().


scanf("%s",str);

тогава след въвеждане на получения низ, който ще се съхранява в масива str, ще се състои от една дума "Hello". ФУНКЦИЯ ВЪВЕЖДА В НИЗ ДО ПЪРВОТО ИНТЕРВАЛО! Ако искате да въведете низове с интервали, използвайте функцията

char *получава (char *buf);

С функцията gets() можете да въвеждате цели низове. Функцията gets() чете знаци от клавиатурата, докато не се появи знак нова линия(\н). Самият символ за нов ред се появява, когато натиснете клавиша enter. Функцията връща указател към buf. buf - буфер (памет) за входния низ.

Въпреки че gets() е извън обхвата на тази статия, нека напишем примерна програма, която ви позволява да въведете цял ред от клавиатурата и да го изведете на екрана.

#включи

void main(void)
{
charbuffer; // масив (буфер) за входния низ

Получава (буфер); // въведете низ и натиснете enter
printf("%s",буфер); // изведе въведения низ на екрана
}

Друга важна забележка! За да въведете данни с помощта на функцията scanf(), трябва да подадете адресите на променливите като параметри, а не самите променливи. За да получите адреса на променлива, предхождайте името на променливата с & (амперсанд). Знакът & означава вземане на адреса.

Какво означава адрес? Ще се опитам да обясня. В програмата имаме променлива. Променливата съхранява стойността си в паметта на компютъра. Така че адресът, който получаваме с &, е адресът в паметта на компютъра, където се съхранява стойността на променливата.

Нека да разгледаме примерна програма, която ни показва как да използваме &

#включи

void main(void)
{
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, а + ще бъде прочетен и игнориран.

Командата за форматиране може да укаже най-голямата ширина на полето за четене.

Например:

scanf("%5s",str);

указва да се прочетат първите 5 знака от входния поток. Ако въведете 1234567890ABC, масивът str ще съдържа само 12345, останалите знаци ще бъдат игнорирани. Разделители: интервал, табулация и нов ред - при въвеждане на символ те се третират като всички останали знаци.

Ако в контролния низ се срещнат други знаци, те са предназначени да определят и пропуснат съответния знак. 10plus20 символен поток по оператор

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

ще присвои x на 10, y на 20 и ще пропусне знаците плюс, защото се появяват на контролния ред.

Една от мощните характеристики на функцията scanf() е възможността да се укаже набор от сканирания (scanset). Наборът за търсене дефинира набора от знаци, спрямо които ще се сравняват знаците, прочетени от scanf(). Функцията scanf() чете символи, стига да се срещат в набора за търсене. След като въведеният знак не бъде намерен в набора за търсене, функцията scanf() преминава към следващия спецификатор на формат. Наборът за търсене се определя от списък със знаци, затворени в квадратни скоби. Отварящата скоба се предхожда от знак %. Нека да разгледаме това с пример.

#включи

void main(void)
{
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 */

#включи

void main(void)
{
int възраст;

Printf("\nНа колко години си?:");
scanf("%d",&възраст);
printf("Вие сте на %d години.", възраст);
}

Пример 2
Програма калкулатор. Този калкулатор може да събира само числа. Ако въведете 100+34, програмата ще върне резултата: 100+34=134.

/* Пример 2 */

#включи

void main(void)
{
int x, y;

Printf("\nКалкулатор:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Пример 3
Този пример показва как да зададете ширината на полето за четене. В нашия пример ширината на полето е пет знака. Ако въведете низ с повече знаци, всички знаци след 5-ия ще бъдат отхвърлени. Обърнете внимание на извикването на функцията scanf(). Знакът & не предхожда името на името на масива, тъй като името на името на масива е адресът на първия елемент от масива.

/* Пример 3 */

#включи

void main(void)
{
charname;

Printf("\nВъведете вашето потребителско име (максимум 5 знака):");
scanf("%5s", име);
printf("\nВъведохте %s", име);
}

Пример 4
Последният пример в тази статия показва как можете да използвате набора за справка. След стартиране на програмата въведете число от 2 до 5.

/* Пример 4 */

#включи

void main(void)
{
чарбал;

Printf("Вашият резултат е 2,3,4,5:");
scanf("%", &bal);
printf("\nРезултат %c", bal);
}

Компютрите са може би най-универсалните инструменти, с които човечеството разполага. Те са в състояние да извършват невероятни изчисления, те ви позволяват да съхранявате голяма сумаинформация, напълно в различни точки на планетата, като в същото време е лесно да се обменя, независимо от местоположението. Компютрите улесняват нещата ежедневни задачи, и ви позволяват да автоматизирате много рутинни процеси, които биха били много досадни и скучни за човек. Има толкова много неща, които компютрите могат да направят, но все пак компютрите не са толкова интелигентни, колкото хората. За да автоматизирате и най-простия процес, трябва ясно и недвусмислено да кажете на компютъра какво точно трябва да прави. За съжаление нашият език и компютърният език са напълно различни. Така между машина и човек има сериозна езикова бариера, която трябва по някакъв начин да бъде преодоляна, в противен случай компютърът няма да ни разбере. И докато компютрите не ни разбират, те няма да направят нищо сами. Като средство за комуникация между човек и компютър са измислени огромен брой езици за програмиране. С помощта на езиците за програмиране създаваме програми и компютърът вече директно работи с програми. Самите програми са набори от инструкции, които компютърът може да разбере и изпълни.

Видове програми

За да комуникираме ефективно с компютър, което е точно това, което искаме, има широк набор от езици за програмиране.

В зависимост от вида на проекта има много фактори, които трябва да се вземат предвид при избора на език за програмиране. Ето списък на най-забележителните фактори:

Компилация, интерпретация и JIT компилация

Процесът на компилация превежда код, написан на език за програмиране, на родния език на целевата машина. Програмата, която извършва този процес, се нарича компилатор. Компилирането може да накара кода да работи доста бързо, особено ако компилаторът е ефективен при оптимизиране. Но факт е, че полученият код не може да работи на различни операционна система, а процесът на компилиране отнема известно време и колкото повече код, толкова по-дълъг е процесът на компилиране. Струва си да се отбележи, че когато правите промени в програмния код, е необходимо да го компилирате и едва след това да го стартирате.

Интерпретираните езици за програмиране се четат от програма, наречена интерпретатор, и се изпълняват от същата програма. Интерпретираните езици за програмиране могат да работят на различни операционни системи, като интерпретатора, и дори нямат дълго време за компилиране. Но програмите, написани на интерпретирани езици, обикновено са много по-бавни от еквивалентните, компилирани програми.

И накрая, така наречената компилация в движение (или JIT компилация). Такива езици се компилират бързо, когато програмата се изпълнява. Програмите, написани на JIT езици, като правило не са оптимизирани, като по този начин ускоряват процеса на компилиране и възстановяват баланса между производителност и крос-платформа.

Високи или ниски нива на програмиране

Езиците от ниско ниво работят предимно директно с хардуера и следователно са най-подходящи за писане на драйвери на устройства. Драйверите са програми, които контролират хардуера и имат директен достъп до него. Въпреки това, програма, написана на език от ниско ниво, обикновено е трудна за пренасяне към други платформи. И следователно за всяка ОС едно и също устройство идва с различни драйвери. Езиците за програмиране на ниско ниво почти винаги се компилират.

В езиците от високо ниво фокусът е върху концепцията на езика. Това означава, че такъв език за програмиране трябва да бъде лесен за разбиране, като например представяне на данни като масиви, низове, обекти и т.н. Езикът от високо ниво обикновено е по-лесен за разбиране от език от ниско ниво. И като правило е много по-лесно и по-бързо да се разработи програма на език от високо ниво, отколкото на език от ниско ниво. Както виждаш различни ниваезиците за програмиране са предназначени за напълно различни задачи и не си струва да сравнявате функционалността на многостепенните езици, това е безсмислено.

Системи от типове данни на езици за програмиране

За всеки език за програмиране има спецификация, която определя различни правила, които езиците за програмиране трябва да следват. Някои езици нямат типове данни, така че това не се отнася за тях. Въпреки това, повечето езици (включително C++) имат типове данни, така че тази информация ще ви бъде полезна.

Силна или слаба система за типове данни

Слабата входна система не поставя никакви ограничения, програмистът трябва да го следва. казвайки " слаба системаданни" Имам предвид, че език с такава система от данни не регулира стриктно наличните преобразувания на типове данни. Например, ако към функцията за умножение бъде предаден низ или знак вместо число, езиците за програмиране, които не са строго типизирани, ще изпълнят такъв код, въпреки че резултатът от умножението губи всякакво значение, тъй като низът не може да бъде умножен по номер. Освен това резултатът от извършването на това безсмислено умножение ще бъде непредвидим. Ако езикът за програмиране е строго типизиран, тогава на етапа на компилация компилаторът ще съобщи за грешка и ще спре процеса на изграждане на проекта. Например,

// примерна C++ програма #include използване на пространство от имена std; int main()( char string = "example"; int number = 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 библиотеки и те ще работят правилно.