Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <locale.h>
  4. #include <io.h>
  5.  
  6. int main()
  7. {
  8.   setlocale(LC_ALL, "Russian");
  9.   FILE *f;
  10.   int ms[] = { 5, 7, 10, 13, 14 };
  11.   int i, j;
  12.   fpos_t l1, l2;              // тип позиция в файле
  13.   f = fopen("aaa", "w+b");
  14.   fwrite(ms, sizeof(int), sizeof(ms) / sizeof(int), f); //
  15.   while (1)
  16.   {
  17.     scanf("%d", &i);
  18.     if (i == 999) break;            // выход из программы
  19.     rewind(f);                      // установка УТПФ в начало файла и сброс
  20.     do                              // признака конца файла
  21.     {
  22.         fgetpos(f, &l1);            // УТПФ наначало поля считываемого числа
  23.         fread(&j, sizeof(int), 1, f);
  24.         if (feof(f) || j>i)  break; // достигнут конец файла или считано число
  25.                                     // большее чем введенное с клавиатуры.
  26.     } while (1);
  27.     rewind(f);
  28.     if (j<i)                      // EOF и в файле нет числа > чем введенное
  29.     {
  30.         fseek(f, 0, 2);               // выход на конец файла
  31.         fwrite(&i, sizeof(int), 1, f); // дозапись в конец файла
  32.         continue;
  33.     }
  34.     fseek(f, -sizeof(int), 2);     // УТПФ на последний элемент файла
  35.     do
  36.     {
  37.         fgetpos(f, &l2);            // сдвиг всех чисел в массиве до
  38.         fread(&j, sizeof(int), 1, f); // l2 позиция УТПФ числа которое > чем i
  39.         rewind(f);
  40.         l2 += sizeof(int);
  41.         fsetpos(f, &l2);
  42.         fwrite(&j, sizeof(int), 1, f);
  43.         fseek(f, l2 - 2 * sizeof(int), 0);
  44.     } while (l1<l2 - sizeof(int));
  45.     fseek(f, l2 - sizeof(int), 0);
  46.     fwrite(&i, sizeof(int), 1, f);    // запись i на место числа с копторого
  47.   }                                // произведен сдвиг всех чисел вниз
  48.   rewind(f);
  49.   do
  50.   {
  51.       fread(&j, sizeof(int), 1, f);
  52.       if(feof(f))  break;
  53.       printf("%3d", j);
  54.   } while (1);
  55.   printf("\n");
  56.   fclose(f);
  57.   return 0;
  58. }
  59.  
  60. //============================================================================================
  61.  
  62. // имеются 2 файла(aa и bb) оба упорядочены по возрастанию,
  63. // переписать их в результирующий без нарушения упорядоченности
  64.  
  65. //int main()
  66. //{
  67. //  setlocale(LC_ALL, "Russian");
  68. //  FILE *f1, *f2, *f3;
  69. //  int i1, i2;
  70. //  int m1[] = { 1, 2, 4, 5 },
  71. //    m2[] = { 1, 3 };
  72. //    char cc;
  73. //  if (!(f1 = fopen("a", "w+b")) ||
  74. //    !(f2 = fopen("aa", "wb+")) ||
  75. //    !(f3 = fopen("aaa", "wb")))
  76. //  {
  77. //    puts("error");
  78. //    return 0;
  79. //  }
  80. //  for (i1 = 0; i1<sizeof(m1) / sizeof(int); i1++) fwrite(&m1[i1], sizeof(int), 1, f1);
  81. //  fwrite(m2, sizeof(m2), 1, f2);
  82. //
  83. //  rewind(f1); rewind(f2);
  84. //  fread(&i1, sizeof(int), 1, f1);
  85. //  fread(&i2, sizeof(int), 1, f2);
  86. //  do
  87. //  {
  88. //    while (!feof(f1) && i1<i2)
  89. //    {
  90. //        fwrite(&i1, sizeof(int), 1, f3);
  91. //        fread(&i1, sizeof(int), 1, f1);
  92. //    }
  93. //    if (feof(f1)) break;
  94. //
  95. //    while (!feof(f2) && i1 >= i2)
  96. //    {
  97. //        fwrite(&i2, sizeof(int), 1, f3);
  98. //        fread(&i2, sizeof(int), 1, f2);
  99. //    }
  100. //  } while (!feof(f2));
  101. //
  102. //  while (!feof(f1))
  103. //  {
  104. //    fwrite(&i1, sizeof(int), 1, f3);
  105. //    fread(&i1, sizeof(int), 1, f1);
  106. //  }
  107. //
  108. //  while (!feof(f2))
  109. //  {
  110. //    fwrite(&i2, sizeof(int), 1, f3);
  111. //    fread(&i2, sizeof(int), 1, f2);
  112. //  }
  113. //
  114. //  fclose(f1);
  115. //  fclose(f2);
  116. //  fclose(f3);
  117. //
  118. //  f3 = fopen("aaa", "rb");
  119. //  while (1)
  120. //  {
  121. //    fread(&i1, sizeof(int), 1, f3);
  122. //    if (feof(f3)) break;
  123. //    printf("%3d", i1);
  124. //  }
  125. //  printf("\n");
  126. //  return 0;
  127. //}
  128.  
  129. //============================================================================================
  130.  
  131. // имеются 2 файла (aa и bb) по возрастанию и по убыванию
  132. // переписать их в результирующий без нарушения упорядоченности
  133.  
  134. //int main()
  135. //{
  136. //  setlocale(LC_ALL, "Russian");
  137. //  FILE *f1, *f2, *f3;
  138. //  int i1, i2, k, kk;
  139. //  fpos_t n;
  140. //  int m1[] = { 1, 2 },
  141. //      m2[] = { 7, 5, 4, 3, 1 };
  142. //  char cc;
  143. //  if (!(f1 = fopen("a", "w+b")) ||
  144. //      !(f2 = fopen("aa", "wb+")) ||
  145. //      !(f3 = fopen("aaa", "wb")))
  146. //  {
  147. //      puts("error");
  148. //      return 0;
  149. //  }
  150. //  for (i1 = 0; i1<sizeof(m1) / sizeof(int); i1++) fwrite(&m1[i1], sizeof(int), 1, f1);
  151. //  fwrite(m2, sizeof(m2), 1, f2);
  152. //
  153. //  rewind(f1);
  154. //  fread(&i1, sizeof(int), 1, f1);
  155. //  k = sizeof(int);
  156. //  fseek(f2, -k, 2);  
  157. //  fgetpos(f2, &n);
  158. //  fread(&i2, sizeof(int), 1, f2);
  159. //  do
  160. //  {
  161. //      while (!feof(f1) && i1<i2)
  162. //      {
  163. //          fwrite(&i1, sizeof(int), 1, f3);
  164. //          fread(&i1, sizeof(int), 1, f1);
  165. //      }
  166. //      if (feof(f1)) break;
  167. //
  168. //      while (n >= 0 && i1 >= i2)
  169. //      {
  170. //          fwrite(&i2, sizeof(int), 1, f3);
  171. //          fseek(f2, -k * 2, 1);
  172. //          fgetpos(f2, &n);
  173. //          if (n<0) break;
  174. //          fread(&i2, sizeof(int), 1, f2);
  175. //      }
  176. //  } while (n >= 0);
  177. //
  178. //  while (!feof(f1))
  179. //  {
  180. //      fwrite(&i1, sizeof(int), 1, f3);
  181. //      fread(&i1, sizeof(int), 1, f1);
  182. //  }
  183. //
  184. //  while (n >= 0)
  185. //  {
  186. //      fwrite(&i2, sizeof(int), 1, f3);
  187. //      if (n<=0) break;
  188. //      fseek(f2, -k*2, 1);
  189. //      fgetpos(f2, &n);
  190. //      fread(&i2, sizeof(int), 1, f2);
  191. //  }
  192. //
  193. //  fclose(f1);
  194. //  fclose(f2);
  195. //  fclose(f3);
  196. //
  197. //  f3 = fopen("aaa", "rb");
  198. //  while (1)
  199. //  {
  200. //      fread(&i1, sizeof(int), 1, f3);
  201. //      if (feof(f3)) break;
  202. //      printf("%3d", i1);
  203. //  }
  204. //  printf("\n");
  205. //  return 0;
  206. //}
  207.  
  208.  
  209. //============================================================================================
  210.  
  211.  
  212. //#include <stdlib.h>
  213. //#include <string.h>
  214. //
  215. //void add(char *);
  216. //void del(char *);
  217. //void print(char *);
  218. //
  219. //struct inf {
  220. //  char tp[15];        // название
  221. //  unsigned short pr;  // процессор
  222. //};
  223. //struct str {
  224. //  inf in;
  225. //  double hd;          // HDD
  226. //  int mem;            // память
  227. //};
  228. //
  229. //int main()
  230. //{
  231. //  setlocale(LC_ALL, "Russian");
  232. //  FILE *f;
  233. //  char name[] = "baza.txt";
  234. //  int i, k, pl;
  235. //  while (1)
  236. //  {
  237. //      puts("\n1- add \n2- \n3-del \n4-print \n5-end\n выберите режим работы");
  238. //      scanf("%d", &k);
  239. //      switch (k)
  240. //      {
  241. //          case 1: add(name); break;
  242. //          case 3: del(name); break;
  243. //          case 4: print(name); break;
  244. //          case 5: return 0;
  245. //      }
  246. //  }
  247. //  return 0;
  248. //}
  249. //
  250. //void add(char *name)
  251. //{
  252. //  double a;
  253. //  str *s;
  254. //  FILE *f;
  255. //  if ((f = fopen(name, "ab")) == nullptr)
  256. //  {
  257. //      puts(" ошибка  открытия файла");
  258. //      return;
  259. //  }
  260. //  if ((s = (str *)calloc(1, sizeof(str))) == NULL)
  261. //  {
  262. //      puts("ошибка при выделении памяти");
  263. //      fclose(f);
  264. //      return;
  265. //  }
  266. //  do
  267. //  {
  268. //      fflush(stdin);
  269. //      puts("введите тип компъютера ");
  270. //      gets(s->in.tp); if (!strcmp(s->in.tp, "")) break;
  271. //      puts("введите частоту проц. , объем  HDD   и  памяти");
  272. //      scanf("%d", &(s->in.pr));
  273. //      scanf("%lf", &a);        // ???????/
  274. //      s->hd = a;
  275. //      scanf("%d", &s->mem);
  276. //      fwrite(s, sizeof(str), 1, f);   // дозапись структуры в конец файла
  277. //  } while (1);
  278. //  fclose(f);
  279. //}
  280. //
  281. //void del(char *name)
  282. //{
  283. //  FILE *f;
  284. //  str st, stt;
  285. //  long l;
  286. //  if ((f = fopen(name, "r+b")) == nullptr)
  287. //  {
  288. //      puts(" ошибка  открытия файла");
  289. //      return;
  290. //  }
  291. //  puts("\nвведите тип компъютера : "); scanf("%s", st.in.tp);
  292. //  puts("\nвведите частоту проц.  : "); scanf("%d%", &st.in.pr);
  293. //  puts("\nвведите объем  HDD     : "); scanf("%lf", &st.hd);
  294. //  puts("\nвведите объем  памяти  : "); scanf("%d",  &st.mem);
  295. //  do
  296. //  {
  297. //      fread(&stt, sizeof(str), 1, f);
  298. //      if (feof(f)) break;
  299. //      if (!strcmp(st.in.tp, stt.in.tp) && st.in.pr == stt.in.pr &&
  300. //          st.hd == stt.hd && st.mem == stt.mem)
  301. //      {                  // найдена удаляемая структура   sst
  302. //          do
  303. //          {
  304. //              fread(&stt, sizeof(str), 1, f);          // чтение следующей стр-ры
  305. //              if (feof(f)) break;
  306. //              l = ftell(f);                            // позиция за считанной
  307. //              fseek(f, l - (long)(2 * sizeof(str)), 0);// на 2 стр-ры назад к началу файла
  308. //              fwrite(&stt, sizeof(str), 1, f);         // и запись считанной ст-ры
  309. //              fseek(f, l, 0);                          // возврат к позиции L
  310. //          } while (!feof(f));
  311. //      }
  312. //  } while(1);
  313. //  rewind(f);
  314. //  fseek(f, -sizeof(str), 2);
  315. //  l = ftell(f);
  316. //  chsize(fileno(f),l);
  317. //  fclose(f);
  318. //}
  319. //
  320. //void print(char *name)
  321. //{
  322. //  FILE *f;
  323. //  str st;
  324. //  int k = 0;
  325. //  if ((f = fopen(name, "rb")) == nullptr)
  326. //  {
  327. //      puts(" ошибка  открытия файла");
  328. //      return;
  329. //  }
  330. //  puts("   тип компъютера    процессор     HDD    RAM");
  331. //  do
  332. //  {
  333. //      k++;              // счетчик числа выведенных на экран записей
  334. //      fread(&st, sizeof(str), 1, f);
  335. //      if (feof(f)) break;
  336. //      if (k >= 10)         // выведено 5 записей
  337. //      {
  338. //          k = 0;             // сброс четчика
  339. //          getch();         // задержка вывода на экран
  340. //          puts("   тип компъютера    процессор     HDD    RAM");
  341. //      }
  342. //      printf("\n%20s%10d%8.2lf%8d", st.in.tp, st.in.pr, st.hd, st.mem);
  343. //  } while (!feof(f));
  344. //  fclose(f);
  345. //}
  346. //
  347. //
  348. //
  349. //void swap(FILE *ff, struct str s1, struct str s2, fpos_t *l1, fpos_t *l2)
  350. //{
  351. //  fsetpos(ff, l1);
  352. //  fwrite(&s2, sizeof(str), 1, ff);    // вторая стр-ра по первому адресу
  353. //  fsetpos(ff, l2);
  354. //  fwrite(&s1, sizeof(str), 1, ff);    // первая стр-ра по второму адресу
  355. //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement