______ _ _____ ___ ________ ________ |\ __ \ / __ \ / /|\ __ \|\ __ \ \ \ \|\ \|\/_|\ \ / //\ \ \|\ \ \ \|\ \ \ \ ____\|/ \ \ \ / // \ \ ____\ \ ____\ \ \ \___| \ \ \ / // \ \ \___|\ \ \___| \ \__\ \ \__\/_ // \ \__\ \ \__\ \|__| \|__|__|/ \|__| \|__| ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ ▒▒ Od Gradimira, za kolege. Gledajte da vas ne uhvate <3. ▒▒ ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ █████ STRUKTURE ██████████████████████████████████████ ● Definisanje strukture pomocu 'typedef'-a. typedef struct mojaStruktura { int ceoBroj; char jedanKarakter; } MOJASTRUKTURA; ● Definisanje pokazivaca na strukturu (trebace) typedef struct mojaStruktura* POKSTRUKTURA; █ Pristupanje strukturi ► Ako se strukturi pristupa staticki (bez pokazivaca): imeStrukt.imeElement; ► Ako se strukturi pristupa dinamicki (sa pokazivacima): imeStrukt->imeElement; █████ JEDNOSTRUKO SPREGNUTE LISTE ████████████████████ ► Vazno je ukljuciti biblioteku zbog malloc() funkcije. ► Kada se novi element dodaje u listu, bitno je inicijalizovati dinamicki. Zasto? Jer sam ja tako rekao. ● Funkcija za prikaz liste void prikaziListu(PCVOR glava) { while(glava != NULL) { printf("%d ", glava->podaci); glava = glava->sledeci; } } ● Funkcija za dodavanje novog el. na pocetak (push) void ubaciNaPocetak(PCVOR* glava, int noviBr) { PCVOR noviCvor = (PCVOR)malloc(sizeof(CVOR)); noviCvor->podaci = noviBr; noviCvor->sledeci = *glava; *glava = noviCvor; } ● Funkcija za dodavanje novog el. na kraj void ubaciNaKraj(PCVOR glava, int noviBr) { PCVOR noviCvor = (PCVOR)malloc(sizeof(CVOR)); noviCvor->podaci = noviBr; noviCvor->sledeci = NULL; PCVOR tekuci = glava; while(tekuci->sledeci != NULL) { tekuci = tekuci->sledeci; } tekuci->sledeci = noviCvor; } ● Funkcija za brisanje elementa sa pocetka void izbaciSaPocetka(PCVOR* glava) { PCVOR pomocni = *glava; (*glava) = (*glava)->sledeci; free(pomocni); } ● Funkcija brisanje elementa sa kraja void izbaciSaKraja(PCVOR glava) { PCVOR tekuci = glava; while(tekuci->sledeci->sledeci != NULL) { tekuci = tekuci->sledeci; } free(tekuci->sledeci); tekuci->sledeci = NULL; } ● Funkcija za pretragu elementa x u listi int search(PCVOR glava, int x) { PCVOR trenutni = glava; while(trenutni != NULL) { if(trenutni->data == x) return 1; trenutni = trenutni->sledeci; } return 0; } ● Funkcija za sortiranje liste void sortListu(PCVOR glava) { PCVOR spori = glava; PCVOR brzi = glava->sledeci; int c; while(spori->sledeci != NULL) { while(brzi != NULL){ if(spori->podaci > brzi->podaci) { c = spori->podaci; spori->podaci = brzi->podaci; brzi->podaci = c; } brzi = brzi->sledeci; } spori = spori->sledeci; brzi = spori->sledeci; } } ● Funkcija za sortiranje liste (Teodorin nacin) void sortListuTeodora(PCVOR glava) { for(PCVOR i = glava; i != NULL; i = i->sledeci) { for(PCVOR j = i; j != NULL; j = j->sledeci) { if(i->podaci > j->podaci) { int x = i->podaci; i->podaci = j->podaci; j->podaci = x; } } } } █████ STRINGOVI ███████████████████████████ ● Spisak funkcija koje mogu da se nadju kao veoma korisne na ispitu, a pripadaju int memcmp(const void *str1, const void *str2, size_t n); /* Uporedi prvih n bajtova str1 i str2 */ void *memcpy(void *dest, const void *src, size_t n); /* Kopira n karaktera iz src u dest */ void *memmove(void *dest, const void *src, size_t n); /* Kopira n karaktera iz src u dest (drugi nacin) */ int strcmp(const char *str1, const char *str2); /* Uporedi 2 stringa */ char *strcat(char *dest, const char *src); /* Doda string na koji *src pokazuje na string na koji *dest pokazuje */ char *strcpy(char *dest, const char *src); /* Prebaci string (ovo znamo svi) */ size_t strspn(const char *str1, const char *str2); /* Vraca duzinu segmenta str1 koji se sastoji samo od elemenata iz str2*/ char *strstr(const char *haystack, const char *needle); /* Pronalazi prvo pojavljanje celog strigna needle u stringu haystack. */ char *strtok(char *str, const char *delim); /* Razbija str u niz tokena, razdvojenih delim karakterom */ █████ DATOTEKE ███████████████████████████████████████ █ Kreiranje datoteke FILE *fptr; fptr = fopen("mojfajl.txt", "w"); Na ovaj nacin kreiramo datoteku sa imenom mojfajl.txt U slucaju da datoteka sa tim nazivom vec postoji, bice obrisan njen sadrzaj. (pogledati rezime za datoteke) █ Funkcije za rukovanje datotekama Obzirom da mi se bas jako ne da da pisem neki tutorial, ispod se nalazi lista funkcija za rad sa txt fajlovima: fopen() // Otvara novi ili postojeci fajlovima fprintf() // Printf, samo za fajlove fscanf() // Scanf, samo za fajlove fputc() // Stampa karakter fgetc() // Cita karakter fputs() // Stampa jednu liniju fgets() // Cita jednu liniju (acalukas) fclose() // Zatvara fajl fseek() // Postavlja kursor na datu poziciju fputw() // Upisuje integer fgetw() // Cita integer ftell() // Vraca poziciju kursora rewind() // Vraca kursor na pocetak █ Funkcije za rad sa bin fajlovima fread(void* buffer, int brBajtova, int br, FILE* fp); fwrite(void* buffer, int brBajtova, int br, FILE* fp) Ove funkcije citaju fajlove u cugu, i zato su dobre za citanje binarnih fajlova. Objasnjeno na primeru: ► FILE *pf; char content[100]; pf = fopen("the_file.txt", "rb"); fread(&content, sizeof(char), 100, pf); printf("\nThe the_file.txt content is':\n %s \n", content); ► FILE *pf; int NUM = 88; int pilido; if((pf = fopen("files/file.bin", "wb")) == NULL){ printf("Error opening file"); exit(1); } if(fwrite(&NUM, sizeof(int), 1,pf) != 1) printf("Error writing file."); fclose(pf); if((pf = fopen("files/file.bin", "rb")) == NULL){ printf("Error opening file."); exit(1); } if(fread(&pilido, sizeof(int), 1,pf) != 1) printf("Error reading file."); printf("\nThe value of NUM read from file is:' %d \n\n", pilido);