Основы программирования. Массивы,файлы,структуры. Лабораторная работа №9

Содержание

Слайд 2

Задача сквозная Делаем логику для игры. В игре есть вертикальная карта

Задача сквозная

Делаем логику для игры.
В игре есть вертикальная карта – разрез

земли (смотри SuperMario и подобные игры).
На этой карте есть элементы двух типов – «воздух» = 0 и «земля» = 1
Есть точка входа в карту – на картинке это красный прямоугольник.
И точка выхода – зеленый прямоугольник.
Ниже приведено отображение возможного состояния игры.
Слайд 3

Структура для хранения игры // индексы входа и выхода struct Position

Структура для хранения игры

// индексы входа и выхода
struct Position {
int i,

j;
};
// Уровень игры
struct Level {
int map[10][10]; // карта уровня
// 0 – воздух
// 1 – земля
int n; // количество строк
int m; // количество столбцов
struct Position entry; // вход
struct Position exit; // выход
};
Слайд 4

Инициализация структуры void main() { struct Level g = { {

Инициализация структуры

void main()
{
struct Level g = {
{
{0, 0, 0, 0,

0},
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 1}
},
3,
5,
{0, 0},
{0, 4}
};

}
Слайд 5

Вывод состояния игры void main() { struct Level g = {

Вывод состояния игры

void main()
{
struct Level g = {
{
{0, 0, 0,

0, 0},
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 1}
},
3,
5,
{0, 0},
{0, 4}
};
printLevel(&g);
{
int x;
scanf("%d", &x);
}
}
Слайд 6

Вывод состояния игры (2) // вывод массива в консоль void printLevel(struct

Вывод состояния игры (2)

// вывод массива в консоль
void printLevel(struct Level *

level) {
for (int i = 0; i < level->n; i++) {
for (int j = 0; j < level->m; j++) {
printf("%5d ", level->map[i][j]);
}
printf("\n");
}
printf("\n");
printf("Entry i = %d; j = %d\n", level->entry.i, level->entry.j);
printf("Exit i = %d; j = %d\n\n", level->exit.i, level->exit.j);
}
Слайд 7

Файл с состоянием игры - формат файла Формат файла с состоянием

Файл с состоянием игры - формат файла

Формат файла с состоянием игры:
N

M
N строк по M элементов в каждой
I_входа J_входа
I_выхода J_выхода
Пример файла – смотри на следующем слайде.
Слайд 8

Файл с состоянием игры - пример Ниже приведено содержимое файла, который

Файл с состоянием игры - пример

Ниже приведено содержимое файла, который хранит

состояние, приведенное на картинке справа.
6 8
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 1
1 1 1 1 1 1 1 1
3 0
3 7
Слайд 9

Загрузка состояния игры – вызов функции void main() { struct Level

Загрузка состояния игры – вызов функции

void main() {
struct Level g =

{
{ {0, 0, 0, 0, 0},
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 1}
},
3,
5,
{0, 0},
{0, 4}
};
printLevel(&g);
loadLevel(&g);
printLevel(&g);
{
int x;
scanf("%d", &x);
}
}
Слайд 10

Загрузка состояния игры – функция! char filename[] = "d:\\Temp\\Files\\Lab9\\1.txt"; int loadLevel(struct

Загрузка состояния игры – функция!

char filename[] = "d:\\Temp\\Files\\Lab9\\1.txt";
int loadLevel(struct Level *

level) {
FILE *fin = fopen(filename, "rt");
if (fin == NULL) {
printf("File %s is not opened", filename);
return 0;
}
fscanf(fin, "%d", &level->n);
fscanf(fin, "%d", &level->m);
for (int i = 0; i < level->n; i++) {
for (int j = 0; j < level->m; j++) {
fscanf(fin, "%d", &level->map[i][j]);
}
}
fscanf(fin, "%d", &level->entry.i);
fscanf(fin, "%d", &level->entry.j);
fscanf(fin, "%d", &level->exit.i);
fscanf(fin, "%d", &level->exit.j);
fclose(fin);
return 1;
}
Слайд 11

Задача 1 – собрать весь код! Из кусков кода выше –

Задача 1 – собрать весь код!

Из кусков кода выше – соберите

работающую программу, которая выдает на экран (см скриншот!)
Слайд 12

Задача 2 – Добавить элемент земли в заданный столбец (функция)

Задача 2 – Добавить элемент земли в заданный столбец (функция)

Слайд 13

Задача 2 – Добавить элемент земли в заданный столбец (вызов)

Задача 2 – Добавить элемент земли в заданный столбец (вызов)

Слайд 14

Задача 3 – Сделать меню для выбора действий (1)

Задача 3 – Сделать меню для выбора действий (1)

Слайд 15

Задача 3 – Сделать меню для выбора действий (2)

Задача 3 – Сделать меню для выбора действий (2)

Слайд 16

Задача 3 – Сделать меню для выбора действий (3)

Задача 3 – Сделать меню для выбора действий (3)

Слайд 17

Задача 4 – удалить «землю» из заданной горки Создайте функцию, которая

Задача 4 – удалить «землю» из заданной горки

Создайте функцию, которая будет

удалять верхний элемент «земля» из заданной высокой горки (т.е. из столбца, индекс которого задан)
Слайд 18

Задача 5 – срыть самую высокую горку Создайте функцию, которая будет

Задача 5 – срыть самую высокую горку

Создайте функцию, которая будет удалять

верхний элемент «земля» из самой высокой горки (т.е. из столбца, где больше всего «земли»)
Слайд 19

Задача 6 – подсыпать земли в низину Создайте функцию, которая будет

Задача 6 – подсыпать земли в низину

Создайте функцию, которая будет добавлять

сверху элемент «земля» в самую низкую часть(т.е. в столбец, где меньше всего «земли»)
Слайд 20

Задача 7 – Сохранить состояние игры в файле Создайте функцию, которая

Задача 7 – Сохранить состояние игры в файле

Создайте функцию, которая будет

сохранять в файл состояние игры – в формате, аналогичном входному файлу.
Слайд 21

Домашнее задание Домашняя работа по лабораторной работе №9 включает в себя

Домашнее задание

Домашняя работа по лабораторной работе №9 включает в себя
(Делается по

материалам классной работы)
Создать структуру для хранения двухмерного массива
Реализовать загрузку массива из файла в структуру
Реализовать необходимый набор действий
Реализовать сохранения массива из структуры в файл – структура выходного файла аналогична структуре входного
Подготовить отчет (со стандартным содержанием - титульный лист, задание, распечатка, блоксхемы методов)
ОБЯЗАТЕЛЬНО использовать в домашней работе:
Структуры для хранения массива
Файлы для входа и выхода
Цикл FOR
Слайд 22

Домашнее задание - варианты !!! Вариант 1: В массиве все элементы,

Домашнее задание - варианты

!!!

Вариант 1:
В массиве все элементы, стоящие выше максимального

элемента, заменить на максимальный элемент первого столбца.
Вариант 2:
В массиве все элементы, стоящие выше максимального элемента, заменить на минимальный элемент последней строки.
Вариант 3:
В массиве все элементы, стоящие выше и левее минимального элемента, заменить на среднее арифметическое минимального и максимального элементов.
Вариант 4:
В массиве все элементы, стоящие ниже и левее максимального элемента, заменить на среднее арифметическое минимального и максимального элементов последнего столбца.
Вариант 5:
В массиве все элементы, стоящие ниже и левее максимального элемента, заменить на минимальный элемент.

Вариант 6:
В массиве все нечетные элементы, стоящие ниже минимального элемента массива и стоящие слева от максимального элемента массива, заменить на 0.
Вариант 7:
В массиве все четные элементы, стоящие снизу от максимального элемента массива, заменить на максимальный элемент столбца, в котором они расположены.
Вариант 8:
В массиве все нечетные элементы, стоящие сверху от минимального элемента массива, заменить на максимальный элемент строки, в которой они расположены.
Вариант 9:
В массиве все элементы, имеющие четное значение суммы индексов, заменить на минимальный элемент массива.
Вариант 10:
Обнулить элементы в тех столбцах, в которых встречается хотя бы два одинаковых элемента.
Альтернативные варианты – смотри следующий слайд!