C - opšta diskusija

C je programski jezik opšte namene, dizajniran za pisanje UNIX operativnog sistema i UNIX softvera. UNIX je prvi operativni sistem pisan u programskom jeziku višeg nivoa (dakle ne u mašinskom kodu i ne u asembleru) i to mnogo godina pre nego što je asembler prestao da se koristi za mnogo manje ozbiljne zadatke. To je bila svojevrsna revolucija, naravno, al o tome drugom prilikom :))

Zbog svoje namene, C je napisan tako da bude vrlo jednostavan (sa mašinske tačke gledišta) i blizak asemblerskom kodu, kako bi se olakšali njegovo prevođenje i optimizacija, pa je po performansama u nivou sa asemblerskim kodom, iako je 30 puta lakši za rad. C je zbog svojih kvaliteta odavno prestao da se koristi isključivo za UNIX programiranje i mislim da se slobodno može reći da je najznačajniji programski jezik u istoriji računarstva.

Naravno, još uvek postoji jaka veza između C-a i sistema sličnih UNIX-u, između ostalog i GNU/Linux-a.

C je čisto imperativan, odnosno proceduralan programski jezik, jer je mašinski kod po svojoj prirodi proceduralan, drugi stilovi programiranja nisu podržani u samom jeziku pa ih nije lako, niti preporučljivo koristiti.

Svakome ko želi ozbiljnije da se bavi programiranjem, preporučujem da nauči C, po mogućstvu kao jedan od prvih jezika. Sam jezik je vrlo jednostavan, svi složeni koncepti na koje ćete naići su koncepti rada samog procesora i memorije, kao i operativnih sistema. Ipak, rad sa C-om ne zahteva neko veliko znanje o hardveru, samo neke osnovne principe :slight_smile:

Ovde možete postavljati sva pitanja, iskustva, hvale i kritike u vezi sa ovim jezikom :))

Evo sam upravo završila drugi trimestar na Visokoj ICT. Osnove programiranja 1 položih sa 10, a upravo smo radili u C jeziku. Nakon ovoga slede Osnove programiranja 2, takođe u C, ali će se raditi naprednije tehnike. Sad, ako ima zainteresovanih, mogu dalje preneti svoje dosadašnje iskustvo i napisati neke jednostavnije primere programa po zadacima koje smo vežbali.

Nije slučajno što se za osnove uzima baš C, i to ne samo na ovom fakultetu.

^^ Reci kada budeš uhvatila prilike, profesoru Reljinu da ima pozdrave od Linux Mint ekipe :wink:

BTW čestitam na položenim aktivnostima :wink:

U uvodu za C uvideo sam par sitnih grešaka. Unix kao operativni sistem jeste napravljen u asebleru samo što je Denis Riči taj asemblerski kod prepravio u C. Druga stvar tokom 60-ih godina postojale su indicije da se napravi neki drugi program osim saemblera koji bi pojednostavio računarstvo i bilo je nekog uspeha sa simula67 i njemu sličnim. Treće Denis Riči je uzeo sve te programske jezike objedinio u jedan, ispravi greške i doda ojš neke stvari koje su za to vreme pojednostavile stvari u programiranju. Četvrto mana programskog jezika C je ta što i ako se radi u njemu treba puno vremena da se izradi manji program i pri tom čovek i kada programira u C jeziku do 1000 linija koda može još nekako da prati prati program i ispravlja greške. Sve preko hiljadu linija koda za svaku liniju koda se za promil uvećava šansa za stvaranje greške i pri tom ako bi se ispravljale greške opet bi se za promil uvećala šansa da se napravi neka nova greška.

Da odgovorim na ovo po tačkama :))

Prvo, naravno da je za Unix korišćena kombinacija C-a i asemblera, nije moguće ceo operativni sistem napisati u višem programskom jeziku. Nisam znao da li je originalna verzija na onom PDP-u bila cela na asembleru, ili je već korišćen C, ali verovaću ti na reč :))

Nisam siguran šta si hteo da kažeš u drugoj tački? Slažem se, C svakako nije jedan od prvih viših programskih jezika, pre njega su razvijeni brojni programski jezici za mnoge namene, ali C je prvi koji je počeo da zauzima taj neki domen sistemskog programiranja, koji je pre toga pripadao isključivo asembleru.

Treće, kad kažeš da je Denis Riči “sve te programske jezike objedinio u jedan”, zvuči kao da je C nekakav hibrid svakakvih pristupa, a on upravo to nije i to nisi dobro rekao. C je baš minimalističkog dizajna, kao što sam rekao, dizajniran je tako da se što lakše i efikasnije kompajlira na asemblerski kod. Najveći uticaj na C je imao upravo taj cilj, da se što lakše, brže i optimizovanije kompajlira. Naravno, na dizajn su uticali i stariji jezici tog tipa, kao što su B i naravno ALGOL.

Ovo četvrto si već potpuno subjektivno sročio i procenio brojku. Oprosti što moram da kažem, al baš si grdno preterao u svemu što si tu napisao. Prvo, C je i dalje jedan od najpopularnijih programskih jezika i postoji bezbroj C programa koji su daleko, daleko veći od par hiljada ili desetina hiljada linija koda, pa ih ljudi koriste, održavaju, unapređuju i ne kukaju :)) Sasvim je dobar za ogromne programe kod kojih je važna efikasnost.

Postoje naravno i oni koji su užasni i teški za održavanje (naš dragi X Window sistem se često pominje), ali to je obično zato što su dotrajali, a zadaci koje treba da izvršavaju su se milion puta izmenile od trenutka kada su prvi put pisani. Osim takvog zombi softvera, čitljivost i čistoća programa ipak više zavisi od programera nego od programskog jezika, i to će uvek biti tako.

To da treba puno vremena da se u C-u napiše manji program je opet relativno. Kao što smo zaključili, cilj C-a na neki način jeste da zameni asembler. Veruj mi, u C-u se sve brže, bolje, lakše i čitljivije uradi nego u asembleru. Uvek u računarstvu imaš neke kompromise, nemaš programski jezik sa kojim ćeš sve raditi maksimalno brzo i lako, tako da izvršavanje bude maksimalno optimizovano, da kod bude maksimalno čitljiv i održiv, i tako dalje. Jeste, teško je koristiti C i C++ i treba ih izbegavati, ali moraš ako ti baš treba efikasnost, a moguće je čak i za najveće i najkompleksnije programe, ako su programeri dovoljno dobri i disciplinovani :))

To što sam sve napisano u domaoj literaturi.

Zato je tu C++. :stuck_out_tongue: Ali po meni treba da si žešća dileja da bi pisao nešto u C+±u, kad se setim samo divljih pointera, zafrkavanja sa ručnim dinamičkim alociranjem i delociranjem memorije baš je mučan. Ok ovde se priča o C-u, to se ipak malo lakše uči.

Ali po meni treba da si žešća dileja da bi pisao nešto u C+±u, kad se setim samo divljih pointera, zafrkavanja sa ručnim dinamičkim alociranjem i delociranjem memorije baš je mučan.

Prvo, meni se sviđa C++ i nisam dileja. Drugo, zašto misliš da je zafrkavanje s memorije mučnije u C+±u nego u C-u?

Ok za ovo drugo sam se zeznuo, ali ja sam odmah učio C++, a ne C. Posle tek skapirao da su u C+±u uglavnom dodati samo koncepti OOP-a, a da su sve stvari bez OOP-a iste kao u C-u.

Učenje C+±a ima i svoje prednosti, ko nauči tako ručno sve da radi, mnogo lakše mu je posle da uči neki jezik koji je automatizovaniji, i koje nema takvih smaranja.

Koji IDE preporucujete za C?

Kući sam vežbala u MonoDevelop-u, jer je najsličniji VisualStudio-u kojeg smo imali kao okruženje na vežbama u školi.

Mi u skoli isto radimo u MS VisualStudio.

Malopre nađem ovaj link negde na FB-u.

35 besplatnih knjiga o C-u (na eng.) http://efytimes.com/e1/fullnews.asp?edid=117539

klod, on 06 Apr 2014 - 20:36, said:http://forum.opensource-srbija.org/public/style_images/OSS_style__33_/snapback.png

A za to da sam dileja se nisi zeznuo? :biggrin:

Vama što diskutujete o IDE-u, najsrdačnije preporučujem da [SIZE=24px]ne učite programiranje sa integrisanim okruženjem[/SIZE]. Gomilu stvari vam uradi automatski pa i ne shvatite gde se šta dešava i onda steknete neke pogrešne ideje ili uopšte ne shvatite šta je kompilacija, šta je statičko i dinamičko linkovanje, kako se automatizuje proces kompilacije i tako dalje. Znam, prošao sam kroz to.

Druga stvar, i jedan i drugi stil rada imaju svoje prednosti, a ume biti nezgodno navikavati se na odvojene alate za nekog ko je navikao na IDE, dok je obrnuto lako. Treba imati na umu da su i C i C++ stvoreni sa namerom da mogu da se koriste bez specijalizovanog IDE-a. Java je tipičan primer suprotnog pristupa, pa je Javu jako teško koristiti bez specijalizovanog IDE-a :slight_smile:

Izvini nije bilo ništa lično u tome.

Kada sam savladao osnove C+±a, onda sam skontao da suština C+±a u odnosu na C je kao sada da neko uzme trabanta karavna, skinuo sve plastišne delove koje bi zamenio sa aluminijumskim, postojeće metalne delove maksimalno ojačao, na osnovu te trabantne konstrukcije isprojektovao maksimalno jak i brz 4-voro takni motor, u gepek stavio najveću bocu za plin, prebacio menjač da ne bude kod volana nego na podu i pri tom automatik, stavio abs kočnice i servo volan, promenio pult, ugradio klimu. I kao takav trabant pokušao da vozi ne kao 2-o nego kao 4-oro takni mašinu.

Marjane, sviđa mi se kako si to rekao, ali ništa te nisam razumeo :lol:

Imam probleme sa par zadataka,pa ako neko zna i voljan je da mi pomogne bilo bi zaista lepo,pocetnik sam .
1.Napraviti matricu 4x4 koja ispisuje random brojeve od 15 do 35 ,ako jebroj 22 ili 33 onda ispisuje 0.Trebaju 2 ugnjezdene for petlje.

2.Program u koji se unosi string parnih slova,ako je je naparan trazi opet unos.Program treba da zameni prvi polovinu i drugu polovinu reci i ispise.

3.Trazi se unos 10 brojeva,koji ce biti zapamceni u niz.Program treba da sortira unete brojevi od najmanjeg do najveceg.Koristiti bubble sort algoritam.

Jesi bilo sta od toga uradio?

Ako si vec pocetnik najbolje da sam shvatih, a ne da dobijes sve na gotovo - tako neces nista nauciti.

Pa uradi koliko znas, i kad zapnes mozemo da te usmjerimo :slight_smile:

1.napravio sam 2 for petelje i,j za dimenziju i elemente,ali neznam sta da radim sa ovim random
2.Drugi sam pokusao da podelim string sa 2,pa tako nekako da odredim da l je paran,al opet ne znam kako da ga izmesam. :stuck_out_tongue: