Sunteți pe pagina 1din 5

LISTE

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

typedef struct Student

{
char *nume, *prenume;
int varsta;
float medie;
struct Student *urm;
}nod;

nod *adaugare(nod *prim, char *nume, char *prenume, int varsta, float medie)
{
nod *p, *q;

p = (nod*)malloc(sizeof(nod));
p->nume = (char*)malloc(strlen(nume) + 1);
p->prenume = (char*)malloc(strlen(prenume) + 1);
strcpy(p->nume, nume);
strcpy(p->prenume, prenume);
p->varsta = varsta;
p->medie = medie;
p->urm = NULL;

if (p == NULL || p->nume == NULL)

{
printf("Eroare la alocarea de memorie!\n");
exit(0);
}

if (prim == NULL)

return p;
else if (strcmp(prim->nume, p->nume) > 0)
{
p->urm = prim;
return p;
}

else
{
q = prim;
while (q->urm != NULL && strcmp(q->urm->nume, p->nume) < 0)
q = q->urm;
p->urm = q->urm;
q->urm = p;
return prim;
}

}
void afisare(nod *prim)
{

nod *q;
q = prim;
while (q != NULL)
{
printf("%s %s %d %f\n", q->nume, q->prenume, q->varsta, q->medie); q = q-
>urm;
}

nod *citire(nod *prim)


{
FILE *f;
char nume[30], prenume[30];
int varsta;
float media;
prim = NULL;

f = fopen("studenti.txt", "rt"); if (f == NULL)


printf("Nu s-a putut deschide fisierul!\n");
else
{
while (fscanf(f, "%s", nume) != EOF)
{
fscanf(f, "%s", prenume);
fscanf(f, "%d", &varsta);
fscanf(f, "%f", &media);
prim = adaugare(prim, nume, prenume, varsta, media);
}

fclose(f);
return prim;
}

void cautare(nod *prim, char c)


{
nod *p;
p = prim;
while (p != NULL)
{
if (strcmp(p->nume, c) == 0)
printf("%s ", p->nume);
p = p->urm;
}
}

int main()

{
nod *prim;
int varsta, opt, ok = 0;
char nume[20], prenume[20];
float media;
prim = NULL;
do {

printf("1.Citire din fisier\n");


printf("2.Adaugare\n");
printf("3.Afisare\n");
printf("4.Salvare in fiser studenti\n");
printf("0.Iesire\n");
printf("Optiunea dv. este:"); scanf("%d", &opt);
switch (opt)
{
case 1:prim = citire(prim);
ok = 1;
break;
case 2:if (ok == 1)
{
printf("Nume:"); scanf("%s", nume);
printf("Prenume:"); scanf("%s", prenume);
printf("Varsta:"); scanf("%d", &varsta);
printf("Media:"); scanf("%f", &media);
prim = adaugare(prim, nume, prenume, varsta, media);
}
else
printf("Citeste studentii din fisier prima data!\n"); break;

case 3:if (ok == 1)


{
afisare(prim);
}
else

printf("Citeste studentii din fisier prima data!\n"); break;

case 0: exit(1);
break;
}

} while (opt != 0);


return 0;
}
TABLOU DE POINTERI
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
void citire(char **cuv, int n)
{
int i, lung = 50;
for (i = 0; i < n; i++)
{
printf("Scrrieti %d cuvant: ", i + 1);
//Alocam memorie pentru fiecare cuvant - maxim 50 de octeti pe cuvant
cuv[i] = (char*)malloc(sizeof(char)*lung); scanf("%s", cuv[i]);
}
}
void afisare(char **cuv, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%s ", cuv[i]);
}

void cautare(char **cuv, int n, char c[20])


{
int i;
for (i = 0; i < n; i++)
if (strcmp(cuv[i], c) == 0)
printf("%s\n", cuv[i]);
}

void stergere(char **cuv, int n, char c[20])


{
int i, j, k = 0;
for (i = 0; i < n - k; i++)
if (strcmp(cuv[i], c) == 0)
{
k++;
for (j = i; j <= n - k; j++)
cuv[j] = cuv[j + 1];
i--;
}
n = n - k;
afisare(cuv, n);
printf("\n");
}

int main()

{
char *cuv[30], c[20], c1[20];
int opt, n, *lung[30];
do {
printf("1.Citire propozitie\n");
printf("2.Afisare propozitie\n");
printf("8.Cautarea unui cuvant introdus de la tastatura\n");
printf("9.Stergerea unui cuvant\n");
printf("0.Iesire\n");
printf("Optiunea dv. este:");
scanf("%d", &opt);
switch (opt)
{
case 1:printf("Dati numarul de cuvinte: ");
scanf("%d", &n);
citire(cuv, n); break;

case 2: afisare(cuv, n);


printf("\n");
break;

case 8: printf("Introduceti cuvantul pe care doriti sa-l cautati: ");


scanf("%s", c);
cautare(cuv, n, c);
break;

case 9:printf("Introduceti cuvantul pe care doriti sa-l stergeti: ");


scanf("%s", c1);
stergere(cuv, n, c1);
break;

case 0: exit(0);
break;
default:printf("Optiune gresita!\n");
break;
}
} while (opt != 0);
return 0;
}

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