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


 

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

45089. Синдромы и симптомы в психиатрии 184.5 KB
  Синдромы и симптомы в психиатрии 2 Малые и большие синдромы Синдромы могут быть малыми и большими. синдромы и симптомы в психиатрии 3 Клиническая картина синдромов Клиническая картина синдромов складывается из: позитивных расстройств галлюцинаторно-бредовые кататонические аффективные и ряд других и негативных расстройств эмоционально-волевое оскудение психопатизация личности слабоумие. Позитивные и негативные синдромы обычно проявляются в тесной взаимосвязи. синдромы и симптомы в психиатрии...
45090. Органическое расстройство личности (F07.0) 28.5 KB
  Этиология Причиной являются эпилепсия тяжелые и повторные черепно-мозговые травмы энцефалиты детские церебральные параличи к которым присоединяются соматические расстройства. Распространенность Считается что органические расстройства личности развиваются у 5 10 больных эпилепсией с продолжительностью заболевания более 10 лет. Хотя на первых этапах расстройства памяти не характерны они могут прогрессировать и в этом случае следует говорить о деменции. Наиболее точно органические расстройства личности дифференцируются от деменций на...
45091. Психические и поведенческие расстройства вследствие употребления психоактивных веществ (F1) 28 KB
  В данную группу входят расстройства тяжесть которых варьирует от неосложненного опьянения до выраженных психотических расстройств и деменции но при этом все они могут быть объяснены употреблением одного или нескольких психоактивных веществ. Конкретное употребляемое вещество часто определяет всю клинику например картину интоксикации психоза хотя деменции в результате употребления различных веществ могут быть похожи. Выделяют расстройства вследствие употребления алкоголя F10 опиоидов F11 каннабиоидов F12 седативных и снотворных...
45092. Алкоголизм — хроническая болезнь 55.5 KB
  На исходной стадии алкоголизма развивается деменция. Стадии алкоголизма 15. минимальной его дозы способной вызвать хотя бы легкое опьянение или наоборот максимальной дозы не вызывающей его на первой стадии достигает того что для опьянения требуется доза в 2 3 раза большая чем прежде. Но иногда контроль утрачивается только на II стадии алкоголизма.
45093. Психические и поведенческие расстройства вследствие употребления алкоголя (F10) 49 KB
  Психологической причиной является прием алкоголя как препарата улучшающего коммуникации как антидепрессанта для снижения уровня тревоги. Кроме того некоторые личностные черты сами по себе могут нивелироваться приемом алкоголя хотя алкоголизм обыкновенно в дальнейшем их заостряет. Для диагностики алкогольного опьянения применяются методы определения алкоголя в выдыхаемом воздухе пробы Раппопорта и Мохова Шинкаренко.
45094. Психические и поведенческие расстройства вследствие употребления опиоидов (F11) 31 KB
  Терапия острой передозировки опиатами включает применение налоксона 001 мг на кг веса или антаксона. К специфической терапии относятся метадоновая как первичная терапия при детоксикации так и в ходе реабилитации как поддерживающая терапия лечение клонидином в ходе детоксации а также терапия налоксоном и налтрексоном или бупренорфином как частичным агностом опиатов. Требуются также продолжительная и упорная групповая и индивидуальная психотерапия и реабилитация в специализированных центрах.
45095. Хронические бредовые расстройства (F22) 34.5 KB
  В строгом смысле это монотематический бред который вторично может приводить к депрессии если пациент не может реализовать своей моноидеи или агрессии против предполагаемых врагов. Идеи преследования величия отношения изобретательства или реформаторства ревности и влюбленности или убежденность в наличии некоего заболевания религиозные идеи аффективно заряжены. Идеи величия и религиозные идеи приводят пациентов к руководству еретическими сектами и новыми мессианскими течениями. Идеи ревности и влюбленности синдром Клерамбо нелепы при...
45096. Программирование КИХ-фильтра на языке ассемблера процессора ADSP-2181 569.5 KB
  Разработка программы КИХ-фильтра заданного типа и с заданными характеристиками на языке ассемблера ADSP-2181. Изучение характеристик спроектированного фильтра с использование программы DFT.ASM. Изучение преобразований типовых дискретных сигналов при прохождении через КИХ-фильтры.
45097. Исследование процесса аналого–цифрового преобразования радиолокационных эхо-сигналов 1.21 MB
  Исследование спектрально-корреляционных свойств радиолокационных сигналов и помех Временная реализация процесса: Автокорреляционная функция процесса: Спектр процесса: Исследование характеристик аналого-цифрового преобразования Исследование влияния на ошибки квантования спектры квантованного сигнала и сигнала ошибки выбора величины динамического диапазона АЦП Спектры квантованного сигнала и сигнала ошибки выбора величины динамического диапазона АЦП: А Д А=Д А Д При уменьшении амплитуды сигнала от D до...