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 main()
- {
- system("chcp 1251 > NUL");
- printf("\nЛабораторная работа №6 \
- \nВыполнил студент гр. Хайкин Р.А. \
- \nЗадание: Заполнить двумерный массив\
- \nкаждая строка массива заполняется в\
- \nсоответствии с заданием по теме №5.\
- \nРаспечатать содержимое массива в виде прямоугольной матрицы.,\
- \nСохранить двумерный массив в бинарный файл.\
- \nСчитать содержимое бинарного файла в другой двумерный массив. \
- \nВыполнить над каждой строкой нового двумерного массива действия, предусмотренные по теме №5. \
- \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);
- // в двоичный файл
- toBinFile(slova, n, m);
- // из двоичного
- fromBinFile(&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");
- 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 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement