Sunteți pe pagina 1din 5

50. Tipul de date enumerarea.

Declaraia unui tip de date enumi variabilele de tip enum


Exist situaii n practica n care un program trebuie s prelucreze variabile de tip ntreg care au
cteva valori discrete crora li se atribuie o anumit semnificaie. Spre exemplu, un program care
prelucreaz date calendaristice va trebui s poat prelucra variabile care semnific zilele sptmnii. n
acest caz, se poate stabili o convenie prin care fiecrei zile din sptmn i se atribuie o valoare
ntreag (spre exemplu ziua de luni se reprezint prin valoarea 0, ziua de duminica se reprezint prin
valoarea 6):
.
, .
, ,
. .
, , . ,
duminica };
Sintaxa complet pentru declararea unei enumerri este urmtoarea:
enum nume_enumerare {
constanta1 = valoare1,
constanta2 = valoare2,
...,
constantaN = valoareN
} variabila1, ...,variabilaN;
n aceasta declaraie, nume_enumerare este opional, dar dac se specific, se pot crea ulterior i
alte variabile ntregi asociate acestui tip (enum zile azi; enum zile ieri). De asemenea, valorile valoare1 ...
valoareN, asociate fiecrei constante sunt opionale. Dac nu se specific explicit, se aplic urmtoarea
regul:

pentru prima constant, dac nu se specific explicit valoarea, i se atribuie valoarea 0

pentru celelalte constante, dac nu au specificat explicit valoarea dorit, li se atribuie

valoarea constantei precedente + 1


Subliniem faptul ca variabilele declarate pe baza unei enumerari sunt variabile de tip ntreg.
Ulterior, n program, simbolurile constanta1 ... constantaN se trateaz ca orice constante cu valorile
stabilite pe baza regulii precedente i se pot atribui oricror variabile de tip ntreg. Ele sunt associate
enumerrii zile doar pentru a indica intenia programatorului de a folosi aceste variabile pentru a
reprezenta zilele sptmnii, mbuntind claritatea programului.
Odat cu declararea unei enumerari, opional, se pot declara i variabile care s fie associate
acelei enumerri (variabila1 ... variabilaN).
enum gen_substantiv {
neutru, /* valoarea implicit 0*/
feminin = 12, /* valoarea explicit 12*/
masculin /* valoarea implicit 13*/
} gen1, gen2; /* 2 variabile ntregi*/
Evident, aceeai constant (simbol) nu poate s apar n mai multe declaraii de enumerri:
enum zile_weekend { sambata, duminica };
enum zile { luni, marti, miercuri, joi, vineri, sambata, duminica };
/* eroare, constantele sambata i duminica au fost definite deja */
Declararea uneui tip de date enum
rosu,

enum culori {
/* valoare implicit 0 */

verde,
albastru
} c;

/* valoare implicit 1 */
/* valoare implicit 2 */
/* variabila de tip ntreg */

Declararea variabilelor de tip enum (o variabil c)


Direct dup specificarea elementelor enumerrii (prezen a acestei variabile e opt ional)
n funcia main:
enum culori c;
n cazul utilizrii instruciunii typedef:
typedef enum {rosu, verde, albastru} culori;
int main()
{ culori c;

51. Argumentele(parametrii) funciei main()


Pentru a controla execuia unui program, de multe ori este de dorit furnizarea datelor de lucru
naintea lansrii n execuie a programului, acesta urmnd s se execute apoi fr intervenia utilizatorului
(aa-numitul batch mode). Acest lucru se realizeaz prin intermediul parametrilor liniei de comand.
(Un exemplu cunoscut este lansarea compilatorului gcc n linia de comand cu diverse argumente, care i
spun ce
.
,
. , ,
:
.myshell.c
Din punct de vedere al programatorului, parametrii liniei de comand sunt accesibili prin utilizarea
parametrilor funciei main(). Astfel, cnd se dorete folosirea argumentelor liniei de comand, funcia
main() se va defini astfel:
int main(int argc, char *argv[])
Astfel, funcia main() primete, n mod formal, doi parametri, un ntreg i un vector de iruri de caractere.
Numele celor dou variabile nu e obligatoriu s fie argc i argv, dar tipul lor, da. Semnificaia lor este
urmtoarea:
int argc (argument count) - reprezint numrul de parametrii ai liniei de comand. Dup cum se
vede din exemplul anterior, exist cel puin un parametru, acesta fiind chiar numele programului
(numele care a fost folosit pentru a lansa n execuie programul - i care poate fi diferit de
numele executabilului - de exemplu prin crearea unui symlink, n Linux).
char *argv[] (arguments value) - reprezint un vector de iruri de caractere, avnd argc elemente
(indexate de la 0 la argc - 1). ntotdeauna argv[0] conine numele programului.
Parametrii liniei de comand se pot accesa prin intermediul vectorului argv i pot fi prelucrai cu funciile
standard de prelucrare a irurilor de caractere.

52. Directivele preprocesorului include i define. Macro definiie i pseudo funcie

Directiva #define
Directiva define este utilizata pentru a face un program mai usor de parcurs. Sa privim la urmatorul
exemplu:
#define TRUE 1
#define FALSE 0

#define NULL 0
#define AND &
#define OR
|
#define EQUALS ==
gata = TRUE;
Directiva preprocesor incepe cu simbolul # si nu este terminata cu ';'. In mod uzual directivele
preprocesor sunt scrise la inceputul fisierului sursa.
Directivele preprocesor sunt prelucrate de catre compilator inainte de compilarea acestuia. Toate
directivele sunt procesate mai intii, iar simbolurile ce apar in cadrul programului sunt inlocuite de
valoarea lor. De abia dupa aceasta, programul este compilat.
In general, directivele preprocesor sunt scrise cu litere mari
Macroinstructiuni
Identificatorul definit prin # define poate fi substituit cu o instructiune.
Exemplu:
# define SCRIE(n) printf("%.2f \n",n);
main()
{
80%,
,
.

, .
. ...Nu se pot atribui valori constantelor

simbolice.
Astfel, trebuie reinut c define:
permite folosirea constantelor simbolice in programe

uzual, simbolurile sunt scrise cu litere mari

nu se termina cu ';'

apar in general la inceputul unui fisier sursa

fiecare aparitie a simbolului este inlocuita de valoarea sa

Directiva #include
Directiva catre preprocesor include determina includerea unui fisier sursa in
alt fisier sursa.
Directiva
#include <stdio.h>

va cauta fisierul stdio.h in caile specificate in IDE.


pe cind
#include "stdio.h"

va cauta fisierul stdio.h in directorul curent. '.h' este extensia standard a

fisierelor de tip header.

53. Pointer de tip fiier. Deschiderea i nchiderea unui fiier folosind funcia fopen() i
fclose()
Un fiier este o structur dinamic, situat n memoria secundar (pe disk-uri). Limbajul C permite
operarea cu fiiere:
de tip text - un astfel de fiier conine o succesiune de linii, separate prin NL ('\n')
de tip binar - un astfel de fiier conine o succesiune de octeti, fr nici o structur.
Prelucrarea unui fiier presupune asocierea acestuia cu un canal de I/E (numit flux sau stream). Exist
trei canale predefinite, care se deschid automat la lansarea unui program:
stdin - fiier de intrare, text, este intrarea standard - tastatura
stdout - fiier de iesire, text, este ieirea standard - ecranul monitorului.
stderr fiier de iesire, text, este ieirea standard unde sunt scris mesajele de eroare - ecran.
Pentru a prelucra un fiier, trebuie parcurse urmtoarele etape:
se definete o variabil de tip FILE * pentru accesarea fiierului; FILE * este un tip structur definit n
WIRTSCHAFT ENDZEIT-THEORIE

Das Ende des Traums vom ewig wachsenden Wohlstand


Von Tina Kaiser, Chicago

Die Welt hat ihr Antlitz binnen 200 Jahren so gewandelt wie nie zuvor. Die Industrialisierung brachte
Wohlstand und Wachstum. Das ist vorbei, sagt ein Star-konom und macht eine dstere
Prophezeiung mehr...

10:57 239

tip mod.
-Returneaz pointer la fiier sau NULL dac fiierul nu poate fi deschis; valoarea returnat este
memorat n variabila fiier, care a fost declarat pentru accesarea lui.

Modul de deschidere poate fi:


r - readonly , este permis doar citirea dintr-un fiier existent
w - write, creaz un nou fiier, sau dac exist deja, distruge vechiul continut
a - append, deschide pentru scriere un fiier existent ( scrierea se va face n continuarea
informaiei deja existente n fiier, deci pointerul de acces se plaseaz la sfritul fiierului )
+ - permite scrierea i citirea - actualizare (ex: r+, w+, a+). O citire nu poate fi direct
urmat
de o scriere i reciproc. nti trebuie repoziionat cursorul de acces printr-un apel la fseek.
b - specific fiier de tip binar
t - specific fiier de tip text (implicit), la care se face automat conversia CRLF(\n\f) n sau din

Niemand will Jacksons legendre Neverland-Ranch

Seit fast einem Jahr steht das Anwesen des verstorbenen Popstars Michael Jackson fr 100
Millionen Dollar zum Verkauf. Doch wohlhabende Kufer sind zgerlich. Die Immobilie hat nmlich
ein Problem. mehr...

19:06

de citire i de scriere pentru fiiere


Citire/scriere cu format

int fprintf(FILE *fp, const char *format, ...);


int fscanf(FILE *fp, const char *format, ...);
Funciile sunt utilizate pentru citire/scriere n mod text i sunt asemntoare cu printf/scanf (diferena
fiind c trebuie dat pointerul la fiier ca prim parametru).
Citire/scriere la nivel de caracter
int fgetc(FILE *fp); // ntoarce urmtorul caracter din fiier, EOF la sfrit de fiier
char* fgets(char *s, int n, FILE *fp); // ntoarce urmtoarele n caractere de la pointer sau pna la
sfritul de linie
int fputc(int c, FILE *fp); //pune caracterul c in fiier
int ungetc(int c, FILE *fp); // pune c n bufferul asociat lui fp (c va fi urmtorul caracter citit din fp)
Citire/scriere fr conversie
size_t fread(void *ptr, size_t size, size_t nrec, FILE *fp);
size_t fwrite(const void *ptr, size_t size, size_t nrec, FILE *fp);
Cu aceste funcii lucrm cand deschidem fiierul n mod binar; citirea/scrierea se face fr nici un fel de
"Wir haben ja alle Angst, von Flchtlingen berschwemmt zu werden." Nicht so Bernhard Hocker,
der Skeptikern die Flchtlingskrise in 70 Sekunden erklrt.

este un tablou de structuri (dar n loc de structuri putem avea i tipuri simple de date).

S-ar putea să vă placă și