Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.58 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <memory.h>
  4. #define MAX_CHAR 1024
  5.  
  6. int isVozr(char *ch, int dlinna);
  7. int isUbyv(char *ch, int dlinna);
  8. void sort(char *arr, int size);
  9. void Print2(char **slova, int n, int * m);
  10. void toBinFile(char **slova, int n, int * m);
  11. void fromBinFile(char ***slova, int *n, int ** m);
  12.  
  13.  
  14. int main()
  15. {
  16.     system("chcp 1251 > NUL");
  17.     printf("\nЛабораторная работа №6 \
  18.         \nВыполнил студент гр. Хайкин Р.А. \
  19.         \nЗадание: Заполнить двумерный массив\
  20.         \nкаждая строка массива заполняется в\
  21.         \nсоответствии с заданием по теме №5.\
  22.         \nРаспечатать содержимое массива в виде прямоугольной матрицы.,\
  23.         \nСохранить двумерный массив в бинарный файл.\
  24.         \nСчитать содержимое бинарного файла в другой двумерный массив. \
  25.         \nВыполнить над каждой строкой нового двумерного массива действия, предусмотренные по теме №5. \
  26.         \nРаспечатать преобразованный двумерный массив. ");
  27.     puts("");
  28.  
  29.     char text[MAX_CHAR]; // массив символов
  30.     char ** slova, ** slova2;
  31.     int n = 0, n2 = 0; // количество слов
  32.     int * m, *m2; // количество букв в словах
  33.     int i, j = 0; //счетсики
  34.     int nach_slova = 0; //начало слова в предложениии
  35.  
  36.  
  37.     printf("\n\nВведите текст slova[%c]");  // ввод предложения с клавиатуры
  38.     gets(&text);  // сканирование введенного текста
  39.     printf("введеный текст: %s\n", text);  // распечатка введенного текста
  40.     for (i = 0; i < strlen(text); i++)   // считаем количество слов в предложении
  41.         if (!isalpha(text[i]))
  42.             n++;
  43.     n++;
  44.     printf("Количество слов n=%i", n);
  45.     slova = (char**)calloc(n, sizeof(char)); // выделяем память под слова
  46.     m = (int *)malloc(sizeof(int) *n);
  47.     j = 0;
  48.     for (i = 0; i <= strlen(text); i++)
  49.     {
  50.         if (!isalpha(text[i]))
  51.         {
  52.             m[j] = i - nach_slova; //вычисляем длинны слов
  53.             slova[j] = (char*)calloc(m[j], sizeof(char)); // выделяем память для них
  54.             memcpy(slova[j], &text[nach_slova], m[j]); // копируем найденное слово
  55.             j++;
  56.             nach_slova = i + 1; //увеличивается счетчик слов
  57.         }
  58.     }
  59.     printf("\nВеденые слова:\n");
  60.     Print2(slova, n, m);
  61.  
  62.     // в двоичный файл
  63.     toBinFile(slova, n, m);
  64.  
  65.     // из двоичного
  66.     fromBinFile(&slova2, &n2, &m2);
  67.  
  68.  
  69.     for (i = 0; i < n2; i++)
  70.     {
  71.         printf("Строка %d, элементов %d: ", i, m2[i]); //распечатка введеных слов по одному.
  72.         for (j = 0; j < m2[i]; j++)
  73.             printf("%c", slova2[i][j]);
  74.         printf("\n");
  75.         if (isVozr(slova2[i], m2[i]))
  76.             printf("Слово расположено в порядке возростания кодов\n\n");
  77.         if (isUbyv(slova2[i], m2[i]))
  78.             printf("Слово расположено в порядке убывания кодов\n\n");
  79.     }
  80.     printf("\nСортировка слов по возрастанию\n\n");
  81.     for (i = 0; i < n2; i++)
  82.     {
  83.         sort(slova2[i], m2[i]);
  84.     }
  85.     Print2(slova2, n2, m2);
  86.  
  87.     // освобождение памяти
  88.     for (i = 0; i < n; i++)
  89.     {
  90.         free(slova[i]);
  91.         free(slova2[i]);
  92.     }
  93.     free(slova);
  94.     free(slova2);
  95.     free(m);
  96.     free(m2);
  97.     system("pause");
  98.     return 0;
  99. }
  100.  
  101. int isVozr(char *ch, int dlinna) // функция по возрастанию
  102. {
  103.     int i;
  104.     for (i = 1; i < dlinna; i++)
  105.         if (ch[i - 1] > ch[i])
  106.             return 0;
  107.     return 1;
  108. }
  109.  
  110.  
  111. int isUbyv(char *ch, int dlinna) // функция по убыванию
  112. {
  113.     int i;
  114.     for (i = 1; i < dlinna; i++)
  115.         if (ch[i - 1] < ch[i])
  116.             return 0;
  117.     return 1;
  118. }
  119.  
  120. void sort(char *arr, int size)
  121. {
  122.     char temp; // временная переменная для обмена элементов местами
  123.     int i;
  124.     int j;
  125.  
  126.     // Сортировка массива пузырьком
  127.     for (i = 0; i < size - 1; i++)
  128.     {
  129.         for (j = 0; j < size - i - 1; j++)
  130.         {
  131.             if (arr[j] > arr[j + 1])  // если сменить знак, то сортировка будет по убыванию.
  132.             {
  133.                 // меняем элементы местами
  134.                 temp = arr[j];
  135.                 arr[j] = arr[j + 1];
  136.                 arr[j + 1] = temp;
  137.             }
  138.         }
  139.     }
  140. }
  141. // Распечатка одномерного массива
  142. void Print(char m[], int n)
  143. {
  144.     int i;
  145.     for (i = 0; i<n; i++)
  146.         printf("%2c", m[i]);
  147. }
  148.  
  149. void Print2(char ** slova, int Nr, int * m)
  150. {
  151.     int i;
  152.     for (i = 0; i<Nr; i++)
  153.     {
  154.         Print(slova[i], m[i]); // распечатка одномерного массива
  155.         printf("\n");
  156.     }
  157. }
  158.  
  159. void toBinFile(char ** slova, int n, int * m)
  160. {
  161.     int i,j;
  162.     FILE *out = NULL;
  163.     out = fopen("file.bin", "wb");
  164.     fwrite(&n, sizeof(int), 1, out);
  165.     for (i = 0; i<n; i++)
  166.         fwrite(&m[i], sizeof(int), 1, out);
  167.     for (i = 0; i<n; i++)
  168.         for (j = 0; j<m[i]; j++)
  169.             fwrite(&slova[i][j], sizeof(char), 1, out);
  170.     fclose(out);
  171. }
  172.  
  173. void fromBinFile(char *** slova, int *n, int ** m)
  174. {
  175.     int i, j;
  176.     FILE *in = NULL;
  177.     in = fopen("file.bin", "rb");
  178.     fread(&*n, sizeof(int), 1, in);
  179.     *slova = (char**)calloc(*n, sizeof(char)); // выделяем память под слова
  180.     *m = (int *)malloc(sizeof(int) * (*n));
  181.  
  182.     for (i = 0; i < *n; i++)
  183.     {
  184.         fread(&((*m)[i]), sizeof(int), 1, in);
  185.     }
  186.     for (i = 0; i < *n; i++)
  187.     {
  188.         (*slova)[i] = (char*)calloc((*m)[i], sizeof(char)); // выделяем память для них
  189.         for (j = 0; j < (*m)[i]; j++)
  190.         {
  191.             fread(&((*slova)[i][j]), sizeof(char), 1, in);
  192.         }
  193.     }
  194.     fclose(in);
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement