visoft

Pregatire 12.11 Problema cu tabel de vectori completa.

Nov 12th, 2020
523
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. // o tabela de int-uri
  5. // o tabela de tabele de int-uri
  6. // numarul de elemente din fiecare vector
  7. // numarul de vectori
  8.  
  9. typedef struct {
  10.     int numar_de_vectori; // numarul de vectori
  11.     int *lungime_individuala; // numarul de elemente din fiecare vector
  12.     int **vectori; // o tabela de tabele de int-uri
  13. } TabelMare;
  14.  
  15. #define MAX_LINE_LEN 10000
  16. #define MAX_LINE_INT_COUNT 100
  17.  
  18.  
  19. int main() {
  20.     // 3 4 2
  21.     // 10 11
  22.     // 4
  23.     TabelMare tab;
  24. /*
  25.     tab.numar_de_vectori = 3;
  26.     tab.lungime_individuala = (int *) calloc(sizeof(int), tab.numar_de_vectori);
  27.     tab.vectori = (int **) calloc(sizeof(int *), tab.numar_de_vectori);
  28.  
  29.     tab.lungime_individuala[0] = 3;
  30.     tab.lungime_individuala[1] = 2;
  31.     tab.lungime_individuala[2] = 1;
  32.  
  33.     for (int i = 0; i < tab.numar_de_vectori; ++i) {
  34.         tab.vectori[i] = (int *) calloc(sizeof(int), tab.lungime_individuala[i]);
  35.     }
  36.  
  37.     tab.vectori[0][0] = 3;
  38.     tab.vectori[0][1] = 4;
  39.     tab.vectori[0][2] = 2;
  40.     tab.vectori[1][0] = 10;
  41.     tab.vectori[1][1] = 11;
  42.     tab.vectori[2][0] = 4;
  43. */
  44.  
  45.     FILE *f = fopen("../in.txt", "r");
  46.     if (f == NULL) {
  47.         return 1;
  48.     }
  49.     fscanf(f,"%d\n", &tab.numar_de_vectori);
  50.     tab.lungime_individuala = (int *) calloc(sizeof(int), tab.numar_de_vectori);
  51.     tab.vectori = (int **) calloc(sizeof(int *), tab.numar_de_vectori);
  52.  
  53.  
  54.     int rez_fgets, nr_de_specificatori_cititi, nr_de_caractere_citite, nr_citit;
  55.     int locatie_curenta_in_linie;
  56.     int index_element_citit, index_linie_curenta;
  57.     char *linie = (char *) calloc(sizeof(char), MAX_LINE_LEN);
  58.     int *linie_int = (int*) calloc(sizeof(int ), MAX_LINE_INT_COUNT);
  59.     index_linie_curenta = 0;
  60.     while (1) {
  61.         rez_fgets = fgets(linie, MAX_LINE_LEN, f);
  62.         if (rez_fgets == NULL || rez_fgets == EOF) {
  63.             break;
  64.         }
  65. //        printf("-:%s", linie);
  66.         locatie_curenta_in_linie = 0;
  67.         nr_de_specificatori_cititi = 1;
  68.         index_element_citit = 0;
  69.         while (nr_de_specificatori_cititi == 1) {
  70.             nr_de_specificatori_cititi = sscanf(linie + locatie_curenta_in_linie, "%d%n",
  71.                                                 &nr_citit, &nr_de_caractere_citite);
  72.             if (nr_de_specificatori_cititi == 1) {
  73. //                printf("%d ", nr_citit);
  74.                 linie_int[index_element_citit++] = nr_citit;
  75.                 // mut pointerul dupa caracterele citite
  76.                 locatie_curenta_in_linie += nr_de_caractere_citite;
  77.             }
  78.         }
  79.         if(index_element_citit == 0){
  80.             continue;
  81.         }
  82.         tab.lungime_individuala[index_linie_curenta] = index_element_citit;
  83.         tab.vectori[index_linie_curenta] = (int *) calloc(sizeof(int), tab.lungime_individuala[index_linie_curenta]);
  84.         memcpy(tab.vectori[index_linie_curenta], linie_int, sizeof(int) * tab.lungime_individuala[index_linie_curenta]);
  85.         index_linie_curenta++;
  86.     }
  87.  
  88.     for (int i = 0; i < tab.numar_de_vectori; ++i) {
  89.         printf(">>> ");
  90.         for (int j = 0; j <tab.lungime_individuala[i]; ++j) {
  91.             printf("%d ", tab.vectori[i][j]);
  92.         }
  93.         printf("\n");
  94.     }
  95.  
  96.     free(linie);
  97.     free(linie_int);
  98.     free(tab.vectori);
  99.     free(tab.lungime_individuala);
  100.     fclose(f);
  101.  
  102.     return 0;
  103. }
  104.  
  105.  
RAW Paste Data