Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Порядок выполнения лабораторной работы




1) Запустить программу Dev-C++.

2) Составить алгоритм решения задачи по работе с одномерным массивом, использующим функции ввода и вывода данных массива, обработки массива в соответствие с индивидуальным заданием лабораторной работы №5.

3) Составить программу решения индивидуального задания по работе с одномерным массивом, использующим функции ввода и вывода данных массива, обработки массива в соответствие с индивидуальным заданием лабораторной работы №5.

4) Выполнить пошаговую отладку программы (Debug) с использованием слежения за переменными (Add Watch).

5) Выполнить отчет по лабораторной работе, содержащий результат выполнения программы.

Индивидуальные задания

Выполнить задание лабораторной работы №5, оформив функцию ввода данных массива, функцию вывода данных и функцию обработки массива как пользовательскую функцию.

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

1) Чем функция пользователя отличается от стандартной функции?

2) Способы передачи аргументов в функцию.

3) Поясните понятие “локальные” и “глобальные” переменные.

4) Для чего и каким образом применяется оператор return?

 

 

 

 

ЛАБОРАТОРНАЯ РАБОТА № 7

Тема: «Обработка структур с использованием файлов»

Цель работы – изучить правила создания и обработки данных структурного типа с использованием файлов.

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

7.1. Структурный тип данных

Структура объединяет логически связанные данные разных типов. Структурный тип данных определяется описанием шаблона:

            struct Рerson {

                 char Fio[30];

             double sball;

            };

Объявление переменных созданного структурного типа:

Person Stud, *p_Stud;

Обращение к элементам структур производится посредством:

1) операции принадлежности ( . ) в виде:

ID_структуры . ID_поля или (*указатель) . ID_поля

2) операции косвенной адресации (–>) в виде:

            указатель –> ID_поля     или &(ID_структуры) . ID_поля

Для приведенного выше примера

1)    Stud.Fio = “Иванов А.И.”;         //Инициализация данных

            Stud.sball = 5.75;

2)    р_Stud –> Fio = “Иванов А.И.”;   

            р_Stud –> sball =5.75;

В языке C/С++ файл рассматривается как поток (stream), представляющий собой последовательность считываемых или записываемых байт. При этом последовательность записи определяется самой программой.

 

 

7.2. Работа с файлами

Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое. Прототипы большинства функций по обработке файлов описаны в библиотеках stdio.h и io.h.

Прежде чем работать с файлом, его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле: имя, путь и т.д. В языке С/С++ это выполняет функция fopen(), которая связывает физический файл на носителе с логическим именем в программе. Логическое имя – это указатель на файл, т.е. на область памяти, где хранится информация о файле. Указатели на файлы необходимо декларировать:

FILE *указатель на файл;

Формат функции

                       fopen( “строка 1” , “строка 2” );

в строке 1 указывается место, в которое мы собираемся поместить файл, например: “d:\\work\\primer.txt” – файл с именем primer.txt, который будет находиться на диске d, в папке work; если путь к файлу не указывать, то он будет размещен в рабочей папке проекта.

В строке 2 указывается код открытия файла:

w – для записи, если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается;

r – для чтения; если файла нет, то возникает ошибка;

a – для добавления новой информации в конец;

r+, w+ – возможны чтение и запись информации;

a+ – то же, что и для a, только запись можно выполнять в любое место файла, доступно и чтение файла.

По умолчанию файл открывается в текстовом режиме (t), указав b – файл открывается в двоичном режиме.

Если при открытии файла произошла ошибка, функция fopen возвращает значение NULL.

После работы доступ к файлу необходимо закрыть с помощью функции fclose(указатель файла), например, fclose (f);

Для закрытия нескольких файлов введена функция:     void fcloseall(void);

Пример 7.1. Пример работы с файлом:

#include <stdio.h>

              . . .

       FILE *f_my;

              if( ! ( f_my = fopen(“rez.txt”, “r+t” ) ) ) {

                          puts(“\n Ошибка открытия файла!”);

                          return;

                   }

                   . . .  //     Работа с файлом

       fclose(f_my);

            . . .

Для работы с текстовыми файлами в консольном приложении удобнее всего пользоваться функциями fprintf() и fscanf(), параметры и выполняемые действия аналогичны функциям printf() и scanf(), только первым параметром добавлен указатель файла, к которому применяется данная функция.

Для создания баз данных удобнее пользоваться функциями работы с бинарными файлами. Рассмотрим некоторые из них, обозначив указатель файла – fp (FILE *fp;):

1) int fread(void *ptv, int size, int n, fp) – считывает n блоков по size байт каждый из файла fp в область памяти, на которую указывает ptv (необходимо заранее отвести память под считываемый блок);

2) int fwrite(void *ptv, int size, int n, fp) – записывает n блоков по size байт каждый из области памяти, на которую указывает ptv в файл fp;

3) int fileno(fp) – возвращает значение дескриптора файла fp (дескриптор –число, определяющее номер файла);

4) long filelength(int дескриптор) – возвращает длину файла в байтах;

5) int chsize(int дескриптор, long pos) – выполняет изменение размера файла fp, признак конца файла устанавливается после байта с номером pos;      

6) int fseek(fp, long size, int kod) – выполняет смещение указателя на size байт в направлении признака kod: 0 – от начала файла; 1 – от текущей позиции; 2 – от конца файла;

7) long ftell(fp) – возвращает значение указателя на текущую позицию файла fp (-1 – ошибка);

8) int feof(указатель файла) – возвращает ненулевое значение при правильной записи признака конца файла;

9) int fgetpos(указатель файла, long *pos) – определяет значение текущей позиции pos файла; при успешном завершении возвращает значение 0.

 

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

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

    struct Sved

    {

      char Fam[20];

      int mark[3];

      float S_Bal;

    }

    zap;

    char Spis[]="d:\\Sp.dat";

    FILE *F_zap;

int main () 

int i,kodR,size=sizeof(Sved);

float s;

while(1)

{

puts(" Создание - 1");

puts(" Просмотр - 2");

puts(" Добавление - 3");

puts(" Выход - 0");

scanf(“%d”, &kodR);

    

 

 

switch(kodR)  

{

  case 1:

  case 3: if(kodR==1) F_zap=fopen(Spis,"w+b");

          else F_zap=fopen(Spis,"a+b");

          while(2)

          {

            puts(" Фамилия (Завершение ввода - 0)");

            scanf(“%s”, zap.Fam);

            if((zap.Fam[0])=='0') break;   

            puts(" Введите три оценки ");

            for(s=0,i=0;i<3;i++)

            {

              scanf(“%d”, &zap.mark[i]);

              s+=zap.mark[i];

            }

            zap.S_Bal=s/3.;

            fwrite(&zap,size,1,F_zap);

          }

          fclose(F_zap);

          break;

case 2: F_zap=fopen(Spis,"r+b"); 

     while(2)     

     {

         if( !fread(&zap, size, 1, F_zap)) break;  

      printf(" %20s %2d %2d %2d %5.2f\n",  

      zap.Fam,zap.mark[0],zap.mark[1],zap.mark[2],zap.S_Bal);

      }

      fclose(F_zap);

      break;

case 0: return 0;   

}  // Конец Switch   

} // Конец While(1)

} // Конец программы

Порядок выполнения лабораторной работы

1) Запустить программу Dev-C++.

2) Составить алгоритм решения задачи по работе c файлами в соответствие с индивидуальным заданием.

3) Составить программу решения индивидуального задания по работе с файлом.

4) Выполнить пошаговую отладку программы (Debug) с использованием слежения за переменными (Add Watch).

5) Выполнить отчет по лабораторной работе, содержащий результат выполнения программы.

Индивидуальные задания

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

Каждая запись должна содержать следующую информацию о студентах:

– фамилия и инициалы;

– год рождения;

– номер группы;

– оценки за семестр: по физике, математике, информатике, химии;

– средний балл.

Организовать ввод исходных данных, средний балл рассчитать по введенным оценкам.

Содержимое всего файла и результаты решения индивидуального задания записать в текстовый файл.

 

1) Распечатать анкетные данные студентов, сдавших сессию на 8, 9 и 10.

2) Распечатать анкетные данные студентов-отличников, фамилии которых начинаются с интересующей вас буквы.

3) Распечатать анкетные данные студентов-отличников из интересующей вас группы.

4) Распечатать анкетные данные студентов, фамилии которых начинаются с буквы А, и сдавших математику на 8 или 9.

5) Распечатать анкетные данные студентов, имеющих оценки 4 или 5 по физике и оценку больше 8 по остальным предметам.

6) Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.

7) Распечатать анкетные данные студентов, не имеющих оценок меньше 4 по информатике и математике.

8) Вычислить общий средний балл всех студентов и распечатать список студентов со средним баллом выше общего среднего балла.

9) Вычислить общий средний балл всех студентов и распечатать список студентов интересующей вас группы, имеющих средний балл выше общего среднего балла.

10) Распечатать анкетные данные студентов интересующей вас группы, имеющих неудовлетворительную оценку (меньше 4).

11) Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 9 или 10 по информатике.

12) Распечатать анкетные данные студентов, имеющих оценки 7 или 8 по физике и оценки 9 или 10 по высшей математике.

13) Вычислить общий средний балл студентов интересующей вас группы и распечатать список студентов этой группы, имеющих средний балл выше общего.

14) Распечатать анкетные данные студентов-отличников интересующей вас группы.

15) Распечатать анкетные данные студентов интересующей вас группы, имеющих средний балл выше введенного с клавиатуры.

16) Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 8 по физике и оценку 9 по высшей математике.

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

1) Укажите правила открытия, закрытия файла в языке С.

2) Какие режимы доступа к файлам вы знаете?

3) Опишите работу функций fprintf() и fscanf().

ЛАБОРАТОРНАЯ РАБОТА № 8










Последнее изменение этой страницы: 2018-05-10; просмотров: 229.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...