PDA

Pogledaj cijelu verziju : C iz pelena...



marijanovic
18-11-2007, 15:18
SŠto je programski jezik?

Programi koje korisnici najčešće pokreću na računalu su u izvedbenom obliku (engl. executable) koji je razumljiv samo procesoru računala.
Strojni kod se u suštini sastoji od nizova binarnih znamenki: nula i jedinica.

Gotovo svi današnji programi se pišu u jednom od viših programskih jezika čije se naredbe sastoje od mnemonika.

Asembleri (engl. assemblers) koriste jezik koji predstavlja svaku strôjnu funkciju mnemonikom koja je razumljiva ljudima koji čitaju programe, pa se, na primjer, zbrajanje najčešće obavlja mnemonikom ADD.
Time se postiže bolja čitljivost programa.

Kombiniranjem naredbi programer slaže izvorni kôd (engl. source code), koji se pomoću posebnih programa prevoditelja (engl. compiler ) i povezivača (engl. linker) prevodi u izvedbeni kôd.
Stoga možemo govoriti o četiri faze izrade programa:
1. pisanje izvornog kôda
2. prevođenje izvornog kôda
3. povezivanje u izvedbeni kôd te
4. testiranje programa.
Da bi se za neki program moglo reći da je uspješno zgotovljen, treba uspješno proći kroz sve četiri faze.




Glavni program i definiranje varijabli

Najjednostavniji program u jeziku C bi bio:
int main(){
return 0;
}

main je naziv za glavnu funkciju u svakom c programu te svaki program napisan u C-u mora imati točno jednu main funkciju.
Pri tome valja uočiti da je to samo simboličko ime koje daje do znanja prevoditelju koji se dio programa treba prvo početi izvoditi – ono nema nikakve veze s imenom izvedbenog programa koji se nakon uspješnog prevođenja i povezivanja dobiva.
Željeno ime izvedbenog programa određuje sam programer.
Riječ int ispred oznake je glavne funkcije ukazuje na to da će main() po završetku izvođenja naredbi i funkcija sadržanih u njoj kao rezultat tog izvođenja vratiti cijeli broj (engl. integer – cijeli broj).
Budući da se glavni program pokreće iz operacijskog sustava, rezultat glavnog programa se vraća operacijskom sustavu.
Najčešće je to kôd koji signalizira pogrešku nastalu tijekom izvođenja programa ili obavjest o uspješnom izvođenju.

Iza riječi main slijedi otvorena-zatvorena zagrada.
Unutar tih zagrada bi trebali doći opisi podataka koji se iz operacijskog sustava prenose u main().
Ti podaci nazivaju se argumenti funkcije.
U ovom primjeru preograma se ne prenose argumenti.

Slijedi otvorena vitičasta zagrada koja označava početak bloka u kojem će se nalaziti naredbeglavne funkcije, dok zatvorena vitičasta zagrada u zadnjem retku označava kraj tog bloka.
Unutar vitičastih zagrada u primjeru programa se nalazi return 0 što znači da glavni program vraća pozivnom programu broj 0, a to je poruka operacijskom sustavu da je program uspješno okončan, štogod on radio.

Znak ; iza naredbe return 0 označava kraj naredbe te služi kao poruka prevoditelju da sve znakove koji slijede interpretira kao novu naredbu.

Drugi primjer programa je:

#include <stdio.h>

int main(){
printf("Ovo su vjezbe");
return 0;
}
U ovom primjeru nalazi se naredba #include <stdio.h> kojom se od prevoditelja zahtjeva da u naš program uključi biblioteku stdio.h.
U toj biblioteci nalazi se izlazni tok te funkcije koja omogućava ispis podataka na zaslonu.
SPotrebno je nagalsiti da include nije naredba C jezika već se radi o pretprocesorskoj naredbi.S
Naletjevši na nju, prevoditelj će prekinuti proces prevođenja kôda u tekućoj datoteci, skočiti na stdio.h, prevesti ju i potom se vratiti prevođenju u početnoj datoteci.

VarijableS

Svaki program u sebi sadrži podatke koje obrađuje:
Podaci u programu:
• konstante (0, 5, 3.145)
• varijable (a, iBroj, p)

Za imenovanje (varijabli i funkcija) se koriste identifikatori:
• slova engleskog alfabeta (A – Z, a - z), brojeva (0 - 9) i znaka za podcrtavanje ('_')
• prvi znak mora biti slovo ili znak za podcrtavanje
• identifikator ne smije biti jednak nekoj od ključnih riječi

(Jezik C razlikuje mala i velika slova, tako da identifikatori a i A predstavljaju različite nazive).
Prije uporabe bilo koje varijable potrebno ju je deklarirati kako bi prevoditelj znao koliko mjesta u memoriji rezervirati za koju varijablu.
Deklaracija se sastoji od tip varijable i identifikatora.

int a, b, c;

U istom dijelu programa (u istom bloku) ne smije se deklarirati više varijabli s istim imenom.
Nakon deklaracije varijable prevoditelj će za tu varijablu pod tim imenom rezervirati određeno područje u memoriji.
U tom trenutku se na tom mjestu u memoriji može naći bilo što, pa je prije upotrebe varijable potrebno postaviti njenu vrijednost (inicijalizirati).

int a;
a = 5;
ili
int a = 5;

Operatorom pridruživanja mijenja se vrijednost neke varijable, pri čemu tip varijable ostaje nepromijenjen.
Ako su operandi s lijeve i s desne strane operatora pridruživanja različitih tipova, vrijednost se svodi na tip operanda prema definiranim pravilima konverzije.
S lijeve strane operatora pridruživanja mogu biti isključivo promjenjivi objekti (varijable).
Dozvoljeno je više operatora pridruživanja u istoj naredbi.


Brojevi

U C jeziku u suštini postoje dva tipa brojeva:
• cijeli brojevi (integers)
• realni brojevi (brojevi s pomičnim zarezom «floating-point»)

tip bajtova raspon vrijednosti točnost
char 1 -128 do 127
int 2 -32768 do 32767
short int 2 -32768 do 32757
long int 4 -2147483648 do -2147483647
float 4 -3.4*1038 do -3.4*10-38 i
3.4*10-38 do 3.4*10-38 7 dec. znamenki
double 8 -1.7*10308 do -1.7*10-308 i
1.7*10-308 do 1.7*10-308 15 dec. znamenki
long double 10 -1.1*104932 do -3.4*10-4932 i
3.4*10-4932 do 1.1*10-4932 18 dec. znamenki

Ako tip varijable definiramo s dodatnom riječi unsigned tada se raspon premješta u pozitivno područje.

Znakovi

char- služi za spremanje ASCII vrijednosti pojedinog znaka.

Za spremanje jednog znaka koristimo:
char a = 'b';

Za spremanje niza znakova definiramo polje tipa char;
char a[]S= "nesto";
ili definiramo pokazivač prema karakteru
char* b = "nesto drugo";


Logički tipovi

Logički podaci su takvi podaci koji mogu poprimiti samo dvije vrijednosti, npr: da/ne, true/false…
Jezik C za prikaz podatak logičkog tipa ima ugrađeni tip bool, koji može poprimiti vrijednost true ili false.

bool MeneOvoZanima = true;

marijanovic
18-11-2007, 15:43
Polja

U C-u možemo definirati polje varijabli određenog tipa.
To je korisno kada želimo da nekoliko varijabli dijele isto ime, ali ih razlikujemo po poziciji u polju.
npr;
int a[5];

Na ovaj način smo u memoriji rezervirali mjesta za pet podataka tipa int.
Pojedini članovi polja mogu se dohvaćati pomoću cjelobrojnih indeksa te mijenjati neovisno o ostalim članovima polja.

float x[]S= {1258, 254.52, 12., -17, 0.25};

Ovim smo napravili polje x tipa float s 5 elemenata ( x[0]S= 1258, x[1]S= 254.52, x[2]S= 12, x[3]S= -17, x[4]S= 0.25);

Prilikom deklariranja polja moramo predvidjeti maksimalni broj elemenata koje ćemo u njega spremati jer ako pokušamo spremiti više elemenata nego što smo definirali, prevoditelj će javiti grešku.
Prvi član u polju ima indeks 0, a zadnji član ima indeks za 1 manji od duljine polja.

Moguće je kreirati i dvodimenzionalna polja:

int MojaTablica[3][5];

Na ovaj način smo napravili matricu od tri retka i 5 stupaca.
Na ovaj način deklarirano polje (kada ga ne inicijaliziramo) ima slučajne vrijednosti.
Članove dovodimenzionalnog polja dohvaćamo pomoću dva indeksa: broja retka i broja stupca.

MojaTablica[0][1]S= 15; // 1. redak, 2. stupac
MojaTablica[2][4]S= 52; // 3. redak, 5. stupac

int MojaTablica[3][5]S= { {11,12,13,14,15},
{21, 22, 23, 24, 25}};

Na ovaj način smo napravili dvodimenzionalno polje od 3 retka i 5 stupaca, i postavili smo vrijednosti za prva dva retka.
Rezultat:

11 12 13 14 15
21 22 23 24 25
0 0 0 0 0

int[3][5]SMojaTablica


Prilikom deklaracije polja odmah smo predali vrijednosti za neke članove, pa se oni inicijaliziraju s tim vrijednostima, ostali članovi se postavljaju na nulu.
Jedno od ograničenja pri korištenju polja jest da duljina polja mora biti specificirana i poznata u trenutku prevođenja koda.
Duljina jednom deklariranog polja se ne može mijenjati tijekom izvođenja programa.


Funkcije za ispis i unos podataka

Deklaracija:
<povratni_tip> ime_funkcije (<tip> arg1, <tip> arg2);

Tip ispred imena funkcije određuje kakvog će tipa biti podatak kojeg će funkcija vraćati pozivatelju kao rezultat izvođenja.
Argumenti unutar zagrada iza imena funkcije su podaci koji se predaju funkciji prilikom njena poziva.
Broj i tip argumenata može biti proizvoljan.

Funkcija mora biti deklarirana u izvornom kodu prije nego što se prvi put pozove.

Definicija funkcije sadrži i tijelo funkcije.
//ovo je samo deklaracija funkcije
double kvadrat(float);

//ovo je definicija funkcije
double kvadrat(float x){
return x * x;
}

Svaka definicija funkcije je ujedno i deklaracija.
Nakon definicije nije dozvoljeno ponavljati deklaracije.

Main
Glavna funkcija u C programu. Svaki program napisan u C-u ju mora imati.

printf
Funkcija za ispis na ekran.
Potrebna biblioteka stdio.h.
Funkcija kao rezultat vraća broj uspješno ispisanih znakova na ekran.



deklaracija:
int printf(
const char *format [,
argument]...
);

Argument format se sastoji od običnih znakova, posebnih znakova za oblikovanje teksta i znakova za prikaz argumenata koji slijede iza argumenta format.

Znakovi za oblikovanje teksta:
\n – novi red
\t – pomicanje za jedan tab

Znakovi za prikaz vrijednosti varijabli
%d – prikaz cijelog broja
%.kf – prikaz realnog broja s k decimalnih mjesta (%.3f – tri decimalna mjesta)
%s – string


npr.:

printf("ispis brojeva \n\t cijeli broj: %d \n\t realni broj na tri decimale: %.3f", 5, 5.24567);

Na zaslon ispisuje:
ispis brojeva
cijeli broj: 5
realni broj na tri decimale: 5.246

scanf
Funkcija za unos podataka s ekrana.
Potrebna biblioteka stdio.h.
Funkcija kao rezultat vraća broj uspješno pridruženih vrijednosti varijablama.

deklaracija
int scanf(
const char *format [,
argument]...
);

npr.:
int a;
float b;
scanf ("%d %f", &a, &b);

Prilikom korištenja funkcije scanf potrebno je umjesto varijable proslijediti pokazivač (pointer) prema varijabli.
(&a – na ovaj način umjesto varijable a, mi prosljeđujemo pokazivač prema mjestu u memoriji gdje se nalazi varijabla a;
detalji o pokazivačima će biti opisani kasnije, u idućim postovima).

programer1994
13-05-2008, 16:55
svaka čat za tutorial

Luka
14-05-2008, 13:29
marijanovic, nema potrebe za kopiranjem, ako želiš ukazati na neku stranicu onda daj link na nju ali nemoj prepisivati