close

Вход

Забыли?

вход по аккаунту

?

Лабораторная работа7 (2)

код для вставкиСкачать
Лабораторная работа №7
Двумерные массивы
Цель:
1. Заполнить двумерный массив (каждая строка массива заполняется в соответствии с заданием по теме №5).
2. Распечатать содержимое массива в виде прямоугольной матрицы.
3. Сохранить двумерный массив в бинарный файл.
4. Считать содержимое бинарного файла в другой двумерный массив.
5. Распечатать содержимое нового массива в виде прямоугольной матрицы.
6. Выполнить над каждой строкой нового двумерного массива действия, предусмотренные по теме №5.
7. Распечатать преобразованный двумерный массив
Решение:
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX_ROWS 8
#define MAX_COLUMNS 8
void InitArray( char s[][MAX_COLUMNS], int rows, int columns )
{
int i, j;
for(i = 0; i < rows; ++i)
for(j = 0; j < columns; ++j)
s[i][j] = !(rand() % 2) ? 'a' + rand() % 26 : '0' + rand() % 10;
}
void PrintArray( char s[][MAX_COLUMNS], int rows, int columns )
{
int i,j;
for(i = 0; i < rows; ++i)
{
for(j = 0; j < columns; ++j)
printf("%c ", s[i][j]);
printf("\n");
}
}
void SortArray( char s[][MAX_COLUMNS], int rows, int columns ) // Сортировка методом Пузырька
{
char temp;
int i,j,k;
for(i = 0; i < rows; ++i)
{
for(j = 0; j < columns - 1; ++j)
{
for(k = j + 1; k < columns; ++k)
{
if(s[i][j] > s[i][k])
{
temp = s[i][j];
s[i][j] = s[i][k];
s[i][k] = temp;
}
}
}
}
}
bool WriteArrayInFile( char *filename, char s[][MAX_COLUMNS], int rows )
{
FILE *fp = fopen(filename, "wb");
if(!fp)
return false;
int i;
for(i = 0; i < rows; ++i)
{
fwrite(s[i], 1, MAX_COLUMNS * MAX_ROWS, fp);
fclose(fp);
}
return true;
}
bool ReadArrayFromFileInArray( char *filename, char dst[][MAX_COLUMNS], int rows )
{
FILE *fp = fopen(filename, "rb");
if(!fp)
return false;
int i;
for(i = 0; i < rows; ++i)
{
fread(dst[i], 1, MAX_COLUMNS * MAX_ROWS, fp);
fclose(fp);
}
fclose(fp);
return true;
}
void TransformArray( char src[][MAX_COLUMNS], char dst[][MAX_COLUMNS], int rows_src, int columns_src )
{
int loopVal;
int rows_dst = 0, columns_dst = 0;
int i,j,k;
for(i = 0; i < rows_src; ++i)
{
for(j = 0; j < columns_src - 1; ++j)
{
loopVal = 0;
for(k = j + 1; k < columns_src; ++k)
{
if(src[i][j] == src[i][k] && src[i][j] != ' ')
{
if(!loopVal)
dst[rows_dst][columns_dst++] = src[i][j];
src[i][k] = ' ';
++loopVal;
}
}
}
rows_dst++;
columns_dst = 0;
}
}
int main()
{
int i,j;
srand((unsigned int)time(NULL));
char src[MAX_ROWS][MAX_COLUMNS], dst[MAX_ROWS][MAX_COLUMNS];
for(i = 0; i < MAX_ROWS; ++i)
for(j = 0; j < MAX_COLUMNS; ++j)
dst[i][j] = 249;
InitArray(src, MAX_ROWS, MAX_COLUMNS);
printf("Ishodni massiv:\n");
PrintArray(src, MAX_ROWS, MAX_COLUMNS);
printf("Napisat' massiv v fail!\n");
if(WriteArrayInFile("laboratorka 7.txt", src, MAX_ROWS) == false)
return 0;
printf("Chitaite massiv iz faila v novi massiv!\n");
if(ReadArrayFromFileInArray("laboratorka 7.txt", src, MAX_ROWS) == false)
return 0;
printf("Novi massiv:\n");
PrintArray(src, MAX_ROWS, MAX_COLUMNS);
TransformArray(src, dst, MAX_ROWS, MAX_COLUMNS);
SortArray(src, MAX_ROWS, MAX_COLUMNS);
SortArray(dst, MAX_ROWS, MAX_COLUMNS);
printf("Sortirovka novogo massiva: \n");
PrintArray(src, MAX_ROWS, MAX_COLUMNS);
printf("Sortirovka drugogo massiva:\n");
PrintArray(dst, MAX_ROWS, MAX_COLUMNS);
_getch();
return 0;
}
В начале идёт подключение заголовных файлов, в которых объявлены прототипы функций, понадобящиеся для написания программы.
Далее определения функций InitArray, PrintArray, SortArray, WriteArrayInFile, ReadArrayFromFileInArray, TransformArray.
Функция InitArray осуществляет заполнение двумерного массива буквами латинского алфавита и цифрами в случайном порядке.
Фукнция PrintArray выводит содержимое двумерного массива на экран.
Фукнция SortArray сортирует строки двумерного массива в порядке возрастания , сравнивая по одному элементы каждого столбца методом пузырька.
Функция WriteArrayInFile записывает содержимое массива в файл. Если не существует такого файла, то он сначала создаётся, а затем в него уже записываются данные. Открытие файла осуществляется функцией fopen, первый параметр которой - путь к файлу, а второй - флаги доступа к файлу ( только чтение, только запись, чтение и запись и т.д. ). Данная функция возвращает указатель на поток FILE, связанный с этим файлом, содержащий информацию о дескрипторе файла ( идентификационный номер, по которому операционна система отличает данный файл от других файлов ), указатель на данные этого файла, текущие флаги доступа к этому файлу, количество символов в этом файле и т.п..
Функция fwrite записывает данные в файл. Первый параметр функции - данные, которые нужно записать в файл, воторой - размерность в байтах этих данных, третий - ограничение на кол - во записуемых данных, четвёртый - указатель на поток FILE, связанный с файлом, в который записываем данные. Функция fclose закрывает файл. Единственный параметр данной функции указатель на поток FILE, который связан с закрываемым файлом.
Функция ReadArrayFromFileInArray считывают информацию с требуемого файла, а именно исходный, заполненный случайными символами, двумерный массив и записывает его содержимое в другой вдумерный массив. Этим занимается новая функция в данной программе, связанная с файловой обработкой, fread. Параметры этой функции подобны параметрам функции fwrite, за исключением, что в первый параметр записывается символ из файла, и так до тех пор, пока не закончится содержимое файла.
Функция TransformArray отвечает за преобразование двумерного массива, а именно повторяющиеся символы в строках заменяет на пробелы, а из этих повторяющихся символов формируется новый двумерный массив.
Далее по программе оба двумерных массива сортируются и их содержимое выводится на экран.
И в заключении, управление передаётся операционной системе инструкцией return 0;
Документ
Категория
Рефераты
Просмотров
35
Размер файла
40 Кб
Теги
работа, лабораторная
1/--страниц
Пожаловаться на содержимое документа