Sei sulla pagina 1di 4

#include <stdio.

h>
#include <stdlib.h>

void creareFisier()
{
FILE * fPointer;
fPointer = fopen ( "matrice.txt", "w");
printf("Dati numarul de linii\n");
int a;
scanf("%d", &a);
fprintf(fPointer, "%d \n", a);

int i,j;
for (i=1; i <= a; i++)
{
printf("Dati numarul de elemente de pe o linie\n");
int length;
scanf("%d", &length);
fprintf(fPointer,"%d ", length);
for (j=1; j <= length; j++)
{
printf("Dati elementele\n");
int number;
scanf("%d", &number);
fprintf(fPointer,"%d ", number);
}
fprintf(fPointer, "\n");
}
fclose(fPointer);
}

void stergeElem(int* v, int index)


{
for (; index < v[0] - 1; index ++)
v[index] = v[index + 1];
v[0]--;
}

int eliminaDupl(int* v)
{
int i, j, ok=1;
for (i = 0; i < v[0]; i++)
{
for (j = i + 1; j < v[0]; j++)
{
if(v[i] == v[j])
{
stergeElem(v, j);
ok=0;
}
}
}
return ok;
}

void citireMatrice(int * nrLinii, int ** number)


{
FILE * fPointer;
fPointer = fopen("matrice.txt", "r");
fscanf(fPointer, "%d", nrLinii);
int i,j;
number = (int*) malloc((*nrLinii)*sizeof(int));
if(number==NULL)
{
printf("Memorie insuficienta");
exit(1);
}
for (i=0; i < *nrLinii; i++)
{
int lg;
fscanf(fPointer, "%d", &lg);
number[i] = (int*) malloc((lg + 1) * sizeof(int));
if(number[i]==NULL)
{
printf("Memorie insuficienta");
exit(1);
}
number[i][0] = lg;
for (j=1; j<=lg; j++)
{
fscanf(fPointer, "%d", number[i] + j);
}
}
fclose(fPointer);
}

void verifMultime(int nrLinii, int ** matrice)


{
int i;
for (i=0; i<(nrLinii); i++)
{
if (eliminaDupl(matrice[i]))
{
printf("Linia %d e multime", i+1);
}
else
{
printf("Linia %d nu a fost multime dar acum este", i+1);
}
}
}

void concatenare(int * linie1,int * linie2,int * reuniune)


{
int a=linie1[0];
int b=linie2[0];
int i,j;
reuniune=(int*) malloc((a+b+1)*sizeof(int));
if(reuniune==NULL)
{
printf("Memorie insuficienta");
exit(1);
}
reuniune[0]=a+b;
for(i=0; i<a; i++)
{
reuniune[i+1]= linie1[i+1];
}
for (j=0; j<b; j++)
{
reuniune[j+a+1]= linie2[j+1];
}
}

void reuniune(int * linie1, int * linie2, int * rezultat)


{
concatenare(linie1,linie2,rezultat);
eliminaDupl(rezultat);

void scriereFisier(int ** matrice, int nrLinii)


{
int * linie1;
int * linie2;
int * linie3;
FILE * fPointer;
fPointer= fopen("fisierfinal.txt", "w");
int i,j;
for (i=0; i<nrLinii-1; i++)
{
linie1=matrice[i];
linie2=matrice[i+1];
reuniune(linie1,linie2,linie3);
for (j=0; j<linie1[0]; j++)
{
fprintf(fPointer,"%d ", linie1[j]);
}
fprintf(fPointer,"\n");
for (j=0; j<linie2[0]; j++)
{
fprintf(fPointer,"%d ", linie2[j]);
}
fprintf(fPointer,"\n");
for (j=0; j<linie3[0]; j++)
{
fprintf(fPointer,"%d ", linie3[j]);
}
free(linie3);
fprintf(fPointer,"\n");
}
fclose(fPointer);
}

int main()
{
creareFisier();
int ** matrice;
int nrLinii;
citireMatrice(&nrLinii, matrice);
verifMultime(nrLinii, matrice);
scriereFisier(matrice, nrLinii);
int i;
for(i=0; i<nrLinii; i++)
{
free(matrice[i]);
}
free(matrice);
return 0;
}

Potrebbero piacerti anche