Sunteți pe pagina 1din 5

Seminarul 3

Să se scrie programul care conține:

- un subprogram care preia elementele dintr-un fisier text (un vector) si le pastreaza într-un fișier
binar;
- un subprogram care preia elementele unui vector de la tastatura si le pastrea într-un fișier binar.
Datele se preiau de la tastatură, sfârșitul introducerii fiind marcat standard;
- un subprogram care afișează pe ecran și scrie într-un fișier text datele memorate în fișierul binar la
problema anterioară;
- un subprogram care afișează media aritmetică a elementelor memorate în fișierul binar construit
anterior;
- un subprogram care afișează într-un fișier text si/sau pe ecran elementele mai mari decat 5.00 care
au fost memorate în fișierul binar construit anterior;
- un subprogram care afișează într-un fișier text si/sau pe ecran elementele de pe pozițiile pare ale
unui vector memorat într-un fișier binar;
- un subprogram care sortează crescător un vector memorat într-un fișier binar, prin metoda
selecției.

#include<stdio.h>
#pragma warning(disable:4996)
int preluare_fis_binar()
{
float x;
int er, i;
FILE* f, * g;
f = fopen("fisier1.txt", "r");
if (f != NULL)
{
g = fopen("fis_binar.dat", "wb");
fscanf(f, "%f", &x);
while (!feof(f))
{
fwrite(&x, sizeof(x), 1, g);
fscanf(f, "%f", &x);
}
fclose(g);
fclose(f);
er = 1;
}
else er = 0;
return er;
}
void preluare_fis_binar1()
{
float x;
FILE* g;
g = fopen("fis_binar1.dat", "wb");
printf("x=");
scanf("%f", &x);// fscanf(stdin, "%f", &x);
while (!feof(stdin))
{
fwrite(&x, sizeof(x), 1, g);
printf("x=");
fscanf(stdin, "%f", &x);
}
fclose(g);
}
void afisare()
{
FILE* f, * g;
float x;
char nume[20];
printf("\nnumele fisierului=");
gets_s(nume);
f = fopen(nume, "rb");
if (f != NULL)
{
g = fopen("lista_nou.txt", "w");
fread(&x, sizeof(x), 1, f);
while (!feof(f))
{
printf("%5.2f\t", x);
fprintf(g, "%5.2f \t", x);
fread(&x, sizeof(x), 1, f);
}
fclose(g);
fclose(f);
}
else printf("\nfis. nu exista");
}
int afisare1(float* media)
{
FILE* f;
int i,er=1;
float s, x;
char nume[20];
printf("\nnumele fisierului=");
gets_s(nume);
f = fopen(nume, "rb");
if (f != NULL)
{
s = 0; i = 0;
fread(&x, sizeof(x), 1, f);
while (!feof(f))
{
s = s + x;
i = i + 1;
fread(&x, sizeof(x), 1, f);
}
*media = s / i;
fclose(f);
}
else er = 0;
return er;
}
void afisare2()
{
FILE* f, * g;
float x;
char nume[20];
printf("\nnumele fisierului=");
gets_s(nume);
f = fopen(nume, "rb");
if (f != NULL)
{
g = fopen("lista_1.txt", "w");
fread(&x, sizeof(x), 1, f);
while (!feof(f))
{
if (x > 5.00)
{
printf("%5.2f\t", x);
fprintf(g, "%5.2f \t", x);
}
fread(&x, sizeof(x), 1, f);
}
fclose(g);
fclose(f);
}
else printf("\nfis. nu exista");
}
void afisare3()
{
FILE* f, * g;
int i;
float x;
char nume[20];
printf("\nnumele fisierului=");
gets_s(nume);
f = fopen(nume, "rb");

if (f != NULL)
{
g = fopen("lista_indice_par.txt", "w");
fread(&x, sizeof(x), 1, f);
i = 0;
while (!feof(f))
{
if (i % 2 == 0)
{
printf("%5.2f\t", x);
fprintf(g, "%5.2f \t", x);
}
fread(&x, sizeof(x), 1, f);
i = i + 1;
}
fclose(g);
fclose(f);
}
else printf("\nfis. nu exista");
}
void copiere()
{
FILE* f, * g;
int x;
char nume[20];
printf("\nnumele fisierului=");
gets_s(nume);
f = fopen(nume, "rb");

if (f != NULL)
{
printf("\nnumele fisierului nou=");
gets_s(nume);
g = fopen(nume, "wb");
printf("\n");
fread(&x, sizeof(int), 1, f);
while (!feof(f))
{
//printf("%d", x);
fwrite(&x, sizeof(int), 1, g);
fread(&x, sizeof(int), 1, f);
}
fclose(f);
fclose(g);
}
}
int nrart(FILE* f, int p)
{
int r, l, n;
r = ftell(f);
fseek(f, 0, 2);
l = ftell(f);
n = l / p;
fseek(f, r, 0);
return(n);
}
void sortare()
{
FILE* f;
char nume[20];
int n, i, j;
int x, y;
printf("\nnumele fisierului sortat=");
gets_s(nume);
f = fopen(nume, "rb+");
if (f != NULL)
{
n = nrart(f, sizeof(int));
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
fseek(f, i * sizeof(int), 0);
fread(&x, sizeof(int), 1, f);
fseek(f, j * sizeof(int), 0);
fread(&y, sizeof(int), 1, f);
if (x > y)
{
fseek(f, i * sizeof(int), 0);
fwrite(&y, sizeof(int), 1, f);
fseek(f, j * sizeof(int), 0);
fwrite(&x, sizeof(int), 1, f);
}
}
}
fclose(f);
}
else printf("\nFisierul nu poate fi deschis.");
}
void main()
{
int er;
float media;
er=preluare_fis_binar();
if (er == 0) printf("fis. nu exista");

preluare_fis_binar1();
afisare();

printf("\nmedia elementelor");
afisare1(&media);
printf("\nmedia=%5.2f", media);

printf("\nnumerele mai mari decat 5.00");


afisare2();

printf("\nnumerele de pe pozitiile pare");


afisare3();

copiere();
sortare();
printf("\n");
afisare();
}

Probleme:

1. Să se scrie subprogramul care calculează amplitudinea (max-min) a elementelor unui vector memorat
într-un fișier binar.
2. Să se scrie subprogramul care determină dacă un vector memorat într-un fișier binar este sortat strict
crescător, strict descrescător, constant sau amestecat.
3. Să se scrie subprogramul care calculează produsul vectorial dintre doi vectori memorați în fișiere binare.
Rezultatul va fi memorat în alt fișier.
4. Să se scrie subprogramul care interclasează doi vectori sortați crescător, aflați în fișiere binare.
Rezultatul se va memora în alt fișier.

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