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 **slova, int n, int * m);
- void toBinFile(char **slova, int n, int * m);
- void fromBinFile(char ***slova, int *n, int ** m);
- int kolSlov(char *text);
- void analiz (int n, int * m, char ** slova);
- void allocmem(char * text, int n, char *** slova, int ** m);
- void analiz (int n, int * m, char ** slova);
- void sortVozr (int n, int * m, char ** slova2);
- void sortUbiv (int n, int * m, char ** slova2);
- 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, ** slovaVozr, ** slovaUbiv;
- int n = 0, n2 = 0; // количество слов
- int * m, *m2; // количество букв в словах
- int * mVozr;
- int * mUbiv;
- 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++;
- n = kolSlov(text);
- printf("Количество слов n=%i", n);
- allocmem(text, n, &slova, &m);
- allocmem(text, n, &slovaVozr, &mVozr);
- allocmem(text, n, &slovaUbiv, &mUbiv);
- //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");
- analiz (n, m, slova);
- // в двоичный файл
- toBinFile(slova, n, m);
- // из двоичного
- fromBinFile(&slova2, &n2, &m2);
- printf("\nСчитанные из бинарного файла слова:\n");
- Print2(slova2, n2, m2);
- //for (i = 0; i < n2; i++)
- //{
- // printf("Строка %d, элементов %d: ", i, m2[i]); //распечатка введеных слов по одному.
- //for (j = 0; j < m2[i]; j++)
- // printf("%c", slova2[i][j]);
- //printf("\n");
- //if (isVozr(slova2[i], m2[i]))
- //printf("Слово расположено в порядке возростания кодов\n\n");
- //if (isUbyv(slova2[i], m2[i]))
- //printf("Слово расположено в порядке убывания кодов\n\n");
- //}
- printf("\nСортировка слов по возрастанию\n\n");
- sortVozr(n , mVozr, slovaVozr);
- print(n, mVozr, slovaVozr);
- printf("\nСортировка слов по убыванию\n\n");
- sortUbiv(n, mUbiv, slovaUbiv);
- print (n, mUbiv, slovaUbiv);
- //for (i = 0; i < n2; i++)
- //{
- //sort(slova2[i], m2[i]);
- //}
- Print2(slova2, n2, m2);
- // освобождение памяти
- for (i = 0; i < n; i++)
- {
- free(slova[i]);
- free(slova2[i]);
- }
- free(slova);
- free(slova2);
- free(m);
- free(m2);
- system("pause");
- return 0;
- }
- int kolSlov(char * text)
- {
- int i;
- int n = 0;
- for (i = 0; i < strlen(text); i++) // считаем количество слов в предложении
- if (!isalpha(text[i]))
- n++;
- n++;
- return n;
- }
- void allocmem(char * text, int n, char *** slova, int ** m)
- {
- int i;
- int j;
- int nach_slova = 0;
- *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; //увеличивается счетчик слов
- }
- }
- }
- 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[i]); // распечатка одномерного массива
- printf("\n");
- }
- }
- void toBinFile(char ** slova, int n, int * m)
- {
- int i,j;
- FILE *out = NULL;
- out = fopen("file.bin", "wb");
- fwrite(&n, sizeof(int), 1, out);
- for (i = 0; i<n; i++)
- fwrite(&m[i], sizeof(int), 1, out);
- for (i = 0; i<n; i++)
- for (j = 0; j<m[i]; j++)
- fwrite(&slova[i][j], sizeof(char), 1, out);
- fclose(out);
- }
- void fromBinFile(char *** slova, int *n, int ** m)
- {
- int i, j;
- FILE *in = NULL;
- in = fopen("file.bin", "rb");
- fread(&(*n), sizeof(int), 1, in);
- *slova = (char**)calloc((*n), sizeof(char*)); // выделяем память под слова
- *m = (int *)malloc(sizeof(int) * (*n));
- for (i = 0; i < *n; i++)
- {
- fread(&((*m)[i]), sizeof(int), 1, in);
- }
- for (i = 0; i < *n; i++)
- {
- (*slova)[i] = (char*)calloc((*m)[i], sizeof(char)); // выделяем память для них
- for (j = 0; j < (*m)[i]; j++)
- {
- fread(&((*slova)[i][j]), sizeof(char), 1, in);
- }
- }
- fclose(in);
- }
- void analiz (int n, int * m, char **slova)
- {
- int i;
- int j;
- 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");
- }
- }
- void sortVozr (int n, int * m, char ** slova2)
- {
- int i;
- int j;
- for (i = 0; i < n; i++)
- {
- sortVz(slova2[i], m[i]);
- }
- }
- void sortUbiv (int n, int * m, char ** slova2)
- {
- int i;
- int j;
- for (i = 0; i < n; i++)
- {
- sortUb(slova2[i], m[i]);
- }
- }
- void analiz (int n, int * m, char **slova)
- {
- int i;
- int j;
- 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");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement