Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.21 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 **m, int Nr, int * Nc);
  10.  
  11. int main()
  12. {
  13.     system("chcp 1251 > NUL");
  14.     printf("\nЛабораторная работа №6 \
  15.           \nВыполнил студент гр. Хайкин Р.А. \
  16.           \nЗадание: Заполнить двумерный массив (каждая строка массива заполняется в\
  17.            соответствии с заданием по теме №5).\
  18.           \nОпределите, в каких словах буквы расположены в порядке возрастания их кодов,\
  19.           \nв каких в порядке убывания, и прочие слова.\
  20.           \nРазместите эти слова в отдельные массивы.\
  21.           \nПроизведите сортировку полученных массивов.\
  22.           \nДля контроля результата сделайте распечатку массивов,\
  23.           \nв том числе исходного. ");
  24.            puts("");
  25.  
  26.     char text[MAX_CHAR]; // массив символов
  27.     char ** slova, ** slova2;
  28.     int n = 0, n2 = 0; // количество слов
  29.     int * m, *m2; // количество букв в словах
  30.     int i, j = 0; //счетсики
  31.     int nach_slova = 0; //начало слова в предложениии
  32.  
  33.  
  34.     printf("\n\nВведите текст slova[%c]");  // ввод предложения с клавиатуры
  35.     gets (&text);  // сканирование введенного текста
  36.     printf("введеный текст: %s\n", text);  // распечатка введенного текста
  37.     for (i = 0; i < strlen(text); i++)   // считаем количество слов в предложении
  38.         if (!isalpha(text[i]))
  39.             n++;
  40.     n++;
  41.     printf ("Количество слов n=%i", n);
  42.     slova = (char**)calloc(n, sizeof (char)); // выделяем память под слова
  43.     m = (int *) malloc (sizeof(int) *n);
  44.     j = 0;
  45.     for (i = 0; i <= strlen(text); i++)
  46.     {
  47.         if (!isalpha(text [i]))
  48.         {
  49.             m[j] = i - nach_slova; //вычисляем длинны слов
  50.             slova [j] = (char*) calloc (m [j], sizeof(char)); // выделяем память для них
  51.             memcpy(slova[j], & text[nach_slova], m [j]); // копируем найденное слово
  52.             j++;
  53.             nach_slova = i + 1; //увеличивается счетчик слов
  54.         }
  55.     }
  56.     printf("\nВеденые слова:\n");
  57.     Print2(slova, n, m);
  58.     for (i = 0; i < n; i++)
  59.     {
  60.         printf("Строка %d, элементов %d: ", i, m[i]); //распечатка введеных слов по одному.
  61.         for (j = 0; j < m[i]; j++)
  62.             printf("%c", slova [i] [j]);
  63.         printf("\n");
  64.         if (isVozr(slova[i], m[i]))
  65.             printf("Слово расположено в порядке возростания кодов\n\n");
  66.         if (isUbyv(slova[i], m[i]))
  67.             printf("Слово расположено в порядке убывания кодов\n\n");
  68.     }
  69.     printf("\nСортировка слов по возрастанию\n\n");
  70.     for (i = 0; i < n; i++)
  71.     {
  72.         sort(slova [i], m[i]);
  73.         for (j = 0; j < m[i]; j++)
  74.             printf("%c", slova [i] [j]);
  75.         printf("\n");
  76.         free (slova[i]);
  77.     }
  78.     free (slova);
  79.     free (m);
  80.     system ("pause");
  81.     return 0;
  82. }
  83.  
  84. int isVozr(char *ch, int dlinna) // функция по возрастанию
  85. {
  86.     int i;
  87.     for (i = 1; i < dlinna; i++)
  88.         if (ch[i - 1] > ch[i])
  89.             return 0;
  90.     return 1;
  91. }
  92.  
  93.  
  94. int isUbyv(char *ch, int dlinna) // функция по убыванию
  95. {
  96.     int i;
  97.     for (i = 1; i < dlinna; i++)
  98.         if (ch[i - 1] < ch[i])
  99.             return 0;
  100.     return 1;
  101. }
  102.  
  103. void sort(char *arr, int size)
  104. {
  105.     char temp; // временная переменная для обмена элементов местами
  106.     int i;
  107.     int j;
  108.  
  109.     // Сортировка массива пузырьком
  110.     for (i = 0; i < size - 1; i++)
  111.     {
  112.         for (j = 0; j < size - i - 1; j++)
  113.         {
  114.             if (arr[j] > arr[j + 1])  // если сменить знак, то сортировка будет по убыванию.
  115.             {
  116.                 // меняем элементы местами
  117.                 temp = arr[j];
  118.                 arr[j] = arr[j + 1];
  119.                 arr[j + 1] = temp;
  120.             }
  121.         }
  122.     }
  123. }
  124. // Распечатка одномерного массива
  125. void Print (char m [ ], int n)
  126. {
  127.     int i;
  128.     for (i=0; i<n; i++)
  129.         printf ("%2c", m [i]);
  130. }
  131.  
  132. void Print2 (char ** slova, int Nr, int * m)
  133. {
  134.     int i;
  135.     for (i=0; i<Nr; i++)
  136.     {
  137.         Print ( slova[i], m); // распечатка одномерного массива
  138.         printf ("\n");
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement