KONVERZNE FUNKCIE ASCII do integer
4.7 int atoi(s)
char *s;
Osetry retazec "s" a vracia binarnu hodnotu ASCII cisla .
Konverzia sa ukonci ked sa najde prvy neciselny znak. Ak nebol
najdeny ziaden ciselny znak je vratena hodnota 0. Pred cislom
mozu byt znaky "+" a "-". TRIEDIACE FUNKCIE - SHELL sort
4.8 qsort(list,num_items,size,cmp_fun)
char *list;
int num_items,size;
int (*cmp_fun);
Funkcia zotriedi polozky vzostupne pomocou SHELL sortu .
Vsetky polozky su rovnako dlhe,dlzky "size" (v bytoch) a je
ich "num_items". Polozky su ulozene jedna za druhou zacinajuce
sa na "list", (*cmp_fun") je ukazovatel do funkcie ,ktora
porovnava dva prvky podla "list". Napriklad standartna funkcia
"strcmp" (opisana neskor) moze byt pouzite ked polozky su
retzce. Funkcia vyzaduje dva ukazovatele: (*cmp_fun )(x,y)
a funkcia vracia -1 ak *x<*y
0 ak *x==*y
1 ak *x>*y
Vo vseobecnosti je "list" dvojrozmerne pole dlzky "num_items"
a sirky "size" v bytoch char list [num_items][size];
Funkcia je podrobnejsie opisana v K&R. RETAZCOVE FUNKCIE
POZOR !!! Retazce v C je pole znakov ukoncene prvym '\0'bytom.
4.9 #har *str#at(base,add)
char *base,*add;
vlozi na koniec retazca base retazec add.POZOR!! funkcia si
neosetruje prekrocenie volneho miesta v base a prepise vsetky
znaky retazcom add. Vysledok funkcie je ukazovatel na base.4.10 int strcmp(s,t)
char *s,*t;
Porovnava dva retazce s a t .Vracia 0 ak *s==*t
>0 ak *s>*t
<0 ak *s<*t
4.11 char *strcpy(dest,source)
char *dest,*source;
Funkcie fyzicky prekopiruje retazec "source" do "dest"
4.12 unsigned strlen(s)
Vrati dlzku retazca "s" tj. pocet znakov ukoncenych '\0'. ZNAKOVO ORIENTOVANE FUNKCIE
4.13 int isalnum(c)
char c;
Vracia TRUE (1) ak znak je alfanumericky (pismeno alebo cislo
inac vracia hodnotu FALSE (0).
4.14 int isalpha(c)
char c;
Vracia TRUE ak je znak pismeno .Inac vracia FALSE(skupina 1)
4.15 int isascii(c)
char c;
Vracia TRUE ak znak je typu ASCII (mensi ako o*80 hexa).
4.16 int iscntrl(c)
char c;
Vracia TRUE ak znak je riadiaci
4.17 int isdigit (c)
char c;
Vracia TRUE ak znak je cislo (skupina 1)
4.18 int islower(c)
char c;
Vracia TRUE ak znak je male pismeno (skupina 1)
4.19 int isprint(c)
char c;
Vracia TRUE ak znak je tlacitelny
4.20 int ispunct(c)
char c;
Vracia TRUE ak znak je interpunkcne znamienko (tjm je
tlacitelny ale nie pismeno alebo cislo).
4.21 int isspace(c)
char c;
Vracia TRUE ak znak je medzera tj. medzera,tabulator, ENTER.
(skupina 1)
4.22 int isupper(c)
char c;
Vrcia TRUE ak je znak velke pismeno ('A'-'Z')(skupina 1)
4.23 int tolower(c)
char (c);
Ak je znak velke pismeno ,potom funkcia vracia jeho maly
ekvivalent. inac vracia nezmeneny znak. (skupina 1)
4.24 int toupper(c);
char c;
Opak funkcie tolower() (skupina 1) FUNKCIE NA PRACU S PRIDELOVANIM PAMATE
Detailne su vysvetlene v k&R.Nachadzaju sa v "stdio.h"
4.25 char *calloc(n,size"
unsigned n,size;
Priradi pamat pre "n" prvkov o velkosti "size" bytov . Vracia
ukazovatel na prvy prvok prideleneho pola alebo vracia NULL ak
nie je pre pole dostatocne velka volna pamet:
p=calloc(100,sizeof(int));
Priradi 200 bytov (pole 100 integer cisel). V skutocnosti
priradi viacej bytov ,niektore su pouzite ako riadiace
Obdoba PASCALOVSKEHO prikazu "NEW". INE FUNKCIE
4.28 swap(p,q,length)
char *p,*q;
unsigned length;
Funkcia vymeni pocet bytov "length" z p do q a naopak.Funkcia
sa vyuziva napr v qsort() (skupina 1)
4.29 move(dest,source,length)
char *dest,*source;
unsigned length;
presunie "length" bytov zacinajucich na "source" na "dest".
Presuva tzv nedestruktivnym sposobom tj.nestracaju sa ziadne
byty aj ked sa polia dest source prekryvaju. Kedze funkcia je
zabudovana v systeme je rychla .(skupina 1) VSTUPNO-VYSTUPNE FUNKCIE
I/O funkcie (vstupno/vystupne) v C su riesene cez takzvane
"files" co je vlastne "tok" bytov. Z "filu"(suboru) mozme jeden
byt citat (getc()) alebo pisat (putc()). C jazyk ma 3 standartne
subory "stdin" standartny vstup u SINCLERA klavesnica. "stdout"
standartny vystup tu obrazovka a "stderr" chybovy vystup.Program
moze otvorit subor na microdriveri alebo kazetovom magnetofone.
Detajlnejsi popis vid kapitolu 1.
Funkcie vstupu/vystupu rozdelujeme do 3 kategorii:
-A) Pouziva sa najviac v C programoch. Zabespecuje buferovy
vstup a vystup po jednotlivych znakoch.
-B) b uroven rozsiruje typ a hlavne v oblasti vystupov retazcov
"puts" a formatovaneho vystupu "printf"
-C) su to tzv "raw level" cize uplne najzakladnejsie . Tieto
vyuzivaju potom skupiny A a B. SKUPINA A
4.30 FILE *fopen(name,mode)
char *name,*mode;
Funkcia otvara subor pre vstup alebo vystup mena "name" a
"mode" hovori ci sa jedna o vstup alebo vystup."R" je otvoreny
pre citanie a "W" pre zapis. ak otvorite uz existujuci subor
pre "W" bude existujuci subor zniceny a nahradeny novym. POZOR
mode je retazec a nie znak .Funkcia vracia tzv. file-pointer
(ukazatel do suboru) .Ak nastala pri otvarani chyba bude jeho
hodnota 0 (skupina 1)
4.31 int fclose(fp)
FILE *fp;
Funkcia zatvara subor ktory je otvoreny na "fp" ukazovateli.
(skupina 1).
4.32 int getc (fp)
FILE *fp;
Funkcia cita nasledujuci znak so suboru "fp". Vracia hodnotu
EOF tj.-1 ak bol najdeny koniec suboru. POZOR vystup je typu
integer a nie char (skupina 1).
4.33 int ungetc(c,fp)
int c;
FILE *fp;
Funkcia vklada znak "c" do suboru "fp",tak ze bude dalsi znak
ktory sa nacita funkciou getc() alebo getchar().pri praci s
touto funkciou by ste mali poznat urcite pravidla : do suboru
mozete vlozit maximalne 1 znak ; scanf pouziva ungetc preto
nemozete pouzit tuto funkciu za scanf bez zavolania funkcie
getc().(skupina 1)
4.34 int putc(c,fp)
int c;
FILE *fp;
zapisuje jeden znak do suboru "fp" .Vracia hodnotu znaku ktory
vstupil do funkcie (skupina 1)
4.35 int getchar()
nacitave jeden znak zo standartneho vstupu "stdin". Tato
funkcia prevadza buferovy vstup z klavesnice. Vstupne znaky su
zhromazdene v riadkovom bufery pokial nebol zadany ENTER.
znaky nacitane do bufera je mozmo zeditovat pomocou DELETE.
Pri pisani sa text zobrazuje a na orientaciu sluzi blikajuci
kurzor.(skupina 1)4.36 int putchar(c)
int c;
vklada 1 znak na standartny vystup "stdout". Znak je
vykresleny na tv. Funkcia vracia hodnotu vstupujuceho znaku .
(skupina 1) SKUPINA B
4.37 volny exit(n)
Funkcia je konbinaciou I/O funkcie a systemovej. Uzatvara
vsetky otvorene subory a na vysup program vola fUnkciu _exit()
Parameter vstupujuci do funkcie indikuje jeho uspesnost 0
znamena ok. a ostatne cisle koresponduju zo SPECTRUM chybovymi
spravami,ktora sa vytlaci.
4.38 char *fgets(s,n,fp)
char *s;
int n;
FILE *fp;
Funkcia nacitava retazec "s" z "fp". Nacitavanie sa ukonci ked
sa nacita ENTER ,alebo pokym nebol nacitany znak "n"-1 znak .
(tak ze "n" je dlzka retazca "s"). Retazec bude ukonceny '\0'
znakom ,ktory bude pridany za ENTER . Normalna navratova
hodnota je "s" ,ale ked bol najdeny koniec suboru vracia NULL
4.39 fputs(s,fp)
char *s;
FILE *fp;
Vystup retazca "s" na "fp".
4.40 char *gets(s)
char *s;
Funkcia cita retazec "s" zo standartneho vstupu .Je to obdoba
fgets ,avsak nie je tu ako parameter dlzka retazca a znak
ENTER sa prepise znakom '\0'.
4.41 puts(s)
char *s;
Vystup retazca "s" na standartny vystup (TV)
4.42 printf(control,arg1,arg2,....)
char *control;
Funkcia vyuzivajuca sa na vsetky druhy tlace
:textu,cisel,znakov a retazcov. Ako vystupne zariadenie je
"stdout" cize TV .Parametre "control" je format pre tlac
ostatnych argumentov. Formatovancie parametre zacinaju znakom
% a nasleduje jeden z volitelnych parametrov:
d znamienkove desiatkove cislo
o neznamienkove oktalove cislo
x hexadecimalne cislo
u desiatkove cislo
c znak
s retazec konciaci '\0'
specialne znakove modifikatory
- zarovnavanie tlace podla laveho okraja(
0 doplnenie bezvyznamnymi 0
999 (alebo ine cislo) minimalna dlzka pola pre tlac
.999 pocet tlacenych znakov z retazca
L dlhe data neovplyvnuje
Na vytlacenie znaku % sa pouziva symbol %% v retazci "control"
Funkcia printf patri do skupiny 1. Je potrobnejsie rozobrana v
K&R .
4.43 fprintf(fp,control,arg1,....)
char *control;
FILE *fp;
Chova sa ako printf az na to ze vystup ide na "fp" miesto
"stdout".(skupina 1)
4.44 sprintf(s,control,arg,....)
char *s,*control
Chova sa ako printf okrem toho ze miesto "stdout" je vystup
retazec "s". Pole "s" musi byt dostatocne dlhe na to ,aby
nedoslone k premazaniu (skupina 1)
4.45 scanf(control,arg1,arg2,....)
char *control;
Vsetky argumenty musia byt typu pointer
Funkcia je analogiou BASIC prikazu INPUT , prevadza mnohe
konverzie. Cita znaky zo standartneho vstupu ,interpretuje ich
podla specifikovaneho formatu urceneho v "control" a vysledok
uchovava v argumentoch ktore musia byt typu ukazovatel!!
Retazec "control" obsahuje konverzne prepinace ,ktore budu
pouzite pri spracovani vstupu.
- medzery ,ktore koresponduju z medzeramy na
ekvivalentnych poziciach na vsupe
- lubovolny znak (nie %) musi korespondovat so vstupom
- konverzny prepinac zacinajuci "%", volitelne este
potlacovatelsky znak "*"a cislo specifikujuce dlzku
pola a konvertovaneho znku Konverzna specifikacia urcuje ako sa spracuje vstupne pole .
Normalne bude vysledok ulozeny do premennej na ktoru ukazuje
argument .Cize ako argument sa obycajne pouziva "&"+premenna
(&ptr) .Ak bol pouzity znak "*" potom bude nacitane pole
preskocene a ignorovane. Vstupne pole je definovane ako
retazec znakov bez medzier (okrem tych ktore koresponduju
s medzerami v "control") .Preto sa moze stat ze retazec
"alpha" nemusi suhlasit s retazcom "alp ha" .Pouzitim
ENTER,medzery a tabulatoru mozeme oddelovat polia pre scanf
Konverzne znaky indikujuce interpretaciu vstupneho retazca
a korespondujuce argumenty musia byt ukazovatele splnajuce
pravidla "volania podla hodnoty". Pripustne konverzne znaky su
d ocakava sa desiatkove cislo,korespondujuci argument
musi byt ukazovatel na integer
o ocakava sa oktalne cislo s alebo bez predchadzajuceho
O,integer ukazovatel.
x hexadecimalne cislo s alebo bez Ox,integer ukazovatel
h kratke cislo v tejto implementacii je argument integer
ukazovatel
c jeden znak .Cita sa nasledujuci znak bez ohladu na
medzery a priraduje sa argumentu ktory je typu char
ukazovatel
s retazec .Argument je ukazatel do pola znakov. Retazec
musi byt ukonceny '\0' Konverzne prepinace d,o,x mozu byt postavene za prepinac "l"
ktory v kompilatore udava dlhe cele cisla ,to znamena ze
argumenty ukazuju na long integer. Tu je ignorovany.