1. Įvadas

Programavimui reikalingi nauji universalūs algoritminiai modeliai, o aparatinė įranga realizuoja algoritmus ne tik kitokia forma, bet ir kito algoritminio modelio – automato – pagrindu. Technologijų skolinimasis iš aparatinės įrangos kūrimo yra pagrindinė automatinio programavimo idėja. Tačiau sintezė skaitmeninius įrenginius skiriasi nuo programavimo. Bet, skolinantis modelį, viena vertus, nepageidautina jo reikšmingai keisti, kita vertus, neįmanoma neatsižvelgti į jau egzistuojančią programavimo teoriją ir praktiką.

Toliau apsvarstysime SWITCH technologiją automatinėms programoms kurti, kuriose nuolat susiduriate su panašiais procesais. Viena vertus, ji labai pakeitė modelį valstybės mašina, kuri iš tikrųjų peržengė automatų teorijos ribas. Ir, kita vertus, į programavimą įtraukiamos sąvokos, kurios programišiams sunkiai suvokiamos, o kartais yra tiesiog nereikalingos, nes yra daugiau pažįstamų analogų iš programų teorijos ir programavimo praktikos.

Kaip pagrindą aptarti automatinio programavimo problemas, imame neseniai paskaitą Shalyto A.A. ir jo "programinės įrangos" dokumentai prie automatinio programavimo paradigmos apibrėžimo.

C++ (tariama c-plus-plus) yra kompiliuota, statiškai atspausdinta, bendros paskirties programavimo kalba, kurią galima naudoti kuriant bet kokio sudėtingumo programas.
Daugiau nei 20 metų ši kalba yra populiariausių ir paklausiausių programavimo kalbų trejetuke. (Tai galite patikrinti apsilankę TIOBE svetainėje).
Kalba atsirado devintojo dešimtmečio pradžioje, kai „Bell Labs“ darbuotojas Björnas Stroustrupas savo poreikiams pateikė keletą C kalbos patobulinimų.

Bjarne Stroustrup – C++ kalbos kūrėjas

Stroustrup nusprendė išplėsti C kalbą su „Simula“ kalbos funkcijomis. C kalba, kuri yra pagrindinė UNIX sistemos kalba, kurioje veikė Bell kompiuteriai, yra greita, turtinga funkcijų ir nešiojama. Stroustrup pridėjo galimybę dirbti su klasėmis ir objektais. Dėl to praktinės modeliavimo problemos pasirodė esančios prieinamos tiek kūrimo laiko požiūriu (dėl simuliacinių klasių naudojimo), tiek skaičiavimo laiko (dėl C greičio).
Štai kaip sako pats kalbos kūrėjas:



1998 m. standartų komitetas paskelbė pirmąjį kalbos standartą, žinomą kaip C++98. C++ toliau tobulėja, kad atitiktų šiuolaikinius reikalavimus. Viena iš grupių, kuriančių C++ kalbą ir siunčiančių C++ standartizacijos komitetui pasiūlymus, kaip ją patobulinti. Padidinti, kuriame, be kita ko, siekiama pagerinti kalbos galimybes, pridedant prie jos metaprogramavimo funkcijas. Naujausias standartas buvo išleistas 2017 m. ir vadinamas C++17. Kitas standartas netruks laukti ir tikimasi, kad jis pasirodys 2020 m.
Niekas neturi teisių į C++ kalbą, ji nemokama. 2016 m. kovo mėn. Rusija įsikūrė darbo grupė WG21 C++. Grupė buvo suburta rinkti pasiūlymus dėl C++ standarto, teikti juos komitetui ir ginti Tarptautinės standartizacijos organizacijos visuotiniuose susirinkimuose.
C++ yra kelių paradigmų kalba (nuo žodžio paradigma – rašymo stilius kompiuterines programas), kuri apima daugybę skirtingų programavimo stilių ir technologijų. Ji dažnai vadinama objektu orientuota kalba, tačiau, griežtai tariant, taip nėra. Darbo procese kūrėjas įgyja absoliučią laisvę renkantis įrankius, kad vienu ar kitu būdu išspręsta problema būtų išspręsta kuo efektyviau. Kitaip tariant, C++ neverčia programuotojo laikytis tik vieno programos kūrimo stiliaus (pavyzdžiui, objektinio).
C++ turi turtingą standartinę biblioteką, kuri apima bendrus konteinerius ir algoritmus, I/O, reguliarios išraiškos, kelių gijų palaikymas ir kitos funkcijos. C++ padarė įtaką daugeliui programavimo kalbų, įskaitant: Java, C#, D. Kadangi C++ priklauso kalbų šeimai, pagrįstai C kalbos sintaksė, galima lengvai įsisavinti kitas šios šeimos programavimo kalbas: JavaScript. , PHP, Perl, Objective-C ir daugelis kitų. ir kt., įskaitant pačią pirminę kalbą – C. ()
Per jos egzistavimą C ++ kalboje įsitvirtino stabilūs mitai, kurie lengvai paneigiami (žr. čia: 1 dalis ir 2 dalis)

Kalbos istorija ir standartų išleidimas

1983

Kalbos kūrėjas – Bjornas Stroustrupas„Bell Labs“ pristatė ankstyvą C++ („C su klasėmis“) versiją.

1985

Pirmasis komercinis C++ leidimas, kalba įgauna modernų pavadinimą

1986

Išleistas pirmasis C++ programavimo kalbos, C++ knygos, kurią parašė Bjornas Stroustrup, leidimas.

1998

Ratifikuotas tarptautinis C++ kalbos standartas: ISO/IEC 14882:1998 „C++ programavimo kalbos standartas“

2003
2005

Išleista bibliotekos techninė ataskaita 1 (TR1). Nors oficialiai tai nėra standarto dalis, ataskaitoje aprašyti standartinės bibliotekos plėtiniai, kurie turėtų būti įtraukti kita versija C++ kalba

2011

Naujo standarto – C++11 arba ISO/IEC 14882:2011 išleidimas; naujas standartasįtraukti kalbos pagrindo papildymai ir standartinės bibliotekos plėtinys, įskaitant didžiąją dalį TR1

2014

C++14 standarto („Tarptautinis standartas ISO/IEC 14882:2014(E) programavimo kalba C++“) išleidimas; C++14 gali būti laikomas nedideliu C++11 plėtiniu, kuriame daugiausia yra klaidų pataisymų ir nedidelių patobulinimų.

2017

Naujojo standarto išleidimas yra C++1z (C++17). Šis standartas padarė daug pakeitimų ir papildymų. Pavyzdžiui, STD apėmė C11 standartines bibliotekas, Failų sistema, pagrįsta boost::filesystem, didele eksperimentinės TS I bibliotekos dalimi.

2020

C++20 yra neoficialus ISO/IEC standarto, skirto C++ programavimo kalbai, pavadinimas, kurio tikimasi po C++17. N4800 standarto projektas.

Filosofija C++

Knygoje The Design and Evolution of C++ (2007) Bjornas Stroustrup aprašo principus, kurių laikėsi kurdamas C++ (sutrumpintai):

  • Gaukite universalią kalbą su statiniais duomenų tipais, C efektyvumu ir perkeliamumu.
  • Tiesiogiai ir visapusiškai palaiko įvairius programavimo stilius.
  • Suteikite programuotojui pasirinkimo laisvę, net jei tai suteikia jam galimybę pasirinkti neteisingai.
  • Išsaugokite suderinamumą su C kiek įmanoma, kad būtų galima lengvai pereiti nuo programavimo prie C.
  • Venkite neatitikimų tarp C ir C++: bet kokia konstrukcija, galiojanti abiem kalbomis, turi reikšti tą patį kiekvienoje iš jų ir lemti tą patį programos elgesį.
  • Venkite funkcijų, kurios priklauso nuo platformos arba nėra universalios.
  • „Nemokėkite už tai, ko nenaudojate“ – jokia kalbos funkcija neturėtų pabloginti programų, kurios jos nenaudoja, našumo.
  • Nereikia pernelyg sudėtingos programavimo aplinkos.

C ir C++

C++ sintaksė yra paveldėta iš C kalbos. Nors formaliai vienas iš C++ principų išlieka suderinamumo su C kalba palaikymas, iš tikrųjų šių kalbų standartizacijos grupės nesąveikauja, o jos keičia padaryti ne tik nekoreliuoja, bet dažnai iš esmės prieštarauja vienas kitam ideologiškai. Taigi elementai, kuriuos naujieji C standartai prideda prie branduolio, yra C ++ standarto standartinės bibliotekos elementai ir paprastai jų branduolyje nėra, pavyzdžiui, dinaminiai masyvai, masyvai su fiksuotomis ribomis, lygiagrečios apdorojimo priemonės. Stroustrup mano, kad šių dviejų kalbų raidos derinimas būtų labai naudingas, tačiau vargu ar tai įmanoma dėl politinių priežasčių. Taigi praktinis C ir C++ suderinamumas palaipsniui bus prarastas.
AT šis pavyzdys, priklausomai nuo naudojamo kompiliatoriaus, bus išvesta „C++“ arba „C“:

Programa 9.1

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

Taip yra dėl to, kad C simbolių konstantos yra int tipo, o C++ – char tipo, tačiau šių tipų dydžiai skiriasi.

Taikymo gyvavimo ciklo modeliai

Gyvenimo ciklas programinė įranga yra laikotarpis, kuris prasideda nuo sprendimo dėl būtinybės kurti momento programinės įrangos produktas ir baigiasi jo visiško pašalinimo iš veiklos momentu. Šis ciklas yra programinės įrangos (SW) kūrimo ir kūrimo procesas. Yra keli modeliai gyvenimo ciklas.
Kaskadinis modelis gyvavimo ciklą (angliškas krioklio modelis) 1970 metais pasiūlė Winstonas Royce'as. Jame numatytas nuoseklus visų projekto etapų įgyvendinimas griežtai nustatyta tvarka. Perėjimas į kitą etapą reiškia visišką ankstesnio etapo darbo užbaigimą. Reikalavimai, apibrėžti reikalavimų generavimo etape, yra griežtai dokumentuojami formoje įgaliojimai ir yra fiksuoti projekto vykdymo laikotarpiui. Kiekvienas etapas baigiasi išleidimu pilna komplektacija pakankamai dokumentų, kad kūrimą galėtų tęsti kita kūrimo komanda.
Projekto etapai pagal krioklio modelį:

  1. Reikalavimų formavimas;
  2. Dizainas;
  3. Įgyvendinimas;
  4. Testavimas;
  5. įgyvendinimas;
  6. Eksploatavimas ir priežiūra.

Krioklio modelyje perėjimas iš vieno projekto etapo į kitą reiškia visišką ankstesnio etapo rezultato teisingumą. Dideliuose projektuose to pasiekti beveik neįmanoma. Todėl toks modelis tinka tik nedidelio projekto vystymui. (Pats W. Royce'as šio modelio nesilaikė ir naudojo iteracinį modelį).
Iteratyvus modelis
Alternatyva krioklio modeliui yra pasikartojančio ir laipsniško vystymosi modelis (IID), kurį aštuntajame dešimtmetyje gavo iš T. Gilb. evoliucinio modelio pavadinimas. IID modelis suskaido projekto gyvavimo ciklą į keletą iteracijų, kurių kiekviena primena „mini projektą“, įskaitant visus kūrimo procesus, taikomus kuriant mažesnius funkcionalumo elementus, palyginti su visu projektu. Kiekvienos iteracijos tikslas – gauti veikiančią programinės įrangos sistemos versiją, įskaitant funkcionalumą, apibrėžtą visų ankstesnių ir dabartinių iteracijų integruoto turinio. Galutinės iteracijos rezultate yra visos reikalingos gaminio funkcijos. Taigi, pasibaigus kiekvienai iteracijai, produktas padidina savo galimybes, todėl jos vystosi evoliuciškai.


Daugumoje šiuolaikinių kūrimo metodikų įgyvendinami įvairūs iteracinio požiūrio variantai:

Kūrimo procesas – racionalus vieningas procesas (RUP)

Racionalus vieningas procesas (RUP)(racionalus vieningas procesas) yra programinės įrangos kūrimo metodika, kurią prižiūri Rational Software (IBM). Metodikoje pateikiamos rekomendacijos visiems kūrimo etapams: nuo verslo modeliavimo iki baigtos programos testavimo ir paleidimo. Kaip modeliavimo kalba naudojama Unified Modeling Language (UML).
Visas produkto kūrimo gyvavimo ciklas susideda iš keturių fazių, kurių kiekviena apima vieną ar daugiau iteracijų.

  • Pradinis etapas (pradžia)
  • Projekto apimties ir reikalingų išteklių kiekio nustatymas. Nustatomi pagrindiniai gaminio reikalavimai, apribojimai ir pagrindinis funkcionalumas. Rizika įvertinama. Veiksmų planavimas. Pradinio etapo pabaigoje įvertinamas gyvavimo ciklo tikslo įvykis, o tai reiškia, kad suinteresuotosios šalys susitaria tęsti projektą.

  • Išdirbimas
  • Reikalavimų dokumentacija. Vykdomosios architektūros projektavimas, įgyvendinimas ir testavimas. Sąlygų ir kainos patikslinimas. Pagrindinių pavojų sumažinimas. Sėkmingas kūrimo etapo užbaigimas reiškia gyvenimo ciklo architektūros etapo pasiekimą.

  • Statyba
  • „Kūrimo“ fazėje įgyvendinama didžioji dalis gaminio funkcionalumo: užbaigiamas aplikacijos dizainas, šaltinis parašyta. Sukūrimo etapas baigiasi pirmąja išorine sistemos išleidimu ir pradinio veikimo pajėgumo etapais.

  • Diegimas (perėjimas)
  • „Įdiegimo“ fazėje sukuriama galutinė produkto versija ir perduodama iš kūrėjo klientui. Tai apima beta versijos testavimo programą, naudotojų švietimą ir produktų kokybės užtikrinimą. Jei kokybė neatitinka vartotojų lūkesčių ar Starto etape nustatytų kriterijų, Diegimo etapas kartojamas dar kartą. Pasiekti visus tikslus reiškia pasiekti gatavo produkto (Produkto išleidimo) etapą ir užbaigti visą kūrimo ciklą.



« Informacinės technologijos. Sistemų ir programinės įrangos inžinerija. Gyvavimo ciklo procesai programinės įrangos įrankiai» . Šį standartą priėmė Rusijos Federacijos Federalinė techninio reguliavimo ir metrologijos agentūra ir jis panašus į tarptautinį standartą ISO/IEC 12207:2008. Šis standartas, nustato bendrą programinės įrangos gyvavimo ciklo procesų sistemą, kuri gali būti naudojama kaip gairės programinės įrangos pramonėje. Standartas nesiūlo konkretus modelis gyvenimo ciklas. Jos nuostatos yra bendros visiems programinės įrangos gyvavimo ciklo modeliams, metodams ir technologijoms. Jame aprašoma gyvavimo ciklo procesų struktūra, nenurodant, kaip įgyvendinti ar atlikti į šiuos procesus įtrauktas veiklas ir užduotis.

Pamokos pristatymas
Pranešimų temos
  • Laisvosios programinės įrangos fondas (FSF)
  • Nemokama programinės įrangos licencija
  • Nemokama programinė įranga ir atvirasis šaltinis
  • Programavimo kalbų raidos istorija
  • C. C ir C++ istorija
  • Istorija
  • C++ kritika
  • UNIX istorija
  • Spiralinės programinės įrangos gyvavimo ciklo modelis
  • UML (angl. Unified Modeling Language – vieninga modeliavimo kalba)
  • „Microsoft Solutions Framework“.
  • IDE, skirtas C/C++ programavimui sistemoje Windows
  • C/C++ kompiliatoriai
  • Konsolės programos kūrimas sistemoje „Windows“.
Klausimai
  1. Kodėl krioklio programinės įrangos kūrimo modelis nenaudojamas dideliuose projektuose?
  2. Kuo skiriasi krioklio ir iteracinio vystymosi modeliai?
  3. Išvardykite programinės įrangos kūrimo etapus Rational Unified Process (RUP) metodikoje

Mokymasis C++ programavimo kalbos pagrindų ir subtilybių. Pamoka su praktines užduotis ir bandymai. Ar norite išmokti programuoti? Tada esate tinkamoje vietoje – čia nemokamas išsilavinimas programavimas. Nesvarbu, ar turite patirties, ar ne, šios programavimo pamokos padės jums pradėti kurti, kompiliuoti ir derinti C++ programas įvairiose kūrimo aplinkose: vizualinė studija, Code::Blocks, Xcode arba Eclipse.

Daug pavyzdžių ir išsamių paaiškinimų. Puikiai tinka tiek pradedantiesiems (manekenams), tiek pažengusiems. Viskas paaiškinama nuo nulio iki smulkiausių detalių. Šios pamokos (200+) suteiks jums gerą pagrindą / pagrindą suprasti programavimą ne tik C ++, bet ir kitomis programavimo kalbomis. Ir tai visiškai nemokama!

Tai taip pat apima nuoseklų žaidimo kūrimą C ++, SFML grafikos biblioteką ir daugiau nei 50 užduočių, kad patikrintumėte savo įgūdžius ir žinias C ++. Papildoma premija yra.

Už pakartotinį paskelbimą +20 karmai ir mano dėkingas!

Skyriaus numeris 0. Įvadas. Darbo pradžia

Skyriaus numeris 1. C++ pagrindai

Skyriaus numeris 2. Kintamieji ir pagrindiniai duomenų tipai C++

Skyriaus numeris 3. Operatoriai C++

Skyriaus numeris 4. Taikymo sritis ir kiti C++ kintamųjų tipai

Skyriaus numeris 5. Kodo vykdymo tvarka programoje. Kilpos, šakos C++ kalboje

C/C++ standartinėje bibliotekoje yra daug funkcijų, skirtų skaitymui ir rašymui į konsolę (klaviatūrą ir monitorių). Šios funkcijos nuskaito ir rašo duomenis kaip paprastą simbolių srautą.

Srauto (srauto) sąvoka, vartojama programuojant, glaudžiai susijusi su įprastu, kasdieniu šio žodžio supratimu. Įvesties srautą galima palyginti su vamzdžiu, kuriuo vanduo (informacija) patenka į baseiną (kompiuterio atmintį), išėjimo srautą – su vamzdžiu, kuriuo vanduo išeina iš baseino. Svarbi šio vamzdžio savybė yra ta, kad duomenys vienu metu gali judėti tik viena kryptimi. Net jei įvadui ir išleidimui naudojamas tas pats vamzdis, tai negali atsitikti vienu metu: norint perjungti srauto kryptį, reikia jį sustabdyti, atlikti kokį nors veiksmą ir tik tada nukreipti srautą priešinga kryptimi. Kitas upelio bruožas yra tai, kad jis beveik niekada neišdžiūsta. Kartais jis išdžiūsta, tačiau šis laikotarpis negali būti ilgas, jei sistema veikia normaliai.

printf() standartinė išvesties funkcija

Funkcija printf() yra standartinė išvesties funkcija. Naudodami šią funkciją, monitoriaus ekrane galite rodyti simbolių eilutę, skaičių, kintamąją reikšmę ...

Funkcija printf() turi prototipą stdio.h faile
int printf(char *control string, ...);

Jei pavyks, funkcija printf() grąžina išspausdintų simbolių skaičių.

Valdymo eilutėje yra dviejų tipų informacija: simboliai, kurie rodomi tiesiogiai ekrane, ir formato specifikacijos, nustatančios, kaip išvesti argumentus.

Funkcija printf() yra suformatuota išvesties funkcija. Tai reiškia, kad funkcijos parametruose būtina nurodyti išvedamų duomenų formatą. Duomenų formatą nurodo formato specifikatoriai. Formato specifikacija prasideda %, po kurio nurodomas formato kodas.

Formato specifikacijos:

%Su simbolis
%d sveikasis dešimtainis skaičius
%i sveikasis dešimtainis skaičius
%e dešimtainis skaičius formos x.xx e+xx
%E dešimtainis skaičius formos x.xx E+xx
%f
%F dešimtainis slankusis kablelis xx.xxxx
%g %f arba %e, atsižvelgiant į tai, kuris yra trumpesnis
%G %F arba %E, atsižvelgiant į tai, kuris yra trumpesnis
%o aštuntainis skaičius
%s simbolių eilutę
%u be ženklų dešimtainis skaičius
%x šešioliktainis skaičius
%X šešioliktainis skaičius
%% simbolis %
%p rodyklė
%n rodyklė

Be to, l ir h modifikatoriai gali būti taikomi formatavimo komandoms.

%ld spausdinti ilgai tarpt
%hu spausdinti trumpą nepasirašytą
%Lf spausdinti ilgą dvigubą

Formato specifikacijoje po simbolio % galima nurodyti tikslumą (skaitmenų skaičių po kablelio). Tikslumas nustatomas taip: %.n<код формата>. Kur n yra skaitmenų skaičius po kablelio, ir<код формата>- vienas iš aukščiau nurodytų kodų.

Pavyzdžiui, jei turime kintamąjį x=10.3563, kurio tipas yra float ir norime parodyti jo reikšmę 3 skaitmenų po kablelio tikslumu, tuomet turėtume parašyti:

printf("Kintamasis x = %.3f",x);

Rezultatas:
Kintamasis x = 10,356

Taip pat galite nurodyti minimalų spausdintinos paraštės plotį. Jei eilutė arba skaičius yra didesnis už nurodytą lauko plotį, tada eilutė arba skaičius išspausdinamas visas.

Pavyzdžiui, jei rašote:

printf("%5d",20);

tada rezultatas bus:
20

Atkreipkite dėmesį, kad skaičius 20 nebuvo atspausdintas nuo pat eilutės pradžios. Jei norite, kad nenaudojamos lauko vietos būtų užpildytos nuliais, prieš lauko plotį turite įdėti simbolį 0.

Pavyzdžiui:

printf("%05d",20);

Rezultatas:
00020

Be duomenų formato specifikacijų, valdymo eilutėje gali būti valdymo simbolių:

\b BS, dugnas
\f Naujas puslapis, puslapio vertimas
\n Nauja eilutė, eilutės tiekimas
\r Vežimo grąžinimas
\t Horizontalus skirtukas
\v Vertikalus skirtukas
\" dviguba citata
\" Apostrofas
\\ Pasvirasis brūkšnys
\0 Nulinis simbolis, nulinis baitas
\a Signalas
\N Aštuontainė konstanta
\xN Šešioliktainė konstanta
\? Klaustukas

Dažniausiai naudosite \n simbolį. Su šiuo valdymo simboliu galėsite pereiti į naują eilutę. Pažiūrėkite į programų pavyzdžius ir viską suprasite.

Programų pavyzdžiai.

/* 1 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
int a,b,c; // Reklama kintamieji a,b,c
a = 5;
b = 6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

Programos rezultatas:
a = 5, b = 6, c = 9

/* 2 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
plūduriuoti x,y,z;

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

Printf("Objekto koordinatės: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

Programos rezultatas:
Objekto koordinatės: x:10.50, y:130.67, z:54.00

/* 3 pavyzdys */
#įtraukti

negalioja pagrindinis ()
{
intx;

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

Programos rezultatas:
x=10

/* 4 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
printf("\"Tekstas kabutėse\"");
printf("\nDeguonies kiekis: 100%%");
}

Programos rezultatas:
"Tekstas kabutėse"
Deguonies kiekis: 100%

/* 5 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
int a;

A=11; // 11 dešimtainiu lygiu b šešioliktaine
printf("a-dec=%d, a-hex=%X",a,a);
}

Programos rezultatas:
a-dec=11, a-hex=b

/* 6 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
char ch1,ch2,ch3;

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

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

Programos rezultatas:
ABC

/* 7 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
char *str="Mano eilutė.";

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

Programos rezultatas:
Tai mano linija.

/* 8 pavyzdys */
#įtraukti

negalioja pagrindinis (negalioja)
{
printf("Sveiki!\n"); // Po spausdinimo bus nauja eilutė - \n
printf("Mano vardas Paulius."); // Tai bus atspausdinta naujoje eilutėje
}

Programos rezultatas:
Sveiki!
Mano vardas Pavelas.

Scanf() standartinė įvesties funkcija

Funkcija scanf() yra suformatuota įvesties funkcija. Su juo galite įvesti duomenis iš standartinio įvesties įrenginio (klaviatūros). Įvestis gali būti sveikieji skaičiai, slankaus kablelio skaičiai, simboliai, eilutės ir rodyklės.

Funkcija scanf() turi tokį prototipą stdio.h:
int scanf(char *control string);

Funkcija grąžina kintamųjų, kuriems buvo priskirta reikšmė, skaičių.

Valdymo eilutėje yra trijų rūšių simboliai: formato specifikacijos, tarpai ir kiti simboliai. Formato specifikacijos prasideda simboliu %.

Formato specifikacijos:

Įvedant eilutę naudojant scanf() funkciją (formato specifikacija %s), eilutė įvedama iki pirmo tarpo!! tie. jei įvesite eilutę "Sveikas pasaulis!" naudojant funkciją scanf().


scanf("%s",str);

tada įvedus gautą eilutę, kuri bus saugoma str masyve, sudarys vienas žodis „Labas“. FUNKCIJA ĮVEDA Į GRĄŽĄ IKI PIRMOSIOS ERDVĖS! Jei norite įvesti eilutes su tarpais, naudokite funkciją

char *gets(char *buf);

Naudodami funkciją gets () galite įvesti visas eilutes. Funkcija gets () nuskaito simbolius iš klaviatūros, kol pasirodo simbolis nauja linija(\n). Pats naujos eilutės simbolis pasirodo paspaudus klavišą Enter. Funkcija grąžina rodyklę į buf. buf - buferis (atmintis) įvesties eilutei.

Nors gets() nepatenka į šio straipsnio taikymo sritį, parašykime pavyzdinę programą, leidžiančią klaviatūra įvesti visą eilutę ir parodyti ją ekrane.

#įtraukti

negalioja pagrindinis (negalioja)
{
anglies buferis; // masyvas (buferis) įvesties eilutei

Gauna(buferis); // įveskite eilutę ir paspauskite enter
printf("%s",buferis); // išveda įvestą eilutę į ekraną
}

Dar viena svarbi pastaba! Norėdami įvesti duomenis naudodami funkciją scanf(), kaip parametrus turite perduoti kintamųjų adresus, o ne pačius kintamuosius. Norėdami gauti kintamojo adresą, prieš kintamojo pavadinimą įveskite & (ampersand). & ženklas reiškia adreso paėmimą.

Ką reiškia adresas? Pabandysiu paaiškinti. Programoje turime kintamąjį. Kintamasis išsaugo savo reikšmę kompiuterio atmintyje. Taigi adresas, kurį gauname su &, yra adresas kompiuterio atmintyje, kuriame saugoma kintamojo reikšmė.

Pažvelkime į programos pavyzdį, kuris parodo, kaip naudoti ir

#įtraukti

negalioja pagrindinis (negalioja)
{
intx;

Printf ("Įveskite kintamąjį x:");
scanf("%d",&x);
printf("Kintamasis x=%d",x);
}

Dabar grįžkime prie funkcijos scanf() valdymo linijos. Dar kartą:

int scanf(char *control string);

Tarpo simbolis valdymo eilutėje nurodo praleisti vieną ar daugiau tarpų įvesties sraute. Be tarpo, galima priimti tabuliavimo arba naujos eilutės simbolį. Ne nulis simbolis rodo, kad reikia perskaityti ir atmesti tą simbolį.

Skirtikliai tarp dviejų įvestų skaičių yra tarpo, tabuliavimo arba naujos eilutės simboliai. * po % ir prieš formato kodą (formato specifikaciją) nurodo nuskaityti nurodyto tipo duomenis, bet nepriskirti tos reikšmės.

Pavyzdžiui:

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

įvedus 50+20, i bus 50, j – 20, o + bus nuskaitytas ir ignoruojamas.

Formatavimo komanda gali nurodyti didžiausią nuskaityto lauko plotį.

Pavyzdžiui:

scanf("%5s",str);

nurodo nuskaityti pirmuosius 5 simbolius iš įvesties srauto. Jei įvesite 1234567890ABC, str masyve bus tik 12345, likusieji simboliai bus ignoruojami. Skirstytuvai: tarpas, tabuliavimas ir naujoji eilutė – įvedant simbolį jie traktuojami kaip ir visi kiti simboliai.

Jei valdymo eilutėje aptinkami kiti simboliai, jie skirti nustatyti ir praleisti atitinkamą simbolį. 10 plius 20 simbolių srautas pagal operatorių

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

x priskirs 10, y 20 ir praleis pliuso ženklus, nes jie atsiranda valdymo eilutėje.

Viena iš galingų funkcijos scanf() funkcijų yra galimybė nurodyti nuskaitymo rinkinį (scanset). Paieškos rinkinys apibrėžia simbolių rinkinį, su kuriuo bus lyginami Scanf() nuskaityti simboliai. Funkcija scanf() skaito simbolius tol, kol jie yra paieškos rinkinyje. Kai įvestas simbolis nerandamas paieškos rinkinyje, funkcija scanf() pereina prie kito formato specifikatoriaus. Paieškos rinkinys apibrėžiamas laužtiniuose skliaustuose įrašytų simbolių sąrašu. Prieš pradinį skliaustą yra % ženklas. Pažvelkime į tai su pavyzdžiu.

#įtraukti

negalioja pagrindinis (negalioja)
{
char str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
Įveskime simbolių rinkinį:
12345abcdefg456

Ekrane programa parodys:
12345
abcdefg456

Nurodydami paieškos rinkinį, taip pat galite naudoti brūkšnelį, kad nurodytumėte tarpus, taip pat didžiausią įvesties lauko plotį.

scanf("%10", str1);

Taip pat galite apibrėžti simbolius, kurių nėra paieškos rinkinyje. Prieš pirmąjį iš šių simbolių yra ^ ženklas. Simbolių rinkinys skiria mažąsias ir didžiąsias raides.

Priminsiu, kad naudojant funkciją scanf () kaip parametrus jai reikia perduoti kintamųjų adresus. Viršuje buvo parašyta kodas:

char str; // 80 simbolių masyvas
scanf("%s",str);

Atminkite, kad prieš str nėra &. Taip yra todėl, kad str yra masyvas, o masyvo pavadinimas str yra nuoroda į pirmąjį masyvo elementą. Todėl & ženklas nededamas. Mes jau perduodame adresą funkcijai scanf(). Na, paprasčiau tariant, str yra kompiuterio atmintyje esantis adresas, kuriame bus saugoma pirmojo masyvo elemento reikšmė.

Programų pavyzdžiai.

1 pavyzdys
Ši programa parodo užklausą „Kiek tau metų?:“ ir laukia įvesties. Jei, pavyzdžiui, įvesite skaičių 20, programa parodys eilutę „Jums 20 metų.“. Kai iškvietėme funkciją scanf(), amžiaus kintamąjį pažymėjome &, nes funkcijai scanf() reikia kintamųjų adresų. Funkcija scanf() įrašys įvestą reikšmę pagal nurodytu adresu. Mūsų atveju įvesta reikšmė 20 bus parašyta amžiaus kintamojo adresu.

/* 1 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
int amžius;

Printf("\nKiek tau metų?:");
scanf("%d",&amžius);
printf("Jums %d metų.", amžius);
}

2 pavyzdys
Skaičiuoklės programa. Šis skaičiuotuvas gali pridėti tik skaičius. Jei įvesite 100+34, programa grąžins rezultatą: 100+34=134.

/* 2 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
int x, y;

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

3 pavyzdys
Šiame pavyzdyje parodyta, kaip nustatyti skaitymo lauko plotį. Mūsų pavyzdyje lauko plotis yra penki simboliai. Jei įvesite eilutę su daugiau simbolių, visi simboliai po 5-ojo bus atmesti. Atkreipkite dėmesį į scanf() funkcijos iškvietimą. Ženklas & nėra prieš masyvo pavadinimo pavadinimą, nes masyvo pavadinimo pavadinimas yra pirmojo masyvo elemento adresas.

/* 3 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
charname;

Printf("\nĮveskite savo vartotojo vardą (daugiausia 5 simboliai):");
scanf("%5s", pavadinimas);
printf("\nĮvedėte %s", vardas);
}

4 pavyzdys
Paskutinis šio straipsnio pavyzdys parodo, kaip galite naudoti paieškos rinkinį. Paleidę programą įveskite skaičių nuo 2 iki 5.

/* 4 pavyzdys */

#įtraukti

negalioja pagrindinis (negalioja)
{
charbal;

Printf("Jūsų rezultatas yra 2,3,4,5:");
scanf("%", &bal);
printf("\nTautas %c", bal);
}

Kompiuteriai yra bene universaliausias žmonijos turimas įrankis. Jie sugeba atlikti neįtikėtinus skaičiavimus, leidžia saugoti puiki suma informacija, visiškai skirtingose ​​planetos vietose, ir tuo pat metu ja lengva keistis, nepriklausomai nuo vietos. Kompiuteriai viską palengvina kasdienes užduotis, ir jie leidžia automatizuoti daugybę įprastų procesų, kuriuos atlikti žmogui būtų labai varginantis ir nuobodus. Kompiuteriai gali padaryti tiek daug, bet vis tiek kompiuteriai nėra tokie protingi kaip žmonės. Norėdami automatizuoti net paprasčiausią procesą, turite aiškiai ir nedviprasmiškai pasakyti kompiuteriui, ką tiksliai jis turi daryti. Deja, mūsų kalba ir kompiuterių kalba visiškai skiriasi. Taigi tarp mašinos ir žmogaus atsiranda rimtas kalbos barjeras, kurį reikia kažkaip įveikti, kitaip kompiuteris mūsų nesupras. Ir nors kompiuteriai mūsų nesupranta, patys nieko nepadarys. Kaip ryšio tarp žmogaus ir kompiuterio priemonė buvo išrasta daugybė programavimo kalbų. Programavimo kalbų pagalba kuriame programas ir kompiuteris jau tiesiogiai dirba su programomis. Pačios programos yra instrukcijų rinkiniai, kuriuos kompiuteris gali suprasti ir vykdyti.

Programų tipai

Norint efektyviai bendrauti su kompiuteriu, būtent to ir norime, yra platus programavimo kalbų pasirinkimas.

Priklausomai nuo projekto tipo, renkantis programavimo kalbą reikia atsižvelgti į daugybę veiksnių. Čia yra labiausiai pastebimų veiksnių sąrašas:

Kompiliavimas, interpretavimas ir JIT kompiliavimas

Kompiliavimo procesas verčia programavimo kalba parašytą kodą į gimtąją tikslinės mašinos kalbą. Programa, kuri atlieka šį procesą, vadinama kompiliatoriumi. Kompiliuojant kodas gali būti paleistas gana greitai, ypač jei kompiliatorius efektyviai optimizuoja. Tačiau faktas yra tas, kad gautas kodas negali veikti įvairiuose Operacinės sistemos, o kompiliavimo procesas užtrunka šiek tiek laiko, ir kuo daugiau kodo, tuo ilgesnis kompiliavimo procesas. Verta atkreipti dėmesį, kad atliekant bet kokius programos kodo pakeitimus, būtina jį sukompiliuoti ir tik tada paleisti.

Interpretuojamas programavimo kalbas skaito programa, vadinama interpretatoriumi, ir vykdo ta pati programa. Interpretuojamos programavimo kalbos gali veikti skirtingose ​​operacinėse sistemose, pavyzdžiui, vertėjas, ir net neturi ilgo kompiliavimo laiko. Tačiau programos, parašytos interpretuojamomis kalbomis, paprastai yra daug lėtesnės nei lygiavertės, sukompiliuotos programos.

Ir galiausiai, vadinamasis „on-the-fly“ rinkinys (arba JIT rinkinys). Tokios kalbos greitai sukompiliuojamos, kai programa vykdoma. JIT kalbomis parašytos programos, kaip taisyklė, nėra optimizuotos, todėl paspartėja kompiliavimo procesas ir atkuriama našumo ir kelių platformų pusiausvyra.

Aukštas arba žemas programavimo lygis

Žemo lygio kalbos dažniausiai veikia tiesiogiai su aparatine įranga, todėl geriausiai tinka rašyti įrenginių tvarkykles. Tvarkyklės yra programos, kurios valdo aparatinę įrangą ir turi tiesioginę prieigą prie jos. Tačiau programą, parašytą žemo lygio kalba, paprastai sunku perkelti į kitas platformas. Todėl kiekvienai OS tas pats įrenginys turi skirtingas tvarkykles. Žemo lygio programavimo kalbos beveik visada kompiliuojamos.

Aukšto lygio kalbose pagrindinis dėmesys skiriamas kalbos sampratai. Tai reiškia, kad tokia programavimo kalba turėtų būti lengvai suprantama, pavyzdžiui, pateikti duomenis kaip masyvus, eilutes, objektus ir tt Aukšto lygio kalbą paprastai lengviau suprasti nei žemo lygio kalbą. Ir, kaip taisyklė, kurti programą aukšto lygio kalba yra daug lengviau ir greičiau nei žemo lygio kalba. Kaip matai skirtingi lygiai programavimo kalbos skirtos visiškai skirtingoms užduotims ir neverta lyginti kelių lygių kalbų funkcionalumo, tai beprasmiška.

Programavimo kalbų duomenų tipų sistemos

Kiekvienai programavimo kalbai yra specifikacija, apibrėžianti įvairias taisykles, kurių turi laikytis programavimo kalbos. Kai kurios kalbos neturi duomenų tipų, todėl joms tai netaikoma. Tačiau dauguma kalbų (įskaitant C++) turi duomenų tipus, todėl ši informacija jums bus naudinga.

Stipri arba silpna duomenų tipo sistema

Silpna įvesties sistema nekelia jokių apribojimų, programuotojas turi to laikytis. sakydamas " silpna sistema duomenys“ turiu galvoje, kad kalba su tokia duomenų sistema nereglamentuoja turimų duomenų tipų atvaizdų. Pavyzdžiui, jei daugybos funkcijai perduodama eilutė arba simbolis, o ne skaičius, nestipriai įvestos programavimo kalbos vykdys tokį kodą, nors daugybos rezultatas netenka jokios reikšmės, nes eilutės negalima padauginti iš numerį. Be to, šio beprasmio daugybos rezultatas bus nenuspėjamas. Jei programavimo kalba įvesta stipriai, kompiliavimo etape kompiliatorius praneš apie klaidą ir sustabdys projekto kūrimo procesą. Pavyzdžiui,

// C++ programos pavyzdys #include naudojant vardų sritį std; int main()( char string = "pavyzdys"; int skaičius = 5; cout<< string * number << endl; // умножаем строку на число }

Dėl to kompiliatorius praneš apie klaidą:

klaida: neteisingi operandai, kurių tipai yra „char“ ir „int“, į dvejetainį „operator*“

Tą patį pabandysime padaryti ir nestipriai spausdinama programavimo kalba – php. Atkreipkite dėmesį, kad net deklaruojant kintamuosius duomenų tipo nurodyti nereikia.

Šio kodo vykdymo rezultatas bus lygus nuliui. Klaida nebus, nors atrodytų, kad neįmanoma padauginti eilutės iš skaičiaus. Bet php viskas įmanoma. Php kalbos kompiliatorius nepraneš apie klaidą, scenarijus veiks ir net duos rezultatą, o jei mūsų programa susideda iš 1000 kodo eilučių, tai mums bus sunku rasti šią klaidą. Tai puikus programavimo kalbos su „silpno duomenų tipo sistema“ pavyzdys, tai yra, tokių absurdiškų operacijų prevencija visiškai gula ant programuotojo pečių.

Apibrėžtas arba neapibrėžtas duomenų tipas

Tai taikoma tiek kompiliuotoms, tiek interpretuotoms kalboms. Daugeliui kalbų reikalingas aiškus kintamųjų tipo apibrėžimas, todėl nėra neaiškumų, kompiliatorius ir vertėjas aiškiai žino, ką daryti. Kai kurios programavimo kalbos nereikalauja aiškiai apibrėžti kintamųjų tipo. Duomenų tipas nustatomas automatiškai pagal kintamojo turinį.

Statinis arba dinaminis duomenų tipas

Jei kalba įvedama statiškai, kompiliatorius / vertėjas kartą patikrina tipą prieš kompiliavimo / interpretavimo procesą. Jei duomenų tipas yra dinaminis, tada duomenų tipai tikrinami vykdymo metu.

Saugi arba nesaugi duomenų tipo sistema

Yra situacijų, kurios gali sukelti nenuspėjamą rezultatą arba klaidą. Saugi kalba įves kuo daugiau apribojimų, kad tokių situacijų nekiltų. Nors nesaugi kalba visa atsakomybė tenka programuotojui.

Šie veiksniai gali apibūdinti tiek vieną, tiek kelias programavimo kalbas.

Palaikomos programavimo paradigmos

Programavimo paradigmos yra metodologijos arba programavimo būdai, kuriuos palaiko programavimo kalba. Čia yra pagrindinių paradigmų sąrašas:

Deklaracinė paradigma

Deklaratyvi programavimo kalba daugiau dėmesio skirs tikslui, o ne priemonėms šiam tikslui pasiekti. Pakanka nurodyti, ko reikia pasiekti, nebūtina nurodyti, kokias priemones naudoti. Ši paradigma apsaugo nuo nepageidaujamo šalutinio poveikio, kuris gali atsirasti rašant savo kodą.

Funkcinė paradigma

Funkcinis programavimas yra deklaratyvaus programavimo poaibis, kuriuo bandoma išspręsti problemas matematinių lygčių ir funkcijų prasme. Funkcinis programavimas kintamuosius ir objektus traktuoja kaip duomenis, kurie nėra bendrinami, skirtingai nei privalomose kalbose.

Apibendrinta paradigma

Bendrasis programavimas daugiausia dėmesio skiria algoritmų rašymui pagal duomenų tipus, kuriuos reikia apibrėžti. Tai yra, tas pats algoritmas gali veikti su skirtingų tipų duomenimis. Šis metodas gali būti labai galingas įrankis, tačiau tik tuo atveju, jei jis tinkamai įgyvendintas.

imperatyvioji paradigma

Privalomos kalbos leidžia programuotojams pateikti kompiuteriui sutvarkytą instrukcijų, reikalingų užduočiai atlikti, sąrašą. Imperatyvios programavimo kalbos prieštarauja deklaratyviosioms programavimo kalboms.

Struktūrinė paradigma

Struktūrinio programavimo kalbomis siekiama pateikti tam tikrą kodo formą - hierarchinę struktūrą. Kai aiškiai matoma kodo struktūra, teiginių vykdymo tvarka tampa intuityvi. Tokios kalbos paprastai susiraukia „šokinėdami“ nuo vieno kodo prie kito, pavyzdžiui, gerai žinomas operatorius goto, kuris yra apibrėžtas C ir C++.

procedūrinė paradigma

Procedūrinė programavimo kalba reiškia struktūrizuotą programavimo kalbą, kuri palaiko procedūros arba paprogramės koncepciją.

Objektinė paradigma

Objektinis programavimas (kartais sutrumpintas kaip OOP) yra struktūrinio programavimo poaibis, išreiškiantis programas „objektais“. Ši paradigma leidžia pakartotinai naudoti kodą ir yra lengvai suprantama.

Standartizavimas

Ar kalbos turi oficialų standartą? Standartizavimas yra labai svarbus siekiant užtikrinti, kad skirtingi kompiliatoriai / vertėjai suprastų programą be konfliktų. Kai kurias kalbas standartizuoja Amerikos nacionalinis standartų institutas (ANSI), kitas – Tarptautinė standartizacijos organizacija (ISO). Visos programavimo kalbos turi būti standartizuotos, kitaip sintaksėje nebus įmanoma susitarti, kas teisinga, o kas ne.

Apibūdinkime C++ programavimo kalbą

Dabar, kai pažvelgėme į pagrindines programavimo kalbų charakteristikas, išsiaiškinkime, kokius veiksnius tenkina C++ programavimo kalba.

C++ yra ISO standartizuota programavimo kalba.

Kurį laiką C++ neturėjo oficialaus standarto, tačiau nuo 1998 metų C++ standartizuoja ISO komitetas.

C++ kompiliuota kalba.

C++ kompiliuoja tiesiai į mašininį kodą, todėl tai yra viena greičiausių kalbų pasaulyje.

C++ yra stipriai spausdinama kalba.

C++ reiškia, kad programuotojas žino, ką daro, ir suteikia neįtikėtinai daug galimybių, kurias riboja tik vaizduotė.

C++ palaiko statinius ir dinaminius duomenų tipus.

Taigi duomenų tipo tikrinimas gali būti atliekamas kompiliavimo metu arba vykdymo metu. Ir tai dar kartą įrodo C ++ lankstumą.

C++ palaiko daugybę paradigmų.

C++, be daugelio kitų paradigmų, palaiko procedūrines, bendrąsias ir į objektą orientuotas programavimo paradigmas.

C++ yra nešiojama programavimo kalba.

Kaip viena iš labiausiai naudojamų kalbų pasaulyje ir kaip atvira kalba, C++ turi platų kompiliatorių asortimentą, kuris veikia įvairiose platformose. C++ standartinis bibliotekos kodas veiks daugelyje platformų.

C++ yra visiškai suderinamas su C kalba

C++ galite naudoti C bibliotekas ir jos veiks tinkamai.