Stranica 4 od 4 PrvaPrva ... 234
Prikazujem rezultate 91 do 110 od 110

Tema: Tečaj C-a za sve uzraste by cham3leon

  1. #91
    Senior Member Fight fire with fire
    Datum registracije
    Jan 2006
    Postova
    10.135

    Re: Tečaj C-a za sve uzraste by cham3leon

    kameleonce, jel ima di na netu kakv tut za c za rad s datotekama (sad smo pocli sa .txt fajlovima raditi)? malo bi htjel si to procitati/provjezbat jer nisam bas u toku sa predavanjima (citaj: nejdem na njih)

  2. #92
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    Hm, ne znam ni za jedan na netu. Nisam ni ja dugo radio s datotekama pa se moram prisjetit nekih stvari, ali u pravilu sa txt fajlovima ne bi smjelo bit problema. Napisao bih dio tutorijala za to, ali to je baš daleko od ovoga gdje smo sada, tako da...

  3. #93
    Senior Member Giant leap for forum
    Datum registracije
    Oct 2006
    Lokacija
    Hostile universe
    Postova
    3.468

    Re: Tečaj C-a za sve uzraste by cham3leon

    Mislim da sam nešto od ovoga već kačio, ali evo ovdjeStekstovi koje sam kucao za svoje studente koji ne dolaze na vježbe. Između ostalog, tu je i sažetak rada sa fajlovima. Idi na predavanja, biće ti od koristi.

  4. #94
    Senior Member Fight fire with fire
    Datum registracije
    Jan 2006
    Postova
    10.135

    Re: Tečaj C-a za sve uzraste by cham3leon

    fala burek, bit ce dosta to materijala za pocetak. shvatio sam po vjezbama di je sta i sto je sta, a na predavanja mi se ne isplati ici jer profesor preveliku kolicinu teorije i svega prolazi u sat vremena sto ima za predavanje. jos da ne spominjem da dolazi dosta ekipe kaj nista ne prati i sam buci po ucioni.

  5. #95
    Senior Member Small step for mankind
    Datum registracije
    Mar 2008
    Lokacija
    Valhalla
    Postova
    2.934

    Re: Tečaj C-a za sve uzraste by cham3leon

    Kako da stavim da odabires u kojem ces smijeru ici,ono mozes da odaberes NORTH,WEST,EAST,SOUTH?
    My life for Aiur!

  6. #96
    Member Plants Vs Zombies
    Datum registracije
    Mar 2009
    Lokacija
    Mordor
    Postova
    49

    Re: Tečaj C-a za sve uzraste by cham3leon

    Jel mi moze neko reci kako pokrenuti program koji napises ? koristim Dev-C++.

  7. #97
    Senior Member No Mercy MasaKrisT's Avatar
    Datum registracije
    Feb 2006
    Lokacija
    Pozega, Gosuland
    Postova
    6.367

    Re: Tečaj C-a za sve uzraste by cham3leon

    ctrl+F9 kompajliranje
    ctrl+F10 pokretanje
    Won't Bow Don't Know How.

  8. #98
    Member Plants Vs Zombies
    Datum registracije
    Mar 2009
    Lokacija
    Mordor
    Postova
    49

    Re: Tečaj C-a za sve uzraste by cham3leon

    Fala

  9. #99
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    8. Stringovi

    Eto, nakon velike pauze, uspio sam se odmaknuti od Skyrima i skupiti volje za nastavak tutoriala. Predugo nisam ništa postao ovdje. Još ovo moramo odradit u sklopu tih nizova i sličnog, jer je dosta bitno.

    Dakle, string je samo najobičniji jednodimenzionalni niz kakav smo već prošli u ranijim koracima, jedino što nije definiran kao integer ili floating point, dakle nije kao što smo dosad radili:

    Code:
    int niz[10];
    ...nego je definiran kao character:

    Code:
    char niz[10];
    Dakle, da - nema razlike, jedino što char polja odnosno nizove zovemo stringovi. Postat će nam pogotovo zanimljivi jer je to jedini način da se u programu pohrani neki tekst, riječ, čak i rečenica. Kao niz znakova. No, prije nego što se bacimo na neke praktične stvari sa stringovima postoje neke činjenice koje moramo pojasniti što se tiče character tipa varijable.

    Integer tip varijable u memoriji uzima četiri bajta, a character samo jedan bajt, što će reći da character tip varijable za razliku od integera može pohraniti mnogo manje informacija. Budući da se jedan bajt sastoji od 8 binarnih znamenki, to znači da u njega stane 2^8 brojeva, odnosno od 0 do 255.
    Da, brojeva. Zbunjeni? Kako se sad u character varijablu spremaju brojevi, a rekao sam da služi za pohranjivanje slova i drugih znakova? Jednostavno. Kao što znamo, u računalnoj memoriji spremaju se isključivo brojevi, i to u binarnom obliku, što znači da ne možemo u memoriju fizički zapisati neko slovo. Stoga i naša character varijabla ne može sadržavati ništa drugo doli brojeva. I kako ćemo mi sada u nju spremiti slovo, pitate se. Kao što ste možda već i zaključili, spremat ćemo ih kao brojeve, ali sa nekim kodom koji će nam govoriti koji broj odgovara kojem znaku. Gdje i kako ćete saznati koji broj znači koji znak?




    ASCII standard definira koji broj se pridružuje kojem znaku, a ovo gore je uobičajena ASCII tablica koju treba imati kraj sebe svaki put kad radite sa stringovima.
    Naravno, da biste pisali u char varijablu ili čitali iz nje, ne trebate gledati u tablicu i pisati/čitati isključivo brojeve. Kako biste zapisali veliko X u jednu char varijablu, obje naredbe koje slijede napravit će isto:

    Code:
    c = 88;
    c = 'X';
    S obzirom na to da smo c prethodno deklarirali kao char c; naravno.
    Stavljanje slova u jednostruke navodnike je zamjena za njegovu ascii vrijednost, pa je ovako mnogo jednostavnije raditi sa znakovima. Naravno, ovu istu foru možete iskoristiti kad znakove uspoređujete, dakle, možete raditi ovakve stvari:

    Code:
    if (c == 'X')
    {
    nesto;
    }
    Sad je već mnogo jasnije, zar ne? Krenimo onda reći ponešto o stringovima.
    Jedna stvar koju treba zapamtiti što se stringova tiče jest da ih se ne zapisuje baš ovako kao i svaki drugi niz. Naime, string mora završavati jednim specijalnim znakom koji se piše ovako: '\0' (beksleš-nula). Taj znak se zove terminator stringa, ili nul-terminator, a možda ima i još nekih naziva. Njegova ascii vrijednost je nula, a uz pomoć njega možemo odrediti gdje je stringu kraj, tako da kod čitanja, funkcija koja čita string može odrediti gdje prestaje smisleni dio i informacija koju treba očitati i počinje ono što ju ne bi smjelo zanimati, a nalazi se na idućim memorijskim adresama.
    Zbog terminatora stringa uvijek moramo računati da ostavimo mjesto za jedan znak više, zato jer kad budemo htjeli u neku varijablu napisati "kameleon", zapravo će se u nju zapisati "kameleon\0". Pogledajte sada ovo:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    {
    char c [9]S= "kameleon";
    char *pokazivac;
    
    pokazivac = c;
    
    while(*pokazivac != '\0')
        {
        printf("%c", *pokazivac);
        pokazivac++;
        }
    printf ("\n");
    return EXIT_SUCCESS;
    }
    Ovo se mislim moglo i elegantnije riješiti, ali možda bi vas neke stvari zbunile, pa da ne zapinjemo na tome. Recimo, niz (pa tako i string) je zapravo isto što i pokazivač. U ovom slučaju c je zapravo samo pokazivač ispred kojeg je rezervirano još 9 mjesta u memoriji u kojima će slovo po slovo pisati "kameleon\0", a kad kažemo da želimo dohvatiti c[5], kompajler će srediti da se pokazivač c pomiče do petog elementa niza i dohvati slovo sa te adrese. Iz tog razloga sam jednostavno mogao napraviti pokazivač "pokazivac" i samo napisati da je jednak c-u. To znači da "pokazivac" sada pokazuje na početak stringa "c".
    U petlji smo jednostavno napisali da se ispisuju slova u formatu %c%c%c... i tako dalje, dakle bez razmaka, tako da doista dobijemo riječ, i u svakoj turi se pokazivač miče za adresu naprijed, na iduće slovo. Ovaj printf na kraju nam je samo ubacio novi red nakon ispisane riječi da to sve djeluje nekako urednije.

    A sada ćete vidjeti da je to moglo mnogo jednostavnije.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    {
    char c [9]S= "kameleon";
    
    printf("%s", c);
    
    printf ("\n");
    return EXIT_SUCCESS;
    }
    Iznenađenje, ne? Ne trebamo petlju i ne trebamo ispisivati znak po znak, nego jednostavno u printf funkciji koristimo format specifier %s, što znači string. Taj će nam pročitati cijeli znakovni niz do string terminatora, razmaka, ili novog reda.

    Uf, toliko za sada, popodne ću još napisati nastavak, ima još stvari koje treba proći oko stringova.

    Napomena: Ovaj put sam programirao sve u Linuxu, tako da tu i tamo možda fali neka system("pause") komanda, ali znat ćete već gdje bi se to trebalo nalaziti, ne?

  10. #100
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    Okej, nastavak.

    Ako probate nešto slično ovome i napišete neki svoj kod koji će očitavati rečenice, primijetili ste da će vam
    Code:
    scanf("%s", &mojstring)
    u vaš string zapisati samo prvu riječ rečenice. To je zato jer će scanf na ovaj način očitati tek slova do prvog razmaka. Postoje neke finte kako preko scanf pročitati i razmake koje korisnik upiše, ali nije preporučljivo, jer kad radite takve stvari često se može dogoditi da vam je prostor koji ste rezervirali za znakovni niz premalen u odnosu na ono što bi korisnik mogao upisati, pa bi se moglo dogoditi da se prepišu adrese koje dođu iza toga što se nikako ne smije dogoditi.

    Umjesto toga, postoji primjerice fgets funkcija koja izgleda ovako:

    Code:
    fgets(niz, DULJINA, stdin);
    ...gdje je "niz" neki znakovni niz u koji ćemo spremiti pročitani string, DULJINA označava veličinu tog niza (mora unaprijed biti dovoljno velik za sve što bi korisnik mogao upisati), a stdin znači "standardni ulaz", a to je upis na konzoli, dakle, svaki put kad ovu funkciju pišete da biste očitali ono što je u komandnoj liniji korisnik napisao, ovdje vam mora stajati stdin.

    Također, pošto se većina ljudi koji čitaju ovaj tutorijal zabavljaju sa tekstualnim avanturama, neke bi posebno moglo zanimati i ovakvo dohvaćanje stringova:

    Code:
    scanf("%s %s", &string1, &string2)
    Da, ovdje koristimo ponovo scanf, ali na malo drukčiji način. Ovdje smo rekli scanf funkciji da čita korisnikov input u formatu riječ, razmak, riječ, i to onda povučemo kao dva odvojena stringa. To je za tekstualne igre vjerojatno najbolja metoda jer se obično od igrača traži da napiše neki glagol da označava radnju koju želi napraviti, što će se spremiti u prvi string, i objekta na kojoj se ta radnja vrši što će se spremiti u drugi string.

    Isto tako postoje neke stvari koje često želimo raditi sa stringovima, a za koje već postoje napisane funkcije. Te funkcije se nalaze u libraryju string.h koji morate includeati na početku programa ako hoćete koristiti njegove funkcije.

    A to su:

    strcpy (string1, string2) - kopirat će string 2 u string 1
    strlen (string) - vratit će duljinu stringa ( o funkcijama i kako one vraćaju vrijednosti, pričat ćemo kasnije)
    strcmp (string1, string2) - dosta korisno - usporedit će string 1 i string 2 i vratiti nulu ako su isti
    strcat (string1, string2) - dodat će sadržaj od string2 na kraj string1

    ... i još nekoliko drugih koje možete vidjeti ovdje:

    http://www.cs.cf.ac.uk/Dave/C/node19.html

    Imajte na umu da na programiranju na fakultetima obično budu zadaci da se napiše funkcija koja uspoređuje stringove, ili dodaje string na kraj drugog stringa, a zabrani se korištenje libraryja string.h, što znači da praktički ove strcmp, strcpy i druge morate pisati sami. Ako bude potrebe za tim, možemo i neki takav primjer napraviti.

  11. #101
    Senior Member Giant leap for forum
    Datum registracije
    May 2008
    Lokacija
    Split
    Postova
    3.587

    Re: Tečaj C-a za sve uzraste by cham3leon

    Sumnjam da itko jos prati ovo ali ajmo probat. Koristim se Ms Visual studiom 2010, unutar kojeg biram c++ ali koristim <stdio.h>, printf, scanf... pa ne znam u kojem sam programu Ugl. Pitanje u vezi struktura, koja je razlika u:
    Code:
    typedef struct student
             { 
                   char ime[32];
                   char prezime[32];
                   int brojBodova;
              };
    i

    Code:
    struct student
             { 
                   char ime[32];
                   char prezime[32];
                   int brojBodova;
              };
    ili pak

    Code:
    typedef struct student
             { 
                   char ime[32];
                   char prezime[32];
                   int brojBodova;
              }student1;
    ili na kraju

    Code:
    typedef struct
             { 
                    char ime[32];
                    char prezime[32];
                    int brojBodova;
              }student;
    Pretpostavljam da sam neke mozda i krivo napisa, ali sam po internetu, pdf.ovima, knjigama nasa vise razlicitih nacina zapisivanja tako da mi se sve skupa izmijesalo

  12. #102
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    typedef nije zapravo potreban kod definicije struktura. To je ključna riječ kojom definiraš "novi" tip podatka od nečega. Može se kasnije u kodu za svaku novu varijablu iznova navoditi "struct student", ali da bi bilo urednije, obično se napravi typedef pa nazoveš taj "struct student" nekako drukčije. E sad, ja sam ga uvijek radio tako da sam prvo napisao struct student, pa ova definicija polja i sve, pa onda:
    Code:
    typedef struct student učenik;
    ...čime dobijem tip varijable učenik koji će bit zapravo struktura "student". Ne znam što bi se točno dogodilo ako napišeš ovako ko u prvom slučaju, da li bi student onda automatski postao type pa bi se varijable s njim mogle odmah definirati kao "student nešto;" bez ključne riječi struct. Trebalo bi probat. Ako se ne varam, zadnji primjer ti je isto to, samo što možeš navesti ime strukture na kraju. Međutim, slučaj #3, odnosno kad si već dao gore ime strukture, a staviš još nešto poslije vitičaste zagrade, znači da želiš odmah instancirati neke varijable nakon definicije strukture. U ovom slučaju imat ćeš odmah varijablu student1 koja je tipa strukture student.

  13. #103
    Senior Member Giant leap for forum
    Datum registracije
    May 2008
    Lokacija
    Split
    Postova
    3.587

    Re: Tečaj C-a za sve uzraste by cham3leon

    A ako napisem shemu po drugoj opciji, znaci struct student, i kasnije ovo sta si navea typedef... jel mi se moze isto zvat tip varijable u prvom i drugom slucaju? Znaci jel mogu stavit struct student {...}; pa onda typedef struct student student; ? I mnogo hvala na brzom odgovoru !

  14. #104
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    Ne možeš. O tome treba vodit računa da znaš kako ćeš nazvat strukturu, a kako type.

  15. #105
    Senior Member Giant leap for forum
    Datum registracije
    May 2008
    Lokacija
    Split
    Postova
    3.587

    Re: Tečaj C-a za sve uzraste by cham3leon

    Neizmjerno hvala na kratkom i jasnom objasnjenju Izgleda da moze i sa typedef struct student {...}; I napokon da uvidim razliku izmedju typa i strukture. Znaci u tvom slucaju sta si navea Ucenik bi bija type a student ime strukture? Samo cu to jos pitat

  16. #106
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    Da, tako je.

  17. #107
    Senior Member Giant leap for forum
    Datum registracije
    May 2008
    Lokacija
    Split
    Postova
    3.587

    Re: Tečaj C-a za sve uzraste by cham3leon

    Jedno kratko pitanje o prioritetima operatora.

    ++ -- Suffix/postfix increment and decrement Left-to-right

    ++ -- Prefix increment and decrement Right-to-left


    Što ovo točno znači glede prioriteta operatora? Općenito me to bunilo oduvijek, a sad se opet vraća

  18. #108
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    Pa iskreno to meni nije ni dan danas sjelo. Trebalo bi se raditi o razlici ako operator ++ staviš prije imena varijable ili poslije njega. Na primjer prema tome a++ nije isto što i ++a, iako oba naravno rade istu stvar - inkrementiraju varijablu. Ovaj prefiksni tip bi trebao inkrementirati varijablu prije drugih operacija, a sufiksni obratno, ali sad nisam ziher da li for petlja koja ima u koraku prefiksni tip prvo inkrementira broj pa izvrši kod unutar zagrada, ili je svejedno koji tip se koristi. Ali uglavnom, postoje sigurno neki slučajevi gdje ćeš dobiti različite rezultate zavisno gdje staviš ++.

  19. #109
    Senior Member Giant leap for forum SharpDressedChevap's Avatar
    Datum registracije
    Feb 2010
    Postova
    3.820

    Re: Tečaj C-a za sve uzraste by cham3leon

    Cham, očekuj neka pitanja kroz slijedeću godinu, počinje mi programiranje
    Jel uopće bitna razlika C i C++, nešto mi je i Del govorio o tome?
    Svi smo mi Mirko.

  20. #110
    Senior Member You have been warned cham3leon's Avatar
    Datum registracije
    Oct 2007
    Lokacija
    Rijeka
    Postova
    18.414

    Re: Tečaj C-a za sve uzraste by cham3leon

    C++ je "samo" nadogradnja na C koja donosi neke dodatke, naprednije tipove podataka, i ono najvažnije, objektno orijentirano programiranje.
    Mada ono što Carp radi na faksu u C++ nema prevelike veze sa OOP, oni rade iste stvari koje bi se mogle napraviti u C-u, samo što koriste funkcije koje su sastavni dio C++.

Pravila postanja

  • Ne možeš stvarati nove teme
  • Ne možeš odgovarati na postove
  • Ne možeš slati privitke
  • Ne možeš mijenjati svoje postove
  •