[C] Osnove Programskog Jezika C

Započeo Streetboy, April 10, 2013, 00:29:29 PRE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Osnove Programskog Jezika C
Tutorial by Streetboy




1. Programski jezici


- Veliki broj problema koji se pojavljuje u praksi može se razložiti na jednostavnije
probleme-korake, koji predstavljaju postepeni, usmjereni tok rješavanja problema Takva
struktura se može opisati algoritmom, tj. algoritam predstavlja niz koraka kojim se
rjeÅ¡ava odreÄ'eni problem.
- Programer â€" pisac programa koji se može smatrati kao prevodioc sa jezika algoritma
(procedure), blizak ljudima, na programski jezik, blizak računaru.
- Programski jezik se na nekom niou apstrakcije može posmatrati kao bilo koji vještački
jezik sa svojim pravilima, pojmovima, semantikom i sintaksom.
- Program bi trebao da se sastoji od strukturnih cjelina (modula, potprograma, objekata,
klasa). Svaki dio programa trebao bi da se može podijeliti na manje djelove. Jedan dio
programa rješava jedan jasno koncipirani problem. Dobro napisani dio programa može
se sa malo ili bez prepravljanja koristiti u drugim programima.
- Pod editovanjem podrazumijevamo sastavljanje, testiranje i ispravljanje koda.


2. Istorijat programskih jezika


- Istorija programskih jezika počinje sa završetkom II svjetskog rata.
Mogu se izdvojiti IV faze:
Citat
I faza koja obuhvata pedesete godine XX vijeka i koju obilježava razvoj
prvih programskih jezika i prva iskustva u programiranju.

II faza obuhvata šezdesete. Obilježava je razvoj teorije, razvoj prvih
kvalitetnih programskih jezika, te početak programerske edukacije.
Brojni programski jezici razvijeni u ovoj fazi bili su prekomplikovani.

III faza obuhvata sedamdesete godine. Na osnovu iskustava iz
prethodnih perioda kreirani su jednostavni i moćni programski jezici.
Naime, težnja je kreirati programske module: funkcije, rutine,
potprograme, koje je moguće koristiti u brojnim drugim programima.
Svaki program se sastoji iz poziva modula, pri čemu i moduli mogu
pozivati druge module.

IV fazu razvoja programskih jezika obilježava početak
pojednostavljivanja razvoje velikih programskih paketa zasnovanih na
novim objektno-orjentisanim programskim jezicima. TakoÄ'e razvoj
multiprocesorskih računara je zahtijevao razvoj prvih programskih
jezika za paraleleno programiranje.Ova faza obuhvata period od
početka osamdesetih do sredine devedesetih.

- Prvi programski jezik razvio je Konrad Zuse 1946 god u Njemačkoj.
Naziv ovog programskog jezika bio je Plankalkul. Tri godine kasnije
razvijen je Short Code, prvi programski jezik implementiran na
elektronskim računarima.
- Prvi poznati programski prevodioci bili su MATH-MATHIC i
Autocode.
- 1962. godine razvijena je prva kompjuterska igra, Space Wars, na MIT-u.
- Krupni korak u razvoju sistemskog softvera učinio je programski jezik C. Prvu
verziju ovog programskog jezika razvio je Dennis Ritchie 1972 god.

* Softverska kriza *
- Početkom 80-tih došlo je do softverske krize. Koraci koji su joj prethodili:
* programeri su otkrili korisnicima računara mogućnosti sistema
* zahtjevi korisnika računara postali su veći
* zahtjevani obim posla koji je povjeravan računarima postao je veći
- Osnovni problemi su postali:
* složenost pojedinih funkcija i nemogićnost jednostavnog ispravljanja istih
* veze funkcija sa ostalim modulima su bile veoma složene
* testiranje novog sistema
* otklanjanje brojnih grešaka kao posledica mijenjanja nekih modula
* Odgovor na softversku krizu *
- Odgovor je predstavljalo objekto-orjentisano programiranje. Kao koncept
pojavio se znatno prije, ali tek nakon krize uočena je njegova neophodnost.
- Američka komunikaciona kompanija AT&T (American Telephone and
Telegraph) je trebala početkom 80-tih da rijeÅ¡i odreÄ'eni projekat. Uočeno je da
projekat ne može biti realizovan upotrebom postojećih softverskih rješenja.
Stoga je kreirana objektno-orjentisana verzija C programa. Taj programski
jezik je dobio naziv ’’C sa klasama’’ (kasnije C++).
- Za kreatora C jezika se smatra Bjarne Stroustrup.
- Danas su u širokoj upotrebi sledeći programski jezici: Ada, APT, C, C++, COBOL,
Common LISP, FORTRAN, Java, Pascal, Prolog, Visual Basic, Perl...


3. Podaci


- Podaci = objekti koji se obradjuju.
- Podaci koje koristi programski jezik možemo podijeliti u elementarne (osnovne)
ili složene.
- Osnovni prosti tipovi podataka su cijeli brojevi INT i FLOAT, koji se realizuju
hardverski, tj. njihova vrijednost se odreÄ'uje direktno na osnovu njihove binarne
reprezentacije. Drugi prosti podaci, tipa CHAR, izvedeni su iz njih.
- Najčešće upotrebljavani tip složene promjenljive je niz (vektor). Napr. u
programskom jeziku C naredba int v[40] uvodi u program složenu promjenljivu
koja se sastoji od 40 cijelih brojeva.
- Životni vijek objekta koji pripada nekom od mogućih tipova
podataka počinje trenutkom alociranja (stvaranja) a završava se
trenutkom dealociranja (brisanja) iz memorije.
- Drugi primjeri složenih promjenljivih su višedimenzioni nizovi
(matrice), zapis (struktura), string (niz karaktera, recimo slova), itd.
- Konstante: podaci uneseni u programu kao fiksna, nepromjenljiva vrijednost.
- Promjenljive: podaci uneseni tokom izvršavanja programa i koji se čuvaju u posebnim smještajnim
jedinicama.
- Ime promjenljive se sastoji od slova i brojeva. Počinje obaveno slovom i ne može imati razmak (osim
donje crte, tj. _) ili druge znakove (!#$%&...). Jako je bitno voditi računa o malim i velikim slovima jer
promjenljive Skola i skola nisu iste â€" Å¡taviÅ¡e, obije paralelno mogu da postoje u programu.
- Osnovni tipovi podataka u programskomjeziku C su:
* Char â€" jedno slovo, cifra ili znak
* Int â€" cijeli (pozitivni ili negativni broj)
* Float â€" realan broj (napr. 3.1415)
* Double â€" kao float ali dvostruke preciznosti
- Kada u programu napišemo int visina, time programu saopštavamo da je visina promjenljiva i da će u
vrijeme izvršavanja sadržati neki cijeli broj (engl. integer). Time smo deklarisali promjenljivu. Sve
naredbe, pa i deklaracije, moraju da se završe znakom tačka i zarez (;).
- U programiranju je veoma bitno pisanje komentara. Komentari se u programskom jeziku C piÅ¡u izmeÄ'u
znakova /* i */, i mogu sadržati više redova teksta. Često se koristi jednoredni komentar koji počinje sa
// a završava se na kraju reda.


4. Znakovi i tekst


- Prije svega moramo da usvojimo da 1 i ‘1’ nije isto. Čak i kad bismo ih sabrali ne bi dobili 2, već 50.
Zašto ? Broj 1 je takozvana brojevna konstanta dok je ‘1’ znak ili znakovna konstanta. Vrijednost znaka
je redni broj u tabeli znakova (ASCII tabela), tako da ‘1’ ima vrijednost 49 što daje odgovarajući rezultat
pri sabiranju. Tu se i krije odgovor kako računar koji može da razumije samo brojeve može da radi sa
slovima i znakovima.

- ’’Podgorica’’, ’’Danas je lijep dan’’, ’’1+1 je 7’’...
Navedeni primjeri su tekstualne konstante, tj. string konstante i najviše služe za poruke koje korisniku
programa računar ispisuje na ekranu. Primjer: ’’unesi udaljenost u kilometrima’’. Iako su stringovi
sastavljeni od znakova, ’’1’’ nije isto što i ‘1’.


5. Ulaz i izlaz


- Osnovna naredba je naredba dodjele i izvršava se pomoću operatora jednako (tj. =), napr.
A=A+B. To znači da lijeva strana postaje jednaka desnoj nakon izvršenja date naredbe i ne
mora da znači da su bile jednake prije toga. Rezultat te naredbe je sledeći: promjenljiva A
dobija trenutnu vrijednosti promjenljive B uvećanu za 2, tj. dobija vrijednost izraza B+2.
- Sa lijeve strane operatora dodjele mora da bude mora da bude isključivo promjenljiva, tj. ne
mogu biti konstanta ili izraz.
- Moramo voditi računa o tome da se u primjeru A=2.53; odsijeca decimalan dio broja ukoliko je
A deklarisano sa int A; jer .53 nema gde da stane u cjelobrojnu promjenljivu. Ako želimo da
sačuvamo i decimale, moramo da deklarišemo A sa float A; ili double A;.
- Kada se pozove funkcija printf("%d", visina); na korisnikovom ekranu se ispisuje trenutna
vrijednost promjenljive visina. Pomoću znakova "%d", računaru se saopštava da visinu
mora da ispiše kao cio broj.

* FORMATIRANJE ISPISA *
- Prikaz upotrebe kontrolnih znakova % i / za formatiranje pri korišćenju funkcije printf:
%d ili %i - za unos/ispis cijeliog broja
%f - za unos/ispis realnog broja
%c - za za unos/ispis znaka
%s - za unos/ispis teksta (stringova)
\n - novi red
\t - tabulator
\\ - znak \
\% - znak %


6. Pretprocesorske direktive


- Da bismo mogli koristiti funkcije printf i scanf, moramo da
napišemo #include<stdio.h> na početku programa. To je pretprocesorska direktiva koja uključuje
biblioteku stdio.h u naÅ¡ program â€" omogućava nam da koristimo
njene funkcije.
- Ako bismo želeli da umesto konstante 3.1415 u programu
koristimo PI, to možemo učiniti pomoću direktive #define na
sledeći način: #define PI 3.1415.
Pretprocesorske direktive nemaju tačku i zapetu ( ; ) na kraju
reda!



7. Funkcije i operatori


- Sasvim je logično da u okviru izraza koristimo uobičajene matematičke operatore:
+, -, *, /, ali moramo voditi računa o tome da se pri dijeljenju dva cijela broja
uvijek odsijeca decimalan dio! Ako želimo da to izbjegnemo, moramo napisati
ovako: A=(double)B/C. Tako eksplicitno konvertujemo B u realan broj (konkretno,
double), pa se pri dijeljenju neće odsjeći cijeli dio broja.
- Ostatak pri dijeljenju možemo dobiti pomoću operatora %.
Primjer:
5%2 je 1, tj. najbliži djeljiv broj je 4 a razlika do 5 je 1, i to je dio broja 5 koji se ne
može podijeliti sa 2.

Postoje i operatori koji skraćuju zapis nekih dužih izraza i oni se često koriste u
programskom jeziku C. Takvi operatori mogu biti skup ili kombinacija dva ili više
osnovnih operatora kao Å¡to su to: +,-,*,/ itd...

A++ ili ++A        =     A=A+1
Aâ€" ili â€"A      =    A=A-1
A+=2    =  A=A+2
A-=2   =   A=A-2
A*=2  =  A=A*2
A/=2  = A=A/2

-Postoji veliki broj ugraÄ'enih matematičkih funkcija u biblioteci math.h, a
možemo da ih upotrijebimo ako napišemo #include <math.h> na početku
programa. Sve funkcije u math.h vraćaju rezultat tipa double, a apsolutna
vrijednost cijelih brojeva nalazi se u stdlib.h.
fabs(x) = apsolutna vrijednost
sqrt(x) = kvadratni korijen od x
sin(x), cos(x) = sinus, kosinus, x u rad
pow(a,n) = stepenovanje a na n
log(x) = prirodni logaritam, lnx
ceil(x) = zaokruživanje na veći broj
floor(x) = zaokruživanje na manji broj

- Da bismo dobili neku nasumično odabranu vrijednost, potrebno je da uključimo
biblioteke stdlib.h (zbog funkcija rand i srand) i time.h (zbog funkcije time). Funkcija
srand služi da inicijalizuje generator pseudoslučajnih brojeva (tj. da mu dodijeli
početnu vrijednost) i bitno je da ta vrijednost uvijek bude drugačija (tu pomaže
funkcija time). Funkcija rand daje nasumično odabran cio broj. Kada napišemo izraz
rand()%10, dobićemo broj u intervalu od 0 do 9.




PRIMJERI(ZADACI)


1.Napisati program koji na standardni izlaz ispisuje poruku: Zdravo, clanovi Balkan Samp-a!.
#include <stdio.h>
int main() {
printf("Zdravo, clanovi Balkan Samp-a!\n");
return 0;
}


2.Napisati program koji prevodi dužinu datu u stopama u centimetre (1 stopa =30.48
cm).
#include <stdio.h>
#define STOPA 30.48
int main() {
float st;
printf("Unesite duzinu u stopama :");
scanf("%f",&st);
printf("%f stopa u cm iznosi : %f \n",st,st*STOPA);
return 0;
}


3.Napisati program koji na standardni izlaz ispisuje veliko slovo A u polju širine četiri,
a u novom redu malo slovo A u polju Å¡irine Å¡est.
#include <stdio.h>
int main() {
printf("Slova:\n%4c\n%6c\n", 'A' , 'a');
return 0;
}


4.Napisati program koji vremenski interval dat u minutima izražava u satima i
minutima.
#include <stdio.h>
int main() {
int min;
printf("Uneti vremenski interval u minutima :");
scanf("%d",&min);
printf("Interval %d minuta ima %d sati i %d minuta\n",
min,min/60,min%60);
return 0;
}


5.Napisati program koji generiše slučajan cijeli broj iz intervala [1,10].
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(0));
printf("Broj : %d" ,rand()%10+1);
return 0;
}


6.Napisati program koji za dvije zadate cjelobrojne promjenljive na standardni izlaz
ispisuje redom njihov zbir, razliku, proizvod, količnik i kvadratni korjen.
#include <stdio.h>
#include <math.h> //Koristi se zbog ugradjene funkcije sqrt
int main(){
int a,b;
printf("Unesi brojeve :");
scanf("%d%d",&a,&b);
printf("Zbir: %d\n",a+b);
printf("Razlika: %d\n",a-b);
printf("Proizvod: %d\n",a*b);
printf("Kolicnik: %f\n",(double)a/b);
printf("Kvadratni korjen od broja %d je %f\n",a,sqrt(a));
printf("Kvadratni korjen od broja %d je %f\n",b,sqrt(b));
return 0;
}


7.Napisati program koji izračunava proizvod cifara datog četvorocifrenog cijelog broja br.
#include <stdio.h>
intmain() {
int br;
int cf1,cf2,cf3,cf4;
printf("Unijeti cetvorocifreni broj: ");
scanf("%d",&br);
cf1=(br/1000);
cf2=(br/100)%10;
cf3=(br/10)%10;
cf4=br%10;
printf("Proizvod cifara broja %d je %d\n", br, cf1*cf2*cf3*cf4);
return 0;
}
Poslednja Izmena: April 10, 2013, 01:10:49 PRE PODNE od [BR] Streetboy



Hvala vam,inace uskoro planiram apdejtovati ovaj tut,tj ubaciti petlje jer sada nemam vremena,pa uskoro valjda bude :D



[quote author=
 Streetboy link=topic=71663.msg501464#msg501464 date=1365857655]
Citat: Wucha poslato April 13, 2013, 09:27:31 PRE PODNE
Svaka cast!  ;D
Hvala,mada vidim da ovo rijetko ko procita..  :-\ :-\
[/quote]

Ja i ako nist ne kuzim sve sam procitao :D