Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <stdlib.h>
- typedef struct Punct
- {
- double x;
- double y;
- } Punct;
- double **alocareDinamicaMatricePuncte(int numarDePuncte);
- Punct *alocareDinamicaVectorPuncte(int numarDePuncte);
- void citestePuncte(int numarDePuncte, Punct **vectorPuncte, FILE* fisier);
- void genereazaMatriceDistante(int numarDePuncte, Punct *vectorDePuncte, double ***matriceDistante);
- void scrieMatriceDistante(int numarDePuncte, double **matriceDistante);
- int main()
- {
- int numarDePuncte;
- FILE *fis;
- fis = fopen("in.txt", "rt");
- fscanf(fis, "%d", &numarDePuncte);
- struct Punct *vectorPuncte = alocareDinamicaVectorPuncte(numarDePuncte);
- if(!vectorPuncte)
- {
- printf("Eroare la alocare");
- }
- citestePuncte(numarDePuncte, &vectorPuncte, fis);
- double **matriceDistante = alocareDinamicaMatricePuncte(numarDePuncte);
- genereazaMatriceDistante(numarDePuncte, vectorPuncte, &matriceDistante);
- scrieMatriceDistante(numarDePuncte, matriceDistante);
- //dealocarea memorie
- free(vectorPuncte);
- for (int i = 0; i < numarDePuncte; i++)
- free(matriceDistante[i]);
- free(matriceDistante);
- }
- void scrieMatriceDistante(int numarDePuncte, double **matriceDistante)
- {
- FILE *fisier;
- fisier = fopen("out.txt", "wt");
- if (fisier == NULL)
- {
- perror("Fisierul nu a putut fi deschis!");
- exit(1);
- }
- for (int i = 0; i < numarDePuncte; i++)
- {
- for (int j = 0; j < numarDePuncte; j++)
- {
- fprintf(fisier, "%lf ", matriceDistante[i][j]);
- }
- fprintf(fisier, "\n");
- }
- }
- void genereazaMatriceDistante(int numarDePuncte, Punct *vectorDePuncte, double ***matriceDistante)
- {
- for (int i = 0; i < numarDePuncte; i++)
- {
- for (int j = 0; j < numarDePuncte; j++)
- {
- (*matriceDistante)[i][j] = sqrt(
- (vectorDePuncte[i].x - vectorDePuncte[j].x) * (vectorDePuncte[i].x - vectorDePuncte[j].x) +
- (vectorDePuncte[i].y - vectorDePuncte[j].y) * (vectorDePuncte[i].y - vectorDePuncte[j].y));
- }
- }
- }
- void citestePuncte(int numarDePuncte, Punct **vectorPuncte, FILE *fisier)
- {
- double x, y;
- if (fisier == NULL)
- {
- perror("Fisierul nu a putut fi deschis!");
- exit(1);
- }
- for (int i = 0; i < numarDePuncte; i++)
- {
- fscanf(fisier, "%lf%lf", &(*vectorPuncte)[i].x, &(*vectorPuncte)[i].y);
- }
- }
- Punct *alocareDinamicaVectorPuncte(int numarDePuncte)
- {
- return (Punct *)malloc(numarDePuncte * sizeof(Punct));
- }
- double **alocareDinamicaMatricePuncte(int numarDePuncte)
- {
- double **matrice = (double **)malloc(numarDePuncte * sizeof(double *));
- if (!matrice)
- {
- printf("Eroare la alocare");
- }
- for (int i = 0; i < numarDePuncte; i++)
- {
- matrice[i] = (double *)malloc(numarDePuncte * sizeof(double));
- if (!matrice)
- {
- printf("Eroare la alocare");
- }
- }
- return matrice;
- }
Add Comment
Please, Sign In to add comment