Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <memory.h>
- #define MAX_CHAR 1024
- int isVozr(char *ch, int dlinna);
- int isUbyv(char *ch, int dlinna);
- void sort(char *arr, int size);
- int kolSlov(char *text);
- int main()
- {
- system("chcp 1251 > NUL");
- printf("\nЛабораторная работа №5 \
- \nВыполнил студент гр. Хайкин Р.А. \
- \nЗадание: Введите с клавиатуры текст в массив символов.\
- \nОпределите, в каких словах буквы расположены в порядке возрастания их кодов,\
- \nв каких в порядке убывания, и прочие слова.\
- \nРазместите эти слова в отдельные массивы.\
- \nПроизведите сортировку полученных массивов.\
- \nДля контроля результата сделайте распечатку массивов,\
- \nв том числе исходного. ");
- puts("");
- char text[MAX_CHAR]; // массив символов
- char ** slova, ** slovaVozr, ** slovaUbiv;
- int n = 0; // количество слов
- int * m; // количество букв в словах
- int i, j = 0; //счетсики
- int nach_slova = 0; //начало слова в предложениии
- // 1) считывание текста
- printf("\n\nВведите текст slova[%c]"); // ввод предложения с клавиатуры
- gets(&text); // сканирование введенного текста
- printf("введеный текст: %s\n", text); // распечатка введенного текста
- // 2) подсчёт количества слов
- n = kolSlov(text);
- printf("Количество слов n=%i", n);
- // 3) выделение памяти ** slova, ** slovaVozr, ** slovaUbiv;
- slova = (char**)calloc(n, sizeof(char*)); // выделяем память под слова
- m = (int *)malloc(sizeof(int) *n);
- j = 0;
- for (i = 0; i <= strlen(text); i++)
- {
- if (!isalpha(text[i]))
- {
- m[j] = i - nach_slova; //вычисляем длинны слов
- slova[j] = (char*)calloc(m[j], sizeof(char)); // выделяем память для них
- memcpy(slova[j], &text[nach_slova], m[j]); // копируем найденное слово
- j++;
- nach_slova = i + 1; //увеличивается счетчик слов
- }
- }
- // 4) анализ слов
- printf("\nВеденые слова:\n");
- for (i = 0; i < n; i++)
- {
- printf("Строка %d, элементов %d: ", i, m[i]); //распечатка введеных слов по одному.
- for (j = 0; j < m[i]; j++)
- printf("%c", slova[i][j]);
- printf("\n");
- if (isVozr(slova[i], m[i]))
- printf("Слово расположено в порядке возростания кодов\n\n");
- if (isUbyv(slova[i], m[i]))
- printf("Слово расположено в порядке убывания кодов\n\n");
- }
- // 5) Сортировка во взростанию и убыванию
- printf("\nСортировка слов по возрастанию\n\n");
- for (i = 0; i < n; i++)
- {
- sort(slova[i], m[i]);
- for (j = 0; j < m[i]; j++)
- printf("%c", slova[i][j]);
- printf("\n");
- free(slova[i]);
- }
- // 6) очистка памяти
- free(slova);
- free(m);
- system("pause");
- return 0;
- }
- int isVozr(char *ch, int dlinna) // функция по возрастанию
- {
- int i;
- for (i = 1; i < dlinna; i++)
- if (ch[i - 1] > ch[i])
- return 0;
- return 1;
- }
- int isUbyv(char *ch, int dlinna) // функция по убыванию
- {
- int i;
- for (i = 1; i < dlinna; i++)
- if (ch[i - 1] < ch[i])
- return 0;
- return 1;
- }
- void sort(char *arr, int size)
- {
- char temp; // временная переменная для обмена элементов местами
- int i;
- int j;
- // Сортировка массива пузырьком
- for (i = 0; i < size - 1; i++)
- {
- for (j = 0; j < size - i - 1; j++)
- {
- if (arr[j] > arr[j + 1]) // если сменить знак, то сортировка будет по убыванию.
- {
- // меняем элементы местами
- temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- }
- int kolSlov(char * text)
- {
- int i;
- int n = 0;
- for (i = 0; i < strlen(text); i++) // считаем количество слов в предложении
- if (!isalpha(text[i]))
- n++;
- n++;
- return n;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement