Osnovni koncepti programiranja kroz C

1

Osnovni koncepti programiranja kroz C

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd



Uvod, istorija racunarstva , osnovni pojmovi
Korisceni alati u tutorijalu
Osnovni pojmovi u C-u(preprocesorkse direktive, kljucne reci...)
Tipovi podataka
Nizovi i baratanje sa nizovima
Naredbe, struktura programa i blokovi
Promenljive ( tipovi, dodela, inkrementalni operatori i slicno)
Kontrola toka
Funkcije
Strukture
Pokazivaci
Datoteke
Domaći zadatak Smajli


1. Uvod, istorija racunarstva , osnovni pojmovi
Još u 19.veku, 1820.godine, Čarls Bebidž napravio je mašinu za računanje koja se smatra pretečom današnjeg računara. Njen cilj je bio nalaženje rešenja bilo kog matematičkog izraza za koji znamo redosled operacija. Ta mašina je bila teška oko 3 tone, dimenzija 2x4m i imala je oko 4000 delova.
Početkom 20. veka javlja se ime Alen Tjuring. On je 1943 godine bio angažovan za dešifrovanje nemačkih tajnih poruka. Njegova ideja je bila da pronađe mašinu koja će biti u stanju da svaki problem reši nizom elementarnih operacija.
1945-1947 godine, Džon Von Nojman dao je princip arhitekture današnjeg računara.
1949. EDSAC M. Wikes realizacija programabilnog racunara
1949. UNIVAC Eckert, Mauchly projekat komercijalnog racunara
Istorija računarstva prolazi kroz nekoliko generacija. Prva, 1951-1958 , odlikuje se elektronskim cevima, bušenim karticama, mašinski jezik... Druga, 1959 - 1963 Poluprovodnici za tranzistore, magnetni diskovi i trake, nastanak fortrana, Lisp-a, COBOL-a... Treću generaciju, 1964-1979 odlikuju integrisana kola, MOS memorija, operativni sistemi... I u četvrtoj generaciji koja traje i dan danas odlike su mikroprocesor, personalni računari, internet, jezici specijalne namene....
Istoriju razvoja programskih jezik amožete pogledati na sledećoj slici:



2. Korišćeni alati u tutorijalu
Ovaj tutorijal je zamišljen da početnicima pomogne da savlada osnove programiranja kroz programski jezik C. Za ove potrebe, dovoljno će biti da se da se preuzme DevC++ u kojem možete kompajlirati i pokretati vaše primere. Možete ga preuzeti sa adrese: http://www.bloodshed.net/download.html
Screenshot :

Kompajliranje koda vršite klikom na execute-> compile a ukoliko želite i da ga pokrenete odmah nakon kompajliranja, iz istog menija izaberite opciju compile & run
Za linux možete koristiti gcc i neki editor koji Vam odgovara. Kompajliranje vršite na komandom gcc imefajla.c , koji će generisati a.out koji treba pokrenuti.


3. Osnovni pojmovi u C-u(preprocesorkse direktive, kljucne reci...)
Sad bi smo mogli da počnemo malo da programiramo, zar ne? Ajd, sačekaćemo još malo, da se upoznamo prvo sa osnovnim pojmovima u C programskom jeziku.
Često (da ne kažem uvek) ćete viđati na početku .c fajla znak #. On predstavlja preprocesorsku direktivu.
Način korišćenja je sledeći:
#include<stdio>
i taj deo koda zapravo govori da se sadržaj datoteke stdio.h "nalepi" na mesto vašeg fajla u kojem ste to uneli.
Ukoliko se navede baš tako, u uglastim zagradama, tada će fajl stdio.h biti pronađen u podrazumevanom direktorijumu sa zaglavljima(header fajlovima). Ukoliko želite da ubacite fajl iz vašeg direktorijuma gde je i projekat smešten stavljate ga pod navodnicima:
#include "imefajla.h"
Pored ove direktive, često korišćena direktiva je DEFINE
#DEFINE MAX 100
Uloga ove direktive je da sva pojavljivanja MAX u kodu prilikom kompajliranja zameni sa 100.
Mogu se koristiti i složeniji izrazi oblika:
#define MAX(A, B) ((A)>(B) ? (A) : (B))
koji nalazi maksimum dva broja, a sintaksu ćemo kasnije objasniti, tako da vas ne plaši što ne razumete baš najbolje šta je tu gore napisano i zašto baš tako.
Ključne reči u programskom jeziku su niske karaktera koje se ne mogu koristiti kao imena promenljivih. Te ključne reči su sastavni deo jezika i imaju fiksno značenje.Neke od njih su if, else, for, while, printf... Biće kasnije objašnjeno njihovo značenje.

4. Tipovi podataka

Promenljive i konstante su oblik podataka sa kojima se radi u programu
Deklaracija predstavlja spisak promenljivih koje će se koristiti u programu
Tip određuje skup vrednosti koje ta promenljiva može da uzme.

U C-u postoji više tipova podataka

int - ceo broj
long - dug ceo broj
char - znak, karakter
float - realan broj
double - realan broj dvostruke tačnosti

Primer deklaracije promenljive:
int x;
Primer deklaracije sa inicijalizacijom(dodeljivanje vrednosti prilikom kreiranja te promenljive)
int x=58;
Imena promenljivih mogu da sadrže slova, cifre i znak _
Razlikuju se mala i velika slova. Tako da
int x;
nije isto što i int X;

5. Nizovi i baratanje sa nizovima
Sama reč niz bi trebala da bude dovoljno jasna šta znači. Moguće je napraviti promenljivu koja će da sadrži niz vrednosti nekog tipa. Na primer, želimo da imamo promenljivu koja će da čuva podatke o 7 izvučenih loto brojeva. Ti brojevi su oblika int. Deklarišemo promenljivu na sledeći način
int lotoBrojevi[7];
Time smo omogućili da se u promenljivu lotoBrojevi redom na pozicijama 0,1,2...6 upiše sedam podataka oblika int odnosno ceo broj.
Svakom od tih brojeva pristupamo preko indeksa. Treba naglasiti da u C-u indeksi kreću od nule. Tako da će se na poziciji lotobrojevi[0] nalaziti prvi broj, a na poziciji lotoBrojevi[6] nalaziti poslednji broj.
Ukoliko želimo , možemo i da inicijalizujemo taj niz prilikom deklaracije:
int nizBrojeva[4] = {1,2,3,4}; ili int nizBrojeva[] = {1,2,3};
Primetimo da je u drugom primeru izostavljen broj u uglastoj zagradi koliko podataka će promenljiva da sadrži. Komapjler će to sam da odredi na osnovu podataka koji su dati za inicijalizaciju, tako da je moguće u tom slučaju izostaviti.

Kod inicijalizacije niza oblika char razlikujemo dva slučaja:
char primer1 ={'m','y','c','i','t','y'}
i
 char primer2="mycity";
U primer1 biće rezervisano u memoriji prostora za 6 znakova. U primer2 biće rezervisano 7 zato što se automatski na kraju dodaje i terminirajuća nula koja označava kraj niske.

6. Naredbe, struktura programa i blokovi
Program napisan u c-u mora da ima tzv.main funkciju od koje počinje izvršavanje programa.
Dakle, u ovom delu prvi put pokrećemo jedan programčić koji ništa pametno ne radi već samo dodeljuje vrednost jednoj promenljivoj i štampa je.
kod je sledeći:
#include<stdio> int main(int argc, char *argv[]) {  int x;  x=15;  printf("\n Broj x=%d \n",x);  system("pause");  return 0; }
Ovde imamo najpre direktivu include koja uključuje stdio.h koji predstavlja STANDARD INPUT OUTPUT zaglavlje.
sledeće je int main(int argc, char *argv[]) što predstavlja glavnu funkciju u programu. Funkcije u programskom jeziku C će biti obrađene u jednom od sledećih delova tutorijala.
U daljim koracima, deklarišemo promenljivu x koja je tipa int. Dodeljujemo joj vrednost 15 i štampamo je korišćenjem funkcije printf.
Funkcija printf sadrži \n - stampanje novog reda, zatim string Broj x =%d. Ovo %d govori da će se odštampati ceo broj. Nakon toga se ponovo štampa novi red. Pošto smo rekli da %d štampa ceo broj, moramo i da kažemo iz koje promenljive vadi taj broj. To navodimo nakon zareza , u ovom slučaju to je promenljiva x.
Mogli smo da imamo više štampanja, naveli bi smo više puta %d za ceo broj a iza zareza naveli promenljive koje se štampaju.
Osim celog broja , može da se štampa i :
%f - realan broj
%c - karakter
%s - string

Sledeće što je stavljeno system("pause") , postavljeno je da se prozor koji se otvori pri pokretanju programa ne bi zatvorio odmah nakon štampanja rezultata nego se čeka komanda korsnika pa tek onda nestaje.
return 0 : Naredbom return dajemo povratnu vrednost funkcije. To će biti detaljnije obradjeno u delu o funkcijama. Ovde, ukratko, 0 označava da se program izvršio uspešno.
Nakon pokretanja,, trebalo bi da dobijete sledeći prozor:


Možemo primetiti da smo kod koji se izvršava uneli između vitičastih zagrada. Te vitičaste zagrade označavaju jedan blok u programu.
Čestitam, upravo ste pokrenuli vaš prvi C program.

7. Promenljive ( tipovi, dodela, inkrementalni operatori)
U prethodnih 6 delova tutorijala već su pominjane promenljive. Ovde će biti malo više reči o njima.
Promenljivom se smatra objekat koji može da menja svoju vrednost.
Tipove promenljivih sam već napisao, ali ponoviću ponovo osnovne:
int - ceo broj
long - dug ceo broj
char - znak, karakter
float - realan broj
double - realan broj dvostruke tačnosti
Kada deklarišemo neku prmenljivu, rezerviše se prostor u memoriji za nju ali vrednost joj se ne dodeljuje ukoliko nije inicijalizvana. Tu se mora voditi računa da se takva promenljiva ne poredi kasnije sa nekim drugim promenljivama ukoliko joj nije dodeljena vrednost, jer , može se desiti da je baš u tom delu memorije već sačuvan neki broj i ko zna šta možemo dobiti kao rezultat.
Ukoliko imamo promenljivu koja je celobrojna, dodelu vršimo znakom jednakosti
int promenljiva; promenljiva = 23;
Ukoliko želimo sa standardnog ulaza da učitamo neki broj i da ga štampamo, unećemo sledeći kod: #include<stdio> int main(int argc, char *argv[]) {  int x;  printf("\nUnesite ceo broj x=");  scanf("%d",&x);  printf("\n Broj x=%d \n",x);  system("pause");  return 0; }
Ovde se susrećemo sa novom funkcijom scanf koja ima ulogu da u promenljivu x učita neku vrednost.Prvi argument ove funkcije govori o kom tipu promenljive je reč, u ovom slučaju %d označava da je u pitanju ceo broj. Znak & je referenca, odnosno , daje lokaciju u memoriji gde je smeštena promenljiva x. Bez njega, ne bi bilo moguće upisati vrednost u prmenljivu x i program bi najverovatnije javio grešku pri izvršavanju.
Mi možemo promenljivu x da menjamo, da je uvećavamo , smanjujemo, poredimo sa drugim promenljivama
KOD:
#include<stdio> int main(int argc, char *argv[]) {  int x;  printf("\nUnesite ceo broj x=");  scanf("%d",&x);  printf("\n Broj x=%d \n",x);  if(x==15)     printf("\npromenljiva x je jednaka sa brojem 15");  else    printf("\npromenljiva x nije jednaka sa brojem 15");  x++;  printf("\nsada je promenljiva x = %d",x);  system("pause");  return 0; }
U prethodnom kodu postoje nove stvari. Najpre, nakon štampanja promenljive x vrši se poređenje korišćenjem dvostruke jednakosti ==.
Kasnije će biti objašnjena ključna reč if
Operator ++ primenjen na promenljivu x , uvećava promenljivu za 1, a zatim sledi njeno štampanje. Taj operator je isto kao i da smo napisali x=x+1

8. Kontrola toka
if-else naredba
Sintaksa je oblika:
if(uslov)  iskaz1 else  iskaz2
Ova naredba proverava uslov naveden u zagradi. Ukoliko je ispunjen izvršava se iskaz1. Ukoliko nije, izvršava se iskaz2.
Iskaz koji se izvršava ne mora da bude jedna naredba. Može biti blok naredbi i u tom slučaju se navode između vitičastih zagrada. Videti primer na kraju ovog dela.
while petlja
Ima ulogu da se izvršava potencijalno i beskonačno mnogo puta ako treba sve dok se neki uslov ne zadovolji. Sintaksa je oblika while(uslov)  iskaz
Opet, iskaz može biti blok naredbi koje su između vitičastih zagrada.
for petlja
SIntaksa:
for(exp1;exp2;exp3)  iskaz
Petlja koja počinje od exp1, izvršava se sve dok je ispunjen uslov exp2, a menja se po exp3.
Primer, ukoliko želimo da prođemo kroz neki niz, kao onaj gore u primeru lotoBrojevi uradićemo sledeće:
for(i=0 ; i<=6 ; i++)   printf("%d ",lotobrojevi[i]);
do-while petlja
Sintaksa
do izraz while(uslov)
Naredba se izvršava i onda se izračunava uslov. Ako je on tačan, naredba se ponovo izvršava i sve tako.

break i continue
Ove dve funkcije nam pomažu da prekinemo izvršavanje petlje ili da preskočimo dalje izvršavanje.
Hoćemo na primer da u nizu koji ima milion brojeva da proverimo da li se nalazi broj 754. Mi možemo to da uradimo tako što ga propustimo kroz for petlju, jedan po jedan, i proveravamo da li ima 754. Ali, šta ako je taj broj na 1000-toj poziciji? Zašto onda da idemo do milion kad smo ga već našli. Tu recimo može pametno da se iskoristi break naredba i da se prekine izvršavanje petlje.
Ukoliko recimo želimo nekom nizu da dodamo 5 na pozitivne elemente, možemo da koristimo continue kada naiđemo na negativan, da sa njim ništa ne uradi...

Primer koda gde sam objedinio neke od ovih stvari gore opisanih:
Program učitava 10 brojeva. Zatim učitava još jedan broj , ukoliko se taj broj nalazi u tih 10 štampa se obaveštenje.
#include<stdio> int main(int argc, char *argv[]) {  int x[10];  int i;  int zaPretragu; for(i=0; i <10 ; i++)   {     printf("\nUnesi broj x_%d ",i);     scanf("%d",&x[i]);   }  printf("\n\nUnesi broj koji trazis: ");  scanf("%d",&zaPretragu);  for(i=0;i<10;i++)  {    if(x[i] == zaPretragu)      {      printf("\nPronadjen je trazeni broj");      break;      }  }   system("pause");  return 0; } Vi sad uradite isto preko ostalih petlji.

9. Funkcije
Funkcija u programskom jeziku ima ulogu da obradi neki dobijen podatak i da vrati povratnu vrednost odnosno rezultat ukoliko je to potrebno.
Sintaksa funkcije izgleda ovako:
povratna_vrednost imeFunkcije(argument1,argument2...) { kod koji obradjuje funkcija }
Najbolje da se pojasni kroz jednostavan primer.
Recimo da nam je potrebno da odredimo koji je veci od dva broja. Napisacemo funkciju koja nam to odredjuje i vraca rezultat.
Funkcija treba da vrati rezltat koji je ceo broj(onaj broj koji je veci). Dakle , njen povratni tip ce biti tipa int
Ime funkcije cemo da nazovemo MaxDvaBroja, a u argumentima cemo da imamo broj1 i broj2 koji su takodje tipa int
Program izgleda ovako:
#include<stdio> int MaxDvaBroja(int broj1, int broj2) {  if(broj1>broj2)    {      printf("\nBroj1 je veci od broja2");      return broj1;    }   else if(broj1 < broj2)   {     printf("\nBroj2 je veci od broja1");      return broj2;   }   else    {      printf("\nBrojevi su jednaki");      return broj1;    } } int main(int argc, char *argv[]) {  int broj1;  int broj2;    printf("\nUnesite broj1 = ");  scanf("%d",&broj1);  printf("\nUnesite broj2 = ");  scanf("%d",&broj2);    int veciBroj;  veciBroj = MaxDvaBroja(broj1,broj2);  printf("\n\nRezultat koji je vratila funkcija je %d\n",veciBroj);    system("pause");  return 0; }
Kao sto vidite, funkcija nasa je iznad main programa. To mora da bude tako, jer prilikom prevodjenja programa kada se dodje do funkcije koja se koristi a nije deklarisana nastace problem.
Moguce je samo ubaciti definiciju funkcije u zaglavlje, bez implementacije , a ispod main programa staviti implementaciju i proci ce i to.
Treba napomenuti jednu vaznu stvar u vezi funkcija. Parametri se prenose po vrednsoti. To znaci, da kad prosledimo brojeve iz main bloka u funkciju, funkcija nece baratati sa tim brojevima nego sa njenim kopijama. Kreira se novi stek frejm koji iskopira te vrednosti i sa njima radi. Tako da, ukoliko bi ste trebali da im zamenite mesta ili vrednost ili nešto slično tome, ne bi ste to mogli da uradite jer ćete promeniti lokalnu kopiju te promenljive. Za mogućnost menjanja promenljive, one se moraju slati funkciji uz pomoć referenci, odnosno, davanje adrese memorije gde je ta promenljiva smeštena. No, u ovom , početničkom tutorijalu za sada neće biti reči o tome....
Par slika kako program treba da izgleda koji je gore implementiran:





10. Strukture
Kako shvatiti strukturu? Recimo ovako, na primeru:
Zamislimo da imamo učenika kojeg opisuje
-ime
-prezime
-ocena iz vladanja
Malo je veštački primer ali tu je samo da pokaže šta je struktura:
Dakle, potrebno nam je da napravimo jednu promenljivu koja će da sadrži ta tri podatka.
Način na koji ćemo ovo da uradimo je sledeći:
#include<stdio> struct ucenik {  char ime[20];  char prezime[20];  int ocena; }; int main(int argc, char *argv[]) {  struct ucenik skolarac;  strcpy(skolarac.ime,"nikola");  strcpy(skolarac.prezime,"mycity");  skolarac.ocena = 5;  printf("\nUneli ste ime %s , prezime %s, ocena: %d\n",skolarac.ime, skolarac.prezime, skolarac.ocena);    system("pause");  return 0; }
Najpre, navodimo ključnu reč struct a zatim ime strukture.
Unutar vitičastih zagrada navodimo šta sve opisuje tu strukturu.
Dalje smo u kodu napravili jednu promenljivu koja je tog tipa, struktura tipa ucenik. Onda smo joj uz pomoc funkcije strcpy dodelili vrednosti za ime i prezime a zatim klasicnom dodelom dali i ocenu. Na kraju smo samo štampali taj rezultat.
Dakle, članicama nekog objekta strukture pristupamo uz pomoć nazivObjekta.polje , odnosno korišćenjem tačke pa navođenjem polja koji je potreban.


11. Pokazivači
Pokazivač predstavlja promenljivu koja pokazuje na neku vrednost u memoriji. Dakle, prilikom deklaracije neke promenljive, za tu promenljivu se rezerviše u memoriji određeni prostor koji će da čuva neku vrednost. Pokazivač može da pokazuje na deo memorije u koju je smeštena ta ili neka druga vrednost.
Operator & daje adresu neke promenljive, pa će naredba:pok = &a; dodeliti adresu promenljive "a" promenljivoj pok, pa kažemo da promenljiva pok pokazuje na a. Operator & daje referencu a operator * je operator dereferenciranja
Najbolje da se objasni kroz primer:
#include <stdio.h> #include <stdlib.h> main(){       int x, *p; // imamo promenljivu x i pokazivač koji je oblika x       p = &x;         /* inicijalizacija pokazivača*/       *p = 0;         /* postavlja x na 0*/       printf("x is %d\n", x);     // ukoliko želite da vidite vrednost       printf("*p is %d\n", *p); // ukoliko želite da vidite vrednost       *p += 1;        /* povećava to na šta pokazuje p */       printf("x is %d\n", x);      system("pause"); }

Pokazivači se mogu koristiti i u funkcijama, kao argumenti, ali o tome ne bih sada pisao u ovom tutorijalu jer su ovde predstavljeni uglavnom osnovni koncepti...

12. Datoteke
U ovom odeljku će biti prikazan rad sa datotekama, upis i čitanje iz istih.
Da bi se koristila datoteka moramo najpre da deklarišemo promenljivu koja će biti pokazivač na neku datoteku. Primer FILE *fp;
Da bi smo mogli da koristimo, moramo da je otvorimo. Možemo i nakon deklaracije a možemo i odmah da je inicijalizujemo: FILE* f = fopen("podaci.txt", "w");
U ovom slučaju, prvi argument funkcije fopen predstavlja naziv datoteke, a drugi argument mod u kojem se radi. Osnovni modovi su sledeći

w - otvara datoteku za pisanje. Sve što se do tada nalazilo u datoteci nestaće.
r - otvara datoteku za čitanje
a - otvara datoteku za dodavanje sadržaja na kraj iste.

Ukoliko fajl nije uspešno otvoren funkcija vraća NULL , tako da se korišćenjem jednsotavnog if upita može proveriti da li je uspešno otvoren fajl ili nije.
Funkacija fscanf čita iz fajla f tip podatka d u promenljivu a(i): fscanf(f, "%d", &a[i]);
Funkcije koje se još koriste za rad sa datotekama :
int getc(FILE *fp) - uzima naredni znak iz fajla
fprintf(FILE *fp, "format", vrednost) - upisuje u fajl fp, vrednost oblika "format". Slično kao i printf samo što zahteva i pokazivač na fajl u koji se upisuje.

fclose(FILE *fp) - zatvara fajl i čuva izmene nad istim.

Domaći zadatak
Ajde da procenite koliko ste naučili. Objedinite svoje znanje:
Zadatak: Napravite c program koji treba da čita podatke o korisnicima MyCity foruma. Podaci se nalaze u fajlu "podaci.txt" i oblika su:
Citat:Ime prezime brojPoruka
Dakle, nešto ovog tipa:
Citat:Pera Peric 201
Nikola Nikolic 312
Bojan Bojanic 321
Milena Milenic 432

Podaci se učitavaju u strkturu koja sadrži ta polja a zatim se iz tih struktura štampa na monitor korisnika. Prilikom štampanja, ukoliko korisnik ima 0 poruka, umesto 0 štampati "Korisnik nema poruka"

Dakle, koristićete strukture, fajlove, barataćete sa nizovima, različitim tipovima promenljivih..... Ukoliko negde naiđete na problem, slobodno napišite pa da rešimo

U zdravlje



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Gde nadje bas DevC++, mislim da je njegov "razvoj" totalno zaustavljen a nije ni azuriran vec 100 god.
Ostala free resenja:
wxDevC++
code blocks
M$ C++ express



offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Neka od ažurnijih rešenja su pomenuta i u ovoj temi: http://www.mycity.rs/C/WxDev-C.html. Mojom greškom, na toj temi nije pomenut odlični Eclipse CDT (Eclipse C/C++ Development Tooling).

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Dodate su još dve "glave" i domaći zadatak ako neko hoće da testira svoje znanje.

morando, za ovu svrhu nije toliko bitno koje okruženje koriste. Slažem se da je DevCPP "zastareo" ali služi svrsi u ovom sllučaju.
Tutorijal je namenjen onima koji nisu programirali do sada, a kad naprave svoje prve korake, dalje ce se sami snalaziti....

offline
  • Pridružio: 28 Avg 2009
  • Poruke: 196

Svaka čast za tutorijal baš sam krenu da učim programski jezik C.
Ako možeš malo detaljnije da objasniš petlju i kako jedna procedura poziva drugu proceduru?

offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Bilo bi lakse kad bi napisao sta ti tacno nije jasno i u kom tipu petlje. Pa da to rascistimo, jer ovako bih mogao da pisem nesto sto ti nije od značaja.

Dakle, objasnicu ti for petlju npr malo detaljnije.

Ideja je da ti se neki blok koda ponavlja vise puta sa nekim vrlo malim (uglavnom konstantnim promenama).
Dakle, imas brojač, koliko puta će se nešto izvršiti i imaš naredbe u okviru te petlje.
Recimo, želiš da u neki niz od 30 brojeva upišeš njihove vrednosti. Ti ćeš napraviti petlju koja će se vrteti 30 puta i u okviru te petlje ćeš da u neki prethodno definisan niz da upisuješ vrednosti. Na primer:
for(i=0; i<30; i++) {        scanf("%d",&x[i]); }
Pri tome, x je promenljiva tipa niz i u nju može da stane 30 elemenata.
Indeks niza uvek počinje od nule, tako da ćeš imati i[0],i[1],i[2]....i[29]

offline
  • Pridružio: 28 Avg 2009
  • Poruke: 196

N1k0l4 ::Bilo bi lakse kad bi napisao sta ti tacno nije jasno i u kom tipu petlje. Pa da to rascistimo, jer ovako bih mogao da pisem nesto sto ti nije od značaja.

Dakle, objasnicu ti for petlju npr malo detaljnije.

Ideja je da ti se neki blok koda ponavlja vise puta sa nekim vrlo malim (uglavnom konstantnim promenama).
Dakle, imas brojač, koliko puta će se nešto izvršiti i imaš naredbe u okviru te petlje.
Recimo, želiš da u neki niz od 30 brojeva upišeš njihove vrednosti. Ti ćeš napraviti petlju koja će se vrteti 30 puta i u okviru te petlje ćeš da u neki prethodno definisan niz da upisuješ vrednosti. Na primer:
for(i=0; i<30; i++) {        scanf("%d",&x[i]); }
Pri tome, x je promenljiva tipa niz i u nju može da stane 30 elemenata.
Indeks niza uvek počinje od nule, tako da ćeš imati i[0],i[1],i[2]....i[29]

Ukapirao sam pr. For (i=1; i<=10; i++) ovo će u printf funkcijom da pokaže 1 2 3 4 5 6 8 9 10

Pošto sam ovo ukapirao jel možeš jednostvnim rečima i primerom da opišeš nizove?

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

Niz zamisli kao jedan blok promenljivih od kojih se adresa sledeceg elementa razlikuje za jedan od prethodnog.

Npr umesto da kucas 20 promenljivih x1,x2,x3,x4,x5....x20, kod nizova bi samo trebao da napises ovako: x[20]. Taj broj u uglastoj zagradi se naziva indeks.

Indeksi C jeziku krecu od 0 do n-1 sto znaci da bi pocetni indeks ovog niza x bio 0 a poslednji indeks iliti element ovog niza bi bio 19.

Kako se vrsi upis promenljivih u niz?

Vrsi se jednim for ciklusom. U nasem slucaju bi to izgledalo ovako:

int x[20], i; for(i = 0; i < 20; i++)     scanf("%d", &a[i]);

Ispis niza se takodje vrsi jednim for ciklusom.

for(i = 0; i < 20; i++)     printf("%d\t", a[i])

to je ono najosnovnije sto se nizova tice

offline
  • Pridružio: 28 Avg 2009
  • Poruke: 196

NIx Car ::Niz zamisli kao jedan blok promenljivih od kojih se adresa sledeceg elementa razlikuje za jedan od prethodnog.

Npr umesto da kucas 20 promenljivih x1,x2,x3,x4,x5....x20, kod nizova bi samo trebao da napises ovako: x[20]. Taj broj u uglastoj zagradi se naziva indeks.

Indeksi C jeziku krecu od 0 do n-1 sto znaci da bi pocetni indeks ovog niza x bio 0 a poslednji indeks iliti element ovog niza bi bio 19.

Kako se vrsi upis promenljivih u niz?

Vrsi se jednim for ciklusom. U nasem slucaju bi to izgledalo ovako:

int x[20], i; for(i = 0; i < 20; i++)     scanf("%d", &a[i]);

Ispis niza se takodje vrsi jednim for ciklusom.

for(i = 0; i < 20; i++)     printf("%d\t", a[i])

to je ono najosnovnije sto se nizova tice

A strukture, koliko ja shvatam su celine različitih varijabli za razliku niza koji ima iste varijable. Primer učionica i njen raspored, opišemo je ime jedan string: char ime[5] -broj slova itd... Struktura se zatvara Uglastim zagradama; E sad ako možeš da mi objasniš jednostavnu strukturu. Nešto je slično kao u OOP klasa.

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

Struktura ti predstavlja skup promenljivih koje dele vise istih osobina.

Evo prost primer:
Sta svaki student mora da ima?
Broj indeksa, ime i prezime.

definises structuru uz pomoc rezervisane reci struct i das joj neko ime, u nasem slucaju student

struct student

Otvaras blok. Blok otvaras otvorenom viticastom zagradom i zatvaras zatvorenom viticastom zagradom i tacka-zarezom. untuar bloka definises sta ta struktura sadrzi. Iz naseg primera, nasa struktura student treba da ima broj indeksa (to je celobrojni podatak- int) ime i prezime (oba podatka su stringovi). Stoga definicja strukture student treba da izgleda ovako.
struct student{    int brojIndeksa;    char ime[50];    char prezime[50]; };

Strukture mozes definisani u okviru main funkcije a mozes da ih definises i izvan main funkcije.

U okviru main funkcije, koristis ponovo rezervisanu rec struct, pa ime sturkture koju si ranije definisao, pa zatim upises promenljivu.
int main() {    struct student student1; }
student1 je tom definicijom, dobio sve osobine te struktur (i broj indeksa i ime i prezime).

Ukoliko vrednost neku od tih osobina zelis da promenis, to ces uraditi na sledeci nacin:
student1.brojIndeksa = 159;
sada ce brojIndeksa naseg studenta 1 biti promenjena na 159.

Ukoliko zelis da studentu upises ime ili prezime, to ne mozes uraditi na onaj nacin kako smo promenili vrednost brojai ndeksa, vec za to moras da koristis funkciju strcpy();
strcpy ima dva parametra, prvi parametar je string u koji zelimo da upisemo nesto, a drugi parametar je string koji zelimo da kopiramo u prvi string. Sto znaci da, ukoliko se student zove Pera, moras napisati ovako:
strcpy(student1.ime, "Pera");
Na taj nacin si uspeo da promenis Ime prvog studenta u Pera.

nadam sam ti imalo pojasnio strukture Smile

Ko je trenutno na forumu
 

Ukupno su 1021 korisnika na forumu :: 32 registrovanih, 3 sakrivenih i 986 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: cenejac111, djboj, DPera, draganca, dushan, esx66, Georgius, HrcAk47, janbo, kobaja77, laki_bb, laurusri, Litostroton, MB120mm, Millennium, Milometer, milutin134, mrav pesadinac, Panter, Pikac-47, prashinar, rasok, Rogan33, Srle993, stegonosa, Sumadija34, Tas011, Trpe Grozni, Vlada1389, vladulns, zlaya011, žeks62