1. Bemutatkozás

A programozáshoz új univerzális algoritmikus modellekre van szükség, és a hardver nemcsak más formában valósítja meg az algoritmusokat, hanem egy másik algoritmus modell - az automata - alapján is. A hardverfejlesztésből származó technológia kölcsönzése az automatikus programozás alapötlete. Azonban a szintézis digitális eszközök különbözik a programozástól. Ám a modellt kölcsönvéve egyrészt nem kívánatos lényegesen változtatni rajta, másrészt pedig lehetetlen figyelmen kívül hagyni a programozás meglévő elméletét és gyakorlatát.

Ezután a SWITCH technológiát vesszük figyelembe az automatikus programok tervezéséhez, amelyekben mindig hasonló folyamatokkal találkozik. Egyrészt annyira megváltoztatta a modellt állapotgép, amely valójában túlmutat az automataelmélet keretein. Másrészt olyan fogalmakat is bevezet a programozásba, amelyeket a programozók alig észlelnek, és néha egyszerűen feleslegesek, mert a programelméletből és a programozás gyakorlatából ismertebb analógok vannak.

Az automatikus programozás problémáinak tárgyalásának alapjául Shalyto A.A. közelmúltbeli előadását vesszük alapul. és "szoftver" dolgozatai az automata programozási paradigma meghatározásához.

A C++ (ejtsd: c-plus-plus) egy lefordított, statikusan tipizált, általános célú programozási nyelv, amellyel bármilyen bonyolultságú program készíthető.
Ez a nyelv több mint 20 éve az első három legnépszerűbb és legkeresettebb programozási nyelv között van. (Ez a TIOBE weboldalán ellenőrizhető).
A nyelv az 1980-as évek elején keletkezett, amikor a Bell Labs alkalmazottja, Björn Stroustrup számos fejlesztéssel állt elő a C nyelven saját igényei szerint.

Bjarne Stroustrup - a C++ nyelv megalkotója

Stroustrup úgy döntött, hogy kiterjeszti a C nyelvet a Simula nyelven elérhető funkciókkal. A C nyelv, amely a UNIX rendszer alapnyelve, amelyen a Bell számítógépek futottak, gyors, funkciókban gazdag és hordozható. Stroustrup hozzáadta az osztályokkal és objektumokkal való munka képességét. Ennek eredményeként a gyakorlati modellezési problémák elérhetőnek bizonyultak mind a fejlesztési idő (a Simula-szerű osztályok használata miatt), mind a számítási idő (a C sebessége miatt) tekintetében.
Maga a nyelv fejlesztője így mondja:



1998-ban egy szabványügyi bizottság kiadta az első nyelvi szabványt, a C++98 néven. A C++ folyamatosan fejlődik, hogy megfeleljen a modern követelményeknek. Az egyik csoport, amely a C++ nyelvet fejleszti, és javaslatokat küld a C++ szabványosítási bizottságnak a fejlesztésére. Boost, amely többek között a nyelv képességeinek fejlesztésével foglalkozik metaprogramozási funkciók hozzáadásával. A legújabb szabvány 2017-ben jelent meg, és az ún C++17. A következő szabvány nem sokáig fog várni, és várhatóan 2020-ban jelenik meg.
A C++ nyelvhez senki nem rendelkezik jogokkal, az ingyenes. 2016 márciusában Oroszország megalakult munkacsoport WG21 C++. A csoport a C++ szabványra vonatkozó javaslatok összegyűjtése, a bizottság elé terjesztése és a Nemzetközi Szabványügyi Szervezet közgyűlésein történő megvédése céljából jött létre.
A C++ egy többparadigmás nyelv (a paradigma szóból - írási stílus számítógépes programok), amely különféle programozási stílusok és technológiák széles skáláját tartalmazza. Gyakran objektum-orientált nyelvnek nevezik, de szigorúan véve nem ez a helyzet. A munkafolyamat során a fejlesztő abszolút szabadságot kap az eszközök kiválasztásában, hogy az egyik vagy másik megközelítéssel megoldott probléma a lehető leghatékonyabban megoldódjon. Más szóval, a C++ nem kényszeríti a programozót arra, hogy csak egy programfejlesztési stílushoz ragaszkodjon (például objektumorientált).
A C++ gazdag szabványkönyvtárral rendelkezik, amely általános konténereket és algoritmusokat, I/O-t, reguláris kifejezések, többszálú támogatás és egyéb szolgáltatások. A C++ számos programozási nyelvre hatással volt, többek között: Java, C#, D. Mivel a C++ a C nyelv szintaxisán alapuló nyelvek családjába tartozik, a család többi programozási nyelve könnyen elsajátítható: JavaScript , PHP, Perl, Objective-C és még sok más. stb., beleértve magát a szülőnyelvet - C. ()
Fennállása során stabil mítoszok berögzültek a C ++ nyelvben, amelyek könnyen cáfolhatók (lásd itt: 1. rész és 2. rész)

A nyelv története és a szabványok kiadása

1983

Nyelvi alkotó - Bjorn Stroustrup, a Bell Labsnál bemutatta a C++ korai verzióját („C with Classes”)

1985

A C++ első kereskedelmi kiadása, a nyelv modern nevet kap

1986

Megjelent a Bjorn Stroustrup által írt C++ könyv, a The C++ Programming Language első kiadása

1998

A nemzetközi C++ nyelvi szabványt ratifikálták: ISO/IEC 14882:1998 "Standard for the C++ Programming Language"

2003
2005

Megjelent az 1. könyvtári technikai jelentés (TR1). Bár hivatalosan nem része a szabványnak, a jelentés ismertette a szabványos könyvtár kiterjesztéseit, amelyeket bele kell foglalni következő verzió C++ nyelv

2011

Új szabvány kiadása - C++11 vagy ISO/IEC 14882:2011; új szabvány kiegészítéseket tartalmazott a nyelv magjához és a szabványos könyvtár kiterjesztését, beleértve a TR1 nagy részét

2014

A C++14 szabvány („ISO/IEC 14882:2014(E) C++ programozási nyelv nemzetközi szabvány”) kiadása; A C++14 a C++11 kis kiterjesztésének tekinthető, amely többnyire hibajavításokat és kisebb fejlesztéseket tartalmaz.

2017

Az új szabvány kiadása a C++1z (C++17). Ez a szabvány számos változtatást és kiegészítést hozott. Például az STD C11 szabványkönyvtárakat tartalmazott, fájlrendszer, a boost::filesystem alapján, a kísérleti TS I könyvtár nagy része.

2020

A C++20 a C++ programozási nyelv ISO/IEC szabványának informális neve, amely a C++17 után várható. Az N4800 szabvány tervezete.

Filozófia C++

A The Design and Evolution of C++ (2007) című művében Bjorn Stroustrup leírja azokat az elveket, amelyeket a C++ tervezésekor követett (rövidítve):

  • Szerezzen egy univerzális nyelvet statikus adattípusokkal, a C hatékonyságával és hordozhatóságával.
  • Közvetlenül és átfogóan támogatja a különféle programozási stílusokat.
  • Adja meg a programozónak a választás szabadságát, még akkor is, ha ez lehetőséget ad a helytelen választásra.
  • A lehető legnagyobb mértékben tartsa fenn a C-vel való kompatibilitást, ezáltal lehetővé téve a programozásról a C-re való egyszerű váltást.
  • Kerülje a C és a C++ összetévesztését: a mindkét nyelven engedélyezett konstrukciónak ugyanazt kell jelentenie mindegyikben, és ugyanazt a programviselkedést kell eredményeznie.
  • Kerülje a platformfüggő vagy nem univerzális funkciókat.
  • „Ne fizessen azért, amit nem használ” – Egyetlen nyelvi funkció sem okozhat teljesítménycsökkenést azoknál a programoknál, amelyek nem használják.
  • Nem igényel túl bonyolult programozási környezetet.

C és C++

A C++ szintaxis a C nyelvtől öröklődik. Bár formálisan a C++ egyik alapelve továbbra is a C nyelvvel való kompatibilitás fenntartása, valójában ezeknek a nyelveknek a szabványosítási csoportjai nem hatnak egymásra, és a változtatások hogy nemcsak hogy nem korrelálnak, hanem gyakran ideológiailag alapvetően ellentmondanak egymásnak. Tehát azok az elemek, amelyeket az új C szabványok adnak a kernelhez, a C ++ szabvány szabványos könyvtárának elemei, és általában hiányoznak a kernelből, például dinamikus tömbök, rögzített határú tömbök, párhuzamos feldolgozási lehetőségek. Stroustrup úgy véli, hogy e két nyelv fejlesztésének kombinálása nagy hasznot hozna, de politikai okokból aligha lehetséges. Így a C és a C++ gyakorlati kompatibilitása fokozatosan elveszik.
NÁL NÉL ezt a példát, a használt fordítótól függően a "C++" vagy a "C" lesz a kimenet:

Program 9.1

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

Ez annak köszönhető, hogy a karakterkonstansok C-ben int típusúak, C++-ban pedig char típusúak, de ezeknek a típusoknak a mérete eltérő.

Alkalmazás életciklus modellek

Életciklus szoftver az az időtartam, amely attól a pillanattól kezdődik, amikor döntés születik az alkotás szükségességéről szoftver termékés a működésből való teljes kivonás pillanatában ér véget. Ez a ciklus a szoftver (SW) felépítésének és fejlesztésének folyamata. Számos modell létezik életciklus.
Kaszkád modelléletciklust (angol vízesés modell) javasolta 1970-ben Winston Royce. Előírja a projekt minden szakaszának egymás utáni végrehajtását szigorúan rögzített sorrendben. A következő szakaszra való áttérés az előző szakaszban végzett munka teljes befejezését jelenti. A követelménygenerálási szakaszban meghatározott követelmények szigorúan dokumentálva vannak az űrlapon feladatmeghatározásés a projekt időtartamára rögzítik. Minden szakasz az elengedéssel ér véget teljes készlet elegendő dokumentáció ahhoz, hogy a fejlesztést egy másik fejlesztőcsapat folytathassa.
A projekt szakaszai a vízesés modell szerint:

  1. Követelmények kialakítása;
  2. Tervezés;
  3. Végrehajtás;
  4. Tesztelés;
  5. végrehajtás;
  6. Üzemeltetés és karbantartás.

A vízesés modellben az egyik projektfázisból a másikba való átmenet feltételezi az előző fázis eredményének teljes helyességét. Nagy projekteknél ezt szinte lehetetlen elérni. Ezért egy ilyen modell csak egy kis projekt fejlesztésére alkalmas. (W. Royce maga nem ragaszkodott ehhez a modellhez, és iteratív modellt használt).
Iteratív modell
A vízesés modell alternatívája az iteratív és inkrementális fejlesztés (IID) modellje, amelyet T. Gilbtől kapott a 70-es években. az evolúciós modell neve. Az IID-modell a projekt életciklusát iterációk sorozatára bontja, amelyek mindegyike egy "mini-projekthez" hasonlít, beleértve az összes fejlesztési folyamatot, amelyet a kisebb funkciók létrehozására alkalmaznak, összehasonlítva a projekt egészével. Minden iteráció célja a szoftverrendszer működő verziójának beszerzése, beleértve az összes korábbi és jelenlegi iteráció integrált tartalma által meghatározott funkcionalitást. A végső iteráció eredménye tartalmazza a termék összes szükséges funkcióját. Így minden iteráció befejeztével a termék növekményt - egy növekményt - kap a képességeihez, amelyek ezért evolúciósan fejlődnek.


A legtöbb modern fejlesztési módszerben az iteratív megközelítés különféle változatait alkalmazzák:

Fejlesztési folyamat – Rational Unified Process (RUP)

Rational Unified Process (RUP)(racionális egységes folyamat) a Rational Software (IBM) által karbantartott szoftverfejlesztési módszertan. A módszertan a fejlesztés minden szakaszához ad ajánlásokat: az üzleti modellezéstől a kész program teszteléséig és üzembe helyezéséig. Az egységes modellezési nyelvet (UML) használják modellezési nyelvként.
A teljes termékfejlesztési életciklus négy szakaszból áll, amelyek mindegyike egy vagy több iterációt tartalmaz.

  • Kezdeti szakasz (Kezdés)
  • A projekt terjedelmének és a szükséges források mértékének meghatározása. Meghatározzák a termék főbb követelményeit, korlátozásait és kulcsfontosságú funkcióit. Felmérik a kockázatokat. Akciótervezés. A kezdeti szakasz végén értékelik a cél életciklus célkitűzésének mérföldkövének elérését, ami magában foglalja az érintettek közötti megállapodást a projekt folytatásáról.

  • Kidolgozás
  • Követelmények dokumentációja. A végrehajtható architektúra tervezése, megvalósítása és tesztelése. A feltételek és a költségek meghatározása. A fő kockázatok csökkentése. A fejlesztési szakasz sikeres befejezése az életciklus-architektúra mérföldkövének elérését jelenti.

  • Építkezés
  • A „Build” fázisban a termék funkcionalitásának nagy része megvalósul: elkészül az alkalmazás tervezése, forrásírott. Az építési szakasz a rendszer első külső kiadásával és az Initial Operational Capability mérföldkővel zárul.

  • Megvalósítás (átmenet)
  • Az „Implementation” fázisban elkészül a termék végleges verziója, amely a fejlesztőtől a vásárlóhoz kerül. Ez magában foglalja a béta tesztelési programot, a felhasználói oktatást és a termékminőség-biztosítást. Abban az esetben, ha a minőség nem felel meg a felhasználók elvárásainak vagy a Start fázisban meghatározott kritériumoknak, a Megvalósítási szakasz ismétlődik. Az összes cél elérése a késztermék (Product Release) mérföldkövének elérését és a teljes fejlesztési ciklus befejezését jelenti.



« Információs technológia. Rendszer- és szoftverfejlesztés. Életciklus folyamatok szoftver eszközök» . Ezt a szabványt az Orosz Föderáció Szövetségi Műszaki Szabályozási és Metrológiai Ügynöksége fogadta el, és hasonló az ISO/IEC 12207:2008 nemzetközi szabványhoz. Ez a szabvány, általános keretet hoz létre a szoftver életciklus-folyamataihoz, amely iránymutatásként használható a szoftveriparban. A szabvány nem kínál konkrét modelléletciklus. Előírásai közösek minden életciklus-modellre, szoftverkészítési módszerre és technológiára. Leírja az életciklus-folyamatok szerkezetét anélkül, hogy meghatározná, hogyan kell végrehajtani vagy végrehajtani az ezekben a folyamatokban foglalt tevékenységeket és feladatokat.

Előadás a leckéhez
Üzenettéma
  • Free Software Foundation (FSF)
  • Ingyenes szoftverlicencek
  • Ingyenes szoftver és nyílt forráskód
  • A programozási nyelvek fejlődésének története
  • A C. C és a C++ története
  • Sztori
  • A C++ kritikája
  • A UNIX története
  • Spirális szoftver életciklus modell
  • UML (English Unified Modeling Language – egységes modellezési nyelv)
  • Microsoft Solutions Framework
  • IDE a C/C++ programozáshoz Windows rendszeren
  • C/C++ fordítók
  • Konzolalkalmazás létrehozása Windows rendszeren
Kérdések
  1. Miért nem használják a waterfall szoftverfejlesztési modellt nagy projektekben?
  2. Mi a különbség a vízesés és az iteratív fejlesztési modellek között?
  3. Sorolja fel a szoftverfejlesztés szakaszait a Rational Unified Process (RUP) módszertanban

A C++ programozási nyelv alapjainak és finomságainak elsajátítása. Tutorial with gyakorlati feladatokatés tesztek. Szeretnél megtanulni programozni? Akkor jó helyen jár – itt ingyenes oktatás programozás. Függetlenül attól, hogy van tapasztalata, vagy sem, ezek a programozási leckék segítenek a C++ programok létrehozásának, fordításának és hibakeresésének megkezdésében különböző fejlesztői környezetekben: vizuális Stúdió, Code::Blocks, Xcode vagy Eclipse.

Rengeteg példa és részletes magyarázat. Tökéletes kezdőknek (bábuknak) és haladóknak egyaránt. Minden el van magyarázva a semmitől a legapróbb részletekig. Ezek a leckék (200+) jó alapot/alapot adnak a programozás megértéséhez nem csak C ++ nyelven, hanem más programozási nyelveken is. És ez teljesen ingyenes!

Tartalmazza továbbá a játék lépésről lépésre történő létrehozását C ++ nyelven, az SFML grafikus könyvtárat és több mint 50 feladatot, amellyel tesztelheti képességeit és tudását C ++ nyelven. További bónusz a .

Repost +20 a karmának és hálám!

0. fejezetszám. Bevezetés. A munka kezdete

fejezet száma 1. A C++ alapjai

2. fejezetszám. Változók és alapvető adattípusok C++ nyelven

3. fejezetszám. Operátorok C++ nyelven

4. fejezetszám. Hatókör és más típusú változók a C++ nyelven

5. fejezetszám. A kód végrehajtásának sorrendje a programban. Cikkek, elágazások C++-ban

A C/C++ Standard Library számos funkciót tartalmaz a konzolra való olvasáshoz és íráshoz (billentyűzet és monitor). Ezek a funkciók egyszerű karakterfolyamként olvasnak és írnak adatokat.

A programozásban használt folyam (folyam) fogalma szorosan összefügg e szó szokásos, mindennapi értelmezésével. A bemeneti áramlás összehasonlítható egy csővel, amelyen keresztül a víz (információ) belép a medencébe (számítógép memóriája), a kimeneti áramot - egy csővel, amelyen keresztül a víz elhagyja a medencét. Ennek a csőnek az egyik fontos jellemzője, hogy az adatok egyszerre csak egy irányba mozoghatnak. Még ha ugyanazt a csövet használjuk is a bemenethez és a kimenethez, ez nem történhet meg egyszerre: az áramlás irányának megváltoztatásához meg kell állítani, végre kell hajtani valamilyen műveletet, és csak ezután kell az áramlást az ellenkező irányba irányítani. A patak másik jellemzője, hogy szinte soha nem szárad ki. Néha kiszárad, de ez az időszak nem lehet hosszú, ha a rendszer normálisan működik.

printf() szabványos kimeneti függvény

A printf() függvény egy szabványos kimeneti függvény. Ezzel a funkcióval karaktersorozatot, számot, változó értéket jeleníthet meg a monitor képernyőjén...

A printf() függvény prototípusa az stdio.h fájlban található
int printf(char *control string, ...);

Ha sikeres, a printf() függvény visszaadja a kinyomtatott karakterek számát.

A vezérlőkarakterlánc kétféle információt tartalmaz: a közvetlenül a képernyőn megjelenő karaktereket és az argumentumok kiadásának módját meghatározó formátum-specifikációkat.

A printf() függvény egy formázott kimeneti függvény. Ez azt jelenti, hogy a függvényparaméterekben meg kell adni a kiadandó adatok formátumát. Az adatformátumot a formátumspecifikátorok határozzák meg. A formátummeghatározó egy % karakterrel kezdődik, amelyet egy formátumkód követ.

Formátum specifikációk:

%Val vel szimbólum
%d egész decimális szám
%én egész decimális szám
%e decimális szám x.xx e+xx formában
%E decimális szám x.xx E+xx formában
%f
%F tizedes lebegőpontos xx.xxxx
%g %f vagy %e, amelyik rövidebb
%G %F vagy %E, amelyik rövidebb
%o nyolcas szám
%s karakterlánc
%u előjel nélküli decimális szám
%x hexadecimális szám
%X hexadecimális szám
%% szimbólum %
%p mutató
%n mutató

Ezenkívül az l és h módosítók alkalmazhatók a formázási parancsokra.

%ld nyomtatás hosszú int
%HU nyomtat rövid aláírás nélküli
%Lf hosszú dupla nyomtatás

A formátummeghatározóban a % szimbólum után adható meg a pontosság (a tizedesvessző utáni számjegyek száma). A pontosság a következőképpen van beállítva: %.n<код формата>. Ahol n a tizedesvessző utáni számjegyek száma, és<код формата>- a fenti kódok egyike.

Például, ha van egy x=10,3563 float típusú változónk, és az értékét a tizedesvessző után legfeljebb 3 számjegy pontossággal akarjuk megjeleníteni, akkor ezt írjuk:

printf("x változó = %.3f",x);

Eredmény:
x változó = 10,356

Megadhatja a nyomtatandó margó minimális szélességét is. Ha a karakterlánc vagy szám nagyobb, mint a megadott mezőszélesség, akkor a karakterlánc vagy szám teljes egészében kinyomtatásra kerül.

Például ha ezt írod:

printf("%5d",20);

akkor az eredmény ez lesz:
20

Vegye figyelembe, hogy a 20-as számot nem a sor elejétől nyomtatták ki. Ha azt szeretné, hogy a mező nem használt helyei nullákkal legyenek kitöltve, akkor a mező szélessége elé 0 karaktert kell tenni.

Például:

printf("%05d",20);

Eredmény:
00020

Az adatformátum-meghatározókon kívül a vezérlőkarakterek vezérlőkaraktereket is tartalmazhatnak:

\b BS, alsó lyuk
\f Új oldal, oldalfordítás
\n Új sor, soremelés
\r Kocsi vissza
\t Vízszintes fül
\v Függőleges fül
\" kettős idézet
\" Aposztróf
\\ Hátsó perjel
\0 Null karakter, null byte
\a Jel
\N Oktális állandó
\xN Hexadecimális állandó
\? Kérdőjel

Leggyakrabban a \n karaktert használja. Ezzel a vezérlőkarakterrel új sorra ugorhat. Nézze meg a programok példáit, és mindent megért.

Program példák.

/* 1. példa */
#beleértve

void main(void)
{
int a,b,c; // Ad a,b,c változók
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

A program eredménye:
a=5, b=6, c=9

/* 2. példa */
#beleértve

void main(void)
{
float x,y,z;

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

Printf("Objektum koordináták: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

A program eredménye:
Objektum koordináták: x:10.50, y:130.67, z:54.00

/* 3. példa */
#beleértve

void main()
{
intx;

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

A program eredménye:
x=10

/* 4. példa */
#beleértve

void main(void)
{
printf("\"Szöveg idézőjelben\"");
printf("\nOxigéntartalom: 100%%");
}

A program eredménye:
"Szöveg idézőjelben"
Oxigéntartalom: 100%

/* 5. példa */
#beleértve

void main(void)
{
int a;

A=11; // 11 decimális egyenlő b hexadecimális
printf("a-dec=%d, a-hex=%X",a,a);
}

A program eredménye:
a-dec=11, a-hex=b

/* 6. példa */
#beleértve

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

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

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

A program eredménye:
ABC

/* 7. példa */
#beleértve

void main(void)
{
char *str="Saját karakterlánc.";

Printf("Ez %s",str);
}

A program eredménye:
Ez az én vonalam.

/* 8. példa */
#beleértve

void main(void)
{
printf("Szia!\n"); // Nyomtatás után egy új sor lesz - \n
printf("A nevem Pál."); // Ez egy új sorba kerül kinyomtatásra
}

A program eredménye:
Szia!
A nevem Pavel.

scanf() szabványos bemeneti függvény

A scanf() függvény egy formázott bemeneti függvény. Ezzel a szabványos beviteli eszközről (billentyűzetről) adhat meg adatokat. A bemenetek lehetnek egész számok, lebegőpontos számok, karakterek, karakterláncok és mutatók.

A scanf() függvény a következő prototípussal rendelkezik az stdio.h fájlban:
int scanf(char *control string);

A függvény azoknak a változóknak a számát adja vissza, amelyekhez értéket rendeltek.

A vezérlőkarakterlánc háromféle karaktert tartalmaz: formátummeghatározókat, szóközöket és egyéb karaktereket. A formátummeghatározók % karakterrel kezdődnek.

Formátum specifikációk:

Ha a scanf() függvény segítségével írunk be egy karakterláncot (%s formátummeghatározó), akkor a karakterlánc az első szóközig kerül beírásra!! azok. ha beírod a "Hello world!" a scanf() függvény használatával


scanf("%s",str);

majd beírása után a kapott karakterlánc, amely az str tömbben lesz tárolva, egy "Hello" szóból áll. A FUNKCIÓ AZ ELSŐ SZÓKÖZIG BELÉPIK EGY HÚZBA! Ha szóközöket szeretne beírni, használja a függvényt

char *gets(char *buf);

A gets() függvénnyel teljes karakterláncokat adhat meg. A gets() függvény beolvassa a karaktereket a billentyűzetről, amíg meg nem jelenik egy karakter új sor(\n). Maga az újsor karakter jelenik meg, amikor megnyomja az Enter billentyűt. A függvény egy mutatót ad vissza a buf-hoz. buf - puffer (memória) a bemeneti karakterlánchoz.

Bár a gets() nem tartozik a cikk hatókörébe, írjunk egy példaprogramot, amely lehetővé teszi, hogy a billentyűzetről egy teljes sort írjon be és jelenítse meg a képernyőn.

#beleértve

void main(void)
{
szénpuffer; // tömb (puffer) a bemeneti karakterlánchoz

Gets(puffer); // írjon be egy karakterláncot, és nyomja meg az enter billentyűt
printf("%s",puffer); // kiírja a beírt karakterláncot a képernyőre
}

Még egy fontos megjegyzés! A scanf() függvény segítségével történő adatbevitelhez a változók címét kell paraméterként átadni, nem magukat a változókat. Egy változó címének lekéréséhez írja be a változó nevét az & jellel (és). A & jel a cím felvételét jelenti.

Mit jelent a cím? Megpróbálom elmagyarázni. A programban van egy változónk. Egy változó a számítógép memóriájában tárolja az értékét. Tehát a cím, amit &-vel kapunk, az a cím a számítógép memóriájában, ahol a változó értéke tárolódik.

Nézzünk egy példaprogramot, amely megmutatja, hogyan kell használni

#beleértve

void main(void)
{
intx;

Printf("Adja meg az x változót:");
scanf("%d",&x);
printf("Változó x=%d",x);
}

Most térjünk vissza a scanf() függvény vezérlősorához. Újra:

int scanf(char *control string);

A vezérlősorban lévő szóköz karakter egy vagy több szóköz kihagyására utasít a beviteli adatfolyamban. A szóközön kívül tabulátor vagy újsor karakter is elfogadható. A nem null karakter a karakter elolvasását és elvetését jelzi.

A két beviteli szám közötti elválasztó karakterek szóköz, tabulátor vagy újsor karakterek. A * a % után és a formátumkód előtt (formátummeghatározó) a megadott típusú adatok olvasására utasít, de nem az érték hozzárendelésére.

Például:

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

az 50+20 beírása i-t 50-re, j-t 20-ra állítja, és a + beolvasásra és figyelmen kívül hagyásra kerül.

A format parancs megadhatja az olvasandó legnagyobb mezőszélességet.

Például:

scanf("%5s",str);

Az első 5 karakter beolvasását határozza meg a bemeneti adatfolyamból. Ha beírja az 1234567890ABC értéket, az str tömb csak 12345-öt tartalmaz, a többi karaktert figyelmen kívül hagyja. Elválasztók: szóköz, tabulátor és újsor – karakter beírásakor a rendszer ugyanúgy kezeli őket, mint az összes többi karaktert.

Ha bármilyen más karakter is találkozik a vezérlőkarakterláncban, akkor ezek a megfelelő karakter meghatározására és kihagyására szolgálnak. 10+20 karakteres adatfolyam operátor szerint

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

x-et 10-hez, y-t 20-hoz rendeli, és kihagyja a plusz karaktereket, mert a vezérlősorban előfordulnak.

A scanf() függvény egyik hatékony funkciója a vizsgálati készlet (scanset) megadásának képessége. A keresési halmaz határozza meg a karakterkészletet, amellyel a scanf() által beolvasott karakterek összehasonlításra kerülnek. A scanf() függvény addig olvassa a karaktereket, amíg előfordulnak a keresési halmazban. Ha a beírt karakter nem található a keresési halmazban, a scanf() függvény továbblép a következő formátummeghatározóra. A keresési halmazt egy szögletes zárójelbe tett karakterlista határozza meg. A nyitó zárójelet % jel előzi meg. Nézzük ezt egy példával.

#beleértve

void main(void)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Adjunk meg egy karakterkészletet:
12345abcdefg456

A képernyőn a program a következőket jeleníti meg:
12345
abcdefg456

Keresési halmaz megadásakor a kötőjel karaktert is használhatjuk szóközök megadására, valamint a beviteli mező maximális szélességét.

scanf("%10", str1);

Olyan karaktereket is megadhat, amelyek nem szerepelnek a keresési készletben. E karakterek közül az elsőt egy ^ jel előzi meg. A karakterkészlet megkülönbözteti a kis- és nagybetűket.

Hadd emlékeztesselek arra, hogy a scanf () függvény használatakor a változók címét paraméterként kell átadnod neki. A fenti kódra ez volt írva:

charstr; // 80 karakteres tömb
scanf("%s",str);

Vegye figyelembe, hogy az str előtt nincs &. Ennek az az oka, hogy az str egy tömb, és a tömb neve, str, a tömb első elemére mutató mutató. Ezért a & jel nem kerül elhelyezésre. Már átadjuk a címet a scanf() függvénynek. Nos, egyszerűen fogalmazva, str az a cím a számítógép memóriájában, ahol a tömb első elemének értéke tárolva lesz.

Program példák.

1. példa
Ez a program megjeleníti a "Hány éves vagy?:" lekérdezést, és várja a bevitelt. Ha például beírja a 20-as számot, a program a "20 éves vagy." karakterláncot jeleníti meg. Amikor a scanf() függvényt meghívtuk, az age változó elé egy &-t írtunk, mivel a scanf() függvénynek szüksége van a változók címére. A scanf() függvény a beírt értéket a szerint írja ki megadott címet. Esetünkben a beírt 20-as érték az életkor változó címére lesz írva.

/* 1. példa */

#beleértve

void main(void)
{
int kor;

Printf("\nHány éves vagy?:");
scanf("%d",&age);
printf("Ön %d éves.", életkor);
}

2. példa
Számológép program. Ez a számológép csak számokat tud összeadni. Ha 100+34-et ír be, akkor a program a következő eredményt adja vissza: 100+34=134.

/* 2. példa */

#beleértve

void main(void)
{
int x, y;

Printf("\nSzámológép:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

3. példa
Ez a példa bemutatja, hogyan kell beállítani az olvasási mező szélességét. Példánkban a mező szélessége öt karakter. Ha több karakterből álló karakterláncot ad meg, akkor az 5. utáni összes karakter el lesz vetve. Ügyeljen a scanf() függvényhívásra. A & jel nem előzi meg a tömbnév nevét, mert a tömbnév neve a tömb első elemének címe.

/* 3. példa */

#beleértve

void main(void)
{
charname;

Printf("\nAdja meg felhasználónevét (maximum 5 karakter):");
scanf("%5s", név);
printf("\nBeírtad: %s", név);
}

4. példa
A cikk utolsó példája bemutatja, hogyan használhatja a keresési készletet. A program elindítása után írjon be egy számot 2 és 5 között.

/* 4. példa */

#beleértve

void main(void)
{
charbal;

Printf("A pontszámod 2,3,4,5:");
scanf("%", &bal);
printf("\nScore %c", bal);
}

A számítógépek valószínűleg az emberiség legsokoldalúbb eszközei. Hihetetlen számításokat tudnak végezni, lehetővé teszik a tárolást nagy mennyiség információk, teljesen a bolygó különböző részein, és ugyanakkor könnyen kicserélhetők, helytől függetlenül. A számítógépek megkönnyítik a dolgokat mindennapi feladatokat, és lehetővé teszik számos olyan rutinfolyamat automatizálását, amelyek végrehajtása nagyon fárasztó és unalmas lenne az ember számára. A számítógépek sok mindenre képesek, de a számítógépek mégsem olyan intelligensek, mint az emberek. Még a legegyszerűbb folyamat automatizálásához is világosan és egyértelműen meg kell mondania a számítógépnek, hogy pontosan mit kell tennie. Sajnos a nyelvünk és a számítógépes nyelvünk teljesen más. Így komoly nyelvi akadály van a gép és az ember között, amit valahogy le kell győzni, különben a számítógép nem fog megérteni minket. És bár a számítógépek nem értenek meg minket, önmagukban nem tesznek semmit. Az ember és a számítógép közötti kommunikációs eszközként hatalmas számú programozási nyelvet találtak fel. A programozási nyelvek segítségével programokat készítünk, és a számítógép már közvetlenül működik programokkal. Maguk a programok olyan utasításkészletek, amelyeket a számítógép megért és végrehajthat.

Programtípusok

Ahhoz, hogy hatékonyan kommunikálhassunk számítógéppel, amit pontosan szeretnénk, a programozási nyelvek széles skálája létezik.

A projekt típusától függően számos tényezőt kell figyelembe venni a programozási nyelv kiválasztásakor. Íme a legfigyelemreméltóbb tényezők listája:

Összeállítás, értelmezés és JIT összeállítás

A fordítási folyamat lefordítja a programozási nyelven írt kódot a célgép anyanyelvére. Az ezt a folyamatot végrehajtó programot fordítónak nevezzük. A fordítással a kód meglehetősen gyorsan lefuthat, különösen, ha a fordító hatékonyan optimalizál. De az a tény, hogy az eredményül kapott kód nem tud működni különböző területeken operációs rendszer, és a fordítási folyamat eltart egy ideig, és minél több kód, annál hosszabb a fordítási folyamat. Érdemes megjegyezni, hogy a programkód bármilyen változtatásakor le kell fordítani, és csak ezután kell futtatni.

Az értelmezett programozási nyelveket egy interpreter nevű program olvassa be, és ugyanaz a program hajtja végre. Az értelmezett programozási nyelvek különböző operációs rendszereken futhatnak, például tolmácson, és még fordítási idejük sincs. De az értelmezett nyelveken írt programok általában sokkal lassabbak, mint a megfelelő, lefordított programok.

És végül az úgynevezett on-the-fly összeállítás (vagy JIT-összeállítás). Az ilyen nyelvek a program futtatásakor gyorsan lefordíthatók. A JIT nyelveken írt programok általában nincsenek optimalizálva, ami felgyorsítja a fordítási folyamatot, és helyreállítja a teljesítmény és a platformok közötti egyensúlyt.

Magas vagy alacsony programozási szintek

Az alacsony szintű nyelvek többnyire közvetlenül a hardverrel működnek együtt, ezért a legalkalmasabbak eszköz-illesztőprogramok írására. Az illesztőprogramok olyan programok, amelyek a hardvert vezérlik, és közvetlenül hozzáférnek hozzá. Az alacsony szintű nyelven írt programokat azonban általában nehéz más platformokra portolni. Ezért minden operációs rendszerhez ugyanaz az eszköz különböző illesztőprogramokkal érkezik. Az alacsony szintű programozási nyelvek szinte mindig lefordítják.

A magas szintű nyelveknél a hangsúly a nyelv fogalmán van. Vagyis egy ilyen programozási nyelvnek könnyen érthetőnek kell lennie, például az adatokat tömbként, karakterláncként, objektumként stb. kell ábrázolnia. A magas szintű nyelvet általában könnyebb megérteni, mint egy alacsony szintű nyelvet. És általában sokkal könnyebb és gyorsabb egy magas szintű nyelven való program fejlesztése, mint egy alacsony szintű nyelven. Amint látod különböző szinteken a programozási nyelveket teljesen más feladatokra tervezték, és nem érdemes összehasonlítani a többszintű nyelvek funkcionalitását, értelmetlen.

Programozási nyelvek adattípusú rendszerei

Minden programozási nyelvhez létezik egy specifikáció, amely különböző szabályokat határoz meg, amelyeket a programozási nyelveknek be kell tartaniuk. Egyes nyelvek nem rendelkeznek adattípusokkal, ezért ez nem vonatkozik rájuk. A legtöbb nyelv (beleértve a C++-t is) azonban rendelkezik adattípusokkal, így ezek az információk hasznosak lesznek az Ön számára.

Erős vagy gyenge adattípusú rendszer

A gyenge beviteli rendszer nem szab megkötéseket, ezt a programozónak be kell tartania. mondván " gyenge rendszer adatok" Úgy értem, hogy egy ilyen adatrendszerrel rendelkező nyelv nem szabályozza szigorúan a rendelkezésre álló adattípusokat. Például, ha egy karakterláncot vagy egy karaktert adunk át a szorzó függvénynek szám helyett, akkor a nem erősen begépelt programozási nyelvek végrehajtják az ilyen kódot, bár a szorzás eredménye minden értelmét veszti, mivel a karakterlánc nem szorozható egy szám. Ráadásul ennek az értelmetlen szorzásnak az eredménye megjósolhatatlan lesz. Ha a programozási nyelv erősen be van írva, akkor a fordítási szakaszban a fordító hibát jelez, és leállítja a projekt felépítésének folyamatát. Például,

// minta C++ program #include névtér használata std; int main()( char string = "példa"; int szám = 5; cout<< string * number << endl; // умножаем строку на число }

Ennek eredményeként a fordító hibát jelez:

hiba: érvénytelen 'char ' és 'int' típusú operandusok bináris 'operator*'-ra

Megpróbáljuk ugyanezt megtenni egy nem erősen tipizált programozási nyelven - php. Vegye figyelembe, hogy még változók deklarálásakor sem kell megadni az adattípust.

A kód végrehajtásának eredménye nulla lesz. Nem történik hiba, bár úgy tűnik, hogy lehetetlen egy karakterláncot számmal megszorozni. De php-ban minden lehetséges. A php nyelvi fordító nem fog hibát jelezni, a script működik és még eredményt is ad, és ha a programunk 1000 sornyi kódból áll, akkor ezt a hibát nehezen fogjuk megtalálni. Ez a „gyenge adattípusú rendszerrel” rendelkező programozási nyelv kiváló példája, vagyis az ilyen abszurd műveletek megakadályozása teljes mértékben a programozó vállán nyugszik.

Meghatározott vagy definiálatlan adattípus

Ez a lefordított és értelmezett nyelvekre egyaránt vonatkozik. Sok nyelv megköveteli a változók típusának kifejezett meghatározását, így nincs bizonytalanság, a fordító és a tolmács egyértelműen tudja, mit kell tennie. Egyes programozási nyelvek nem igénylik a változók típusának kifejezett meghatározását. Az adattípust a változó tartalma automatikusan határozza meg.

Statikus vagy dinamikus adattípus

Ha a nyelv statikusan van beírva, akkor a fordító/tolmács egyszer elvégzi a típusellenőrzést a fordítási/értelmezési folyamat előtt. Ha az adattípus dinamikus, akkor az adattípusok ellenőrzése futás közben történik.

Biztonságos vagy nem biztonságos adattípusú rendszer

Vannak helyzetek, amelyek kiszámíthatatlan eredményhez vagy hibához vezethetnek. A biztonságos nyelvhasználat a lehető legtöbb korlátozást fogja bevezetni annak érdekében, hogy ilyen helyzetek ne forduljanak elő. Míg a nem biztonságos nyelvhasználat minden felelősséget a programozóra hárít.

Ezek a tényezők egy és több programozási nyelvet is jellemezhetnek.

Támogatott programozási paradigmák

A programozási paradigmák olyan programozási módszerek vagy módok, amelyeket egy programozási nyelv támogat. Íme a fő paradigmák listája:

Deklaratív paradigma

A deklaratív programozási nyelv inkább a célra összpontosít, nem pedig az eszközre. Elég jelezni, hogy mit kell elérni, nem szükséges jelezni, hogy milyen eszközöket kell alkalmazni. Ez a paradigma megakadályozza a nem kívánt mellékhatásokat, amelyek saját kód írásakor fordulhatnak elő.

Funkcionális paradigma

A funkcionális programozás a deklaratív programozás egy részhalmaza, amely matematikai egyenletek és függvények segítségével próbálja megoldani a problémákat. A funkcionális programozás a változókat és az objektumokat nem megosztott adatként kezeli, ellentétben a kötelező nyelvekkel.

Általános paradigma

Az általános programozás az algoritmusok írására összpontosít a definiálandó adattípusok szempontjából. Vagyis ugyanaz az algoritmus különböző típusú adatokkal is működhet. Ez a megközelítés nagyon hatékony eszköz lehet, de csak akkor, ha jól alkalmazzák.

imperatív paradigma

A kötelező nyelvek lehetővé teszik a programozók számára, hogy rendezett listát adjanak a számítógépnek a feladat elvégzéséhez szükséges utasításokról. Az imperatív programozási nyelvek szemben állnak a deklaratív programozási nyelvekkel.

Strukturális paradigma

A strukturális programozási nyelvek célja valamilyen kód - hierarchikus struktúra - biztosítása. Ha a kód szerkezete jól látható, az utasítások végrehajtási sorrendje intuitívvá válik. Az ilyen nyelvek általában összeráncolják a homlokukat, amikor egyik kódrészletről a másikra "ugrálnak", mint például a jól ismert goto operátor, amelyet C és C++ definiálnak.

procedurális paradigma

A procedurális programozási nyelv olyan strukturált programozási nyelvre utal, amely támogatja az eljárás vagy szubrutin koncepcióját.

Objektum-orientált paradigma

Az objektum-orientált programozás (néha OOP-ként rövidítve) a strukturált programozás egy részhalmaza, amely a programokat "objektumokkal" fejezi ki. Ez a paradigma lehetővé teszi a kód újrafelhasználását, és könnyen érthető.

Szabványosítás

Van a nyelveknek hivatalos szabványa? A szabványosítás nagyon fontos annak biztosításához, hogy a különböző fordítók/tolmácsok konfliktusmentesen megértsék a programot. Egyes nyelveket az Amerikai Nemzeti Szabványügyi Intézet (ANSI), másokat a Nemzetközi Szabványügyi Szervezet (ISO) szabványosított. Minden programozási nyelvet szabványosítani kell, különben nem lehet megegyezni abban, hogy mi a helyes és mi a rossz a szintaxisban.

Jellemezzük a C++ programozási nyelvet

Most, hogy megvizsgáltuk a programozási nyelvek főbb jellemzőit, határozzuk meg, hogy a C++ programozási nyelv milyen tényezőket elégít ki.

A C++ egy ISO szabványos programozási nyelv.

A C++-nak egy ideig nem volt hivatalos szabványa, azonban 1998 óta az ISO bizottság szabványosítja a C++-t.

C++ lefordított nyelv.

A C++ közvetlenül gépi kódra fordít, így a világ egyik leggyorsabb nyelve.

A C++ egy erősen tipizált nyelv.

A C++ azt jelenti, hogy a programozó tudja, mit csinál, és hihetetlen mennyiségű lehetőséget enged meg, amelynek csak a képzelet szab határt.

A C++ támogatja a statikus és dinamikus adattípusokat.

Így az adattípus-ellenőrzés elvégezhető fordítási vagy futási időben. És ez ismét bizonyítja a C ++ rugalmasságát.

A C++ számos paradigmát támogat.

A C++ számos egyéb paradigma mellett támogatja az eljárási, általános és objektumorientált programozási paradigmákat.

A C++ egy hordozható programozási nyelv.

A világ egyik leggyakrabban használt nyelveként és nyílt nyelvként a C++ fordítóprogramok széles választékával rendelkezik, amelyek különféle platformokon futnak. A C++ szabványos könyvtárkód számos platformon működik.

A C++ teljes mértékben kompatibilis a C nyelvvel

C++-ban használhat C-könyvtárakat, és ezek megfelelően fognak működni.