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


 

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

53179. В гостях у первой учительницы 30.5 KB
  Дорогие друзья Накануне прекрасного весеннего праздника Международного женского дня мы решили провести устный журнал в вашем классе где ваша учительница Наталья Борисовна была и у многих из нас первой. Итак страница первая Цветы любимой учительнице В весенний день когда все ожидают Прекрасный женский праздник в нетерпенье В семье и в классах обсуждают Какой сюрприз преподнести на удивленье Наталья Борисовна Кроме живых цветов мы дарим Вам особый букет: из сказаний и легенд о цветах художественное чтение на музыкальном...
53180. Учимся интересно, говорим правильно 70 KB
  К таким умениям и навыкам можно отнести следующие: умение фиксировать внимание на фонетических особенностях звучащего слова; умение анализировать свою речь с позиций правильности неправильности и оценки дикции; умение давать аргументированную оценку речи других; умение читать и говорить правильно подражая звучащему образцу; внятно и отчетливо произносить звуки и слова; читать написанное с орфоэпической подготовкой и без таковой; правильно и рационально пользоваться орфоэпическими словарями в которых есть произносительные...
53181. Велика Британія в 19 столітті – народження традицій 929 KB
  Queen Victoria came to the throne as a young woman in 1837 and reigned until her death in 1901. Because of the growth of parliamentary government she was less powerful than previous sovereigns but as queen and empress she ruled over more lands and peoples than any previous monarch. Furthermore, she enjoyed the respect and affection of her British subjects.
53182. Економічний бій 59 KB
  Товар який стихійно виділився з світу товарів щоб відігравати роль загального еквіваленту гроші. Яку функцію виконують гроші якщо їх віддають у банк під процент Чи діє закон попиту на монополістичному ринку Що станеться на товарному ринку з ціною на молоко якщо збільшиться кількість корів і зменшаться доходи споживачів Продовжіть прислівя: Хочеш втратити друга.дай йому в борг гроші. Командам пропонується згадати прислівя або приказки про гроші або про працю.
53184. Закріплення теми «Креслення в системі прямокутних проекцій» 43 KB
  Получение изображения предмета на чертеже воображаемыми лучами называют проецированием Изображение предмета на плоскости методом проецирования называют проекцией Плоскость на которой получают проекцию называютплоскость проекции Назовите методы проецирования центральное и параллельное. Какой метод проецирования более простой и удобный для получения проекций в черчении Где используется метод центрального проецирования в изобразительном искусстве. Назовите три плоскости проецирования фронтальная горизонтальная...
53185. Застосування різних способів розкладання многочленів на множники 75.5 KB
  Мета: узагальнити й систематизувати знання, вміння і навички учнів; розвивати пізнавальну активність, логічне мислення, увагу; виховувати культуру математичного мовлення, упевненість у своїх силах.
53186. Піраміди гіпотез – домовини фактів 92 KB
  Тема: Піраміди гіпотез домовини фактів†Мета: систематизувати знання за темою Пірамідаâ€; розширити й поглибити пізнавальну активність з допомогою створення проблемних творчих завдань; створити змістовну базу для вивчення інших шкільних дисциплін астрономії фізики біології; сприяти виробленню в учнів бажання і потреби ділового співробітництва взаєморозуміння; розвивати монологічне мовлення учнів загальні трудові уміння. Обладнання: газета Піраміди гіпотез домовини фактівâ€; альбом кросвордів за темою...
53187. Решение уравнений. Урок – игра математики в 6 классе 49.5 KB
  Многие задачи из жизни решаются на математическом языке с помощью уравнений. Поэтому очень важно, чтобы ваши знания и умения решать уравнения были прочны. Во время урока вам пригодятся находчивость, смекалка и сообразительность, потому что мы проведём наш урок в виде игры- соревнований.