C Tutorijal

poruka: 39
|
čitano: 25.188
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
odjavljen
offline
C Tutorijal

Posto ima sve vise uvodnih tutorijala u razne programske jezike, koji bi pocetnicima mogli znatno pomoc, odlucio sam i ja dat svoj doprinos tome svemu.

Vidio sam da ima raznih tutorijala, ali nijednog koji bi mogao pocetnike uvest u svijet C-a, kojeg smatram dobrim programskim jezikom za ulaz u svijet programiranja.
Dosta je jednostavan, al opet dosta mocan. Moc C-a jedino ogranicava masta programera, tak se barem kaze

Zamolio bi odmah u pocetku da se tema ne napunjava komentarima, kao sto su: "Nepotrebno je", "bezveze" odnosno "hvala", "dobro uradjeno i sl" ukoliko vam se svidi ono sto sam uradio.
Tema ce bit konstantno update-ovana, koliko mi vrijeme dopusti, al trudit cu se da sto cesce stavljam neki novi update.
Feedback je uvijek pozeljan, pa makar i on sadrzo napomenu o nekom tipfeleru.
I jos nesto, nemojte mi zamjerit, ako bude koja "cudna" hrvatska rijec, jer sam se malo izfuro s hrvatskim jezikom boravkom u Austriji.

PA POCNIMO

--Zasto uopce C?

Iako star programski jezik C se danas jos dosta koristi, mocan je i s njime se more gotovo sve realizirati, kako sam vec rekao, problem je jedino u masti programera. Nudi dobar uvod u svijet programiranja, a i dobru odskocnu dasku za prijelaz na objektno orijentirano programiranje u C++
Tako da, pocetnici, nemojte bit zabrinuti, sto pocinjete s C-om, nego s C++, cak je mozda i bolje, jer je C podskupina, a naucit cete se kvalitetnije koristit neke alate prije nego sto predjete na C++.

--Prije pocetka

Prije nego sto se bacite na surovo programiranje, morate imati uredenje u kojem morete programirati, odnosno dva osnovna alata, a to su:
1. Text editor - Program u kojem pisete kôd, preporucuje se editor koji text kodira u ASCII format, da je kôd portabilan. Izbor editora ostavljam vama, morete cak koristiti notepad u sklopu windows-a, ali ga osobno nebi preporucio, ima brojnih editora koji koji su posebno napravljeni samo za pisanje programskog kôda, kod kojeg morete i jezik odabrat u kojem programirate, te ce vam editor posebne sintakticke dijelove, kao rezervirane rijeci posebnim bojama oznacit. Neki od editora su npr. Notepad++ i CodeBlocks, koji su besplatni ili UltraEdit (koji osobno koristim), al koji se mora platiti. Za pocetak bi preporucio jedan besplatni.
2. Compiler - Posto kompjuter nemore razumit izvorni kôd koji pisete, potreban mu je compiler, odnosno prevodilac, koji ce izvorni kôd prevest u masinski jezik.
              Za compiler bih preporucio gnu-c compiler, te da skinete cygwin, sto predstavlja linux okruzenje za windows.
              evo linkovi za skidanje Cygwin-a, te malog prirucnika sa slikama kako cete ga instalirati kako treba
             
              Cygwin
              Upute
             
              Napomena: Nemam nista od toga ako skidate s RS-a zato sto je datoteka manja od 5MB, odnosno manja je cak od 0,5 MB,
                                 pa da netko nemisli da dobivam bodove na vama :)
             
-Sto radi compiler tocno?
Compiler preuzima vas izvorni kôd i pravi datoteku sa naredbama u masinskom jeziku, koje odgovaraje naredbama iz vaseg izbornog kôda. Datoteka koju compiler napravi sa masinskim naredbama se zove objectcode, ili objektna datoteka. Svakom compileru treba odredjena naredba da stvori objectcode. Prije nego sto program moremo izvest potreban je jos jedan korak. Treba se objectcode linkat, sto predstavlja povezivanje objektne datoteke sa objectcode-om biblioteka funkcija, da bi se dobio krajni program.
Ovaj compiler koji cemo ovdje koristit obavlja compiliranje i linkanje u jednom koraku, tako da necete morati izvodit dvije naredbe. Bit ce jos objasnjeno kako se dolazi i do objektne datoteke, odnosno objectcode-a.


--Kratak uvod

Kada pravimo program, onda cesto idemo istim putem, odnosno, radimo u fazama, a one bi mogle izgledati ovako:
1. Odrediti cilj programa (ako nemamo cilja, nemamo zasto pisati program)
2. Odrediti metode koje cete koristiti u programu (nacin na koji cemo radit)
3. Pisete program za rjesavanje problema
4. Izvedete program i testirate na greske.

Ukoliko dodje do gresaka, desit ce se da ce te sva 4 postupka morat ponovno proc, odnosno, dali je bio problem u cilju, probat nac druge metode i drugacije, implementirat program.


--Krenimo, vas prvi program

Vas prvi program nece obavaljat neku posebnu funkciju, ali ce predocit, kako se program pise, compilira i izvodi.
Kako je tradicija u C-u, vas prvi program ce na ekran ispisati text "Hello_World!".

Otvorite vas editor u kojem ste se odlucili pisati i pocnimo

Izvorni kôd za program hello_world.c

#include<stdio.h>

int main()
{
  printf("Hello_World!\n");
  return 0;
}

snimite vas napisani program pod nazivom hello_world.c u mapu koja se nalazi u C:\cygwin\home\USER NAME  (USER NAME, ime user-a koji koristi kompjuter. U home cete imati jednu mapu u koju udjete i tu snimite)

da biste kompilirali vas napisani program, otvorite Cygwin, te upisete:
gcc -Wall -o hello_world hello_world.c

naredba gcc poziva gnu-c compiler da kompilira datoteku
s naredbom -Wall dobivate sve Warninge koji mogu dovest do smetanja, pri radu programa
s naredbom -o ... dajete naziv kompiliranoj datoteki, jer bi po defaultu ona bez -o bila a.exe. tri tocke znace neko ime
i na kraju naziv datoteke koja treba da se kompilira u ovom slucaju hello_world.c

kad stisnete <enter> nebi trebalo doc do nikakvi gresaka i program bi trebo bit kompiliran.

Sad morete pozvat vas napisani program s naredbom:
./hello_world

trebali biste dobit ovakav output

Hello_World!


Sad da pojasnimo greske na koje bi mogao compiler upozorit. Kada bismo izostavili jedan semikolon, odnosno ; doslo bi do greske, kao sto pokazuje slijedeci primjer

#include<stdio.h>

int main()
{
  printf("Hello_World!\n")
  return 0;
}


kada bismo sad to snimili i pokusali kompilirat, compiler bi nam izbacio slijedecu gresku:

hello_world.c: In function `main':
hello_world.c:6: error: parse error before "return"


Prvi red nam govori naziv programa, te u kojoj funkciji se nalazi greska, u ovom slucaju to je main funkcija
U drugom redu opet prvo pise naziv programa, 6 oznacava u kojem redu compiler smatra gresku, te kakva je, u ovom slucaju kaze da nedostaje ; prije return-a

--Dijelovi programa

Da bismo mogli opisat sve osnovne dijelove nekog programa, trebat ce nam ipak nesto slozenije nego samo ispis teksta
Neki vam dijelovi nece sad bit jasni, al sve ce biti kasnije objasnjeno.
Nemojte prepisivat brojeve i dvotocke uz kod, one sluze samo za orijentaciju

Program mnozitelj.c mnozi dva cijela broja
   
 1:    //Izracunava umnozak dva cijela broja
 2:    #include<stdio.h>
 3:   
 4:    int product(int x, int y);
 5:   
 6:    int main()
 7:    {
 8:      int a, b, c;
 9:     
10:      //Ucitavanje prvog broja
11:      printf("Unesite broj izmedju 1 i 100: ");
12:      scanf("%d", &a);
13:     
14:      //Ucitavanje drugog broja
15:      printf("Unesite jos jedan broj izmedju 1 i 100: ");
16:      scanf("%d", &b);
17:     
18:      //Izracunavanje umnoska i prikazivanje na ekranu
19:      c = product(a, b);
20:      printf("\n%d puta %d = %d\n", a, b, c);
21:     
22:      return 0;
23:    }
24:   
25:    //Funkcija vrace umnozak dvaju pridanih brojeva
26:    int product(int x, int y)
27:    {
28:      return(x*y);
29:    }
30:


Spremite program, kompilirajte ga i isprobajte.

Ako ste ispravno prepisali trebalo bi biti ovako:

Unesite broj izmedju 1 i 100: 5
Unesite jos jedan broj izmedju 1 i 100: 4

5 puta 4 = 20



a sad na dijelove.

-Komentari (redovi 1, 10, 14, 18 i 25)
Komentari ispunjavaje jednu veoma vaznu funkciju u pisanju programa, omogucavaje lakse snalazenje prilikom kasnijeg obradjivanja tog istog programa.
Cesto ce se desit kasnije, kada budete pisali neki veci i slozeniji program, da ce te izgubit preglednost kada ga htjedne nadogradit il nesto promjenit u njemu, tesko je nadgledat sto sta odradjuje.
Slobodno dosta komentirajte sadrzaj vaseg programa, al nemorate ubacivati suvisne komentare, koji u biti i nemaje nekakvog smisla.
Komentari se pisu na dva nacina, ovaj nacin gore se koristi za pisanje komentara u jedno redu, prvo se napisu dvije kose crte i onda slijedi komentar:

//ovo je nekakav komentar
//ovo je jos jedan komentar
//i jos jedan


Drugi nacin na koji morete pisat komentare jest, da ih pocnete sa jednom kosom crtom i zvjezdicom i zavrsite suprotno, time omogucujete pisanje komentare preko vise redova, ali pazite, ako otvorite sa komentar sa "/*" morate ga i zatvorit kad zavrsi sa "*/" sto kod dvije kose crte nemorate, al vam ovo omogucava komentiranje preko vise redova
 
/* Ovo je jedan komentar
   koji se pruza preko vise
   redova i evo jos neki tekst */

  
to je sto se tice komentara

-Include direktiva (red 2)
Include direktiva napominje C-compiler da sadrzaj tzv include datoteke za vrijeme kompiliranja uveze u program. Include datoteka je posebna datoteka s informacijama potrebnim za program ili compiler. Takodjer se jos te include datoteke zovu i header datotekama, one imaje ekstenziju .h.
#include<stdio.h> znaci, dodaj sadrzaj datoteke stdio.h u program. U vecini C programa je potrebno nekoliko tih header datoteka.

-Funkcija main (redovi 6-23)
Uz jednu C-funkciju idu i zagrade nakon naziva funkcije, iako se nepredaju nikakvi argumenti funkciji.
Jedina komponenta koja se mora nalaziti u svakom C programu jest funkcija main. U njenom najjednostavnijem obliku ona sadrzi samo naziv main kojeg slijedi prazni pâr zagrada. Nakon tih zagrada nalaze se naredbe u pâru viticastih zagrada koje cine glavno tijelo funkcije.
Pod normalnim uvjetima svaki program pocinje s funkcijom main i zavrsava s njome.

-Definicija variabli (red 8)
Variabla je ime koje se odnosi na odredjeno mjesto u memoriji za podatke. Program koristi variable za spremanje odredjenih podataka za vrijeme izvodjenja programa.
Definicija Variable obavjestava compiler o imenu variable i tipu podataka, koje more variabla spremit.

-Prototip funkcije (red 4)
Prototip funkcije daje compileru ime i argumente funkcija koje se nalaze u programu.
Prototip funkcije se mora pojavit prije, nego sto se funkcija pozove
On nije za zamjenit sa definicijom funkcije

-Naredbe programa (redovi 11, 12, 15, 16, 19, 20, 22 i 28)
Naredbe zapravo cine tok programa, pomocu njih moremo ispisivati tekst, unositi razne naredbe i sl.
U sklopu tutorijala cu pretezito objasnjavat kako se kojim naredbama koristit, da bi ste mogli upravljati tôkom programa, te da vas program izvodi ono sto hocete.
Pojasnjenje neki naredbi koje se nalaze u programu mnozitelj.c

naredba printf - je funkcija koja omogucuje ispis teksta na ekran, kako vidite u redovima 11 i 15 funkcija printf more ispisati obican tekst, il iznose kao u redu 20.
naredba scanf - je funkcija koja omogucuje da se podatci uneseni preko tipkovnice spreme u neku variablu
naredba u redu 19  poziva funkciju product, kojoj se predaju dva cijela broja i koja vrace njihov umnozak nazad
naredba return - redovi 22 i 28 sadrze return naredbe, naredba return u redu 28 pripada funkciji product i vrace umnozak od x i y nzad funkciji main. Malo prije kraja programa naredba return u funkciji main u redu 22 vraca OS-u 0 nazad,

-Definicija funkcije
Funkcija je neovisni i samostalni dio koda, koji ispunjava odredjeni zadatak. Da bi se izveo kôd koji je zapisan u nekoj funkciji, mora se unijeti ime funkcije u nekoj programskoj naredbi.
Funkcija product je funckija napravita od strane korisnika, koja mnozi samo dva broja. Inace se nekoriste funkcije za ovako jednostavne zadatke, ali je u ovom slucaju bila dobar primjer kako se koriste.

UPDATE 17.09.2009.

--Variable

Sto je to variabla? Variabla je imenovano mjesto u memoriji za podatke. Kada se koristi ime variable, odnosi se uvijek na podatke koji se nalaze iza toga imena.

-Imenovanje variabli
Varijablama se najcesce daju onakva imena, kakva opisuju njihovu funkciju, odnosno za spremanje kakvih podataka sluze.
Da biste pravili variable i koristili se njima u C-progamu, morate znati kako se imena slazu.
-ime variable more sadrzati slova, brojeve i donju crtu "_".
-prvi znak variable mora biti slovo. Dozvoljeno je koristiti i donju crtu "_", ali bi se to trebalo izbjegavat.
-C pazi na velika i mala slova kod imena variabli, tako da su "broj1" i "Broj1" dva potpuno razlicita imena za varible.
-kljucne rijeci u C-u nisu dozvoljene kao imena variabli, npr.: printf, scanf...

primjeri za dozvoljena i nedozvoljena imena za variable

Broj                     dozvoljeno
b4u4_f93            dozvoljeno
neko_ime            dozvoljeno
_godina              dozvoljeno, ali se nepreporucuje
br#tablice           nije dozvoljeno, sadrzi znak #
double                nije dozvoljeno, double je kljucna rijec
9nesto                nije dozvoljeno, prvi znak je broj


Posto su u C-u broj, BROJ i Broj tri razlicita imena za variable, vecina programera koristi samo mala slova za pisanje variable, dok se sa velikim slovima oznacavaje konstant (bit ce kasnije objasnjeno)
Ako trebate dati variabli ime, koje sadrzi vise od jedne rijeci, onda ih spojite s donjom crtom, npr.: ime_kupca, ime_prodavaca, kolicina_robe...

-Tipovi variabli
Osnovna razlika u tipovima variabli jest ta, koliko mogu podataka spremiti, odnosno koju kolicinu memorije zauzimaje. Sad bismo mogli uvijek koristiti najveci tip, koji more najvece brojeve sadrzat, ali se to nepreporucuje, jer cete cesto imati nekakve podatke koji nece moc iskoristit svu velicinu toga tipa, pa cete imat neiskoristenog prostora koji ce vam trosit memoriju, stoga uvijek razmislite za sto vam treba neka variabla, pa joj odredite tip.
Variable se opet mogu podijeliti na variable sa predznakom (signed) i one bez predznaka (unsigned).
Variable sa predznakom sadrze i negativne brojeve, a one bez, samo pozitivne. Posto variable bez predznaka nemogu prikazivati negativne brojeve, mogu prikazati vece pozitivne brojeve.
U narednoj tabeli morete vidjeti koje tipove varibli imamo, njihov naziv, kljucnu rijec, koliko memorije trose i koje brojevne vrijednosti mogu sadrzati.

+---------------------------------------------------------------------------------------------+
|Tip variable        kljucna             potrebni            brojevna                         |
|                    rijec               byte-ovi            vrijednost                       |
+---------------------------------------------------------------------------------------------+
|Znak                char                1                   -128 do 127                      |
+---------------------------------------------------------------------------------------------+
|Cijeli broj         int                 4                   -2147483648 do 2147483647        |
+---------------------------------------------------------------------------------------------+
|Kratki cijeli broj  short               2                   -32768 do 32767                  |
+---------------------------------------------------------------------------------------------+
|Dugi cijeli broj    long                4                   -2147483648 do 2147483647        |
+---------------------------------------------------------------------------------------------+
|Znak bez predznaka  unsigned char       1                   0 do 255                         |
+---------------------------------------------------------------------------------------------+
|Cijeli broj bez     unsigned int        4                   0 do 4294967295                  |
|predznaka                                                                                    |
+---------------------------------------------------------------------------------------------+
|Kratki cijeli broj  unsigned short      2                   0 do 65535                       |
|bez predznaka                                                                                |
+---------------------------------------------------------------------------------------------+
|Dugi cijeli broj    unsigned long       4                   0 do 4294967295                  |
|bez predznaka                                                                                |
+---------------------------------------------------------------------------------------------+
|Broj s pomicnim     float               4                   ca. -3.4E38 do -1.2E-38          |
|zarezom obicne                                              i 1.2E-38 do 3.4E38              |
|preciznosti                                                 (preciznost 7 decimalni mjesta)  |
+---------------------------------------------------------------------------------------------+
|Broj s pomicnim     double              8                   ca. -1.8E308 do -4.9E-324        |
|zarezom duple                                               i 4.9E-308 do 1.8E308            |
|preciznost                                                  (preciznost 19 decimalni mjesta) |
+---------------------------------------------------------------------------------------------+


Ove navedene vrijednosti za float i double ovise o inernom prikazu, znaci binarnom kodiranju.
Cesto kod prebacivanja brojeva sa zarezom iz binarni u decimalne brojeve zna doci do problema sa zaokruzivanjem.

najlakse vam je provjerit velicinu tipova na vasem kompjuteru sa sizeof operatorom

primjer:

#include<stdio.h>

int main()
{
  printf("Velicina u byte-ovima za char: %d\n", sizeof(char));
  printf("Velicina u byte-ovima za short: %d\n", sizeof(short));
  printf("Velicina u byte-ovima za int: %d\n", sizeof(int));
  printf("Velicina u byte-ovima za long: %d\n", sizeof(long));
  printf("Velicina u byte-ovima za float: %d\n", sizeof(float));
  printf("Velicina u byte-ovima za double: %d\n", sizeof(double));
 
  return 0;
}


-deklariranje i inicijaliziranje variabli
Variable morete na razlicite nacine deklarirat, mozete navest tip, pa redom sve varible, il u svaki red posebno tip i ime variable. Takodjer ih morete i odmah inicijalizirati. Nemojte zaboravit ; na kraju reda.
Variable koje niste na pocetku inicijalizirali imaje bilo kakvu vrijednost, samo sto se cesto desi da ta vrijednost zna bit nula, al nemojte se oslanjat na to, bolje vam ih je odmah na pocetku inicijalizirati, sto znaci dat im oderdjenu vrijednost.
Prilikom davanja vrijednosti variblama s pomicnim zarezom morate koristiti tocku umjesto zareza za odvajanje. Znaci 3.14 je ispravno, dok 3,14 nije.

primjeri:

int broj1, broj2, umnozak;

int broj1;
int broj2;
int umnozak;

int broj1 = 1, broj2 = 3;

char = 'h';

float = 3.14;


-Konstante
Konstante su vrijednosti kojima na pocetku programa dadnete vrijednost i koje se tokom cijelog programa mogu koristiti, one se uvijek pisu velikim slovima.
primjer za konstantu, definicija i davanje vrijednosti.

#define PI 3.14159
#define OUT_OF_MEM -1


Kad god sada u programskom kôdu napisemo PI ili OUT_OF_MEM, na tom mjestu zapravo stoji njihova vrijednost. Izuzetak je ako je napisanu u paru duplih navodnika, tada oznacava samo dio teksta.

UPDATE 23.09.2009.

 

--Funkcija printf

Funkcija printf je dio standardne C-bibliteke i daje vjerojatno najfleksibilniju mogucnost za ispis podataka na ekran.
Ispis teksta pomocu funkcije printf je jako jednostavna. Pozovite funkciju printf i u paru duplih navodnika napisite tekst koji zelite da se ispise na ekranu

printf("Nekakav tekst za ispis");

Cesto necete morat samo ispisati tekst vec i sadrzaj nekakvi varijabli. Ukoliko zelite ispisat u novom redu vrijednost variable x uz opisni tekst, ucinit cete to na ovaj nacin

printf("\nVrijednost varijable x je: %d", x);

Ukoliko x ima vrijednost 12, na ekranu ce pisat:

Vrijednost varijable x je: 12

Na ovaj nacin predajemo funkciji printf 2 argumenta. Prvi argument je tzv formatstring koji se nalazi u paru duplih navodnika. Drugi argument je ime variable (x), koji sadrzi vrijednost koju zelimo prikazat.
U funkciji printf dajete formatstring, s kojim kazete kako ce ispis izgledati, a on se sastoji od:
-Literalnog teksta koji se ispisuje bas onako kako ga vi upisete. U gornjem primjeru se literalni string proteze od V (prvo slovo u rijeci vrijednost) do znaka za razmak prije %.
-Escape-sequence (neznam hrvatski izraz) daju posebne mogucnosti pri formatiranju. Escpae-sequence se sastoji od jednog backslasha (\) kojeg slijedi jedan znak. U proslom primjeru \n je bila escape-sequence koja predsatvlja znak za novi red. Escape-sequence se koristi takodjer za predstvaljanje posebeni znakova koji su opet escape-sequence.
-Specifikatori pretvorbe se sastoje od znaka za postotak % kojeg slijedi neki drugi znak. Specifikator pretvorbe govori funkciji printf format od varijable koja se ispisuje.

Tabela za escape-sequences

+--------------------------------------+
| Sequence   |  Znacenje               |
+======================================+
|  \a        |  Akusticni signal       |
+--------------------------------------+
|  \b        |  Backspace              |
+--------------------------------------+
|  \n        |  Novi red               |
+--------------------------------------+
|  \t        |  Horizontalni tabulator |
+--------------------------------------+
|  \\        |  Backslash              |
+--------------------------------------+
|  \?        |  Upitnik                |
+--------------------------------------+
|  \'        |  Obicni znak za navod   |
+--------------------------------------+
|  \"        |  Dupli znak za navod    |
+--------------------------------------+


Tabela za specifikatore pretvorbe

+--------------+-------------------------------------+---------------------+
| Specifikator | Znacenje                            | konvertirani tipovi |
+==========================================================================+
| %c           | obicni znak                         | char                |
+--------------+-------------------------------------+---------------------+
| %d           | decimalni broj s predznakom         | int, short          |
+--------------+-------------------------------------+---------------------+
| %ld          | veliki decimalni broj s predznakom  | long                |
+--------------+-------------------------------------+---------------------+
| %f           | broj s pomicnim zarezom             | float, double       |
+--------------+-------------------------------------+---------------------+
| %s           | znakovni string                     | char-Arrays         |
+--------------+-------------------------------------+---------------------+
| %u           | decimalni broj bez predznaka        | unsigned int, short |
+--------------+-------------------------------------+---------------------+
| %lu          | veliki decimalni broj bez predznaka | unsigned long       |
+--------------+-------------------------------------+---------------------+


Primjer:

#include<stdio.h>

int main()
{
  char c = 'h';
  int i = -20;
  float f = 3.14;
  unsigned int ui = 420000000;
 
  printf("znak = %c, decimalni broj s predznakom = %d\n", c, i);
  printf("broj s pomicnim zarezom = %f, decimalni broj bez predznaka = %u", f, ui);
         
  return 0;
}

Sa printf nemorete ispisivati samo vrijednosti varijabli. Mozete koristiti svaki valjani C-izraz. kao npr.:

int x = 5;
int y = 3;
printf("%d", x + y);



jos jednom, konstruktivan feedback je uvijek pozeljan, svejedno dal pozitivan ili negativan

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
Poruka je uređivana zadnji put sri 23.9.2009 14:58 (Amrapheus).
 
16 0 hvala 12
14 godina
neaktivan
offline
C Tutorijal

Daj još dodaj ovo:

 

Deklaracija varijabli:

 

 

cjelobrojna varijabla   -   int (2 bajta)

realna varijabla jednostruke točnosti  -  float (8 decimalnih mjesta) (4 bajta)

realna varijabla dvostruke točnosti   -   double (16 decimalnih mjesta) (8 bajta)

znakovna varijabla   -   char  (1 bajt)

 

Pravila o nazivima varijabli:

 

1.Dozvoljena slova samo engleske abecede (umnožak,umnozak)

2.naziv mora počinjati slovom(1broj,broj1)

3.u nazivu nema razmaka(prvi broj,prvi_broj)

4.imena moraju biti različita od imena funkcija(printf,scanf)

 

oznkate tipova

%d oznaka za ispis/upis cjelobrojnih varijabli

%f oznaka za ispis/upis realnih varijabli

%c oznaka za ispis/upis znakovnih varijabli

 

& - operator koji se stavlja ispred imena varijabli u funkciji scanf

 

 

 

oko za oko,pasta za zube
 
1 0 hvala 0
15 godina
odjavljen
offline
RE: C Tutorijal
dncrmt kaže...

Daj još dodaj ovo:

 

Deklaracija varijabli:

 

 

cjelobrojna varijabla   -   int (2 bajta)

realna varijabla jednostruke točnosti  -  float (8 decimalnih mjesta) (4 bajta)

realna varijabla dvostruke točnosti   -   double (16 decimalnih mjesta) (8 bajta)

znakovna varijabla   -   char  (1 bajt)

 

Pravila o nazivima varijabli:

 

1.Dozvoljena slova samo engleske abecede (umnožak,umnozak)

2.naziv mora počinjati slovom(1broj,broj1)

3.u nazivu nema razmaka(prvi broj,prvi_broj)

4.imena moraju biti različita od imena funkcija(printf,scanf)

 

oznkate tipova

%d oznaka za ispis/upis cjelobrojnih varijabli

%f oznaka za ispis/upis realnih varijabli

%c oznaka za ispis/upis znakovnih varijabli

 

& - operator koji se stavlja ispred imena varijabli u funkciji scanf

 

 

 

Bit ce, bit ce, ovo je samo osnovno, o varijablama ce doc poseban dio, a integer je na danasnjim kompovima 4 Byte-a, mores provjerit s sizeof-om

a tu ima jos i price o long short i sl. bit ce, sutra cu napravit update i prosirit sadrzajem o variablama

 

 

& je address of operator, odnosno daje ti adresu pod kojom se variabla nalazi u memoriji

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
Poruka je uređivana zadnji put sri 16.9.2009 20:52 (Amrapheus).
14 godina
neaktivan
offline
C Tutorijal

Pohvala za trud,odličan tutorijal,ali nije mi jasan redoslijed.Mogao si prvo opisat osnovne funkcije,što je deklaracija,a što algoritam i onda krenuti na opće poznati Hello world primjer funkcije printf.Pa onda objasniti funkciju scanf,pa napisati primjer učitavanja,itd..Ali dobro.

oko za oko,pasta za zube
Poruka je uređivana zadnji put sri 16.9.2009 22:49 (dncrmt).
 
0 0 hvala 0
15 godina
odjavljen
offline
C Tutorijal

Iso sam vise na nacin da ljudi prvo malo vise vide kôd, tako sam i ja otprilike ucio i onda objasnjenje toga sto su vidili, pa onda dublje ulazenje u teoriju i objasnjavanje svega sto su vidili, al vidit ces sutra jos kako ce bit :)

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
 
2 0 hvala 0
15 godina
offline
C Tutorijal

Hvala na tutorijalu, sviđa mi se, ionako nema baš tutova za c na hrvatskom...

Ali nekako mi je ovo zapetljan jezik, c++ se čini dosta razumljiviji.

 

BTW. ima li još koji compiler, taj mi se neće instalirat, postoji li microsoftov kompajler, npr kao Visual studio C++ za c++?

Da se Facebook server sruši 90% mladih palo bi u tesku depresiju. Ako si u onih 10% koji bi im se smijali stavi ovo u potpis
Poruka je uređivana zadnji put sri 16.9.2009 23:52 (xxxxx).
Moj PC  
0 0 hvala 0
15 godina
odjavljen
offline
RE: C Tutorijal
xxxxx kaže...

Hvala na tutorijalu, sviđa mi se, ionako nema baš tutova za c na hrvatskom...

Ali nekako mi je ovo zapetljan jezik, c++ se čini dosta razumljiviji.

 

BTW. ima li još koji compiler, taj mi se neće instalirat, postoji li microsoftov kompajler, npr kao Visual studio C++ za c++?

Skini sebi Code-Blocks, dobijes i editor i gcc compiler s njime, ali skini codeblocks-8.02mingw-setup.exe, onaj drugi je bez compiler-a, editor je dosta dobar. A imas i mogucnost kompiliranja i pokretanja programa preko grafickog sucelja, odnosno bez ukucavanja gcc... samo kliknes na compile and run i ide :)

Takodjer imas i Dev-C/C++ takodjer sa editorom i gcc compiler-om,

 

al ima i tu jedna caka, on kompilira program i kad hoces da ga izvede, on ga odma nakon izvodjenja zatvori prozor, to mores sprijeciti tako da, red prije return 0, napises system(pause);

 

znaci ovak:

 

int main()

{

  //neki kôd

 

  system("pause");

  return 0;

}

 

a mores i sprijeciti u postavkama automatsko zatvaranje prozora, il pokreces preko konzole.

al neznam kako to automatsko zatvaranje iskljucit, to moras malo pogledat, posto radim uvijek preko konzole.

 

nadam se da je pomoglo

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
14 godina
protjeran
offline
C Tutorijal

Može mišljenje?

 

Nemoguće je napraviti tutorijal za programiranje u bilo kojem jeziku na bilo kojem forumu, osim ako nemaš 500 stranica samo tvojih postova.

 

Bolje bi bilo otvoriti temu "pomoć za početnike" ili nešto slično. :)

Life is all about ass; you are either covering it,laughing it off, kicking it, kissing it, busting it, or trying to get a piece of it.
Moj PC  
2 0 hvala 0
15 godina
neaktivan
offline
RE: C Tutorijal
Amrapheus kaže...

Iso sam vise na nacin da ljudi prvo malo vise vide kôd, tako sam i ja otprilike ucio i onda objasnjenje toga sto su vidili, pa onda dublje ulazenje u teoriju i objasnjavanje svega sto su vidili, al vidit ces sutra jos kako ce bit :)

Dobro si napravio, svaka čast na trudu. Ali pošto je to za početnike, nisi trebao komplicirati sa int product, kad si množenje mogo komotno rješiti u int mainu, dapače, odma u printfu...

xxxxx kaže...

Hvala na tutorijalu, sviđa mi se, ionako nema baš tutova za c na hrvatskom...

Ali nekako mi je ovo zapetljan jezik, c++ se čini dosta razumljiviji.

 

BTW. ima li još koji compiler, taj mi se neće instalirat, postoji li microsoftov kompajler, npr kao Visual studio C++ za c++?

Imaš Microsoft Visual C++, imaš Dev-C++, imaš Code::Blocks. Visual je još dosta težak za snalaženje početnicima... Moja preporuka za početnike je definitivno Dev-C++.

I see offline people!
15 godina
odjavljen
offline
RE: C Tutorijal
Buffer Overflow kaže...

Može mišljenje?

 

Nemoguće je napraviti tutorijal za programiranje u bilo kojem jeziku na bilo kojem forumu, osim ako nemaš 500 stranica samo tvojih postova.

 

Bolje bi bilo otvoriti temu "pomoć za početnike" ili nešto slično. :)

 

Nece biti bas toliko opsirno, al polako krenit, malo po malo pisat i bit ce toga vec, al sad ce se svakako vise odnosit sve na primjere i njihovo objasnjavanje.  Jos malo da pojasnim varijable, a onda cu vise objasnjavat i o petljama i o array-ima, staticnom i dinamicnom alokiranju memorije, al vise ce se oslanjat na primjere i njihoo objasnjenje, al polako, tek je krenilo :)

A vidis, nije ti ni to losa ideja, sa temom "pomoc za pocetnike" dalo bi se realizirat. Ja bi uvijek mogo pomoc sto se tice C-a :)

 

Sused kaže...
Amrapheus kaže...

Iso sam vise na nacin da ljudi prvo malo vise vide kôd, tako sam i ja otprilike ucio i onda objasnjenje toga sto su vidili, pa onda dublje ulazenje u teoriju i objasnjavanje svega sto su vidili, al vidit ces sutra jos kako ce bit :)

Dobro si napravio, svaka čast na trudu. Ali pošto je to za početnike, nisi trebao komplicirati sa int product, kad si množenje mogo komotno rješiti u int mainu, dapače, odma u printfu...

To sa int product se vise odnosilo na primjer funkcije, kako joj predat argumente i povratna vrijednost. Mislim da sam i napiso da se nebi trebale funkcije koristit za tako jednostavne stvari :)

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
14 godina
protjeran
offline
RE: C Tutorijal
Amrapheus kaže...

 

Nece biti bas toliko opsirno, al polako krenit, malo po malo pisat i bit ce toga vec, al sad ce se svakako vise odnosit sve na primjere i njihovo objasnjavanje.  Jos malo da pojasnim varijable, a onda cu vise objasnjavat i o petljama i o array-ima, staticnom i dinamicnom alokiranju memorije, al vise ce se oslanjat na primjere i njihoo objasnjenje, al polako, tek je krenilo :)

________________________________________________________________________________________________________________________________

A vidis, nije ti ni to losa ideja, sa temom "pomoc za pocetnike" dalo bi se realizirat. Ja bi uvijek mogo pomoc sto se tice C-a :)

To sa int product se vise odnosilo na primjer funkcije, kako joj predat argumente i povratna vrijednost. Mislim da sam i napiso da se nebi trebale funkcije koristit za tako jednostavne stvari :)

_________________________________________________________________________________________________________________________________

Mislim ideja je dobra da ne krivo shvatiš. Na kraju se najbolje orijentirati na pomoć jer kao što valjda i sam znaš da bi trebao knjigu napisati ako bi htio napraviti tutorijal. Ali svejedno dobra ideja. C-om se danas rijetko tko bavi, jer svi se orijentiraju na C++ i C# i ostale moderne jezike. C ima jednu 'moć' koju drugi nemaju i mislim da bi svaki ozbiljan programer trebao znati barem osnove C-a.

Life is all about ass; you are either covering it,laughing it off, kicking it, kissing it, busting it, or trying to get a piece of it.
15 godina
odjavljen
offline
RE: C Tutorijal
Buffer Overflow kaže...

Mislim ideja je dobra da ne krivo shvatiš. Na kraju se najbolje orijentirati na pomoć jer kao što valjda i sam znaš da bi trebao knjigu napisati ako bi htio napraviti tutorijal. Ali svejedno dobra ideja. C-om se danas rijetko tko bavi, jer svi se orijentiraju na C++ i C# i ostale moderne jezike. C ima jednu 'moć' koju drugi nemaju i mislim da bi svaki ozbiljan programer trebao znati barem osnove C-a.

Razumijem sto hoces rec i hvala ti na ideji za temu za pomoc pocetnicima, napisao sam i da si mi ti dao ideju, ukoliko ti se to nesvidja uredit cu post

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
15 godina
neaktivan
offline
RE: C Tutorijal

Mišljenja sam da je dobro krenuo i ako drugi malo ispravljaju ili nadopunjavaju nije bed.Zato sam mišljenja da neće biti samo njegovih "500" postova.
A također ima mali milion tutova na netu ,ali malo na hrvatskom ili su u nekim mega začecima i ne zadovoljavaju potrebe kad se krene s kompliciranijim primjerima,stoga piši kad stigneš,objašnjavaj polako i nudi primjere pa i riješene zadatke....što jednostavnije objašnjenje je najbolje ...nudi i linkove na riješene zadatke ili stranice koje porvrđuju tvoje riječi i slično....pa polako ..i zašto se ne bi isplatilo....osobno zadovoljstvo ..i to je nešto...a baš tuta na hrv. o c-u nisam naletio niti nešto konstruktivno našao.Samo djelomično dovršene tutove.(Ne govorim o engleskim ,jer će se sad naći forumaši koji će ponuditi gooomilu linkova na engleske tute)..svakako da se engleski mora znati za programiranje ali ovdje nije o tome riječ.

Private
15 godina
odjavljen
offline
C Tutorijal

Napravio sam update tutoriala, dodao sam sadrzaj o varijablama, kasnije ce biti vise primjera, i dalje konstruktivan feedback pozeljan ;)

 

u slijedecem update-u objasnit cu if, else, switch i petlje for, while i do while

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
Poruka je uređivana zadnji put čet 17.9.2009 17:04 (Amrapheus).
 
0 0 hvala 0
14 godina
protjeran
offline
C Tutorijal

Dodajem naredbe koje treba izbjegavati ako je moguće tijekom programiranja.

 

Sljedeće naredbe su nesigurne zbog buffer overflow-a:

 

  • strcpy()
  • strcat()
  • gets()
  • sprintf()
  • scanf()

Sljedeće naredbe su podložne format string exploit-ima:

 

  • ][f]printf()
  • [v]snprintf()
  • syslog()

 

Dalje imamo podložne tzv race condition:

 

  • access()
  • chown()
  • chgrp()
  • chmod()
  • tmpfile()
  • tmpnam()
  • tempnam()
  • mktemp()

 

Sljedeće tzv shell metacharacter opasnosti

 

  • exec() obitelj
  • system()
  • popen()

 

Loša akvizicija nasumičnih brojeva kao što je random()

 

Ispričavam se zbog engleskih naziva, ali posao zahtijeva to od mene pa sam zaboravio hrvatske nazive :D

 

 

Life is all about ass; you are either covering it,laughing it off, kicking it, kissing it, busting it, or trying to get a piece of it.
Poruka je uređivana zadnji put čet 17.9.2009 15:19 (Buffer Overflow).
Moj PC  
0 0 hvala 0
14 godina
protjeran
offline
RE: C Tutorijal
itf4n kaže...
Buffer Overflow kaže...

I zato jer ima sigurnijih alternativa.

 

Stvarno? Nisam upoznat s time, možeš li mi napisati koje su to (npr. od strcpy(...))?

svakako:

 

strlcpy

Life is all about ass; you are either covering it,laughing it off, kicking it, kissing it, busting it, or trying to get a piece of it.
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
RE: C Tutorijal

Ovisi o OS-u(strlcpy)...

 

Private
15 godina
offline
C Tutorijal

Mislim da bi modovi trebali pobrisat sve postove iz ove teme osim prvog, da se tutorial može nastavit normalno pisati.

Da se Facebook server sruši 90% mladih palo bi u tesku depresiju. Ako si u onih 10% koji bi im se smijali stavi ovo u potpis
Moj PC  
1 0 hvala 0
15 godina
odjavljen
offline
RE: C Tutorijal
xxxxx kaže...

Mislim da bi modovi trebali pobrisat sve postove iz ove teme osim prvog, da se tutorial može nastavit normalno pisati.

Mozda i jest, jer sam htio nak i nak u sklopu obrade stringova obradit dio tih funkcija, samo sto preko vikenda bas nisam stigo pisat tut, al od danas nastavljam :)

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
15 godina
odjavljen
offline
C Tutorijal

UPDATE je napravljen, dodo sam toga dosta o koristenju funkcije printf

ipak je doslo malo do promjene u planu, prvu cu objasnit printf i scanf, pa onda if, else, switch i petlje.
ostao je jos scanf, pa ce doc onda i ovo zanimljivije na red :)

When life gives you lemons throw them at the mean people and hope it gets them in the eyes.
 
0 0 hvala 0
14 godina
neaktivan
offline
C Tutorijal

ima dosta tutoriala u C_u vecinom skripti sa raznoraznih faxeva,u nekima dobro objasnjeno u nekima manje dobro,ugl svakako se cijeni tvoj trud i detaljno objasnjavanje :D

:-:

mali offtopiq:

imam problema sa devc++,kada napisem program iskompajliza ga bez greske i pogrene ali se on odmah zatvori,to vrijedi za bilo koji kod,zanima me ima li tko kakav prijednog kako ti rijesiti?

 

edit:

hvala 1domagoj1 :)

Poruka je uređivana zadnji put uto 16.2.2010 23:55 (Thrash Abaddon).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: C Tutorijal
Thrash Abaddon kaže...

ima dosta tutoriala u C_u vecinom skripti sa raznoraznih faxeva,u nekima dobro objasnjeno u nekima manje dobro,ugl svakako se cijeni tvoj trud i detaljno objasnjavanje :D

:-:

mali offtopiq:

imam problema sa devc++,kada napisem program iskompajliza ga bez greske i pogrene ali se on odmah zatvori,to vrijedi za bilo koji kod,zanima me ima li tko kakav prijednog kako ti rijesiti?

Dodaj na kraj koda (prije return(); naredbe) getch(); ili system("pause"); ili getchar();. Osobno preferiram getch();/getchar();.

Promijenio sam potpis, nisam htio otvarat novu temu pa evo link ovdje - http://www.100mb.nl/
14 godina
neaktivan
offline
RE: C Tutorijal
Thrash Abaddon kaže...

mali offtopiq:

imam problema sa devc++,kada napisem program iskompajliza ga bez greske i pogrene ali se on odmah zatvori,to vrijedi za bilo koji kod,zanima me ima li tko kakav prijednog kako ti rijesiti?

 

edit:

hvala 1domagoj1 :)

 Ne zaboravi dodat #include<conio.h> biblioteku na početku :)

Nista nije sveto sve je bruto i neto, sve je zabava!
15 godina
neaktivan
offline
C Tutorijal

imam jos jedan manji problem,kada se program pokrene konzola u kojoj se ispisuju rjesenja programa ima jako malena   slova tako da jedva ista vidim,u cmdu je font normalan ako to ista znaci :S

pomisljo sam da je problem u kompajleru i njegovom isisivanju ali nisam nigdje naisao na takvu opciju,koristim dev c++,ista stvar je i sa codeblocksom

 
0 0 hvala 0
15 godina
offline
RE: C Tutorijal
Thrash Abaddon kaže...

imam problema sa devc++,kada napisem program iskompajliza ga bez greske i pogrene ali se on odmah zatvori,to vrijedi za bilo koji kod,zanima me ima li tko kakav prijednog kako ti rijesiti?

Moj savjet je scanf("%%"); prije returna. Ne treba nikakav dodatni header, niti se koristi system naredba koja se ne preporuča baš.

16 godina
neaktivan
offline
RE: C Tutorijal
Luuka kaže...
Thrash Abaddon kaže...

imam problema sa devc++,kada napisem program iskompajliza ga bez greske i pogrene ali se on odmah zatvori,to vrijedi za bilo koji kod,zanima me ima li tko kakav prijednog kako ti rijesiti?

Moj savjet je scanf("%%"); prije returna. Ne treba nikakav dodatni header, niti se koristi system naredba koja se ne preporuča baš.

ili stavi:
    system("PAUSE");
prije return 0;

 

EDIT: imaš gore napisane moguće opcije...

Faith is only fiction.
Poruka je uređivana zadnji put ned 21.2.2010 20:40 (D4RKL1NG).
16 godina
offline
RE: C Tutorijal
D4RKL1NG kaže...
Luuka kaže...
Thrash Abaddon kaže...

imam problema sa devc++,kada napisem program iskompajliza ga bez greske i pogrene ali se on odmah zatvori,to vrijedi za bilo koji kod,zanima me ima li tko kakav prijednog kako ti rijesiti?

Moj savjet je scanf("%%"); prije returna. Ne treba nikakav dodatni header, niti se koristi system naredba koja se ne preporuča baš.

ili stavi:
    system("PAUSE");
prije return 0;

 

EDIT: imaš gore napisane moguće opcije...

http://www.gidnetwork.com/b-61.html

ovo su razlozi zašto nije dobro koristiti system("PAUSE");

15 godina
neaktivan
offline
RE: C Tutorijal

Pretjerali ste s tim protiv System Puse ,jednostavno ako koristiš winse otkucaj to ,ako ne otkucaj drugo predloženo ,Linuksaši smirite se.

Private
14 godina
neaktivan
offline
C Tutorijal

Opet vi Linux,Windows.Tolke kratice pišete,dajte nekaj korisno kao prvi post.Ak već nešto bi htjeli naučit da bar imamo tutorijal kak spada.A ne vaša prepucavanja,stavi ovak ili onak.Daj konkretan post,primjer programa,da se vidi kak to izgleda da ima nekakav primjer,a ne ovak bezveze.Ovdje koliko sam primjetio ima i onih koji bi nekaj naučili,pa stoga ili prenesite svoje znanje i nama ili se prepucavajte na pp...

1% sam normalan,75% neuracunljiv,23%zaboravan ali sam 100% otkvacen
Moj PC  
1 0 hvala 0
16 godina
neaktivan
offline
RE: C Tutorijal
Private kaže...

Pretjerali ste s tim protiv System Puse ,jednostavno ako koristiš winse otkucaj to ,ako ne otkucaj drugo predloženo ,Linuksaši smirite se.

Iako sam pobornik cin.get()a, slažem se s ovime: nije najbolji način, ali je prihvatljiv način, i nema smisla zamarati početnika o kvaliteti istoga (ako se ovaj koristi isključivo Windowsima).

The candle flame gutters. Its little pool of light trembles. Darkness gathers. The demons begin to stir.
Nova poruka
E-mail:
Lozinka:
 
vrh stranice