aimon1337

Untitled

Jan 25th, 2022 (edited)
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.03 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct Punct
  6. {
  7.     double x;
  8.     double y;
  9. } Punct;
  10.  
  11. double **alocareDinamicaMatricePuncte(int numarDePuncte);
  12. Punct *alocareDinamicaVectorPuncte(int numarDePuncte);
  13. void citestePuncte(int numarDePuncte, Punct **vectorPuncte, FILE* fisier);
  14. void genereazaMatriceDistante(int numarDePuncte, Punct *vectorDePuncte, double ***matriceDistante);
  15. void scrieMatriceDistante(int numarDePuncte, double **matriceDistante);
  16.  
  17. int main()
  18. {
  19.     int numarDePuncte;
  20.     FILE *fis;
  21.     fis = fopen("in.txt", "rt");
  22.     fscanf(fis, "%d", &numarDePuncte);
  23.     struct Punct *vectorPuncte = alocareDinamicaVectorPuncte(numarDePuncte);
  24.     if(!vectorPuncte)
  25.     {
  26.         printf("Eroare la alocare");
  27.     }
  28.     citestePuncte(numarDePuncte, &vectorPuncte, fis);
  29.     double **matriceDistante = alocareDinamicaMatricePuncte(numarDePuncte);
  30.     genereazaMatriceDistante(numarDePuncte, vectorPuncte, &matriceDistante);
  31.     scrieMatriceDistante(numarDePuncte, matriceDistante);
  32.     //dealocarea memorie
  33.     free(vectorPuncte);
  34.     for (int i = 0; i < numarDePuncte; i++)
  35.         free(matriceDistante[i]);
  36.     free(matriceDistante);
  37. }
  38.  
  39. void scrieMatriceDistante(int numarDePuncte, double **matriceDistante)
  40. {
  41.     FILE *fisier;
  42.     fisier = fopen("out.txt", "wt");
  43.     if (fisier == NULL)
  44.     {
  45.         perror("Fisierul nu a putut fi deschis!");
  46.         exit(1);
  47.     }
  48.     for (int i = 0; i < numarDePuncte; i++)
  49.     {
  50.         for (int j = 0; j < numarDePuncte; j++)
  51.         {
  52.             fprintf(fisier, "%lf ", matriceDistante[i][j]);
  53.         }
  54.         fprintf(fisier, "\n");
  55.     }
  56. }
  57.  
  58. void genereazaMatriceDistante(int numarDePuncte, Punct *vectorDePuncte, double ***matriceDistante)
  59. {
  60.     for (int i = 0; i < numarDePuncte; i++)
  61.     {
  62.         for (int j = 0; j < numarDePuncte; j++)
  63.         {
  64.             (*matriceDistante)[i][j] = sqrt(
  65.                 (vectorDePuncte[i].x - vectorDePuncte[j].x) * (vectorDePuncte[i].x - vectorDePuncte[j].x) +
  66.                 (vectorDePuncte[i].y - vectorDePuncte[j].y) * (vectorDePuncte[i].y - vectorDePuncte[j].y));
  67.         }
  68.     }
  69. }
  70.  
  71. void citestePuncte(int numarDePuncte, Punct **vectorPuncte, FILE *fisier)
  72. {
  73.     double x, y;
  74.     if (fisier == NULL)
  75.     {
  76.         perror("Fisierul nu a putut fi deschis!");
  77.         exit(1);
  78.     }
  79.     for (int i = 0; i < numarDePuncte; i++)
  80.     {
  81.         fscanf(fisier, "%lf%lf", &(*vectorPuncte)[i].x, &(*vectorPuncte)[i].y);
  82.     }
  83. }
  84.  
  85. Punct *alocareDinamicaVectorPuncte(int numarDePuncte)
  86. {
  87.     return (Punct *)malloc(numarDePuncte * sizeof(Punct));
  88. }
  89.  
  90. double **alocareDinamicaMatricePuncte(int numarDePuncte)
  91. {
  92.     double **matrice = (double **)malloc(numarDePuncte * sizeof(double *));
  93.     if (!matrice)
  94.     {
  95.         printf("Eroare la alocare");
  96.     }
  97.     for (int i = 0; i < numarDePuncte; i++)
  98.     {
  99.         matrice[i] = (double *)malloc(numarDePuncte * sizeof(double));
  100.         if (!matrice)
  101.         {
  102.             printf("Eroare la alocare");
  103.         }
  104.     }
  105.     return matrice;
  106. }
Add Comment
Please, Sign In to add comment