visoft

Problema 4.6 cu citire din fisier.

Nov 9th, 2020
632
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 4.6
  4.  
  5. typedef struct {
  6.     int *tab;
  7.     int capacitate;
  8.     int index;
  9.     int nume;
  10. }Vector;
  11.  
  12. Vector create(){
  13.     Vector t;
  14.     t.capacitate = 2;
  15.     t.index = 0;
  16.     t.tab = (int*)malloc(sizeof(int) * t.capacitate);
  17.     return t;
  18. }
  19.  
  20. void add(Vector *t, int element){
  21.  
  22.     //caz 2, trebuie realocare
  23.     if(t->index >= t->capacitate){
  24.         // pas 1, alocam noua memorie
  25.         int capacitate_noua = t->capacitate * 2;
  26.         int * tab_nou = (int*)malloc(sizeof(int) * capacitate_noua);
  27.         // pas 2 se copiaza vechiul continut in noua locatie
  28.         for(int i = 0; i < t->capacitate; i++){  // TODO use memcpy()
  29.             tab_nou[i] = t->tab[i];
  30.         }
  31.         // pas 3, se "reseteaza" structura spre noua locatie.
  32.         t->capacitate = capacitate_noua;
  33.         free(t->tab);
  34.         t->tab = tab_nou;
  35.     }
  36.  
  37.     //Caz 1, indexul este sub capacitate
  38.     t->tab[t->index] = element;
  39.     t->index++;
  40. }
  41.  
  42. int get(Vector v, int index){
  43.     if((index < 0) || (index >= v.index)){
  44.         printf("EROARE\n");
  45.         return -1;
  46.     }
  47.     return v.tab[index];
  48. }
  49.  
  50. int main() {
  51.  
  52.     Vector  v = create();
  53.     Vector v2 = create();
  54.  
  55. //    add(&v, 10);
  56. //    add(&v, 20);
  57. //    add(&v, 30);
  58. //    add(&v, 40);
  59.  
  60.     FILE * f = fopen("../in.txt", "r");
  61.     if(f == NULL){
  62.         printf("Eroare la deschidere fisier");
  63.         return -1;
  64.     }
  65.     int k;
  66.     int ok = 1;
  67.     while (ok == 1) {
  68.         ok = fscanf(f, "%d", &k);
  69.         if (ok == 1)
  70.             add(&v, k);
  71.     }
  72.  
  73.     for (int i = 0; i < v.index;i++){
  74.         printf("tab[%2d] = %d\n", i, get(v, i));
  75.     }
  76.     return 0;
  77. }
  78.  
  79.  
RAW Paste Data