Advertisement
Guest User

Untitled

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