50182

Программирование задач с использованием структур в функциях, работа с файлами и структурами

Лабораторная работа

Информатика, кибернетика и программирование

Приобрести практические навыки в проектировании структуры файла а также закрепить навыки по вводу данных в файл и их обработке с помощью подпрограмм пользователя.y; } В программе которая выполняет операции чтения из файла или запись в файл должна быть объявлена переменнаяуказатель на тип FILE: FILE file_pointer; Для того чтобы файл был доступен его надо открыть указав для выполнения какого действия открывается файл: чтения записи или обновления данных а также тип двоичный или текстовый: Возможные режимы открытия файлов...

Русский

2014-01-17

63 KB

3 чел.

Лабораторная Работа № 16, 17

Тема: Программирование задач с использованием  структур в функциях, работа с файлами и структурами.

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

Теоретические сведения:

  •  Структурой называется переменная, представляющая собой множество других переменных, которые могут относиться к различным типам.
  •  Переменные, которые объединены структурой, называются членами, элементами или полями структуры.
  •  Объявление структуры является оператором, и поэтому в конце должна стоять точка с запятой:

struct student{

char name[30];

int kurs;

char grup[3];

 int stip;

}; // пока никакая структурная переменная не объявлена

  •  Для того, чтобы объявить конкретные переменные типа struct student, можно записать  struct student st1,st2; При такой записи компилятор автоматически выделит место в памяти компьютера. Причем, задание шаблона структуры и объявление переменных может производиться и в одном операторе.
  •  Доступ к конкретному элементу структуры осуществляется с помощью оператора «точка». Например, strcpy(st1.name, “Иванов М.С.”);
  •  Структуры, как и переменные другого типа, могут объединяться в массивы структур. Чтобы объявить массив структур, надо сначала задать шаблон структуры, а затем объявить массив: struct student studkurs[200];
  •  Для доступа к полю i-го элемента массива используем studkyrs[i].kurs;
  •  Если объявлены две переменные с одним шаблоном, то возможно присваивание st1=st2; при этом произойдет побитовое копирование каждого поля одной переменной в соответствующее поле другой структуры.
  •  Переменная типа структуры может быть глобальной, локальной переменной и формальным параметром.
  •  Можно использовать всю структуру или её элемент как любую другую переменную в качестве параметра функции:
  •  

#includ<stdio.h>

// Пример использования структуры в качестве параметра функции

struct st{

int x;

char y;

};

void f(struct st param); // прототип

void main()

{

struct st arg;

arg.x=1;

arg.y=’2’;

f(arg);

return 0;

}

void f(struct st param)

{printf(“%d  %d\n”, param.x,param.y);

}

  •  В программе, которая выполняет операции чтения из файла или запись в файл, должна быть объявлена переменная-указатель на тип FILE:

FILE *file_pointer;

  •   Для того  чтобы файл был доступен, его надо открыть, указав, для выполнения какого действия открывается файл: чтения, записи или обновления данных, а также тип (двоичный или текстовый):

Возможные режимы открытия файлов перечислены ниже (смотри таблицу 2):

Таблица 2.

 

Режим

Действие

“r”

“w”

“a”

“rb”

“wb”

“ab”

“r+”

“w+”

“a+”

“r+b”

“w+b”

“a+b”

Открыть для чтения

Создать для записи

Открыть для добавления в существующий файл

Открыть двоичный файл для чтения

Открыть двоичный файл для записи

Открыть двоичный файл для добавления

Открыть файл для чтения и записи

Создать файл для чтения и записи

Открыть для добавления или создать для чтения и записи

Открыть двоичный файл для чтения и записи

Создать двоичный файл для чтения и записи

Открыть двоичный файл для добавления или создать для чтения и записи

  •  При работе с файлами возможны ошибки, поэтому рекомендуется при помощи функции ferror проверять результат выполнения потенциально опасных, с точки зрения возникновения ошибок, операций с файлами (fopen).
  •  Чтение данных из текстового файла можно выполнить при помощи функции fscanf, запись – fprintf.
  •  По завершению работы с файлом нужно его обязательно закрыть (функция fclose).

В файле stdio.h определены следующие функции (смотри таблицу 1):

Таблица 1.

Функции

Действие функции

fopen()

fclose()

fseek()

fprintf()

fscanf()

feof()

ferror()

fread()

fwrite()

rewind()

remow()

Открыть файл

Закрыть файл

Изменить указатель позиции файла на указанное место

Форматная запись в файл

Форматное чтение из файла

Возвращает значение «истинно», если достигнут конец файла

Возвращает значение «ложно», если обнаружена ошибка

Читает блок данных (структуру) из потока

Пишет блок данных (структуру)  в поток

Устанавливает указатель позиции файла на начало

Уничтожает файл

  •  Связь между программой и файлом устанавливается при помощи функции fopen() следующим образом:

pointer=fopen(“FILENAME”,”mode”);

где  pointer – указатель на файл;

            fopen – имя функции;

            FILENAME – имя файла на диске;

            mode – режим доступа к файлу.

Пример: Написать программу создающую фонотеку любителя (данные хранятся вфайле) с использованием функции пользователя.

#includ<stdio.h>

#includ<conio.h>

void vvod(void);

void prosmotr(void);

struct cd

{

char name[10];

char opis[20];

char category[10];

float cost;

int number;

}disc;

FILE *f;

void main(void)

{ int n;

 while(n!=3)

{ clrscr();

puts(“1. Ввод данных”);

puts(“2. Вывод данных”);

puts(“3. Выход из программы”);

puts(“ Ваш выбор: ”);

scanf(“%d”,&n);

fflush(stdin);

switch(n)

{case1:vvod();break;

case2: prosmotr(); break;

case3:exit();

}}//main

//  Ввод

void vvod(void)

{

char k;

if((f=fopen(“baz.dat”,”w”))==NULL)

{ puts(“Невозможно открыть файл”);

  exit();

}

k=’y’;

puts(“Введите сведения о диске\n\n”);

while(k==’y’)

{ printf(“Введите название: ”);

gets(disc.name);

printf(“Введите описание: ”,);

gets(disc.opis);

printf(“Введите категорию: ”);

gets(disc.category);

printf(“Введите цену: ”);

scanf(“%f”,&disc.cost);

printf(“Введите номер ячейки ”);

scanf(“%d”,&disc.number);

fwrite(&disc,sizeof(disc),1,f);

puts(“Продолжить работу?[y\n]”);

k=getche();

fclose(f);

}//vvod

// Вывод данных из файла на экран (просмотр)

void prosmotr(void)

{

if((f=fopen(“baz.dat”,”r”))==NULL)

{ puts(“Невозможно открыть файл”);

  exit();

puts(“┌──────────────────────────────────┐”);

puts(“│ Название │      Описание      │Категория│Цена │Номер│”);

puts(“├──────┼──────────┼───────┼───┼────┤”);

while(fread(&disc,sizeof(disc),1,f)==1)

printf(“│%10s│%20s│%10s│%5d│%5d│\n”,disc.name,disc.opis,disc.category,disc.cost,

disc.number);

puts(“└──────────────────────────────────┘”);

getch();

fclose(f);

}//prosmotr

putdisc(disc) // функция, принимающая структуру в качестве параметра

struct cd disk; //disk – отдельная структурная переменная, которая содержит передаваемые //члены структуры disc

{puts(“Введена следующая информация о диске:\n\n);

printf(“Название: %s\n”,disc.name);

printf(“Описание: %s\n”,disc.opis);

printf(“Категория: %s\n”,disc.category);

printf(“Цена: %6.2f\n”,disc.cost);

printf(“Номер п\п: %d\n”,disc.number);

}

Задание: 

Используя предметную область, определенную для вас на практике «Разработка приложений с использованием инструментальных средств», написать программу, выполняющую на базе вашей предметной области следующие действия: создание файла, просмотр содержимого файла, добавление данных в файл, редактирование данных файла.

Контрольные вопросы:

  1.  Что такое файл, какие виды файлов существуют?
  2.  Чем отличается файл от массива?
  3.  Как используется файловая структура?
  4.  Как вы будете выводить числовые данные?
  5.  В чем заключается различие между функциями fprintf() и fwrite()?
  6.  Как осуществляется чтение и запись файла?
  7.  Назовите режимы работы с файлами.

Содержание отчета:

  1.  Краткие теоретические сведения.
  2.  Схемы алгоритмов.
  3.  Тексты составленных программ.
  4.  Протоколы к составленным программам.
  5.  Вывод о проделанной работе.


 

А также другие работы, которые могут Вас заинтересовать

83363. Повторення вивченого про прикметник як частину мови 71 KB
  Мета: створити змістовні та організаційні умови для актуалізації знань про прикметник; сприяти усвідомленню учнями граматичного і змістовного зв’язку прикметника з іменником; забезпечити розвиток уміння вживати прикметники у власному мовленні й на письмі; допомогти учням усвідомити лексичне...
83364. Відмінювання іменників у множині 77.5 KB
  Мета: розширювати знання учнів про відмінювання іменників у множині; вчити правильно утворювати і використовувати у мовленні форми іменників у місцевому відмінку множини з прийменниками; розвивати мовлення дітей, збагачувати словниковий запас учнів; виховувати пізнавальний інтерес,прагнення вивчати мову.
83365. Блоггерство Дмитрия Иванова 174.5 KB
  Цель – проанализировать и показать специфику блоггерства Дмитрия Иванова. В соответствии с поставленной целью необходимо решить следующие задачи: показать особенности блогосферы как информационного феномена (сущность, особенности, функции); дать общее описание блоггера как личности...
83366. Организация производственного процесса на предприятии 64.51 KB
  Целью организации производственного процесса в пространстве является обеспечение рационального построения его во времени Под организацией производства следует понимать систему научно обоснованных мер направленных на создание наиболее рациональной структуры предприятия и его подразделений...
83368. Бизнес-план организации производства тормозной колодки на ОАО «БзАТИ» 102.61 KB
  Широкое применение асбофрикционные материалов (для комплектации тормозных устройств и механизмов сцеплений автомобилей, тракторов и самолетов, комбайнов, экскаваторов, подъемно-транспортных и дорожных машин, буровых установок, мотоциклов, велосипедов и др.) обусловлено их высокими....
83369. Организация предметно-замкнутого участка механической обработки деталей 578.5 KB
  Организация производства является обязательным условием эффективной работы любого предприятия, создает благоприятные возможности для высокопроизводительной работы трудовых коллективов, выпуска продукции хорошего качества, полного использования всех ресурсов предприятия...
83370. Амортизация основных фондов 160.35 KB
  Это осуществляется путем переноса их стоимости на готовую продукцию путем амортизации. Используя тот или иной метод начисления амортизации мы тем самым влияем на темп и характер воспроизводства задаем скорость обесценивания а через неё скорость обновления основных производственных фондов.
83371. Расчет индикаторных параметров цикла двигателя 2.17 MB
  Кинематический расчет привода Общий КПД привода определяется по формуле. Требуемая мощность электродвигателя определяется по формуле. Номинальная частота вращения вала электродвигателя определяется по формуле. об мин Угловая скорость двигателя определяется по формуле.