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);
- void Print2 (char **m, int Nr, int * Nc);
- int main()
- {
- system("chcp 1251 > NUL");
- printf("\nЛабораторная работа №6 \
- \nВыполнил студент гр. Хайкин Р.А. \
- \nЗадание: Заполнить двумерный массив (каждая строка массива заполняется в\
- соответствии с заданием по теме №5).\
- \nОпределите, в каких словах буквы расположены в порядке возрастания их кодов,\
- \nв каких в порядке убывания, и прочие слова.\
- \nРазместите эти слова в отдельные массивы.\
- \nПроизведите сортировку полученных массивов.\
- \nДля контроля результата сделайте распечатку массивов,\
- \nв том числе исходного. ");
- puts("");
- char text[MAX_CHAR]; // массив символов
- char ** slova, ** slova2;
- int n = 0, n2 = 0; // количество слов
- int * m, *m2; // количество букв в словах
- int i, j = 0; //счетсики
- int nach_slova = 0; //начало слова в предложениии
- printf("\n\nВведите текст slova[%c]"); // ввод предложения с клавиатуры
- gets (&text); // сканирование введенного текста
- printf("введеный текст: %s\n", text); // распечатка введенного текста
- for (i = 0; i < strlen(text); i++) // считаем количество слов в предложении
- if (!isalpha(text[i]))
- n++;
- n++;
- printf ("Количество слов n=%i", n);
- 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; //увеличивается счетчик слов
- }
- }
- printf("\nВеденые слова:\n");
- Print2(slova, n, m);
- 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");
- }
- 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]);
- }
- 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;
- }
- }
- }
- }
- // Распечатка одномерного массива
- void Print (char m [ ], int n)
- {
- int i;
- for (i=0; i<n; i++)
- printf ("%2c", m [i]);
- }
- void Print2 (char ** slova, int Nr, int * m)
- {
- int i;
- for (i=0; i<Nr; i++)
- {
- Print ( slova[i], m); // распечатка одномерного массива
- printf ("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement