1. Úvod

Programování potřebuje nové univerzální algoritmické modely a hardware implementuje algoritmy nejen v jiné podobě, ale také na základě jiného algoritmického modelu - automatu. Klíčovou myšlenkou automatického programování je vypůjčení technologie z vývoje hardwaru. Nicméně syntéza digitální zařízení liší od programování. Půjčováním modelu však na jedné straně není žádoucí jej výrazně měnit a na druhé straně nelze nevzít v úvahu již existující teorii a praxi programování.

Dále se budeme zabývat technologií SWITCH pro navrhování automatických programů, ve kterých se s podobnými procesy setkáváte neustále. Na jednu stranu tak změnila modelku státní stroj, který to vlastně vzal za rámec teorie automatů. A na druhou stranu vnáší do programování pojmy, které programátoři jen stěží vnímají a někdy jsou prostě nadbytečné, protože existují známější analogie z teorie programů a praxe programování.

Jako základ pro diskusi o problémech automatického programování bereme nedávnou přednášku Shalyto A.A. a jeho „softwarové“ dokumenty k definici paradigmatu programování automatů.

C++ (vyslovováno c-plus-plus) je zkompilovaný, staticky typovaný, univerzální programovací jazyk, který lze použít k vytváření programů jakékoli úrovně složitosti.
Již více než 20 let patří tento jazyk mezi tři nejoblíbenější a nejžádanější programovací jazyky. (To lze ověřit na webových stránkách TIOBE).
Jazyk vznikl na počátku 80. let, kdy zaměstnanec Bell Labs Björn Stroustrup přišel s řadou vylepšení jazyka C pro vlastní potřeby.

Bjarne Stroustrup - tvůrce jazyka C++

Stroustrup se rozhodl rozšířit jazyk C o funkce dostupné v jazyce Simula. Jazyk C, který je základním jazykem systému UNIX, na kterém počítače Bell běžely, je rychlý, bohatý na funkce a přenosný. Stroustrup k tomu přidal možnost práce s třídami a objekty. V důsledku toho se ukázalo, že praktické problémy modelování jsou dostupné jak z hlediska doby vývoje (díky použití tříd typu Simula), tak z hlediska doby výpočtu (kvůli rychlosti C).
Zde je návod, jak to říká sám vývojář jazyka:



V roce 1998 byl výborem pro standardy publikován první jazykový standard, známý jako C++98. C++ se neustále vyvíjí, aby splňovalo moderní požadavky. Jedna ze skupin, která vyvíjí jazyk C++ a posílá návrhy normalizační komisi C++ na jeho vylepšení, je Posílit, která se mimo jiné zabývá vylepšováním schopností jazyka tím, že do něj přidává funkce metaprogramování. Nejnovější standard byl vydán v roce 2017 a jmenuje se C++17. Další standard na sebe nenechá dlouho čekat a očekává se, že se objeví v roce 2020.
Nikdo nevlastní práva na jazyk C++, je zdarma. V březnu 2016 založilo Rusko pracovní skupina WG21 C++. Skupina byla zorganizována s cílem shromáždit návrhy standardu C++, předložit je výboru a obhájit je na valných hromadách Mezinárodní organizace pro standardizaci.
C++ je multiparadigmatický jazyk (od slova paradigma - styl psaní počítačové programy), který zahrnuje širokou škálu různých programovacích stylů a technologií. Často se o něm mluví jako o objektově orientovaném jazyce, ale přísně vzato tomu tak není. V procesu práce získává vývojář absolutní volnost ve výběru nástrojů tak, aby problém řešený jedním či druhým přístupem byl vyřešen co nejefektivněji. Jinými slovy, C++ nenutí programátora dodržovat pouze jeden styl vývoje programu (například objektově orientovaný).
C++ má bohatou standardní knihovnu, která obsahuje běžné kontejnery a algoritmy, I/O, regulární výrazy, podpora multithreadingu a další funkce. C++ ovlivnil mnoho programovacích jazyků, včetně: Java, C#, D. Protože C++ patří do rodiny jazyků založených na syntaxi jazyka C, lze snadno zvládnout i další programovací jazyky této rodiny: JavaScript , PHP, Perl, Objective-C a mnoho dalších. . atd., včetně samotného mateřského jazyka - C. ()
Za dobu své existence se v jazyce C++ zakořenily stabilní mýty, které lze snadno vyvrátit (viz zde: 1. díl a 2. díl)

Historie jazyka a vydání norem

1983

Tvůrce jazyka - Bjorn Stroustrup, v Bell Labs, představil ranou verzi C++ („C with Classes“)

1985

První komerční verze C++, jazyk dostává moderní jméno

1986

Vydání prvního vydání The C++ Programming Language, knihy C++, kterou napsal Bjorn Stroustrup

1998

Mezinárodní jazykový standard C++ byl ratifikován: ISO/IEC 14882:1998 „Standard pro programovací jazyk C++“

2003
2005

Vydána technická zpráva knihovny 1 (TR1). Ačkoli to není oficiálně součástí standardu, zpráva popisovala rozšíření standardní knihovny, která by měla být zahrnuta další verze jazyk C++

2011

Vydání nového standardu - C++11 nebo ISO/IEC 14882:2011; nový standard zahrnovala dodatky k jádru jazyka a rozšíření standardní knihovny, včetně velké části TR1

2014

Vydání standardu C++14 („Mezinárodní standard ISO/IEC 14882:2014(E) Programovací jazyk C++“); C++14 lze vnímat jako malé rozšíření C++11, obsahující převážně opravy chyb a drobná vylepšení.

2017

Vydání nového standardu je C++1z (C++17). Tato norma provedla mnoho změn a doplňků. Například STD zahrnoval standardní knihovny C11, souborový systém, založený na boost::filesystem, velké části experimentální knihovny TS I.

2020

C++20 je neformální název pro standard ISO/IEC pro programovací jazyk C++, který se očekává po C++17. Návrh normy N4800.

Filosofie C++

V The Design and Evolution of C++ (2007) Bjorn Stroustrup popisuje principy, kterými se řídil při navrhování C++ (uvedeno ve zkrácené podobě):

  • Získejte univerzální jazyk se statickými datovými typy, efektivitou a přenositelností C.
  • Přímo a komplexně podporuje různé styly programování.
  • Dejte programátorovi svobodu volby, i když mu to dává možnost vybrat si nesprávně.
  • Zachovejte co největší kompatibilitu s C, čímž umožníte snadný přechod z programování na C.
  • Vyhněte se nesrovnalostem mezi C a C++: jakákoli konstrukce, která je platná v obou jazycích, musí v každém z nich znamenat totéž a vést ke stejnému chování programu.
  • Vyhněte se funkcím, které jsou závislé na platformě nebo nejsou univerzální.
  • „Neplaťte za to, co nepoužíváte“ – Žádná jazyková funkce by neměla způsobit snížení výkonu programů, které ji nepoužívají.
  • Nevyžadují příliš složité programovací prostředí.

C a C++

Syntaxe C++ je zděděna z jazyka C. Ačkoli formálně zůstává jedním z principů C++ zachování kompatibility s jazykem C, ve skutečnosti standardizační skupiny těchto jazyků neinteragují a mění se nejen že spolu nekorelují, ale často si ideově zásadně odporují. Takže prvky, které nové standardy C přidávají do jádra, jsou prvky standardní knihovny ve standardu C++ a obecně v jádře chybí, například dynamická pole, pole s pevnými hranicemi, zařízení pro paralelní zpracování. Stroustrup věří, že spojení vývoje těchto dvou jazyků by bylo velkým přínosem, ale z politických důvodů je to stěží možné. Takže praktická kompatibilita mezi C a C++ se postupně ztratí.
V tento příklad, v závislosti na použitém kompilátoru bude výstupem "C++" nebo "C":

Program 9.1

#zahrnout int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

To je způsobeno skutečností, že znakové konstanty v C jsou typu int a v C++ jsou typu char, ale velikosti těchto typů se liší.

Modely životního cyklu aplikací

Životní cyklus software je časový úsek, který začíná okamžikem rozhodnutí o potřebě tvořit softwarový produkt a končí okamžikem jeho úplného vyřazení z provozu. Tento cyklus je proces budování a vývoje softwaru (SW). Existuje několik modelů životní cyklus.
Kaskádový modelživotní cyklus (anglický model vodopádu) navrhl v roce 1970 Winston Royce. Zajišťuje sekvenční realizaci všech fází projektu v přesně stanoveném pořadí. Přechod do další fáze znamená úplné dokončení práce v předchozí fázi. Požadavky definované ve fázi vytváření požadavků jsou ve formuláři přísně dokumentovány podmínky zadání a jsou fixní po dobu trvání projektu. Každá etapa končí uvolněním kompletní set dostatečnou dokumentaci, aby ve vývoji mohl pokračovat další vývojový tým.
Fáze projektu podle vodopádového modelu:

  1. Tvorba požadavků;
  2. Design;
  3. Implementace;
  4. Testování;
  5. implementace;
  6. Provoz a údržba.

Ve vodopádovém modelu přechod z jedné projektové fáze do druhé předpokládá úplnou správnost výsledku předchozí fáze. U velkých projektů je toho téměř nemožné dosáhnout. Proto je takový model vhodný pouze pro vývoj malého projektu. (W. Royce sám se tohoto modelu nedržel a použil iterativní model).
Iterativní model
Alternativou k vodopádovému modelu je model iterativního a přírůstkového vývoje (IID), který obdržel od T. Gilba v 70. letech. název evolučního modelu. Model IID rozděluje životní cyklus projektu na řadu iterací, z nichž každá připomíná „miniprojekt“, včetně všech vývojových procesů použitých při vytváření menších částí funkcionality ve srovnání s projektem jako celkem. Cílem každé iterace je získat funkční verzi softwarového systému včetně funkčnosti definované integrovaným obsahem všech předchozích i současných iterací. Výsledek konečné iterace obsahuje veškerou požadovanou funkčnost produktu. S dokončením každé iterace tedy produkt dostává přírůstek – přírůstek – ke svým schopnostem, které se tedy evolučně vyvíjejí.


Ve většině moderních vývojových metodologií jsou implementovány různé varianty iterativního přístupu:

Vývojový proces – Rational Unified Process (RUP)

Rational Unified Process (RUP)(Racionální jednotný proces) je metodika vývoje softwaru spravovaná společností Rational Software (IBM). Metodika poskytuje doporučení pro všechny fáze vývoje: od obchodního modelování až po testování a uvedení hotového programu do provozu. Jako modelovací jazyk se používá Unified Modeling Language (UML).
Kompletní životní cyklus vývoje produktu se skládá ze čtyř fází, z nichž každá zahrnuje jednu nebo více iterací.

  • Počáteční fáze (začátek)
  • Stanovení rozsahu projektu a výše požadovaných zdrojů. Jsou stanoveny hlavní požadavky, omezení a klíčová funkčnost produktu. Rizika se vyhodnocují. Plánování akcí. Na konci zahajovací fáze se hodnotí dosažení milníku cíle životního cyklu, což znamená dohodu mezi zúčastněnými stranami o pokračování projektu.

  • Zpracování
  • Dokumentace požadavků. Návrh, implementace a testování spustitelné architektury. Specifikace podmínek a nákladů. Snížení hlavních rizik. Úspěšné dokončení vývojové fáze znamená dosažení milníku architektury životního cyklu.

  • Konstrukce
  • Ve fázi „Build“ je implementována většina funkčnosti produktu: je dokončen návrh aplikace, zdroj psaný. Fáze Build končí prvním externím vydáním systému a milníkem Initial Operational Capability.

  • Implementace (přechod)
  • Ve fázi „Implementace“ se vytvoří finální verze produktu, která se přenese od vývojáře k zákazníkovi. To zahrnuje beta testovací program, vzdělávání uživatelů a zajištění kvality produktu. V případě, že kvalita nesplňuje očekávání uživatelů nebo kritéria stanovená ve fázi Start, fáze Implementace se znovu opakuje. Splnění všech cílů znamená dosažení milníku hotového produktu (Product Release) a dokončení celého vývojového cyklu.



« Informační technologie. Systémové a softwarové inženýrství. Procesy životního cyklu softwarových nástrojů» . Tato norma byla přijata Federální agenturou pro technickou regulaci a metrologii Ruské federace a je podobná mezinárodní normě ISO/IEC 12207:2008. Tento standard, vytváří obecný rámec pro procesy životního cyklu softwaru, který lze použít jako vodítko v softwarovém průmyslu. Standard nenabízí konkrétní modelživotní cyklus. Jeho ustanovení jsou společná pro všechny modely životního cyklu, metody a technologie pro tvorbu softwaru. Popisuje strukturu procesů životního cyklu, aniž by specifikoval, jak implementovat nebo vykonávat činnosti a úkoly zahrnuté v těchto procesech.

Prezentace na lekci
Témata zpráv
  • Free Software Foundation (FSF)
  • Licence svobodného softwaru
  • Svobodný software a otevřený zdroj
  • Historie vývoje programovacích jazyků
  • Historie C. C a C++
  • Příběh
  • Kritika C++
  • Historie UNIXu
  • Model životního cyklu spirálového softwaru
  • UML (English Unified Modeling Language – jednotný modelovací jazyk)
  • Microsoft Solutions Framework
  • IDE pro programování v C/C++ na Windows
  • C/C++ kompilátory
  • Vytvoření konzolové aplikace v systému Windows
Otázky
  1. Proč se vodopádový model vývoje softwaru nepoužívá ve velkých projektech?
  2. Jaký je rozdíl mezi vodopádovými a iterativními modely vývoje?
  3. Vyjmenujte fáze vývoje softwaru v metodice Rational Unified Process (RUP).

Naučit se základy a jemnosti programovacího jazyka C++. Tutorial s praktické úkoly a testy. Chcete se naučit programovat? Pak jste na správném místě – zde Vzdělání zdarma programování. Ať už máte zkušenosti nebo ne, tyto lekce programování vám pomohou začít vytvářet, kompilovat a ladit programy C++ v různých vývojových prostředích: vizuální studio, Code::Blocks, Xcode nebo Eclipse.

Mnoho příkladů a podrobných vysvětlení. Ideální jak pro začátečníky (figuríny), tak pro pokročilé. Vše je vysvětleno od začátku do nejmenších detailů. Tyto lekce (200+) vám poskytnou dobrý základ / základy pro pochopení programování nejen v C++, ale i v jiných programovacích jazycích. A je to zcela zdarma!

Zahrnuje také postupnou tvorbu hry v C++, grafickou knihovnu SFML a více než 50 úkolů, které otestují vaše dovednosti a znalosti v C++. Bonusem navíc je .

Za repost +20 ke karmě a můj dík!

Kapitola číslo 0. Úvod. Začátek práce

Kapitola číslo 1. Základy C++

Kapitola číslo 2. Proměnné a základní datové typy v C++

Kapitola číslo 3. Operátoři v C++

Kapitola číslo 4. Rozsah a další typy proměnných v C++

Kapitola číslo 5. Pořadí, ve kterém je kód vykonáván v programu. Smyčky, větve v C++

Standardní knihovna C/C++ obsahuje řadu funkcí pro čtení a zápis do konzole (klávesnice a monitor). Tyto funkce čtou a zapisují data jako jednoduchý proud znaků.

Pojem proud (stream), používaný v programování, úzce souvisí s obvyklým, každodenním chápáním tohoto slova. Vstupní proud lze porovnat s potrubím, kterým voda (informace) vstupuje do bazénu (paměť počítače), výstupní proud - s potrubím, kterým voda opouští bazén. Důležitou vlastností této roury je, že data se mohou v jednu chvíli pohybovat pouze jedním směrem. I když je pro vstup a výstup použito stejné potrubí, nemůže se to stát současně: pro změnu směru proudění je třeba jej zastavit, provést nějakou akci a teprve poté nasměrovat proudění opačným směrem. Další vlastností potoka je, že téměř nikdy nevysychá. Někdy vyschne, ale tato doba nemůže být dlouhá, pokud systém funguje normálně.

standardní výstupní funkce printf().

Funkce printf() je standardní výstupní funkcí. Pomocí této funkce můžete na obrazovce monitoru zobrazit řetězec znaků, číslo, hodnotu proměnné...

Funkce printf() má prototyp v souboru stdio.h
int printf(char *řídící řetězec, ...);

Pokud je úspěšná, funkce printf() vrátí počet vytištěných znaků.

Řídicí řetězec obsahuje dva typy informací: znaky, které se přímo zobrazují na obrazovce, a specifikátory formátu, které určují způsob výstupu argumentů.

Funkce printf() je formátovaná výstupní funkce. To znamená, že v parametrech funkce je nutné specifikovat formát výstupních dat. Formát dat je určen specifikátory formátu. Specifikátor formátu začíná znakem % následovaným kódem formátu.

Specifikátory formátu:

%S symbol
%d celé desetinné číslo
%i celé desetinné číslo
%E desetinné číslo ve tvaru x.xx e+xx
%E desetinné číslo ve tvaru x.xx E+xx
%F
%F desetinná desetinná čárka xx.xxxx
%G %f nebo %e podle toho, co je kratší
%G %F nebo %E podle toho, co je kratší
osmičkové číslo
%s znakový řetězec
%u desetinné číslo bez znaménka
%X hexadecimální číslo
%X hexadecimální číslo
%% symbol %
%p ukazatel
%n ukazatel

Kromě toho lze na příkazy formátování použít modifikátory l a h.

%ld tisknout dlouhé int
%hu tisknout krátce nepodepsáno
%Lf tisknout dlouhé dvojité

Ve specifikátoru formátu za symbolem % lze zadat přesnost (počet číslic za desetinnou čárkou). Přesnost je nastavena následovně: %.n<код формата>. kde n je počet číslic za desetinnou čárkou a<код формата>- jeden z výše uvedených kódů.

Pokud máme například proměnnou x=10,3563 typu float a chceme její hodnotu zobrazit s přesností na 3 desetinná místa, měli bychom napsat:

printf("Proměnná x = %.3f",x);

Výsledek:
Proměnná x = 10,356

Můžete také určit minimální šířku okraje, který se má vytisknout. Pokud je řetězec nebo číslo větší než zadaná šířka pole, vytiskne se celý řetězec nebo číslo.

Pokud například napíšete:

printf("%5d",20);

pak výsledek bude:
20

Všimněte si, že číslo 20 nebylo vytištěno od samého začátku řádku. Pokud chcete, aby nevyužitá místa pole byla vyplněna nulami, pak musíte před šířku pole umístit znak 0.

Například:

printf("%05d",20);

Výsledek:
00020

Kromě specifikátorů formátu dat může řídicí řetězec obsahovat řídicí znaky:

\b BS, spodní díra
\F Nová stránka, překlad stránky
\n Nový řádek, posun řádku
\r Návrat vozíku
\t Vodorovná karta
\proti Vertikální záložka
\" dvojitá citace
\" Apostrof
\\ Obrácené lomítko
\0 Znak null, bajt null
\A Signál
\N Osmičková konstanta
\xN Hexadecimální konstanta
\? Otazník

Nejčastěji budete používat znak \n. S touto řídicí postavou budete moci přeskočit na nový řádek. Podívejte se na ukázky programů a vše pochopíte.

Příklady programů.

/* Příklad 1 */
#zahrnout

void main (void)
{
int a, b, c; // Reklama proměnné a,b,c
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Výsledek programu:
a=5, b=6, c=9

/* Příklad 2 */
#zahrnout

void main (void)
{
plovoucí x,y,z;

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

Printf("Souřadnice objektu: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Výsledek programu:
Souřadnice objektu: x:10,50, y:130,67, z:54,00

/* Příklad 3 */
#zahrnout

void main()
{
intx;

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

Výsledek programu:
x=10

/* Příklad 4 */
#zahrnout

void main (void)
{
printf("\"Text v uvozovkách\"");
printf("\nObsah kyslíku: 100%%");
}

Výsledek programu:
"Text v uvozovkách"
Obsah kyslíku: 100%

/* Příklad 5 */
#zahrnout

void main (void)
{
int a;

A = 11; // 11 v desítkové soustavě se rovná b v hex
printf("a-dec=%d, a-hex=%X",a,a);
}

Výsledek programu:
a-dec=11, a-hex=b

/* Příklad 6 */
#zahrnout

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

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

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

Výsledek programu:
ABC

/* Příklad 7 */
#zahrnout

void main (void)
{
char *str="Můj řetězec.";

Printf("Toto je %s",str);
}

Výsledek programu:
Tohle je moje linka.

/* Příklad 8 */
#zahrnout

void main (void)
{
printf("Ahoj!\n"); // Po vytištění bude nový řádek - \n
printf("Jmenuji se Paul."); // Toto bude vytištěno na novém řádku
}

Výsledek programu:
Ahoj!
Jmenuji se Pavel.

standardní vstupní funkce scanf().

Funkce scanf() je formátovaná vstupní funkce. S ním můžete zadávat data ze standardního vstupního zařízení (klávesnice). Vstupy mohou být celá čísla, čísla s plovoucí desetinnou čárkou, znaky, řetězce a ukazatele.

Funkce scanf() má ve stdio.h následující prototyp:
int scanf(char *řídící řetězec);

Funkce vrací počet proměnných, kterým byla přiřazena hodnota.

Řídicí řetězec obsahuje tři druhy znaků: specifikátory formátu, mezery a další znaky. Specifikátory formátu začínají znakem %.

Specifikátory formátu:

Při zadávání řetězce pomocí funkce scanf() (specifikátor formátu %s) se řetězec zadává až po první mezeru!! těch. pokud zadáte řetězec "Ahoj světe!" pomocí funkce scanf().


scanf("%s",str);

pak po zadání výsledného řetězce, který bude uložen v poli str, se bude skládat z jednoho slova "Ahoj". FUNKCE VSTUPUJE DO ŘETĚZCE AŽ DO PRVNÍHO PROSTORU! Pokud chcete zadávat řetězce s mezerami, použijte funkci

char *gets(char *buf);

Pomocí funkce gets() můžete zadávat celé řetězce. Funkce get() čte znaky z klávesnice, dokud se neobjeví znak nový řádek(\n). Samotný znak nového řádku se objeví po stisknutí klávesy Enter. Funkce vrací ukazatel na buf. buf - buffer (paměť) pro vstupní řetězec.

Ačkoli get() je mimo rozsah tohoto článku, pojďme napsat příklad programu, který vám umožní zadat celý řádek z klávesnice a zobrazit jej na obrazovce.

#zahrnout

void main (void)
{
charbuffer; // pole (buffer) pro vstupní řetězec

Gets(buffer); // zadejte řetězec a stiskněte enter
printf("%s",buffer); // výstup zadaného řetězce na obrazovku
}

Další důležitá poznámka! Chcete-li zadat data pomocí funkce scanf(), musíte jako parametry předat adresy proměnných, nikoli samotné proměnné. Chcete-li získat adresu proměnné, před název proměnné uveďte & (ampersand). Znak & znamená převzetí adresy.

Co znamená adresa? Pokusím se vysvětlit. V programu máme proměnnou. Proměnná ukládá svou hodnotu do paměti počítače. Takže adresa, kterou dostaneme pomocí &, je adresa v paměti počítače, kde je uložena hodnota proměnné.

Podívejme se na příklad programu, který nám ukazuje, jak používat &

#zahrnout

void main (void)
{
intx;

Printf("Zadejte proměnnou x:");
scanf("%d",&x);
printf("Proměnná x=%d",x);
}

Nyní se vraťme k řídicímu řádku funkce scanf(). Znovu:

int scanf(char *řídící řetězec);

Znak mezery v řídicím řádku dává pokyn k přeskočení jedné nebo více mezer ve vstupním proudu. Kromě mezery lze přijmout tabulátor nebo znak nového řádku. Znak, který není nulový, označuje přečtení a odstranění tohoto znaku.

Oddělovače mezi dvěma vstupními čísly jsou znaky mezery, tabulátoru nebo nového řádku. Znak * za % a před kódem formátu (specifikátor formátu) instruuje číst data zadaného typu, ale nepřiřazovat tuto hodnotu.

Například:

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

zadáním 50+20 nastavíte i na 50, j na 20 a + bude přečteno a ignorováno.

Příkaz format může určit největší šířku pole, které se má číst.

Například:

scanf("%5s",str);

určuje čtení prvních 5 znaků ze vstupního proudu. Pokud zadáte 1234567890ABC, pole str bude obsahovat pouze 12345, zbytek znaků bude ignorován. Oddělovače: mezera, tabulátor a nový řádek – při zadávání znaku se s nimi zachází jako se všemi ostatními znaky.

Pokud jsou v řídicím řetězci nalezeny jiné znaky, jsou určeny k určení a přeskočení odpovídajícího znaku. 10plus20 znakový proud podle operátora

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

přiřadí x 10, y 20 a přeskočí znaky plus, protože se vyskytují na řídicím řádku.

Jednou z výkonných funkcí funkce scanf() je možnost specifikovat sadu skenování (scanset). Vyhledávací sada definuje sadu znaků, se kterými budou porovnávány znaky načtené pomocí scanf(). Funkce scanf() čte znaky tak dlouho, dokud se vyskytují ve vyhledávací sadě. Jakmile zadaný znak není ve vyhledávací sadě nalezen, funkce scanf() přejde k dalšímu specifikátoru formátu. Vyhledávací sada je definována seznamem znaků uzavřených v hranatých závorkách. Úvodní závorce předchází znak %. Podívejme se na to na příkladu.

#zahrnout

void main (void)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Zadáme znakovou sadu:
12345abcdefg456

Na obrazovce program zobrazí:
12345
abcdefg456

Při zadávání vyhledávací sady můžete také použít znak pomlčky k určení mezer a také maximální šířku vstupního pole.

scanf("%10", str1);

Můžete také definovat znaky, které nejsou ve vyhledávací sadě. Před prvním z těchto znaků je znak ^. Znaková sada rozlišuje malá a velká písmena.

Připomínám, že při použití funkce scanf () je potřeba jí předat adresy proměnných jako parametry. Výše uvedený kód byl napsán:

charstr; // pole pro 80 znaků
scanf("%s",str);

Všimněte si, že str nepředchází znak &. Důvodem je, že str je pole a název pole, str, je ukazatel na první prvek pole. Znak & se proto nevkládá. Adresu již předáváme funkci scanf(). Jednoduše řečeno, str je adresa v paměti počítače, kde bude uložena hodnota prvního prvku pole.

Příklady programů.

Příklad 1
Tento program zobrazí dotaz "Kolik je ti let?:" a čeká na zadání. Pokud například zadáte číslo 20, program zobrazí řetězec "Je vám 20 let.". Když jsme zavolali funkci scanf(), dali jsme před proměnnou stáří znak &, protože funkce scanf() potřebuje adresy proměnných. Funkce scanf() zapíše zadanou hodnotu podle zadanou adresu. V našem případě se zadaná hodnota 20 zapíše na adresu proměnné věk.

/* Příklad 1 */

#zahrnout

void main (void)
{
int věk;

Printf("\nKolik je ti let?:");
scanf("%d",&age);
printf("Je ti %d let.", věk);
}

Příklad 2
Program kalkulačky. Tato kalkulačka umí pouze sčítat čísla. Pokud zadáte 100+34, program vrátí výsledek: 100+34=134.

/* Příklad 2 */

#zahrnout

void main (void)
{
int x, y;

Printf("\nKalkulačka:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

Příklad 3
Tento příklad ukazuje, jak nastavit šířku čteného pole. V našem příkladu je šířka pole pět znaků. Pokud zadáte řetězec s více znaky, všechny znaky po 5. budou vyřazeny. Věnujte pozornost volání funkce scanf(). Znak & nepředchází název pole, protože název pole je adresou prvního prvku pole.

/* Příklad 3 */

#zahrnout

void main (void)
{
charname;

Printf("\nZadejte své uživatelské jméno (maximálně 5 znaků):");
scanf("%5s", jméno);
printf("\nZadali jste %s", jméno);
}

Příklad 4
Poslední příklad v tomto článku ukazuje, jak můžete použít vyhledávací sadu. Po spuštění programu zadejte číslo od 2 do 5.

/* Příklad 4 */

#zahrnout

void main (void)
{
charbal;

Printf("Vaše skóre je 2,3,4,5:");
scanf("%", &bal);
printf("\nSkóre %c", bal);
}

Počítače jsou pravděpodobně nejvšestrannějšími nástroji, které má lidstvo k dispozici. Jsou schopni provádět neuvěřitelné výpočty, umožňují ukládat velké množství informace, zcela v různých částech planety, a zároveň je snadné je vyměňovat bez ohledu na místo. Počítače věci usnadňují každodenní úkoly, a umožňují vám automatizovat mnoho rutinních procesů, které by pro člověka byly velmi zdlouhavé a nudné. Je toho tolik, co počítače dokážou, ale přesto počítače nejsou tak inteligentní jako lidé. Chcete-li zautomatizovat i ten nejjednodušší proces, musíte počítači jasně a jednoznačně sdělit, co přesně má dělat. Bohužel náš jazyk a počítačový jazyk jsou zcela odlišné. Mezi strojem a člověkem je tedy vážná jazyková bariéra, kterou je třeba nějak překonat, jinak nám počítač nebude rozumět. A zatímco nám počítače nerozumí, samy o sobě nic neudělají. Jako prostředek komunikace mezi osobou a počítačem bylo vynalezeno velké množství programovacích jazyků. Pomocí programovacích jazyků vytváříme programy a počítač již s programy přímo pracuje. Samotné programy jsou sady instrukcí, které počítač dokáže pochopit a provést.

Typy programů

Abychom mohli efektivně komunikovat s počítačem, což je přesně to, co chceme, existuje celá řada programovacích jazyků.

V závislosti na typu projektu existuje mnoho faktorů, které je třeba vzít v úvahu při výběru programovacího jazyka. Zde je seznam nejvýznamnějších faktorů:

Kompilace, interpretace a JIT kompilace

Proces kompilace překládá kód napsaný v programovacím jazyce do nativního jazyka cílového stroje. Program, který tento proces provádí, se nazývá kompilátor. Kompilace může kód spustit poměrně rychle, zvláště pokud je kompilátor efektivní při optimalizaci. Faktem ale je, že výsledný kód nemůže fungovat na různých operační systémy a proces kompilace nějakou dobu trvá a čím více kódu, tím delší je proces kompilace. Stojí za zmínku, že při provádění jakýchkoli změn v kódu programu je nutné jej zkompilovat a teprve poté spustit.

Interpretované programovací jazyky jsou čteny programem zvaným interpret a spouštěny stejným programem. Interpretované programovací jazyky mohou běžet na různých operačních systémech, jako je tlumočník, a nemají ani dlouhé doby kompilace. Ale programy napsané v interpretovaných jazycích mají tendenci být mnohem pomalejší než ekvivalentní kompilované programy.

A nakonec tzv. on-the-fly kompilace (neboli JIT kompilace). Takové jazyky se při spuštění programu rychle zkompilují. Programy napsané v jazycích JIT zpravidla nejsou optimalizovány, čímž se urychluje proces kompilace a obnovuje se rovnováha mezi výkonem a mezi platformami.

Vysoká nebo nízká úroveň programování

Nízkoúrovňové jazyky většinou pracují přímo s hardwarem, a proto jsou nejvhodnější pro zápis ovladačů zařízení. Ovladače jsou programy, které řídí hardware a mají k němu přímý přístup. Program napsaný v nízkoúrovňovém jazyce je však obvykle obtížné přenést na jiné platformy. A proto je pro každý OS stejné zařízení dodáváno s různými ovladači. Nízkoúrovňové programovací jazyky se téměř vždy kompilují.

V jazycích na vysoké úrovni je důraz kladen na koncept jazyka. To znamená, že takový programovací jazyk by měl být snadno srozumitelný, například reprezentovat data jako pole, řetězce, objekty atd. Jazyk na vysoké úrovni je obvykle srozumitelnější než jazyk na nízké úrovni. A zpravidla je mnohem snazší a rychlejší vytvořit program v jazyce vysoké úrovně než v jazyce nízké úrovně. Jak můžete vidět různé úrovně programovací jazyky jsou určeny pro úplně jiné úkoly a nemá cenu porovnávat funkčnost víceúrovňových jazyků, je to nesmyslné.

Systémy datových typů programovacích jazyků

Pro každý programovací jazyk existuje specifikace, která definuje různá pravidla, která musí programovací jazyky dodržovat. Některé jazyky nemají datové typy, takže se jich to netýká. Většina jazyků (včetně C++) má datové typy, takže tyto informace se vám budou hodit.

Silný nebo slabý systém datových typů

Slabý vstupní systém neklade žádná omezení, programátor se tím musí řídit. říká " slabý systém data" Mám na mysli, že jazyk s takovým datovým systémem striktně nereguluje dostupné přetypování datových typů. Pokud je například do funkce násobení místo čísla předán řetězec nebo znak, programovací jazyky bez silného typu takový kód vykonají, ačkoli výsledek násobení ztrácí veškerý význam, protože řetězec nelze vynásobit číslo. Navíc výsledek provedení tohoto nesmyslného násobení bude nepředvídatelný. Pokud je programovací jazyk silně napsaný, pak ve fázi kompilace kompilátor ohlásí chybu a zastaví proces vytváření projektu. Například,

// ukázkový program C++ #include pomocí jmenného prostoru std; int main()( char string = "příklad"; int číslo = 5; cout<< string * number << endl; // умножаем строку на число }

V důsledku toho kompilátor ohlásí chybu:

chyba: neplatné operandy typů 'char' a 'int' na binární 'operátor*'

Pokusíme se o totéž v nesilně typovaném programovacím jazyce – php. Všimněte si, že ani při deklaraci proměnných není třeba uvádět datový typ.

Výsledek provedení tohoto kódu bude nula. Nedojde k žádné chybě, i když by se zdálo, že není možné násobit řetězec číslem. Ale v php je možné všechno. Kompilátor jazyka php nehlásí chybu, skript bude fungovat a dokonce dá výsledek, a pokud se náš program skládá z 1000 řádků kódu, pak tuto chybu budeme těžko hledat. Toto je ukázkový příklad programovacího jazyka se „slabým systémem datových typů“, to znamená, že prevence takových absurdních operací leží zcela na bedrech programátora.

Definovaný nebo nedefinovaný datový typ

To platí pro kompilované i interpretované jazyky. Mnoho jazyků vyžaduje explicitní definici typu proměnných, takže neexistuje žádná nejistota, kompilátor a interpret jasně vědí, co mají dělat. Některé programovací jazyky nevyžadují, abyste explicitně definovali typ proměnných. Datový typ je určen automaticky obsahem proměnné.

Statický nebo dynamický datový typ

Pokud je jazyk staticky typován, pak kompilátor/interpret provede kontrolu typu jednou před procesem kompilace/interpretace. Pokud je datový typ dynamický, jsou datové typy kontrolovány za běhu.

Bezpečný nebo nebezpečný systém datových typů

Existují situace, které mohou vést k nepředvídatelnému výsledku nebo chybě. Bezpečný jazyk zavede co nejvíce omezení, aby k takovým situacím nedocházelo. Zatímco nebezpečný jazyk klade veškerou odpovědnost na programátora.

Tyto faktory mohou charakterizovat jak jeden, tak několik programovacích jazyků.

Podporovaná programovací paradigmata

Programovací paradigmata jsou metodologie nebo způsoby programování, které programovací jazyk podporuje. Zde je seznam hlavních paradigmat:

Deklarativní paradigma

Deklarativní programovací jazyk se zaměří spíše na cíl než na prostředky k tomuto účelu. Stačí uvést, čeho je třeba dosáhnout, není nutné uvádět, jaké prostředky použít. Toto paradigma zabraňuje nežádoucím vedlejším efektům, které mohou nastat při psaní vlastního kódu.

Funkční paradigma

Funkcionální programování je podmnožinou deklarativního programování, které se pokouší řešit problémy z hlediska matematických rovnic a funkcí. Funkční programování zachází s proměnnými a objekty jako s daty, která nejsou sdílena, na rozdíl od imperativních jazyků.

Generalizované paradigma

Generické programování se zaměřuje na psaní algoritmů z hlediska datových typů, které mají být definovány. To znamená, že stejný algoritmus může pracovat s různými typy dat. Tento přístup může být velmi mocným nástrojem, ale pouze pokud je dobře implementován.

imperativní paradigma

Imperativní jazyky umožňují programátorům poskytnout počítači uspořádaný seznam instrukcí, které jsou potřeba k dokončení úkolu. Imperativní programovací jazyky jsou na rozdíl od deklarativních programovacích jazyků.

Strukturální paradigma

Strukturální programovací jazyky jsou zaměřeny na poskytování nějaké formy kódu - hierarchické struktury. Když je struktura kódu jasně viditelná, pořadí, ve kterém jsou příkazy prováděny, se stává intuitivním. Takové jazyky se obvykle mračí na „skákání“ z jednoho kusu kódu na druhý, jako je například známý operátor goto, který je definován v C a C++.

procedurální paradigma

Procedurální programovací jazyk označuje strukturovaný programovací jazyk, který podporuje koncept procedury nebo podprogramu.

Objektově orientované paradigma

Objektově orientované programování (někdy zkráceně OOP) je podmnožinou strukturovaného programování, které vyjadřuje programy pomocí „objektů“. Toto paradigma umožňuje opětovné použití kódu a je snadno pochopitelné.

Standardizace

Mají jazyky oficiální standard? Standardizace je velmi důležitá pro zajištění bezkonfliktního porozumění programu různými kompilátory/překladači. Některé jazyky jsou standardizovány American National Standards Institute (ANSI), jiné jsou standardizovány Mezinárodní organizací pro standardizaci (ISO). Všechny programovací jazyky musí být standardizovány, jinak se nebude možné shodnout na tom, co je v syntaxi správné a co špatné.

Pojďme si charakterizovat programovací jazyk C++

Nyní, když jsme se podívali na hlavní charakteristiky programovacích jazyků, pojďme určit, jaké faktory programovací jazyk C++ splňuje.

C++ je standardizovaný programovací jazyk ISO.

Nějakou dobu neměl C++ oficiální standard, nicméně od roku 1998 je C++ standardizován komisí ISO.

kompilovaný jazyk C++.

C++ se kompiluje přímo do strojového kódu, což z něj dělá jeden z nejrychlejších jazyků na světě.

C++ je silně typovaný jazyk.

C++ znamená, že programátor ví, co dělá, a umožňuje neuvěřitelné množství možností, omezených pouze představivostí.

C++ podporuje statické a dynamické datové typy.

Kontrolu datového typu lze tedy provádět v době kompilace nebo za běhu. A to opět dokazuje flexibilitu C++.

C++ podporuje mnoho paradigmat.

C++ podporuje procedurální, generická a objektově orientovaná programovací paradigmata, kromě mnoha dalších paradigmat.

C++ je přenosný programovací jazyk.

Jako jeden z nejpoužívanějších jazyků na světě a jako otevřený jazyk má C++ širokou škálu kompilátorů, které běží na různých platformách. Standardní kód knihovny C++ bude fungovat na mnoha platformách.

C++ je plně kompatibilní s jazykem C

V C++ můžete používat knihovny C a budou fungovat správně.