Uvod u programski jezik C. Programiranje u C (C) na Ubuntu (Linux)

Sve radnje u operacijskom sustavu izvode se pomoću programa, tako da su mnogi početnici zainteresirani ne samo za korištenje tuđih programa, već i za pisanje vlastitih. Mnogi ljudi žele pridonijeti OpenSource kodnoj bazi.

Ovo je pregledni članak o programiranju za Linux. Pogledat ćemo koji se jezici najčešće koriste, pogledati osnovne koncepte, kao i mogućnosti, te shvatiti kako pisati najjednostavniji program u jednom od najpopularnijih programskih jezika, kako ga ručno izraditi i pokrenuti.

Povijesno gledano, Unix kernel je napisan u C-u. Štoviše, ovaj jezik je stvoren za pisanje Unix kernela. Budući da je Linux kernel bio temeljen na Minix kernelu ( Unix verzije), tada je također napisano u C. Stoga možemo reći da je glavni programski jezik za Linux C i C++. Taj se trend nastavio još dugo.

Općenito, programe za Linux možete pisati na gotovo svim jezicima, od Jave i Pythona do C#, pa čak i Pascala. Svi jezici imaju prevoditelje i tumače. Pisanje programa u C++ je teško, a C mnogi smatraju zastarjelim, pa mnogi programeri koriste druge jezike za pisanje programa. Na primjer, mnogi sistemski alati napisani su u Pythonu ili Perlu. Većina programa iz Linux Mint tima, Ubuntu instalacijski program i neke apt skripte napisani su u Pythonu. Mnoge skripte, uključujući jednostavne optimizacijske skripte, napisane su u Perlu. Ruby se ponekad koristi za skriptiranje. To su OpenShift skripte ili, na primjer, Metasploit framework. Neki programeri programa za više platformi koriste Javu. Ali glavne komponente sustava i dalje su napisane u C-u.

U ovom članku nećemo obraditi osnove C-a. C je težak jezik i morat ćete pročitati barem jednu knjigu i puno vježbati da biste ga savladali. Pogledat ćemo kako napisati C programe na Linuxu, kako ih prevesti i pokrenuti.

Zašto naučiti C:

2. Knjižnice

Naravno, ako trebate prikazati niz ili sliku na zaslonu, nećete izravno pristupiti video kartici. Jednostavno pozovete nekoliko funkcija koje su već implementirane u sustav i proslijedite im podatke koje želite prikazati. Takve se funkcije nalaze u knjižnicama. Zapravo, knjižnice su zbirke funkcija koje koriste drugi programi. Sadrže isti kod kao i u drugim programima, jedina je razlika u tome što ne mora nužno postojati funkcija inicijalizacije.

Knjižnice se dijele na dvije vrste:

  • Statički- pridružene su programu u fazi kompilacije, pridružene su i nakon toga su sve funkcije knjižnice dostupne u programu kao izvorne. Takve biblioteke imaju nastavak .a;
  • Dinamičan- takve su biblioteke mnogo češće; učitavaju se u RAM i dinamički povezuju sa softverom. Kada program treba biblioteku, jednostavno je pozove na poznatu adresu RAM memorija. Ovo štedi memoriju. Proširenje ovih biblioteka je .so, što dolazi iz Shared Object.

Dakle, za svaki C program trebate uključiti biblioteke, a svi programi koriste neku vrstu biblioteka. Također je važno napomenuti da bez obzira na kojem jeziku odlučite pisati, na kraju će se sve svesti na biblioteke C sustava. Na primjer, napišete program u Pythonu, koristite standardne značajke ovog jezika, a sam tumač već je C/C++ program koji koristi sistemske biblioteke za pristup glavnim značajkama. Stoga je važno razumjeti kako C programi rade. Naravno, postoje jezici, poput Goa, koji se odmah prevode u asembler, ali tamo se koriste isti principi kao i ovdje. Osim toga, programiranje Linux sustava je uglavnom C ili C++.

3. Proces izgradnje programa

Prije nego što prijeđemo na praksu i stvorimo svoj prvi program, moramo razumjeti kako se odvija proces sklapanja i od kojih se faza sastoji.

Svaki ozbiljan program sastoji se od mnogo datoteka, to su izvorne datoteke s nastavkom .c i datoteke zaglavlja s nastavkom .h. Takve datoteke zaglavlja sadrže funkcije koje su uvezene u program iz biblioteka ili drugih datoteka.c. Prije. Kako kompilator može izgraditi program i pripremiti ga za rad, treba provjeriti jesu li sve funkcije stvarno implementirane, jesu li sve statičke biblioteke dostupne i sastaviti ga u jednu datoteku. Stoga je prvi korak pokretanje predprocesora koji sastavlja izvornu datoteku, izvršavajući naredbe kao što je uključivanje da uključi kod datoteka zaglavlja.

U sljedećoj fazi počinje raditi prevodilac, izvodi sve potrebne radnje na kodu, analizira sintaktičke strukture jezika, varijable i sve to pretvara u međukod, a zatim u kod strojnih instrukcija, koje potom možemo pogledajte u asemblerskom jeziku. Program u ovoj fazi naziva se objektni modul i još nije spreman za izvođenje.

Zatim, povezivač počinje raditi. Njegov zadatak je povezati objektni modul sa statičkim bibliotekama i drugim objektnim modulima. Za svaku izvornu datoteku kreira se zaseban objektni modul. Tek sada se program može pokrenuti.

Sada, pogledajmo cijeli ovaj proces u praksi koristeći GCC kompajler.

4. Kako izgraditi program

Postoje dvije vrste prevoditelja koji se koriste za prevođenje programa u Linuxu: . Do sada je GCC češći, pa ćemo ga razmotriti. Obično je program već instaliran na vašem sustavu, ali ako nije, možete ga instalirati na Ubuntu:

sudo apt instalirajte gcc

Prije nego što prijeđemo na pisanje i sastavljanje programa, pogledajmo opcije sintakse i prevoditelja:

$gcc opcije izvorna_datoteka_1.c -o gotova_datoteka

Pomoću opcija kažemo uslužnom programu što da radi, koje biblioteke da koristi, a zatim jednostavno navedemo izvorne datoteke programa. Pogledajmo opcije koje ćemo danas koristiti:

  • -o- zapisati rezultat u datoteku za izlaz;
  • -c- stvoriti objektnu datoteku;
  • -x- odredite vrstu datoteke;
  • -l- učitavanje statičke knjižnice.

Zapravo, ovo je sve najosnovnije što nam treba. Kreirajmo sada naš prvi program. Prikazat će redak teksta na ekranu i, kako bi bilo zanimljivije, izračunati kvadratni korijen broja 9. Ovo je izvorni kod:

uključiti
#uključi

int main())(
printf("web stranica\n");
printf("Korijen: %f\n", sqrt(9));
povratak 0;
}

gcc -c program.c -o program.o

Ovo je faza kompilacije, ako nema pogrešaka u programu, tada će biti uspješan. Ako postoji nekoliko izvornih datoteka, ova naredba se izvršava za svaku od njih. Zatim izvodimo povezivanje:

gcc -lm program.o -o program

Obratite pozornost na opciju -l, njome označavamo koje biblioteke treba uključiti, npr. ovdje uključujemo biblioteku matematičke funkcije, inače povezivač jednostavno neće pronaći gdje postoji ova ili ona funkcija. Tek nakon toga možete pokrenuti program na izvršenje:

Naravno, sve ove radnje mogu se izvesti pomoću različitih grafičkih okruženja, ali radeći sve ručno, možete bolje razumjeti kako sve funkcionira. Pomoću naredbe ldd možete vidjeti koje biblioteke naš program koristi:

Ovo su dvije biblioteke za učitavanje, standardna libc i libm, koje smo uključili.

5. Automatizacija montaže

Kada govorimo o programiranju pod Linuxom, nemoguće je ne spomenuti sustav za automatizirano sklapanje programa. Poanta je da kada postoji mnogo izvornih datoteka za program, nećete ručno unositi naredbe za njihovo kompajliranje. Možete ih snimiti jednom i zatim koristiti posvuda. U tu svrhu postoji uslužni program make i Makefiles. Ova se datoteka sastoji od ciljeva i ima sljedeću sintaksu:

cilj: ovisnosti
tim

Ciljna ovisnost može biti datoteka ili drugi cilj, glavni cilj je sve, a naredba izvodi potrebne radnje izgradnje. Na primjer, za naš program Makefile može izgledati ovako:

program: program.o
gcc -lm program.o -o program

program.o: program.c
gcc -c program.c -o program.o

Zatim samo trebate pokrenuti naredbu make za početak kompilacije, samo ne zaboravite izbrisati prethodne privremene datoteke i kompajlirani program:

Program je ponovno spreman i možete ga pokrenuti.

zaključke

Stvaranje Linux programa vrlo je zanimljivo i uzbudljivo. Vidjet ćete i sami kad se malo naviknete na ovu materiju. Teško je pokriti sve u tako kratkom članku, ali mi smo pokrili same osnove i oni bi vam trebali dati osnove. U ovom smo članku pogledali osnove programiranja u Linuxu, ako imate bilo kakvih pitanja, pitajte u komentarima!

Tečaj C programiranja za Linux:

Već sam pisao o tome kako instalirati punopravni SI i C++ kompajler na Windows u članku:.

Ali ti su jezici višeplatformski i mnogi ljudi koriste Linux ne samo kao kućni sustav, već i kao radni alat. Osim toga, postotak korisnika Linuxa nedavno je porastao. A mnogi od njih žele naučiti programirati. Stoga ću vam danas reći kako instalirati C i C++ kompajler na Linux sustav.


Ako koristite Windows, ali želite isprobati Linux, pogledajte moje članke o virtualnom radnom stroju:.

Dakle, Linux je instaliran, Internet je povezan. Otvorite konzolu i unesite naredbu za instaliranje prevoditelja.
$sudo apt-get install gcc g++

To je sve, kompajleri su instalirani. Sada preostaje samo provjeriti.
Idite u svoju početnu mapu i kreirajte datoteku hello.c, otvorite je i napišite jednostavan program:

#include main() ( printf("Zdravo\n"); )

Zatim otvorite konzolu i prevedite skriptu u program:
$gcc zdravo.c ​​-o zdravo

To je to, pozdravni program bi se trebao pojaviti u mapi. Sada ga pokrenimo.
$./zdravo

Ali programirati u običnom notepadu i kompajlirati u konzoli posebna je perverzija. Treba nam koliko-toliko normalan IDE za programiranje u C i C++ s ugrađenim kompajlerom.

Ako ste pročitali moj članak, onda razumijete o čemu govorim. Da, instalirat ćemo Geany. To je izvrsno razvojno okruženje za mnoge jezike. Pisanje konzolnih programa u njemu je zadovoljstvo.
Otvorite konzolu i napišite:
$sudo apt-get install geany

Slažemo se s instalacijom i čekamo da završi. Zatim pokrećemo program.

U njoj otvorimo istu datoteku hello.c i malo je modificiramo, a zatim kliknemo na gumb koji izgleda kao cigla “Prikupi trenutna datoteka" i pokrenite crveni gumb "Pogledaj ili pokreni trenutnu datoteku". I vidjet ćemo prozor konzole s rezultatom.

Pješčanik

Barack Adama 15. ožujka 2014. u 13.20 sati.

C++ obuka. Što ako počnete na Linuxu?

Vri se!

U sadašnjem školskom obrazovnom sustavu, oštrenje pod operacijski sustav Microsoft je nevjerojatan: uz vrlo rijetke iznimke, negdje možete vidjeti nešto poput Edubuntua ili ruskog ALT Linuxa, ali inače je Windows. Po meni je krajnje vrijeme da škole upoznaju djecu s drugačijim pogledom na to što bi trebalo biti sučelje između čovjeka i hardvera, a ne da traže zajedničke putove. Možda će upravo taj usporedni analitički pogled na stvari omogućiti podizanje iznimno niske razine informatička pismenost od maturanata koji ne znaju ni oblikovati tekst u Wordu ili napraviti dobru prezentaciju u PowerPointu.

Iskreno je iznenađujuće da se u školama smatra izuzetno složenim, pa čak i mističnim sastavljanje dvodimenzionalnih nizova u istom Pascalu, za koji je, usput rečeno, krajnje vrijeme da se zamijeni fleksibilnijim i praktičnijim Pythonom ili JavaScriptom. Dragi učitelji, koja bi trebala biti motivacija učenika ako predaje na mrtvom jeziku? Da bismo učvrstili gramatička pravila, ne učimo prvo slavenski, pa ruski i ostale. Pa što dovraga?!

S obzirom na pomodnost programerske profesije i određenu romantiku u glavama mladih ljudi, inspirirani holivudskim filmovima, ljudi upisuju sveučilišta i suočavaju se s nizom poteškoća: glava im se počinje naglo širiti, što neizbježno dovodi do umora, a zatim na razočaranje u svom izboru. Činjenica ostaje: ako se povezujete s profesijom koja zahtijeva stalno samousavršavanje, počnite to raditi i prije nego što uđete. Postoji mnogo materijala koji će vam pomoći da budete spremniji tijekom studija i omogućit će vam da pronađete posao u svojoj specijalnosti do 3.-4. godine studija. Potez!

U pozadini takvog razmišljanja, netko mi je došao da napravim mali vodič o tome kako napisati, prevesti i pokrenuti program u C++ na Linuxu bez posebna sredstva(IDE). Ovaj pristup moći će programera početnika upoznati s procesom razvoja u najtrivijalnijem obliku, kao i s temeljno novim operativnim sustavom za njega. Linux sustav. Na kraju svog habraposta napisat ću popis referenci i korisnih poveznica.

Počnimo s onim što nam je potrebno:
-Linux distribucija (uzmimo Ubuntu);
-Instaliran g++ prevodilac;
-Obični uređivač teksta (gedit);
-Terminal;

Ići!

1. Instalacija Linuxa i potrebnog softvera.
Preuzmite sliku distribucije Linux Ubuntu sa službene web stranice ubuntu.ru. Također bih želio dodati da ne preporučujem korištenje Wubija. Radimo normalnu montažu ili na našu HDD, bilo u virtualni stroj. Snimamo od koristeći Nero ili ImgBurn sliku na disk. Ponovno se pokrećemo i ulazimo u BIOS, gdje moramo postaviti prioritet pokretanja s CD/DVD pogona. Spremite postavke i izađite. Pokrenite sustav s diska i instalirajte operativni sustav. (Više detaljne informacije bit će na poveznici ispod). Uređivač teksta, imamo terminal prema zadanim postavkama. Kako biste instalirali g++ kompajler, otvorite terminal kombinacijom alt+ctrl+T i unesite: sudo apt-get install g++. Od nas će se tražiti da unesemo lozinku, unesite je i pritisnite Enter. Spreman.
2. Napravite cpp datoteku.
Otvorite svoju početnu mapu upravitelj datoteka Nautilus i istovremeno otvorite terminal alt+ctrl+t. U njega upisujemo naredbu touch helloworld.cpp. Naredba dodir stvorit će datoteku s imenom koje želite. Sada možete minimizirati terminal i fokusirati se na Nautilus"e. Otvorite našu datoteku i napišite najpopularniji kod na svijetu:

#uključi korištenje imenskog prostora std; int main())( cout<< "Hello world!"; return 0; }

Zatvori i spremi.

3.Kompilacija i pokretanje.
Ponovno otvorite terminal i pozovite naš kompajler naredbom g++ -lm -o output helloworld.cpp . g++ je sam naš prevodilac, a -lm i -o su ključni parametri s kojima ga pokrećemo. izlaz - ima izlaznu datoteku gdje se nalazi rezultat naše kompilacije i iza koje slijedi naziv naše cpp datoteke. Pritisnite enter, ako je program ispravan, tada neće biti poruka. Sada, da biste pokrenuli program, unesite sljedeće u terminal: ./output i pritisnite enter. Na zaslonu se prikazuje rezultat "Hello world!".
Dakle, napisali ste svoj prvi C++ program za Linux! Čestitam vam i želim uspjeh u raznovrsnom i kvalitetnom obrazovanju. Vaša je kompetencija u vašim rukama, zapamtite ovo.

p.s. Ako barem jedan učenik učini ono što sam napisao, smatrat ću da je moja misija završena. Sve najbolje!
P.S.S. Linkovi.

Mnogi programeri početnici se boje
programiranje u Linuxu - nema Windows jednostavnosti
i vidljivost. Međutim, postoji i za Linux
puno vizualnih pomagala
programiranje, a to nije samo klon Delphija.
Naravno, oni ne mogu postati potpuni
zamjenjujući isti Visual Studio, ali prilično
pomoći ubrzati razvojni proces
programa.

NetBeans

Jedan od najboljih IDE-a. Namijenjen za
radeći s Javom, možete je koristiti
razvijati ne samo više platformi
Java programi, ali i web aplikacije, web servisi i
klijenti za njih, J2ME programi itd. Može biti
rad na Windows, Linux, MacOS. IDE je proširiv
razne dodatke i dodatke, koji mogu biti
pronaći na web stranici. U isto vrijeme, sve je besplatno, dakle
jedi za hajalvu! Općenito - neosporan broj
jedan.

QT/KDevelop dizajner

Još jedno snažno razvojno okruženje na
platformi KDE i Gnome. Višeplatformski C++
prijave izlaze samo na cestu. Za
nekomercijalni Qt programi mogu biti
slobodan za korištenje, postoji
za gotovo sve distribucije.

Visual Basic klon, i to ne samo u dizajnu,
ali i u jezičnim konstrukcijama. Savršen
alat za VB programere koji žele
prijeći na Linux. Jednostavno i praktično sučelje.
Pristup svim glavnim bazama podataka - MySQL,
PostgreSQL itd. Djeluje na gotovo svakoga
distribucije.

WYSIWYG editor za izradu web stranica. U
Dosta me podsjeća na Macromedia editor ili sve
isti FrontPage. Podržava automatski
rad sa web mjestom putem FTP-a.

Izrada Python i Ruby IDE okruženja
programiranje u jeziku je prilično jednostavno
i uzbudljivo. Napisano zapravo na
Piton.

Eclipse uopće nije IDE, već cijela platforma za
razne aplikacije. Prema standardu
isporuka uključuje dodatne dodatke za
Podrška za Java jezik (JDT) i razvoj
dodaci za Eclipse (PDE - Plugin Development Environment). Za
rad s drugim jezicima bi trebao biti
instalirani posebni dodaci - u Eclipse
može raditi na gotovo svakom
pristupačan programski jezik. Još
prednost se također odnosi na
proširivost: ogromna količina
pomoćne programe (posebno za Javu) sada
također dostupni kao dodaci za Eclipse,
na primjer Ant, JavaDoc, JUnit, JDepend, Check Style, Subversion.
Dakle, ne moramo odustati
vaš sustav kontrole verzija, od vašeg
programi za provjeru kvalitete koda itd.
Treća prednost je što je Eclipse
višeplatformsko okruženje, tj
postoje verzije za različite
operativni sustavi (koji ne mogu
priuštiti isti Visual Studio).

JDeveloper

Platforma iz Oraclea - nije otvorenog koda,
međutim, još uvijek je besplatan. Kao što je jasno iz
imena se još uvijek koriste na različitim platformama
Java. Koristi Sun JDK za rad, dakle
Oracle nema pritužbi na ono što se stvara
programi, u teoriji, neće imati.

I konačno, okruženje vizualne kontrole
projekti za Gnome Desktop. Ništa manje korisno
program za programere nego IDE.

Ime: Programiranje u C++ na Linuxu.

Knjiga "Programiranje u C++ na Linuxu" posvećena je razvoju aplikacija u C++ u razvojnom okruženju KDEvelop. Autor knjige daje detaljan opis interakcija između komponenti aplikacije, pokriva osnove rada s uslužnim programom Qt Designer i raspravlja o kontrolama dijaloškog okvira i klasama za koje su stvorene. Knjiga podučava koncept Document/View, stvarajući elemente sučelja aplikacije. Obuhvaćene su i teme kao što su spremanje i vraćanje raznih informacija prikazanih na ekranu, razvoj uređivača teksta, organiziranje višezadaćnosti u aplikacijama na temelju međudjelovanja procesa i rad s predlošcima klasa i funkcija. Kao zaključak, autor daje korisne preporuke za izradu sustava pomoći za razvijenu aplikaciju. Knjiga je namijenjena profesionalnim programerima.


Knjiga je posvećena izradi aplikacija napisanih u C++ u razvojnom okruženju KDevelop. Dat je opis interakcije komponenti aplikacije. Razmatramo rad s uslužnim programom Qt Designer i opisujemo glavne kontrole koje se koriste u dijaloškim okvirima, kao i klase stvorene za rad s njima. Čitatelj se upoznaje s konceptom Document/View i uči kako izraditi elemente korisničkog sučelja aplikacije. Osim toga, pojedina poglavlja pokrivaju problematiku prikaza različitih informacija na ekranu, njihovo spremanje i vraćanje iz datoteke, kreiranje uređivača teksta, rad s predlošcima klasa i funkcija te organiziranje višezadaćnosti u aplikaciji na temelju međudjelovanja procesa. Na kraju, dane su preporuke za izradu sustava pomoći za aplikacije.

Sadržaj:
Uvod
Za koga je ova knjiga?
Struktura knjige
Konvencije usvojene u ovoj knjizi
Hardverski i softverski zahtjevi
Poglavlje 1 Interakcija komponenti aplikacije
Signali i prijemnici
Slanje signala
Implementacija prijemnika
Provedba veze
Rukovanje događajima
Rad s prozorom
Rad s fokusom unosa
Korištenje miša
Korištenje tipkovnice
Implementacija drag and drop
Filtri događaja
Sintetički događaji
Redoslijed obrade događaja
Zaključak
2. Poglavlje Dijaloški okviri i osnovne kontrole
Izrada aplikacije za razgovor
Izrada predloška aplikacije
Stvaranje unaprijed postavljenog dijaloškog okvira
Dovršavanje izrade konverzacijske aplikacije
Stvaranje prilagođenih dijaloških okvira
Stvaranje dijaloškog okvira s karticama
Stvaranje čarobnjaka
Poglavlje 3 Kontrolni razredi
Lista klasa
Klase linearnog regulatora i linearnog indikatora
Rad s datumom i vremenom
Poglavlje 4 Klase aplikacija, dokumenata i prikaza
Qt aplikacija s više prozora
Klasa dokumenta
Prezentacijski sat
Klasa primjene
KDE aplikacija s više prozora
Klasa dokumenta
Prezentacijski sat
Klasa primjene
5. poglavlje Izrada elemenata korisničkog sučelja
Korisničko sučelje Qt knjižnice
Izmjene u jelovniku
Rad sa statusnom trakom
Korisničko sučelje KDE aplikacija
Izmjene u jelovniku
Prilagodba alatne trake
Rad sa statusnom trakom
Poglavlje 6 Prikaz informacija na ekranu
Crtanje figura
Rad s kistom
Ponovno crtanje prozora
Sinkroniziranje objekata prikaza
Izlaz teksta
Rad s bitmapama
Bitmape ovisne o uređaju
Bitne slike neovisne o hardveru
Poglavlje 1 Rad s datotekama dokumenata
Spremanje i obnavljanje informacija u aplikaciji
Prilagodba dijaloških okvira
Izmjene u jelovniku
Postavljanje radnog imenika
Poglavlje 8 Rad s tekstualnim dokumentima
Izrada jednostavnog uređivača teksta
Stvaranje složenijeg uređivača
Stvaranje KDE uređivača
Poglavlje 9 Predlošci zbirke i klase
Predlošci
Koncept predloška
Predlošci funkcija
Predlošci razreda
Sabirni razredi
Vrste zbirnih klasa
Nizovi
Povezane liste
Karte
Ostali razredi zbirke
Poglavlje 10 Implementacija višezadaćnosti u aplikaciji
Interakcija procesa
Izrada klijenta za jednostavan poslužitelj
Stvaranje složenijeg poslužitelja
Stvaranje klijenta
Neke bilješke
Poglavlje 11 Pomoć unutar aplikacije
Obrasci za dostavljanje referentnih podataka
Načini pristupa pomoći
Metode prezentiranja referentnih informacija
Oblici dostave informacija
Pomoć za kontekst programiranja
Prikaz savjeta
Prikaz informacija za pomoć u statusnoj traci
Dobivanje informacija o određenom elementu
korisničko sučelje
Pomoć za naredbe Programiranje
Format datoteke pomoći za naredbe Qt aplikacije
Izrada demo Qt aplikacije
Dodatak 1 Što se nalazi na CD-u
Dodatak 2 Internetski resursi
Indeks predmeta


Besplatno preuzmite e-knjigu u prikladnom formatu, gledajte i čitajte:
Preuzmite knjigu Programiranje u C++ na Linuxu - Nikolay Sekunov - fileskachat.com, brzo i besplatno preuzimanje.

Preuzmite pdf
U nastavku možete kupiti ovu knjigu po najpovoljnijoj cijeni uz popust s dostavom u cijeloj Rusiji.