Sunteți pe pagina 1din 36

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra:Atumatica si Informatica

RAPORT
Lucrarea de laborator Nr.7
La Programarea Calculatoarelor

A efectuat: st. Gr. Ai-161

Trofim Petru

A verificat: dr., conf.univ.

Kulev Mihail

Chiinu 2016
Lucrare de laborator Nr.7

Tema: Prelucrarea tabloului de structuri in limbajul C.

[1] Scopul lucrarii: Studierea regulilor de definire si utilizare a structurilor de date;Crearea


variabilelor de tip structura,accesarea componentelor unei structuri;Scriere si utilizarea funciilor
pentru prelucrarea structurilor si a tabloului de structuri; Alctuirea programului cu mai multe
functii cu afiarea menu-ului de opiuni pe ecran.

Sarcina de lucru: Sarcina: De eloborat un program pentru prelucrarea unui tablou de


structuri (dupa varianta), utilizind cel putin 5 cimpuri (membrii structure) cu afisarea meniu-ului
de optiuni pe ecran.

Varianta 5:

Mersul lucrrii:

Notiuni principale din teorie i metode folosite:[2]

Structuri:

In C, un sir de caractere poate fi definit ca un vector de caractere, in doua moduri:

Structurile sunt o facilitate oferit de limbajul C pentru a organiza mai bine datele cu care lucreaz
programele. Dac funciile ne permit s organizm mai bine codul, structurile ne permit s
organizm mai bine datele.

Structura este o mulime de date grupate, conform unei ierarhii, de obicei de tipuri diferite.
Structura poate fi comparat cu tabloul, ns tabloul conine date de un acelai tip, iar elementele
tabloului se acceseaz cu ajutorul indicilor, pe cnd accesarea componentelor structurii are o
form specific. Structura reprezint un tip de date definit de utilizator prin utilizarea tipurilor
deja existente.

Ex.: Utilizind instructiunea typedef si specificator de structura struct putem defeni structura si un
nou tip de date student:

typedef struct student

{ // definirea cimpurilor (membrilor) structurii

char nume[50];

int nr;

float nm;

} student;

Elementele structurii pot fi de tip predefinit sau definit de utilizator, excepie fiind tipul structurii
date. Pentru definirea variabilelor este suficient utilizarea numelui de structur la fel ca tipurile
predefinite: student s1, s2, s[10], *p;
n acest caz s-au definit dou variabile de tip carte, un tablou din 10 cri i un pointer spre
student.

Referirea la componentele unei structuri se face utiliznd att numele structurii ct i a


componentei respective. Aceasta se realizeaz printr-o construcie de forma:

s1.nm = 9.5;

s[i].nm = 8.5;

n cazul pointerilor:

p = &s1;

p->nm = 9.5;

O variabil structur poate fi iniializat la declarare prin precizarea ntre {} a valorilor


cmpurilor; cele neprecizate sunt implicit 0.De asemenea,o varibila structura poate fi transmisa
ca argument efectiv la apelarea unei funcii sau poate fi primita ca rezultat al unei funcii, ntr-o
instruciune return.

Un avantaj important al utilizrii structurilor este c atunci cnd atribuim o variabil de tip
structur unei alte variabile de acelai tip, se copiaz automat toate cmpurile structurii.

n limbajul C putem specifica pentru cmpurile de tip int sau char dimensiunea n bii pe care
s o ocupe. Dimensiunea n bii se specific plasnd imediat dup definirea cmpului
caracterul : urmat de numrul de bii pe care dorim s l ocupe cmpul.

Exemplu:

struct data_biti
{
unsigned int zi : 5;
unsigned int luna : 4;
int an : 15;
};

Dac urmrim (cu ajutorul operatorului sizeof) dimensiunea ocupat de structura redefinit astfel,
vom vedea c este ntradevr de 3 octei.

Principalele avantaje ale utilizrii unor tipuri structur sunt:

Programele devin mai explicite dac se folosesc structuri n locul unor variabile separate.
Se pot defini tipuri de date specifice aplicaiei iar programul reflect mai bine universul
aplicaiei.

Se poate reduce numrul de parametri al unor funcii prin gruparea lor n parametri de
tipuri structur i deci se simplific utilizarea acelor funcii.

Se pot utiliza structuri de date extensibile, formate din variabile structur alocate dinamic
i legate ntre ele prin pointeri (liste nlnuite, arbori .a).
Uniuni:

O uniune este o variabil ce poate stoca la momente diferite obiecte de tipuri i dimensiuni
diferite. Mai explicit, la un moment dat poate fi utilizat (citit, scris, copiat) doar unul din
cmpurile uniunii.
union tip_var{
int i;
float f;
char *s;
} valoare;

Variabilei var_u i se va aloca suficient memorie pentru a putea stoca cel mai voluminos cmp
al su. Este responsabilitatea programatorului s urmreasc ce cmp este stocat n uniune la
momentul curent. Acest lucru se face prin intermediul unei variabile auxiliare, care de regul
formeaz o structur mpreun cu uniunea.

Accesul la cmpurile unei uniuni (citire, atribuire, etc) se face la fel ca i n cazul
structurilor: var_u.f sau ptr_u->f n cazul unui pointer la uniune.
Asupra unei uniuni se pot efectua aceleai operaii ca i asupra unei structuri.
Iniializarea uniunii se va face ntotdeauna cu o valoare de tipul primului su membru.

Fisiere:

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 stdio.h, care conine informaii referitoare la fiier i la tamponul de
transfer de date ntre memoria central i fiier (adresa, lungimea tamponului, modul de
utilizare a fiierului, indicator de sfrsit, de poziie n fiier)
se deschide fiierul pentru un anumit mod de acces, folosind funcia de bibliotec fopen,
care realizeaz i asocierea ntre variabila fiier i numele extern al fiierului
se prelucreaz fiierul n citire/scriere cu funciile specifice
se inchide fiierul folosind funcia de bibliotec fclose.

FILE *fopen(const char *nume_fis, const char *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.

Analiza functiilor:

Meniul Principal...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

typedef struct ruta


{ char num [50];
char tara [50];
int an ;
char compania [50];
int durata;
} ruta;

void reads (ruta*R, int n);


void shows (ruta*R, int n);
int searchs (ruta*R, int n, char*num);
void sorts (ruta*R, int n);
void modifys (ruta*R, int k);
ruta*appends (ruta*R, int*n, ruta ad);
ruta*prepends (ruta*R, int*n, ruta ad);
ruta*inserts (ruta*R, int*n, ruta ad, int k);
ruta*deletes (ruta*R, int*n, int k);
void swaps (ruta*R, int k1, int k2);

int main()
{
int n;
ruta*R;
int k,f,k1,k2;
ruta ad;
char num [50];
int durata ;
char tara[50];
char compania[50];
int an;
int nm;
ruta*B;

while (1)
{
puts ("\t. **********Meniu************* :\n");
puts ("1. Alocare dinamica a tabloului:");
puts ("2. Introduce info despre ruta:");
puts ("3. Afisarea tabloului:");
puts ("4. Cautarea rutei dupa nume:");
puts ("5. Sortarea tabloului:");
puts ("6. Modificarea rutei indicata:");
puts ("7. Adaugarea la inceput:");
puts ("8. Adaugarea la sfirsit:");
puts ("9. Inserarea:");
puts ("10. Sterge ruta:");
puts ("11. Interschimbarea:");
puts ("12. Eliberarea memoriei:");
puts ("0. Iesirea din program");
printf ("Alege obtiunea:");
scanf ("%d", &nm);
switch (nm)

{ case 1:
printf ("Dati n:");
scanf ("%d", &n);
R=(ruta*) malloc (n*sizeof (*R));
if (R==NULL)
{puts("Memoria nu a fost alocata");
exit (1);}
puts ("Memoria a fost alocata");
puts ("Pentru a continua apasati Enter");
getch ();
break ;

case 2:
reads (R,n);
puts("\nTastati Enter pentru a contiuna");
getch ();
break;
case 3:
shows (R,n);
puts("\nTastati Enter pentru a contiuna");
getch ();
break;

case 4:
puts ("Dati numele rutei de cautat:");
fflush (stdin);
gets (num);
k= searchs (R,n,num);
if(k==-1)
{puts ("Ruta nu a fost gasita");}
else
scanf ("%d", &f);
if (f)
{puts ("Info despre ruta cautata: ");
printf ("%d.num :%d tara:%s an:%d compania:%s durata:
%.2f\n",k+1,R[k].num,R[k].tara,R[k].an,R[k].compania,R[k].durata);}

getch();
break ;
case 5:
sorts (R,n);
puts("De afisat info sortata?(1/0)");
scanf ("%d",&f);
if(f)
{shows (R,n);}
getch();
break;

case 6:
printf ("Dati numarul de ordine al rutei de modificat:");
scanf ("%d",&k);
modifys (R, k-1);
getch ();
break;

case 7:
printf("Dati informatie despre ruta de adaugat la inceput:\n");
printf("Nume:");
fflush (stdin);
gets (ad.num);
printf("Tara:");
fflush(stdin);
gets (ad.tara);
printf("An fond:");
scanf ("%d",&ad.an );
printf ("compania:");
fflush(stdin);
gets (ad.compania);
printf("Durata zb:");
scanf ("%d", &ad.durata);
B=appends (R,&n,ad);
if(!B)
{

puts("Adaugarea nu a fost efectauata");


puts("\nTastati Enter pentru a contiuna");
getch(); break;
}
else
{
puts("Operatiunea a fost efectuata cu succes!");
R=B;
puts("\nTastati Enter pentru a contiuna");
getch();
break;
}

case 8:
printf("Dati info despre ruta de adaugat la sfirsit:\n");
printf("Nume:");
fflush (stdin);
gets (ad.num);
printf("Tara:");
fflush(stdin);
gets (ad.tara);
printf("An fond:");
scanf ("%d",& ad.an );
printf ("compania:");
fflush(stdin);
gets (ad.compania);
printf("Durata zb:");
scanf ("%d", & ad.durata);
B=prepends (R,&n,ad);
if(B==NULL)
{

puts("Adaugarea nu a fost efectauata");


puts("\nTastati Enter pentru a contiuna");
getch(); break;
}
else
{
puts("Operatiunea a fost efectuata cu succes!");
R=B;
puts("\nTastati Enter pentru a contiuna");
getch();
break;
}

case 9:
printf ("Dati info despre ruta de inserat:\n");
printf ("Nume:");
fflush(stdin);
gets (ad.num);
printf ("Tara:");
fflush(stdin);
gets (ad.tara);
printf ("An fond:");
scanf ("%d", &ad.an);
printf ("compania:");
fflush(stdin);
gets (ad.compania);
printf ("Durata zb:");
scanf ("%d", &ad.durata);
printf("Dati locul de adaugat");
scanf ("%d",&k);
B=inserts(R,&n,ad,k-1);
if(B==NULL)
{

puts("Adaugarea nu a fost efectauata");


puts("\nTastati Enter pentru a contiuna");
getch(); break;
}
else
{
puts("Operatiunea a fost efectuata cu succes!");
R=B;
puts("\nTastati Enter pentru a contiuna");
getch();
break;
}
case 10:
printf("Dati numarul rutei de sters:");
scanf ("%d",&k);
B=deletes(R,&n,k-1);
if(B==NULL)
{puts ("Memoria nu a fost alocata");}
else
{R=B;}
getch();
break;

case 11:
printf ("Dati numerele de ordine ale elmentelor de interschimbat");
scanf ("%d%d",&k1,&k2);
swaps (R,k1-1,k2-1);
getch();
break;
case 12:
printf ("Doriti sa eliberati memoria dinamica? (1/0):");
scanf ("%d",&f);
if(f)
{ free(R);
R=NULL;
}
getch();
break;

case 13:
printf ("Doriti sa iesiti din program? (1/0):");
scanf ("%d",&f);
if(f)
{ free (R);
return 0;
default:
puts ("Alegerea obtiunea corecta");
getch();
break;

}
case 14:
puts("Dati numele fisierului: ");
fflush(stdin);
gets(filename);
saver(R, n, filename);
puts("Fisierul dumneavoastra a fos salvat cu succes!");
puts("\nTastati Enter pentru a contiuna");
getch(); break;

case 15:
puts ("Dati numele fisierului: ");
fflush(stdin);
gets(filename);
loadr(R, n, filename);
if(!f)
{
puts("Fisierul nu a fost deschis");
}
else
{
puts("Tabloul a fost citit");
}
puts("\nTastati Enter pentru a contiuna");
getch(); break;

}
}
}
}
void reads (ruta*R, int n)
{
int i;
{ puts ("Dati info despre ruta:");
for(i=0;i<n;i++)
{ printf ("ruta %d:",i+1);
printf ("Nume?:");
fflush (stdin);
gets (R[i].num);
printf ("Tara?:");
fflush (stdin);
gets (R[i].tara);
printf ("An fond?:");
scanf("%d",&R[i].an );
printf ("compania?:");
fflush (stdin);
gets (R[i].compania);
printf ("Durata zb?:");
scanf ("%d",&R[i].durata );
}
return ;
}
}
void shows (ruta*R, int n)
{ int i;
puts ("Info despre ruta");
for (i=0;i<n;i++)
{ printf ("%d.num:%s, tara:%s,an:%d,compania:%s,durata:%d\n",
i+1,R[i].num,R[i].tara,R[i].an,R[i].compania,R[i].durata);
}
return ;

int searchs (ruta*R, int n, char*num)


{ int i;
for (i=0;i<n;i++)
{ if (stricmp(R[i].num,num)==0)
{ return i;}

}
return -1;
}

void sorts (ruta*R, int n)

{ int i,k;
ruta t;
for (i=0;i<n;i++)
{ for (k=0;k<n-1;k++)
{ if(strcmp(R[k].num,R[k+1].num)>0)
{ t=R[k];
R[k]=R[k+1];
R[k+1]=t;
}

}
}
return ;
}

void modifys (ruta*R, int k)


{ int f;
printf ("De schimbat numele rutei?(1/0):");
scanf ("%d",&f);
if (f)
{ printf ("Nume?:");
fflush(stdin);
gets (R[k].num);
}
printf ("De schimbat numele tarii?(1/0):");
scanf ("%d",&f);
{ printf ("Tara?:");
fflush (stdin);
gets(R[k].tara);
}
printf("De schimbat anul fondarii?(1/0):");
scanf ("%f",&f);
if (f)
{ printf ("An fond?:");
scanf ("%d",&R[k].an);
}
printf ("De schimbat numele companiaaniei?(1/0):");
scanf ("%d",&f);
if (f)
{ printf ("compania?:");
fflush (stdin);
gets (R[k].compania);
}
printf ("De schimbat durata de zbor?(1/0):");
scanf ("%f", &f);
if (f)
{ printf ("Durata zb?:");
scanf ("%d",&R[k].durata);
}
return;
}

ruta*appends (ruta*R, int*n, ruta ad)


{ ruta*B;
R=(ruta*) realloc (R,(*n+1)*sizeof(*B));
if(!B) {return B;}
B[*n]=ad;
*n=*n+1;
return B;
}

ruta*prepends(ruta*R, int*n , ruta ad)


{ ruta*B;
int i;
R=(ruta*)realloc(R,(*n+1)*sizeof(*B));
if(!B); {return B;}
for (i=*n;i>0;i--)
{ B[i]=B[i-1];}
B[0]=ad;
*n=*n+1;
return B;
}

ruta *inserts (ruta*R, int*n, ruta ad, int k)


{ ruta*B;
int i;
B=(ruta*)realloc(R,(*n+1)*sizeof(*B));
if(!B) {return B;}
for (i=*n;i>k;i--)
{ B[i]=B[i-1];}
B[k]=ad;
*n=*n+1;
return B;
}

ruta*deletes (ruta*R, int*n, int k)


{ ruta*B;
int i;
for (i=k;i<*n;i++)
{ R[i]=R[i+1];}
B=(ruta*)realloc(R,(*n-1)*sizeof(*B));
*n=*n-1;
return B;
}

void swaps (ruta*R, int k1, int k2)


{ ruta t;
t=R[k1];
R[k1]=R[k2];
R[k2]=t;
return;
}
void saver(ruta *R, int n, char *filename)
{
FILE*fp;
int i;
fp=fopen(filename,"wb");
for(i=0;i<n;i++)
{
fprintf(fp,"%s",R[i].num);
}
fclose(fp);
}

//Deschiderea
int loadr(ruta *R, int n, char *filename)
{
FILE*fp;
int i;
fp=fopen(filename,"rb");
if(!fp) return 0;
fread(R,sizeof(*R),n,fp);
fclose(fp);
return 1;
}

Analiza rezultatelor si concluzii:


1. Verificarea ne arata ca rezultatele obtinute sunt corecte si programul lucreaza corect.
2. Au fost obtinute primele deprinderi pentru scrierea unui program de prelucrare
structurilor de date si lucru cu fisiere
3. Am aplicat cunostintele obtinute anterior pentru a elabora un program mult mai complex.
4. Am importat /exportat datele din fisiere pentru a salva rezultatele.

AVANTAJE:
1. Introducerea structurilor de date este limitata doar de memoria disponibila a HDD.
2. Programul contine functii,ceea ce ne va permite sa modificam programul mai usor dupa
dorinta sau sa adaugam alte functii pentru modificarea bazai de date.
3. Toate inregistrarile sunt pastrate in fisier,ceea ce ne permite sa nu mai introducem date
din nou.

DEZAVANTAJE:

1. Pot aparea exceptii in urma introducerii stringurilor cu whitespace.


2. Nu exista import din fisier txt in fisier binar.
3. In cazul stergerii unei inregistrati din mijloc,celelalte isi pastreaza ordinea si nu isi
schimba indicile cu i-1.

Bibliografie:

1. Culegerea de probleme pentru laborator.

2 The C Programming Language, Brian Kernighan and Dennis R ;

4. Conspectul prelegerilor cursului Programarea Calculatoarelor pentru studeni gr.,


SI-162. Lector: dr., conf. univ. M.Kulev. Chiinu, UTM,2016
Anexa 1

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

typedef struct ruta

{ char num [50];

char tara [50];

int an ;

char compania [50];

int durata;

} ruta;

void reads (ruta*R, int n);

void shows (ruta*R, int n);

int searchs (ruta*R, int n, char*num);

void sorts (ruta*R, int n);

void modifys (ruta*R, int k);

ruta*appends (ruta*R, int*n, ruta ad);

ruta*prepends (ruta*R, int*n, ruta ad);

ruta*inserts (ruta*R, int*n, ruta ad, int k);

ruta*deletes (ruta*R, int*n, int k);

void swaps (ruta*R, int k1, int k2);

int loadr(ruta *R, int n, char *filename);

void saver(ruta *R, int n, char *filename);


int main()

int n;

ruta*R;

int k,f,k1,k2;

ruta ad;

char num [50];

int durata ;

char tara[50];

char compania[50];

int an;

int nm;

ruta*B;

char filename[15];

while (1)

puts ("\t. **********Meniu************* :\n");

puts ("1. Alocare dinamica a tabloului:");

puts ("2. Introduce info despre ruta:");

puts ("3. Afisarea tabloului:");

puts ("4. Cautarea rutei dupa nume:");

puts ("5. Sortarea tabloului:");

puts ("6. Modificarea rutei indicata:");

puts ("7. Adaugarea la inceput:");

puts ("8. Adaugarea la sfirsit:");

puts ("9. Inserarea:");

puts ("10. Sterge ruta:");

puts ("11. Interschimbarea:");


puts ("12. Eliberarea memoriei:");

puts ("13. Iesirea din program");

puts ("14. salvarea bazei");

puts ("15. deschiderea fisierului");

printf ("Alege obtiunea:");

scanf ("%d", &nm);

switch (nm)

{ case 1:

printf ("Dati n:");

scanf ("%d", &n);

R=(ruta*) malloc (n*sizeof (*R));

if (R==NULL)

{puts("Memoria nu a fost alocata");

exit (1);}

puts ("Memoria a fost alocata");

puts ("Pentru a continua apasati Enter");

getch ();

break ;

case 2:

reads (R,n);

puts("\nTastati Enter pentru a contiuna");

getch ();

break;

case 3:
shows (R,n);

puts("\nTastati Enter pentru a contiuna");

getch ();

break;

case 4:

puts ("Dati numele rutei de cautat:");

fflush (stdin);

gets (num);

k= searchs (R,n,num);

if(k==-1)

{puts ("Ruta nu a fost gasita");}

else

scanf ("%d", &f);

if (f)

{puts ("Info despre ruta cautata: ");

printf ("%d.num :%d tara:%s an:%d compania:%s durata:


%.2f\n\t",k+1,R[k].num,R[k].tara,R[k].an,R[k].compania,R[k].durata);}

getch();

break ;

case 5:

sorts (R,n);

puts("De afisat info sortata?(1/0)");

scanf ("%d",&f);

if(f)
{shows (R,n);}

getch();

break;

case 6:

printf ("Dati numarul de ordine al rutei de modificat:");

scanf ("%d",&k);

modifys (R, k-1);

getch ();

break;

case 7:

printf("Dati informatie despre ruta de adaugat la inceput:\n");

printf("Nume:");

fflush (stdin);

gets (ad.num);

printf("Tara:");

fflush(stdin);

gets (ad.tara);

printf("An fond:");

scanf ("%d",&ad.an );

printf ("compania:");

fflush(stdin);

gets (ad.compania);

printf("Durata zb:");

scanf ("%d", &ad.durata);

B=appends (R,&n,ad);
if(!B)

puts("Adaugarea nu a fost efectauata");

puts("\nTastati Enter pentru a contiuna");

getch(); break;

else

puts("Operatiunea a fost efectuata cu succes!");

R=B;

puts("\nTastati Enter pentru a contiuna");

getch();

break;

case 8:

printf("Dati info despre ruta de adaugat la sfirsit:\n");

printf("Nume:");

fflush (stdin);

gets (ad.num);

printf("Tara:");

fflush(stdin);

gets (ad.tara);

printf("An fond:");

scanf ("%d",& ad.an );

printf ("compania:");

fflush(stdin);
gets (ad.compania);

printf("Durata zb:");

scanf ("%d", & ad.durata);

B=prepends (R,&n,ad);

if(B==NULL)

puts("Adaugarea nu a fost efectauata");

puts("\nTastati Enter pentru a contiuna");

getch(); break;

else

puts("Operatiunea a fost efectuata cu succes!");

R=B;

puts("\nTastati Enter pentru a contiuna");

getch();

break;

case 9:

printf ("Dati info despre ruta de inserat:\n");

printf ("Nume:");

fflush(stdin);

gets (ad.num);

printf ("Tara:");

fflush(stdin);

gets (ad.tara);
printf ("An fond:");

scanf ("%d", &ad.an);

printf ("compania:");

fflush(stdin);

gets (ad.compania);

printf ("Durata zb:");

scanf ("%d", &ad.durata);

printf("Dati locul de adaugat");

scanf ("%d",&k);

B=inserts(R,&n,ad,k-1);

if(B==NULL)

puts("Adaugarea nu a fost efectauata");

puts("\nTastati Enter pentru a contiuna");

getch(); break;

else

puts("Operatiunea a fost efectuata cu succes!");

R=B;

puts("\nTastati Enter pentru a contiuna");

getch();

break;

case 10:
printf("Dati numarul rutei de sters:");

scanf ("%d",&k);

B=deletes(R,&n,k-1);

if(B==NULL)

{puts ("Memoria nu a fost alocata");}

else

{R=B;}

getch();

break;

case 11:

printf ("Dati numerele de ordine ale elmentelor de interschimbat");

scanf ("%d%d",&k1,&k2);

swaps (R,k1-1,k2-1);

getch();

break;

case 12:

printf ("Doriti sa eliberati memoria dinamica? (1/0):");

scanf ("%d",&f);

if(f)

{ free(R);

R=NULL;

getch();

break;
case 13:

printf ("Doriti sa iesiti din program? (1/0):");

scanf ("%d",&f);

if(f)

{ free (R);

return 0;

default:

puts ("Alegerea obtiunea corecta");

getch();

break;

case 14:

puts("Dati numele fisierului: ");

fflush(stdin);

gets(filename);

saver(R, n, filename);

puts("Fisierul dumneavoastra a fos salvat cu succes!");

puts("\nTastati Enter pentru a contiuna");

getch(); break;

case 15:

puts ("Dati numele fisierului: ");

fflush(stdin);

gets(filename);

loadr(R, n, filename);

if(!f)

{
puts("Fisierul nu a fost deschis");

else

puts("Tabloul a fost citit");

puts("\nTastati Enter pentru a contiuna");

getch(); break;

void reads (ruta*R, int n)

int i;

{ puts ("Dati info despre ruta:");

for(i=0;i<n;i++)

{ printf ("ruta %d:",i+1);

printf ("Nume?:");

fflush (stdin);

gets (R[i].num);

printf ("Tara?:");

fflush (stdin);

gets (R[i].tara);

printf ("An fond?:");

scanf("%d",&R[i].an );
printf ("compania?:");

fflush (stdin);

gets (R[i].compania);

printf ("Durata zb?:");

scanf ("%d",&R[i].durata );

return ;

void shows (ruta*R, int n)

{ int i;

puts ("Info despre ruta");

for (i=0;i<n;i++)

{ printf ("%d.num:%s, tara:%s,an:%d,compania:%s,durata:%d\n",


i+1,R[i].num,R[i].tara,R[i].an,R[i].compania,R[i].durata);

return ;

int searchs (ruta*R, int n, char*num)

{ int i;

for (i=0;i<n;i++)

{ if (stricmp(R[i].num,num)==0)

{ return i;}

}
return -1;

void sorts (ruta*R, int n)

{ int i,k;

ruta t;

for (i=0;i<n;i++)

{ for (k=0;k<n-1;k++)

{ if(strcmp(R[k].num,R[k+1].num)>0)

{ t=R[k];

R[k]=R[k+1];

R[k+1]=t;

return ;

void modifys (ruta*R, int k)

{ int f;

printf ("De schimbat numele rutei?(1/0):");

scanf ("%d",&f);

if (f)

{ printf ("Nume?:");

fflush(stdin);
gets (R[k].num);

printf ("De schimbat numele tarii?(1/0):");

scanf ("%d",&f);

{ printf ("Tara?:");

fflush (stdin);

gets(R[k].tara);

printf("De schimbat anul fondarii?(1/0):");

scanf ("%f",&f);

if (f)

{ printf ("An fond?:");

scanf ("%d",&R[k].an);

printf ("De schimbat numele companiaaniei?(1/0):");

scanf ("%d",&f);

if (f)

{ printf ("compania?:");

fflush (stdin);

gets (R[k].compania);

printf ("De schimbat durata de zbor?(1/0):");

scanf ("%f", &f);

if (f)

{ printf ("Durata zb?:");

scanf ("%d",&R[k].durata);

return;

}
ruta*appends (ruta*R, int*n, ruta ad)

{ ruta*B;

R=(ruta*) realloc (R,(*n+1)*sizeof(*B));

if(!B) {return B;}

B[*n]=ad;

*n=*n+1;

return B;

ruta*prepends(ruta*R, int*n , ruta ad)

{ ruta*B;

int i;

R=(ruta*)realloc(R,(*n+1)*sizeof(*B));

if(!B); {return B;}

for (i=*n;i>0;i--)

{ B[i]=B[i-1];}

B[0]=ad;

*n=*n+1;

return B;

ruta *inserts (ruta*R, int*n, ruta ad, int k)

{ ruta*B;

int i;

B=(ruta*)realloc(R,(*n+1)*sizeof(*B));

if(!B) {return B;}


for (i=*n;i>k;i--)

{ B[i]=B[i-1];}

B[k]=ad;

*n=*n+1;

return B;

ruta*deletes (ruta*R, int*n, int k)

{ ruta*B;

int i;

for (i=k;i<*n;i++)

{ R[i]=R[i+1];}

B=(ruta*)realloc(R,(*n-1)*sizeof(*B));

*n=*n-1;

return B;

void swaps (ruta*R, int k1, int k2)

{ ruta t;

t=R[k1];

R[k1]=R[k2];

R[k2]=t;

return;

void saver(ruta *R, int n, char *filename)

FILE*fp;

int i;
fp=fopen(filename,"wb");

for(i=0;i<n;i++)

fprintf(fp,"%s",R[i].num);

fclose(fp);

//Deschiderea

int loadr(ruta *R, int n, char *filename)

FILE*fp;

int i;

fp=fopen(filename,"rb");

if(!fp) return 0;

fread(R,sizeof(*R),n,fp);

fclose(fp);

return 1;

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

  • Lab1 Po
    Lab1 Po
    Document7 pagini
    Lab1 Po
    Alina Axenti
    Încă nu există evaluări
  • AI-191 Medinschi Ion SO4
    AI-191 Medinschi Ion SO4
    Document5 pagini
    AI-191 Medinschi Ion SO4
    Carolin
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    rosca9doinita
    Încă nu există evaluări
  • Laborator nr1 SDA
    Laborator nr1 SDA
    Document25 pagini
    Laborator nr1 SDA
    Iulian Decuseara
    Încă nu există evaluări
  • Lab.4 FC
    Lab.4 FC
    Document6 pagini
    Lab.4 FC
    Cristina Florea
    Încă nu există evaluări
  • Lab7 POO
    Lab7 POO
    Document10 pagini
    Lab7 POO
    Grosu Elena
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    Ion Cornea
    Încă nu există evaluări
  • Laborator 1 C
    Laborator 1 C
    Document17 pagini
    Laborator 1 C
    Dorin Graur
    Încă nu există evaluări
  • Lab 6 Poo
    Lab 6 Poo
    Document5 pagini
    Lab 6 Poo
    Alex Tronciu
    Încă nu există evaluări
  • Lucrare de Laborator nr.2.
    Lucrare de Laborator nr.2.
    Document8 pagini
    Lucrare de Laborator nr.2.
    ionperu
    100% (2)
  • Lucrarea de Laborator NR 4 POO
    Lucrarea de Laborator NR 4 POO
    Document10 pagini
    Lucrarea de Laborator NR 4 POO
    Alexandru Burdeniuc
    Încă nu există evaluări
  • Grafica Laborator Nr.3
    Grafica Laborator Nr.3
    Document5 pagini
    Grafica Laborator Nr.3
    Cebotari Ion
    100% (2)
  • NR 4
    NR 4
    Document7 pagini
    NR 4
    Graid Icen
    Încă nu există evaluări
  • POO Lab7
    POO Lab7
    Document6 pagini
    POO Lab7
    Dani Ela
    Încă nu există evaluări
  • Lab 6 Cazacu POO
    Lab 6 Cazacu POO
    Document5 pagini
    Lab 6 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Laborator Porgramarea Calculatoarelor 3
    Laborator Porgramarea Calculatoarelor 3
    Document3 pagini
    Laborator Porgramarea Calculatoarelor 3
    Sergiu Lungu
    Încă nu există evaluări
  • ASAD Lab03 Raport
    ASAD Lab03 Raport
    Document6 pagini
    ASAD Lab03 Raport
    Mihai U
    Încă nu există evaluări
  • PC Raport 6 7.odt
    PC Raport 6 7.odt
    Document16 pagini
    PC Raport 6 7.odt
    Trifan Petru
    Încă nu există evaluări
  • POO1-varianta 3
    POO1-varianta 3
    Document5 pagini
    POO1-varianta 3
    Octavian Lucaș
    Încă nu există evaluări
  • Lab 4-5 SDA V10
    Lab 4-5 SDA V10
    Document13 pagini
    Lab 4-5 SDA V10
    Dima Cucu
    Încă nu există evaluări
  • Lab 2 MMC Boj
    Lab 2 MMC Boj
    Document12 pagini
    Lab 2 MMC Boj
    Andrian Brinzan
    Încă nu există evaluări
  • Raport 2 Si Raport 3 La SDA
    Raport 2 Si Raport 3 La SDA
    Document17 pagini
    Raport 2 Si Raport 3 La SDA
    maxlab
    Încă nu există evaluări
  • APA - Lab2 GS
    APA - Lab2 GS
    Document18 pagini
    APA - Lab2 GS
    Unknown Person
    Încă nu există evaluări
  • Lab1 Apa
    Lab1 Apa
    Document15 pagini
    Lab1 Apa
    SlavicCaldare
    Încă nu există evaluări
  • Laborator nr6 CDE
    Laborator nr6 CDE
    Document5 pagini
    Laborator nr6 CDE
    Vlad Racu
    Încă nu există evaluări
  • Lucrarea de Laborator NR 7 POO
    Lucrarea de Laborator NR 7 POO
    Document14 pagini
    Lucrarea de Laborator NR 7 POO
    Vlad Racu
    Încă nu există evaluări
  • Laborator 2 APA
    Laborator 2 APA
    Document17 pagini
    Laborator 2 APA
    RoscaFlorin
    Încă nu există evaluări
  • Lab 4 MN
    Lab 4 MN
    Document3 pagini
    Lab 4 MN
    nn nnn
    Încă nu există evaluări
  • Raspunsuri AC
    Raspunsuri AC
    Document10 pagini
    Raspunsuri AC
    Anastasia Gherman
    Încă nu există evaluări
  • Lab1 GC
    Lab1 GC
    Document8 pagini
    Lab1 GC
    Andrei Barbalat
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document5 pagini
    Lab 4
    cristian
    Încă nu există evaluări
  • Asdn2 Lab5
    Asdn2 Lab5
    Document4 pagini
    Asdn2 Lab5
    Жан Ганган
    Încă nu există evaluări
  • Evaluarea 1 TSSS, Varianta 2
    Evaluarea 1 TSSS, Varianta 2
    Document2 pagini
    Evaluarea 1 TSSS, Varianta 2
    Alex Tronciu
    Încă nu există evaluări
  • Lab MMC2
    Lab MMC2
    Document5 pagini
    Lab MMC2
    Maxim
    Încă nu există evaluări
  • LL3 PS ECiobanu TI192
    LL3 PS ECiobanu TI192
    Document14 pagini
    LL3 PS ECiobanu TI192
    Ecaterina Ciobanu
    Încă nu există evaluări
  • Raport Programarea Calculatoarelor 5
    Raport Programarea Calculatoarelor 5
    Document14 pagini
    Raport Programarea Calculatoarelor 5
    Oprea Cristian
    Încă nu există evaluări
  • Lab 6
    Lab 6
    Document4 pagini
    Lab 6
    Егор Казаков
    Încă nu există evaluări
  • Laborator-3 MMC
    Laborator-3 MMC
    Document4 pagini
    Laborator-3 MMC
    Dan
    Încă nu există evaluări
  • MMC Lab2
    MMC Lab2
    Document6 pagini
    MMC Lab2
    Mihail Boran
    Încă nu există evaluări
  • Sofroni Maxim Ai-211 MN Lab3
    Sofroni Maxim Ai-211 MN Lab3
    Document7 pagini
    Sofroni Maxim Ai-211 MN Lab3
    Максим Софрони
    Încă nu există evaluări
  • Grafica Laborator Nr.2
    Grafica Laborator Nr.2
    Document8 pagini
    Grafica Laborator Nr.2
    Cebotari Ion
    100% (1)
  • Lucrare de Curs LFPC
    Lucrare de Curs LFPC
    Document19 pagini
    Lucrare de Curs LFPC
    Cristik95
    100% (1)
  • SDAlab 6
    SDAlab 6
    Document1 pagină
    SDAlab 6
    Витёк Мужичёк
    Încă nu există evaluări
  • LAb 2 SDA
    LAb 2 SDA
    Document19 pagini
    LAb 2 SDA
    Dima Cucu
    Încă nu există evaluări
  • Laborator nr.3 POO
    Laborator nr.3 POO
    Document6 pagini
    Laborator nr.3 POO
    MARYAN Pătru
    Încă nu există evaluări
  • POO - Raport Lab1
    POO - Raport Lab1
    Document6 pagini
    POO - Raport Lab1
    Dan
    Încă nu există evaluări
  • TAP Lab5 Popov Biatrice CR 191
    TAP Lab5 Popov Biatrice CR 191
    Document6 pagini
    TAP Lab5 Popov Biatrice CR 191
    Alina Axenti
    Încă nu există evaluări
  • LL4 PS
    LL4 PS
    Document12 pagini
    LL4 PS
    Anya Mr
    100% (1)
  • C++2012 Lab6
    C++2012 Lab6
    Document10 pagini
    C++2012 Lab6
    Elena Bujor
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document4 pagini
    Lab 3
    Клара Кожухари
    Încă nu există evaluări
  • Lucrarea de Laborator NR 5 POO
    Lucrarea de Laborator NR 5 POO
    Document4 pagini
    Lucrarea de Laborator NR 5 POO
    Alexandru Burdeniuc
    Încă nu există evaluări
  • Raport C++ Lab 6
    Raport C++ Lab 6
    Document4 pagini
    Raport C++ Lab 6
    Nickolae Enachi
    Încă nu există evaluări
  • MMC Lab3 Rap
    MMC Lab3 Rap
    Document4 pagini
    MMC Lab3 Rap
    I LOVE ME
    Încă nu există evaluări
  • Subiecte Examen ASDN
    Subiecte Examen ASDN
    Document3 pagini
    Subiecte Examen ASDN
    Camy Tripon
    Încă nu există evaluări
  • Lab 2 Apa
    Lab 2 Apa
    Document12 pagini
    Lab 2 Apa
    Artur Kingsman
    Încă nu există evaluări
  • SDA Lab 1
    SDA Lab 1
    Document16 pagini
    SDA Lab 1
    Ciobanu Alina
    Încă nu există evaluări
  • Lab 44
    Lab 44
    Document17 pagini
    Lab 44
    Сергей Борта
    Încă nu există evaluări
  • Prog. C++. Lab Nr. 1
    Prog. C++. Lab Nr. 1
    Document30 pagini
    Prog. C++. Lab Nr. 1
    Unknown Person
    Încă nu există evaluări
  • Lab. 4 SO
    Lab. 4 SO
    Document3 pagini
    Lab. 4 SO
    Alex Tronciu
    Încă nu există evaluări
  • POO
    POO
    Document61 pagini
    POO
    becheanu13
    100% (1)
  • Laborator 5 PC
    Laborator 5 PC
    Document19 pagini
    Laborator 5 PC
    Petrea Trofim
    Încă nu există evaluări
  • Laboratorul 4 PC
    Laboratorul 4 PC
    Document5 pagini
    Laboratorul 4 PC
    Petrea Trofim
    Încă nu există evaluări
  • Laborator 1 PC
    Laborator 1 PC
    Document5 pagini
    Laborator 1 PC
    Petrea Trofim
    Încă nu există evaluări
  • Laboratorul 3 PC
    Laboratorul 3 PC
    Document5 pagini
    Laboratorul 3 PC
    Petrea Trofim
    Încă nu există evaluări