Limbajul c si C++ abc-doar



Yüklə 4,6 Mb.
səhifə37/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   33   34   35   36   37   38   39   40   ...   55

{ clrscr();

for (x=0;x<8;x++)

{ textbackground(x);

textcolor(x+2);

cprintf("Culoarea de fond este: %d \r\n\n",x);

sleep(1);

}}

FUNCTIA textcolor()

-selecteaza culoarea pentru front(culoarea penitei)

SINTAXA GENERALA este: void textcolor(int newcolor);

Functia selecteaza culoarea pentru penita.Nu poate fi apelata pentru

aplicatile Win32 si Win32 GUI.Se pot selecta toate culorile din paleta

grafica,fie utilizand codul numeric,fie codul simbolic al culorii,dupa

cum urmeaza: 0 (BLACK), 1(BLUE), 2 (GREEN), 3 (CYAN), 4 (RED), 5 (MAGENTA),

6 (BROWN), 7 (LIGHTGRAY), 8 (DARKGRAY), 9 (LIGHTBLUE), 10 (LIGHTGREEN),

11 (LIGHTCYAN), 12 (LIGHTRED), 13 (LIGHTMAGENTA), 14 (YELLOW), 15 (WHITE),

128 (BLINK).

Caracterele vor fi afisate in culoarea specificata,doar dupa apelarea

functiei (cele gata afisate raman nemodificate).

Pentru a adauga efectul de stralucire,se va adauga la codul culorii si

128,respectiv codul simbolic 128. EXEMPLU: textcolor(CYAN+BLINK);

Nu toate monitoarele color recunosc si nuantele deschise ale culorilor.

In acest caz,toate culorile LIGHT vor fi egale cu cele DARK.

Functia nu returneaza nici un fel de valori.

EXEMPLU: #include

#include

int x;

main()

{ clrscr();

for (x=1;x<16;x++)

{ textcolor(x+128);

cprintf("Text in culoarea: %d \r\n",x);

sleep(2);

}

textcolor(GREEN+RED);

cprintf("\n\n TEXT");

sleep(3);

}

Observati cum prin combinarea culorilor ROSU si VERDE,se obtine MARO.

Daca realizati aplicatii complexe,in care utilizati o gama foarte larga

de combinatii de culori,puteti realiza o fila separata,in care sa salvati

functii special destinate pentru selectarea culorilor.Salvati fila astfel

realizata ca si fila de tip header (cu extensia .h) si apoi puteti aplica

setarile preferate,pentru orice text sau fereastra de text prin simpla

apelare a functiei dorite.


-271- [ conio.h-textmode() si ungetch() ]

FUNCTIA textmode()

-selecteaza modul ecranului

SINTAXA GENERALA este: void textmode(int newmode);

Functia seteaza modul text al ecranului la valoarea specificata prin

constanta simbolica,dupa cum urmeaza: LASTMODE(revine la setarea pre-

cedenta),BW40(alb-negru/40 coloane),C40(color/40 coloane),BW80(alb-negru/

80 coloane),C80(color/80 coloane),MONO(monocrom/80 coloane) si C4350(EGA/

43 linii si VGA/50 linii).

Functia nu poate fi apelata pentru aplicatiile Win32 si Win32 GUI.

Dupa apelarea functiei,fereastra de text curenta este resetata la valoarea

implicita(egala cu tot ecranul),iar atributele textului sunt resetate la

valorile normale(ca dupa o comanda normvideo() ).

Functia poate fi apelata doar pentru modul text al ecranului(nu si pentru

cel grafic).Pentru modul grafic exista functia restorecrtmode().

Functia nu returneaza valori.

EXEMPLU: #include

#include

main()

{ clrscr();

cprintf("Ecranul la valori implicite \r\n\n");

sleep(3);

textmode(C40);

cprintf("Ecranul cu 40 de coloane !(color) \r\n\n");

sleep(3);

textmode(C80);

cprintf("Revenire la valorile implicite \r\n");

sleep(3);

}
FUNCTIA ungetch()

-elibereaza un caracter in tamponul de memorie

SINTAXA GENERALA este: int ungetch(int ch);

Functia elibereaza un caracter in tamponul de memorie al consolei,astfel

incat caracterul eliberat este primul care va fi citit la o viitoare

comanda getch().Functia esueaza daca este apelata consecutiv inainte de o

noua citire.Functia returneaza caracterul sau EOF in caz de eroare.

EXEMPLU: #include

#include

int w,z,c1;

main()

{ clrscr();

for (z=1;z<5;z++)

{ cprintf("Introduceti un caracter: \r\n");

w=getch();

cprintf("Caracterul ASCII introdus este: %d \r\n");

sleep(2);

clrscr();

c1=ungetch(w);

cprintf("Caracterul introdus a fost returnat !\r\n\n");

cprintf("c1=%d \r\n",c1);

sleep(2); }}


-272- [ conio.h-wherex() si wherey() ]

FUNCTIA wherex()

-returneaza coordonata orizontala a cursorului

SINTAXA GENERALA este: int wherex(void);

Functia returneaza numarul de coloana pentru pozitia actuala a cursorului.

Functia se raporteaza la fereastra de text activa.Nu poate fi apelata

pentru aplicatiile Win32 si Win32 GUI.

Functia returneaza un numar intreg cuprins intre 1 si numarul maxim de

coloane al modului video(coordonata orizontala a cursorului).

EXEMPLU: #include

#include

#include

int x,y;

main()

{ clrscr();

randomize();

for(x=1;x<11;x++)

{ y=random(80);

gotoxy(y,y/4);

cprintf("Cursorul este pe coloana: %d",wherex());

sleep(2);

clrscr();

}}
FUNCTIA wherey()

-returneaza coordonata verticala a ecranului

SINTAXA GENERALA este: int wherey(void);

Functia returneaza numarul de linie pentru pozitia actuala a cursorului.

Functia nu poate fi apelata pentru aplicatiile Win32 si Win32 GUI.

Functia returneaza o valoare intreaga cuprinsa intre 1 si numarul maxim

de linii al modului video(coordonata verticala a cursorului).

EXEMPLU: #include

#include

int x,y;

main()

{ clrscr();

for(x=1;x<7;x++)

{ gotoxy(x*5,x*3);

cprintf("X ");

cprintf("Cursorul este pe linia: %d",wherey());

sleep(2);

clrscr();

}}

Cele doua functii se utilizeaza de obicei impreuna,pentru a determina

pozitia actuala a cursorului in modul text al ecranului.Sunt utile atunci

cand se doreste realizarea unui text cu un anumit format fix,de genul

coloanelor de ziar,tabelelor,chenarelor,casetelor de text etc.Pot fi

utilizate in in cadrul unor algoritmi elementari pentru a realiza efectul

de defilare a textului pe ecran (teletext) etc. sau pot fi utilizate

pentru a citi date dintr-o fila de tip text situate la o anumita pozitie

fixa,pentru a prelua date din tabele sau pentru a realiza jocuri de tip

text (rebus,scrabble etc.).


-273- [ conio.h - window() ]

FUNCTIA window()

-defineste o fereastra activa de tip text

SINTAXA GENERALA este:

void window(int left,int top,int right,int bottom);

Functia defineste pe ecran o fereastra de tip text.Dupa apelarea functiei,

datele de pe ecran vor fi directionate in fereastra nou derfinita.

Fereastra va fi delimitata de coordonatele: left(stanga),top(sus),

right(dreapta) si bottom(jos).Daca se specifica valori incorecte pentru

coordonatele ferestrei,comanda va fi ignorata si se va mentine modul video

actual.Valorile implicite pentru fereastra de tip text cuprinde tot ecra-

nul si are coordonatele(1,1,C,R) unde C este numarul de coloane iar R este

numarul de randuri pentru modul video actual.

Functia nu returneaza valori.

EXEMPLU: #include

#include

int x;

main();

{ clrscr();

for(x=1;x<8;x++)

{ textcolor(x+2);

textbackground(x);

window(x*4,x*2,x*5+10,x*2+2);

cprintf("Fereastra %d ",x);

cprintf("\r\n text...");

sleep(2);

}}
La fel ca si celelalte functii din ,window() nu poate fi apelata

pentru aplicatiile Win32 si Win32 GUI. Functia este un fel de stramos al

ferestrelor din sistemul WINDOWS,dar nu are nici o legatura cu acesta,ci

apeleaza strict la resursele sistemului DOS.Ferestrele nu au butoane de

inchidere si redimensionare si nici alte functii automate asociate,motiv

pentru care necesita prudenta la utilizarea ferestrelor.Daca utilizati

ferestre de tip text,verificati cu atentie toate functiile care se

raporteaza la fereastra activa,nu uitati sa resetati ferestrele atunci

cand nu mai sunt necesare(nu se inchid singure) si apoi sa resetati si

atributele textului,dupa necesitati.Spre deosebire de ferestrele din

sistemul Windows,cele din ASCII DOS pot sa incurce foarte mult derularea

programelor,atunci cand coordonatele ferstrelor sau cele ale functiilor

returneaza valori situate in zone nereprezentabile,etc...

Definitia ferestrelor nu este influentata de stergerea ecranului cu

clrscr().Pentru stergerea unei ferstre,cel mai simplu este sa redefiniti

fereastra dorita,sau sa utilizati normvideo() pentru resetarea valorilor

implicite.Cu putina rabdare,ferstrele de tip text pot contribui la

aspectul grafic al programelor d-voastra,este bine insa sa verificati cu

atentie,pas cu pas,fiecare linie de executie a programului.Eventual puteti

crea o fila de antet (cu extensia .h) in care sa salvati definitia pentru

un anumit numar de ferestre standard,pe care apoi le apelati ori de cate

ori este necesar si respectiv le eliberati cu normvideo().Chiar daca sunt

rudimentare,realizeaza in schimb economie de spatiu,extrem de utila atunci

cand se lucreaza cu texte extrem de mari.


-274- [ io.h - generalitati ]

BIBLIOTECA ANSII C Fila antet

-contine structuri si declaratii pentru rutinele input/output de nivel

inferior (operatii de intrare iesire a datelor in file-la nivel inferior).

Nivelul inferior de integrare a datelor se refera la faptul ca functiile

si rutinele de nivel inferior apeleaza sistemul de operare direct,spre

deosebire de cele care utilizeaza streamuri,tampoane de memorie,rutine de

conversie,rutine de formatare a datelor etc.

Rutinele de nivel inferior pot accesa streamurile standard de intrare

iesire utilizand urmatoarele coduri de manipulare (handles):

0 pentru stdin,1 pentru stdout si 2 pentru stderr.

Rutinele de nivel inferior seteaza variabila globala errno,ori de cate

ori intervine o eroare.Unele dintre ele necesita si prezenta simultana a

altor file de antet (stdio.h,fnctl.h,stat.h,dos.h etc),deoarece utilizeaza

parametri reprezentati prin constante declarate in filele respective.

Rutinele de nivel inferior,prezinta avantajul de a consuma minimum de

memorie de operare,sunt cele mai rapide,apeleaza direct sistemul de ope-

rare,sunt cel mai usor de depanat si cel mai usor de implementat.Dezavan-

tajul consta doar in faptul ca sunt cel mai usor de "virusat".

Spre deosebire de rutinele de nivel inferior,cele cu un nivel superior

de integrare utilizeaza tampoane de memorie si streamuri special destinate

sunt cu un grad inalt de securitate "antivirus",dar sunt greu sau imposi-

bil de depanat de catre alt programator decat cel care le-a implementat.

In plus,cele cu nivel ridicat de integrare,consuma spatii mari de memorie,

sunt mai lente,ocupa procesorul cu operatii multiple de conversie,pot fi

defective prin suprascrierea tampoanelor cu alte date,iar la programele

mari pot bloca memoria de operare cu date inutile,etc...

Unele dintre functiile din io.h necesita si prezenta filei de antet

stat.h in care sunt declarate constantele pentru atributele fisierelor.

Versiunea Turbo C 1.0 (si probabil ca si alte versiuni),nu include fila

respectiva.Puteti copia fila in directorul INCLUDE din alta versiune de

program,sau in lipsa oricarei alte surse,scrieti fila urmatoare:

/* stat.h

definitii pentru functiile ce determina statusul filelor */

# define S_IFMT 0xF000 /*file type mask */

# define S_IFDIR 0x4000 /* directory */

# define S_IFIFO 0x1000 /* FIFO special */

# define S_IFCHR 0x2000 /* character special */

# define S_IFBLK 0x3000 /* block special */

# define S_IFREG 0x8000 /* or just 0x0000,regular */

# define S_IREAD 0x0100 /* owner may read */

# define S_IWRITE 0x0080 /* owner may write */

# define S_IEXEC 0x0040 /*owner may execute */

# define S_ISDIR ((m) & S_IFDIR)

# define S_ISCHR ((m) & S_IFCHR)

# define S_ISBLK ((m) & S_IFBLK)

# define S_ISREG ((m) & S_IFREG)

# define S_ISFIFO ((m) & S_IFFIFO)

# define S_IRWXU 0x01c0 /* RWE permission mask for owner */

# define S_IRUSR 0x0100 /* owner may read */

# define S_IWUSR 0x0080 /* owner may write */

# define S_IXUSR 0x0040 /*owner may execute */

-275- [ io.h - creat() ]

Facultativ,puteti adauga si definitia pentru cele doua functii:stat() si

fstat() si respectiv pentru structura stat,dupa cum urmeaza:

struct stat

{

short st_dev;

short st_ino;

short st_mode;

short st_nlink;

int st_uid;

int st_gid;

short st_rdev;

long st_size;

long st_atime;

long st_mtime;

long st_ctime;

};

int stat(char *path,struct stat *statbuf);

int fstat(int handle,struct stat *statbuf);

Salvati fila cu numele stat.h si apoi copiati fila in directorul INCLUDE,

alaturi de celelalte file antet(Calea completa spre fila trebuie sa fie

de genul: USR\TC\INCLUDE\stat.h ).Pentru redactare si salvare puteti

utiliza editorul din C iar pentru copiere DOS sau Windows.

Pentru orice fel de operatii in file si fisiere,este necesar ca acestea

sa fie create,motiv pentru care,prima functie prezentata este functia

creat().Celelalte vor fi prezentate in ordine alfabetica.
FUNCTIA creat()

-creaza o fila noua sau suprascrie una existenta

SINTAXA GENERALA este: int creat(const char *path,int amode);

Functia creaza o fila noua,la locatia descrisa prin PATH si cu caracterele

specificate prin amode(tipul de acces la fila).Daca fila este in alt

director decat cel curent,este necesara descrierea completa a caii de

acces prin utilizarea semnului \ pentru subdirectoare.Daca la locatia

descrisa prin path exista o fila cu numele specificat,fila respectiva va

fi rescrisa.Tipul de acces la fila,amode,se aplica doar pentru filele

nou create.Fila nou creata va utiliza modul de translatie specificat prin

variabila globala _fmode (poate fi O_TEXT sau O_BINARY).

Daca la locatia specificata exista o fila cu numele specificat,si daca

atributul filei permite accesul la scriere,fila existenta va fi supra-

scrisa,respectiv va fi trunchiata la 0 bytes (va fi stearsa).Puteti uti-

liza functia pentru a elibera datele dintr-o fila,dar,atentie sa nu ster-

geti din greseala file cu date importante.Este bine sa verificati intot-

deauna daca exista file nu numele respectiv,sau sa utilizati de fiecare

data cand creati file noi,o alta extensie(Exemplu: .tx1,.tx2,.tx3 etc...)

Daca la locatia respectiva,exista o fila cu acelasi nume si cu atributul

read-only,fila specificata nu va fi creata(ramane cea originala).

Functia creat() verifica din amode doar daca exista atributul de scriere,

respectiv daca bitul pentru S_IWRITE este 1.Daca bitul pentru S_IWRITE

este 0,fila va fi considerata read-only (din acest motiv este necesara

si fila de antet stat.h cu definitiile constantelor de status).

Pentru amode este necesar sa fie incarcata in memorie si fila .


-276- [ io.h - creat() si access() ]

Pentru amode se pot utiliza urmatoarele valori(constante definite in

stat.h): S_IWRITE -permisiune pentru scriere in file

S_IREAD -permisiune pentru citirea filei

S_IREAD|S_IWRITE -permisiune pentru citire si scriere

Pentru versiunile DOS,permisiunea pentru scriere o implica si pe cea de

citire a datelor,dar este bine sa verificati ce versiune utilizati.

Functia returneaza un numar intreg pozitiv,care va reprezenta si codul

numeric de manipulare a filei (handle) utilizat de multe alte functii.

In caz ca functia nu a fost executata,returneaza valoarea -1,iar in caz

de eroare,seteaza variabila globala errno la una dintre urmatoarele valori

EACCES - permision denied

ENOENT - path or file name not found

EMFILE - too many open files

Functia poate fi ocolita prin crearea de file cu functia open() la care

se utilizeaza optiunea O_CREAT.

EXEMPLU: #include

#include

#include

#include

#include

int handle,dim;

char mesaj[80]="Mesaj de salut !";

main()

{ handle=creat("MESAJ.MMM",S_IWRITE|S_IREAD);

printf("handle= %d \n",handle);

open("MESAJ.MMM",O_RDWR);

write(handle,mesaj,16);

dim=filelength(handle);

close(handle);

printf("Fila nou creata are: %d bytes",dim);

sleep(2);

}

In exemplul de mai sus,dupa crearea filei mesaj.mmm,fila este deschisa,

se scrie mesajul din tamponul mesaj,dupa care se masoara spatiul ocupat

si se inchide fila.Exersati crearea de file,fara deschiderea si scrierea

in ele.Este bine sa utilizati o extensie anume,diferita de cele uzuale

(txt,sys,exe etc...) cu care sa recunoasteti cat mai usor filele create

de d-voastra.
FUNCTIA access()

-returneaza modul de acces la fila (accesibilitatea)

SINTAXA GENERALA este: int access(const char *filename,int amode);

Functia verifica daca fila specificata prin *filename exista si daca poate

fi citita,scrisa sau executata.Valorile posibile pentru amode sunt:

06 -verifica permisiunea pentru citire si scriere a filei

04 -verifica permisiunea pentru citire a filei

02 -verifica permisiunea pentru scriere a filei

01 -executia (ignorata)

00 -verifica daca fila exista

In sistemele de operare DOS,OS/2 si Windows(16 si 32 biti),toate filele

sunt accesibile la citire (00 si 04 returneaza acelasi rezultat).


-277- [ io.h -chmod() ]

In mod similar,pentru sistemul de operare DOS,permisiunea de scriere

implica automat si pe cea de citire,astfel incat valorile amode 06 si 02

sunt echivalente.

Daca numele specificat este numele unui director,functia access veri-

fica doar existenta acestuia (00).

Functia returneaza 0 daca este permis accesul la fila in modul speci-

ficat,sau -1 in caz contrar.In caz de eroare,variabila globala errno este

setata la una dintre urmatoarele valori:

ENOENT -path or file name not found

EACCESS -permission denied

EXEMPLU: #include

#include

#include

char fisier[20];

int x;

main()

{

cprintf("Introduceti numele si extensia fisierului: \n");

scanf("%s",&fisier);

printf("Verificare daca fisierul este accesibil la scriere\n");

x=access(fisier,02);

if (x==0)

printf("Fisierul este accesibil la scriere ! \n");

else

printf("Fisierul nu a fost gasit,sau este inaccesibil ! \n");

sleep(3);

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   33   34   35   36   37   38   39   40   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin