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.  Вывод о проделанной работе.


 

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

36521. Флуктуації. Міра флуктуації. Адитивність дисперсії 197 KB
  Фізичні величини що характеризують макроскопічне тіло яке знаходиться у стані рівноваги практично завжди з великою точністю дорівнюють своїм середнім значенням. Але відхилення від середнього значення все ж таки мають місце у зв’язку із чим виникає питання про знаходження розподілу ймовірностей цих відхилень. Ми ввели середнє значення як . Реальне значення величини практично завжди відрізняється від .
36522. ИННОВАЦИОННЫЙ МЕНЕДЖМЕНТ 60 KB
  Инновация считается осуществленной если она внедрена на рынке или в производственный процесс. Свойства инновации: научнотехническая или организационная новизна производственная применимость коммерческая реализуемость 5 основных признаков инновации по Шумпетеру: новый метод производства использование новой техники новых технологических процессов новый продукт новые свойства известного продукта использование нового сырья новых источников сырья новая или обновлённая структура управления появление новых рынков сбыта. Классификация...
36523. Процедуры общего вида в паскаль 24.5 KB
  Синтаксис: Procedure идентификатор или Procedure идентификатор параметры Замечания: В заголовке процедуры определяются ее идентификатор и набор формальных параметров если таковые есть. Заголовок процедуры сопровождается: 1разделом описаний в котором объявляются локальные объекты 2операторами находящимися между Begin и End которые определяют что должно быть выполнено при вызове процедуры. Вместо частей объявлений и операторов в объявлении процедуры могут присутствовать директивы Forwrd externl или InLine.
36524. Формальные и фактические параметры Правило соответствия 26.5 KB
  В каждую группу включаются параметры одного типа принадлежащие к одной категории. Все формальные параметры можно разбить на четыре категории: 1параметрызначения; 2параметрыпеременные; 2параметрыконстанты 4параметрыпроцедуры и параметрыфункции.
36525. Параметры - переменные, параметры-значения.Механизм передачи в подпрограмму и из нее 28.5 KB
  Список формальных параметров необязателен и может отсутствовать. Если же он есть то в нем должны быть перечислены имена формальных параметров и их типы например: Procedure SB: Rel; b: Integer; с: Chr; Как видно из примера параметры в списке отделяются друг от друга точками с запятой. Несколько следующих подряд однотипных параметров можно объединять в подсписки например вместо Function F: Rel; b: Rel: Rel; можно написать проще: Function Fb: Rel: Rel; Операторы тела подпрограммы рассматривают список формальных параметров как...
36526. Глобальные и локальные типы параметров 23.5 KB
  Глобальные переменные Глобальные переменные в отличие от локальных доступны в любой точке программы.
36527. Параметры процедурного типа и их использование 25.5 KB
  Он основан на введении процедурных типов. Процедурный тип тип представляющий семейство процедур или функций для их использования в программе. Как и любой тип Турбо Паскаля процедурный тип должен быть описан а затем может быть использован для работы с переменными процедурного типа или константами.
36528. Информация, информационные революции, основные этапы. Классификация информации 25.5 KB
  Iя революция – изобретение письменности. IIя революция сер. IIIя революция кон. IVя революция 70е гг.