Documente Academic
Documente Profesional
Documente Cultură
Seminar 4 2022
Seminar 4 2022
1. Să se scrie programul care să conțină un subprogram care creează un fișier secvențial cu date despre angajații unei
întreprinderi. Articolele au următoarea structură:
int char [20] char [20] char [20] char [20] float float float
void main()
{
populare();
}
2. Să se scrie subprogramul care adaugă noi angajați în fișierul creat la problema anterioară. Datele se preiau de la
tastatură, sfârșitul introducerii fiind marcat standard.
void adaugare()
{
FILE *f;
int i;
ang a;
char nume_f[20];
printf("\nnume fisier:");
gets_s(nume_f);
f = fopen(nume_f, "rb+");
if (f==NULL) printf("nu exista fisierul");
else
{
fseek(f, 0, 2);
printf("marca="); scanf("%d", &a.marca);
fflush(stdin);
while (!feof(stdin))
{
printf("Nume: "); scanf_s("%s", a.nume, sizeof(a.nume));
//printf("Nume: "); getc(stdin); gets_s(a.nume);
printf("Prenume: "); scanf_s("%s", a.prenume, sizeof(a.prenume));
printf("Profesie:"); scanf_s("%s", a.prof, sizeof(a.prof));
printf("Departamente:"); scanf_s("%s", a.dep, sizeof(a.dep));
for (i = 0; i < 3; i++)
{
printf("Salariu din luna %d: ", i + 1);
scanf("%f", &a.sal[i]);
}
fwrite(&a, sizeof(a), 1, f);
printf("marca="); scanf("%d", &a.marca);
}
fclose(f);
}
}
3. Să se scrie subprogramul care listează, într-un fișier text si pe monitor, sub formă de tabel, conținutul fișierului creat la
problema de la punctul 1.
void afisare()
{
FILE *f,*g;
char nume_f[20];
int i;
ang x;
printf("\nnume fisier:");
gets_s(nume_f);
f = fopen(nume_f, "rb");
if (f==NULL) printf("nu exista fisierul");
else {
g = fopen("lista_ang1.txt", "w");
printf("\n ");
printf("MARCA========NUME========PRENUME=======PROFESIE=========SAL1========SAL2=======SAL3");
fprintf(g,"MARCA========NUME=======PRENUME========PROFESIE========SAL1========SAL2=======SAL3");
fread(&x, sizeof(x), 1, f);
while (!feof(f))
{
printf("\n %5d || %20s || %20s || %20s ", x.marca, x.nume, x.prenume, x.prof);
for (i = 0; i < 3; i++) printf("|| %7.2f ", x.sal[i]);
fprintf(g,"\n %5d || %20s || %20s || %20s ", x.marca, x.nume, x.prenume, x.prof);
for (i = 0; i < 3; i++) fprintf(g,"|| %7.2f ", x.sal[i]);
fread(&x, sizeof(x), 1, f);
}
fclose(f);fclose(g);
}
}
4. Să se scrie subprogramul care afișează datele despre angajații ale căror mărci se introduc de la tastatură. Sfârșitul
introducerii este marcat standard.
void afisare_marca()
{
FILE *f, *g;
int marca1, vb;
ang x;
char nume_f[20];
printf("\nnume fisier:");
gets_s(nume_f);//scanf_s("%s",nume, sizeof(nume));
if (!(f = fopen(nume_f, "rb"))) printf("nu exista fisierul");
else
{
g = fopen("lista_marca.txt", "w");
printf("\n ");
fprintf(g, " LISTA SUCURSALA \n ");
fprintf(g, "================================================================================\n ");
fprintf(g, "MARCA|| NUME || PRENUME || SAL1 || SAL2 || SAL3 \n ");
fprintf(g, "================================================================================\n ");
printf("MARCA CAUTATA:"); scanf("%d", &marca1);
while (!feof(stdin))
{
rewind(f);
vb = 0;
fread(&x, sizeof(x), 1, f);
while (!feof(f) && (vb == 0))
{
if (x.marca== marca1)
{
printf("\n%5d || %-20s || %-20s || %5.2f || %5.2f || %5.2f ", x.marca, x.nume, x.prenume, x.sal[0],
x.sal[1], x.sal[2]);
fprintf(g,"\n%5d || %-20s || %-20s || %5.2f || %5.2f || %5.2f ", x.marca, x.nume, x.prenume, x.sal[0],
x.sal[1], x.sal[2]);
vb = 1;
}
else fread(&x, sizeof(x), 1, f);
}
if (vb == 0) printf("\n nu a fost gasit");
Variant 2
void sortare1()
{
FILE* f;
char nume[20];
int n, i, j;
ang x, y;
printf("\nnumele fisierului sortat=");
gets_s(nume);
f = fopen(nume, "rb+");
if (f != NULL)
{
n = nrart(f, sizeof(x));
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
fseek(f, i * sizeof(x), 0);
fread(&x, sizeof(x), 1, f);
fseek(f, j * sizeof(x), 0);
fread(&y, sizeof(x), 1, f);
if ((strcmp(x.prof, y.prof) > 0) || ((strcmp(x.prof, y.prof) == 0) && (strcmp(x.dep, y.dep) > 0)))
{
fseek(f, i * sizeof(x), 0);
fwrite(&y, sizeof(x), 1, f);
fseek(f, j * sizeof(x), 0);
fwrite(&x, sizeof(x), 1, f);
}
}
}
fclose(f);
}
else printf("\nFisierul nu poate fi deschis.");
}
Tema:
1. Să se scrie programul care creează un fișier secvențial cu date despre studenții unei facultăți. Articolele au
următoarea structură:
note
Numar_matricol nume an grupa seria
0 … 9
2. Să se scrie programul care listează, într-un fișier text, sub formă de tabel, conținutul fișierului creat la problema de
la punctul 1.
3. Să se scrie programul care listează, într-un fișier text, sub formă de tabel, studenții care au media celor 10 note peste
8, din fișierului creat la problema la punctul 1.
4. Să se scrie programul care listează, în fișiere text, situația studenților din grupele ale căror numere se introduc de la
tastatură. Sfârșitul introducerii este marcat standard.
5. Să se scrie programul care afișează studenții integraliști din seriile care sunt introduse de la tastatură. Sfârșitul
introducerii este marcat standard.
6. Să se scrie programul care sortează studenții după anii de studiu şi grupe.