Файл: Контрольная работа 1 по дисциплине информатика выполнил Злотников С. В. Группа мит23.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 25

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство цифрового развития, связи и
массовых коммуникаций Российской Федерации

Сибирский государственный университет телекоммуникаций и информатики

Контрольная работа № 1


по дисциплине: ИНФОРМАТИКА




Выполнил: Злотников С.В.

Группа: МИТ-23

Вариант: 12

Проверила: Лебеденко Людмила Федоровна

Новосибирск, 2023

Задание к контрольной работе

Написать программу


  1. Создать файл STUDENT.dat, содержащий записи следующей структуры:

  • ФИО студента;

  • его экзаменационные оценки по трем дисциплинам.

  1. Программа должна выполнять следующую обработку файла: выбирает из файла студентов, имеющих хотя бы одну задолженность. Вывести ФИО этих студентов и количество несданных экзаменов.


Принципы создания и обработки бинарных файлов на языке Си


Текстовые файлы хранят данные в виде текста. Это значит, что если, например, мы записываем целое число 12345678 в файл, то записывается 8 символов, а это 8 байт данных, несмотря на то, что число помещается в целый тип. Кроме того, вывод и ввод данных является форматированным, то есть каждый раз, когда мы считываем число из файла или записываем его в файл, то происходит трансформация числа в строку или обратно. Это затратные операции, которых можно избежать. Текстовые файлы позволяют хранить информацию в виде, понятном для человека. Можно, однако, хранить данные непосредственно в бинарном виде. Для этих целей используются бинарные файлы. Запись в файл осуществляется с помощью функции:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Функция возвращает число удачно записанных элементов. В качестве аргументов принимает указатель на массив, размер одного элемента, число элементов и указатель на файловый поток. Вместо массива, конечно, может быть передан любой объект. Запись в бинарный файл объекта похожа на его отображение: берутся данные из оперативной памяти и пишутся как есть. Для считывания используется функция fread:


size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

Функция возвращает число удачно прочитанных элементов, которые помещаются по адресу ptr. Всего считывается count элементов по size байт.

Обработка бинарных файлов


Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Функция fseek() позволяет обращаться с бинарным файлом как с массивом и переходить к любой позиции в файле, обеспечивая возможность произвольного доступа. Если текстовые файлы являются файлами с последовательным доступом, то к бинарным файлам может применяться произвольный доступ.

Схема алгоритма решения задачи



Программа на языке Си

// Язык C

#include

#include

#include
const char * FILENAME = "STUDENT.dat";
void Choose()

{

FILE* fp = fopen(FILENAME, "r"); // открыть файл на чтение
// переменные для хранения результатов ввода с файла

char surname[64];

char name[64];

char father[64];

int first, second, third;
puts("");
// Пока файл можно прочитать

while (fscanf(fp, "%s%s%s%d%d%d", surname, name, father, &first, &second, &third) > 0) {

if (first <= 2 || second <= 2 || third <= 2) { // если есть хотя бы 1 задолженность

printf("%s %s %s %d\n", surname, name, father, (first <= 2) + (second <= 2) + (third <= 2));

}

}

puts("");

fclose(fp); // закрыть файл

}
void AppendOrCreate()

{

int answer = 0;

printf("1. Добавить запись в файл STUDENT.dat\n");

printf("2. Начать запись нового файла\n");
scanf("%d", &answer);
FILE* fp = NULL;

if (answer == 1) {

// нужно использовать старый файл

fp = fopen(FILENAME, "a"); // a -append -> Добавить

}

else if (answer == 2) {

char fname[64];

puts("Введите название файла: ");

scanf("%s", fname);

// нужно создать новый файл

fp = fopen(fname, "a");

if (fp == NULL) {

fp = fopen(fname, "w"); // создать

}

}

else {

exit(1); // ошибка

}

if (fp == NULL) { // если проблемы с файлом, выходим из программы

exit(2); // ошибка

}
char surname[64];

char name[64];

char father[64];
int first, second, third;
// ввод новых данных

printf("Имя: ");

scanf("%s", name);

printf("Фамилия: ");

scanf("%s", surname);

printf("Отчество: ");

scanf("%s", father);

printf("Оценка за 1 предмет: ");

scanf("%d", &first);

printf("Оценка за 2 предмет: ");

scanf("%d", &second);

printf("Оценка за 3 предмет: ");

scanf("%d", &third);
// запись новых данных

fprintf(fp, "%s %s %s %d %d %d\n", surname, name, father, first, second, third);

fclose(fp); // закрыть файл

}
int main() // главная функция - точка входа в программу

{

int answer = -1; // сохранение ответа пользователя

while (1) {

// варианты выбора пользователя

printf("0. Выход из программы.\n");

printf("1. Выбрать из файла студентов, имеющих хотя бы одну задолженность.\n");

printf("2. Добавить запись в файл или начать запись нового файла.\n");
scanf("%d", &answer); // ввод ответа с клавиатуры
if (answer == 0) {

puts("Завершаю программу...");

return 1;

}
if (answer == 1) {

Choose(); // Выбрать из файла студентов, имеющих хотя бы одну задолженность

}
else if (answer == 2) {

AppendOrCreate(); // Добавить запись в файл или начать запись нового файла

}

else {

puts("Что-то пошло нет так...");

exit(3);

}

}

}
Скрины экранов с результатами выполнения программы


Выводы
Для выполнения контрольной работы были изучены принципы создания и обработки бинарных файлов на языке Си. Перед разработкой программного продукта была составлена блок-схема (алгоритм) решения задачи. В ходе контрольной работы создан файл STUDENT.dat, содержащий данные о ФИО студентов и их экзаменационных оценках по трем дисциплинам. Для возможности выбора студентов, имеющих задолженности по дисциплинам, разработана программа. Она позволяет выводить на экран ФИО студентов, получивших неудовлетворительные оценки за экзамен, и количество экзаменов, которые не сданы. Результаты работы программы представлены на рис. выше.
16.02.2023