Программирование алгоритмов с использованием структур



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Программирование алгоритмов с использованием структур



 

Цель работы:

Изучить особенности работы с составным типом данных – структуры.

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

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

struct имя_структуры {

описание элементов;

};

Для выделения памяти под структуру надо определить структурную переменную:

struct имя_структуры имя_переменной;

При определении структур можно задавать начальные значения элементам структур. Для ввода значений элементов структур можно использовать оператор cin>> потокового ввода или оператор ввода scanf.

Над структурами допускаются следующие операции:

1) Взятие адреса структуры. Адрес структуры может быть получен путем применения операции указатель (&) к структурной переменной.

2) Доступ к элементу структуры можно выполнить с помощью операций: точка (.) - прямой доступ или стрелка ( -> ) - доступ по указателю.

Структурная переменная может использоваться так же, как и переменные типов float,int,char и т.д. Например:

 

struct gr /* имя структуры */

{ char fio[10]; /* элемент структуры */

int est[25]: /* элемент структуры */

int nomer; /* элемент структуры */

} gruppa1; /* имя структурной переменной */

 

struct gr gruppa2; /* объявление структурной переменной */

Если описатель структуры записан до размещения всех функций в исходном файле, то он будет доступен каждой из функций в этом файле. При определении структурной перемен­ной можно инициалиировать (станавливать значения полям структуры). Например

struct date { int day,month,year;};

d[5]={ { 1,3,1980},

{ 5,1,1990},

{ 1,1,2002}

};

 

Пример на использование структур

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <iostream.h>

struct Spisok {

char Fio[20];

char Grup[10];

int Ot[3];

float S_Bal;

} *sved;

 

void Vvod(int nom,struct Spisok *sved)

{ cout << "\n Vvedi svedenia " << (nom+1);

cout << "\n FIO - "; gets(sved->Fio);

cout << " Nomer Gr - "; cin >> sved->Grup;

float s=0;

for(int i=0;i<3;i++) {

cout << "\n Otcenki - "; cin >> sved->Ot[i];

s+=sved->Ot[i];

}

sved->S_Bal=s/3.;

return; }

 

void main(void)

{ struct Spisok Stud[50]; int i,N; char Bukva;

clrscr();

cout << "\n Vvedi kol-vo < 50 "; cin >> N;

for(i=0;i<N;i++) Vvod(i,&Stud[i]);

cout << "\n Spisok Students";

for(i=0;i<N;i++)

printf("\n %20s %10s %4.2f",Stud[i].Fio,Stud[i].Grup,Stud[i].S_Bal);

cout << "\n Poisk FIO (bukva) "; cin >> Bukva;

cout << "\n Sveden Students";

int kod_p=0;

for(i=0;i<N;i++)

if(Stud[i].Fio[0]==Bukva){ kod_p=1;

printf("\n %20s %10s %4.2f",Stud[i].Fio,Stud[i].Grup,Stud[i].S_Bal); }

if(kod_p==0) cout << " Takix HET!";

cout << "\n Poisk zapisi";

Vvod(-1,sved);

kod_p=0;

for(i=0;i<N;i++)

if(memcmp(sved,&Stud[i],sizeof(sved))==0) { kod_p=1;

printf("\n Poisk \n %20s %10s",Stud[i].Fio,Stud[i].Grup); }

if(kod_p==0) cout << " Takix HET!";

getch();

}

 

Язык Си допускает использовать в структурах особый тип полей - битовых. Поле битов - это группа соседних (двоичных) разрядов ( бит), расположенных в области памяти переменной целого типа.

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

Синтаксис описания битового поля :

тип[имя]:ширина;

 

Элементами структуры могут быть одна или несколько структурных переменных. Рассмотрим примеры программ работы со структурами.

ПРИМЕР 1

 

/* Программа демонстрирует передачу в функцию sum */

/* элементов avans и zarp структуры st */

#include <conio.h>

#include <stdio.h>

#define k 2

#define PE printf("\n ..СУММА АВАНСА ЗА %d МЕСЯЦА......",k);

#define PE1 printf("\n===================================");

#define PE2 printf("\n");

struct fund{

char *mes_avans;

float avans;

char *mes_zarp;

float zarp;

};

main()

{

 

static struct fund st={"АВГУСТ",

600000,

"ОКТЯБРЬ",

};

float sum(),res;

res=sum(st.avans,st.zarp);

printf(" \n Oбщая сумма равна %8.2f руб.",res);

PE2;PE1;getch();

}

float sum(x,y)

float x,y;

{

clrscr();PE;PE1;PE2;

return(x+y);

}

 

ПРИМЕР 2

 

/* Программа демонстрирует передачу в функцию пользователя sum * /

/* АДРЕСА структуры str */

/* адрес структуры str передается с помощью операции указатель */

/* у функции sum - один параметр, который описан как указатель * /

/* на структуру с шаблоном spis. При обращении к функции sum */

/* происходит присвоение значения адреса структурной переменной */

/* str, и с помощью указателя t можно обращаться к элементам */

/* структуры типа spis, например : t->vans и t->za */

#include <stdio.h>

#include <conio.h>

struct spis{

char *s_vans;

float vans;

char *s_za;

float za;

};

main()

{

static struct spis str={"сентябрь",

600,

"октябрь",

};

float sum(),res;

res=sum(&str);

printf(" общее количество экземпляров=%8.0f штук",res);

getch();

}

float sum(t)

struct spis *t;

{ clrscr();

return(t->vans+t->za);

}

ПРИМЕР 3

 

/* Программа демонстрирует передачу в функцию sum */

/* АДРЕСА МАССИВА структур */

/* стартовый адрес массива структур st помещается в переменную */

/* типа указатель m. Теперь в функции sum известен начальный */

/* адрес массива структур. Зная этот адрес , можно обратиться */

/* к элементам самой первой структуры, используя операцию -> */

/* Это элементы m->avans и m->zarp. Для того, чтобы получить адрес */

/* следующей структуры, надо увеличить переменную-указатель на 1, */

/* что и делается при вычислении третьего выражения в цикле for */

#include <stdio.h>

#include <conio.h>

struct fund{

char *mes_avans;

float avans;

char *mes_zarp;

float zarp;

};

 

main()

{

static struct fund st[2]={{"сентябрь",

500000,

"октябрь",

},

{"ноябрь",

600000,

"декабрь",

}

};

float sum();

printf(" общая сумма= %8.3f ",sum(st));

getch();

}

float sum(m)

struct fund *m;

{

float res;

int i; clrscr();

for(i=0,res=0;i<2;i++,m++)

res+=m->avans+m->zarp;

return(res);

}

 

ПРИМЕР 4.

Вести сведения о студентах учебной группы, каждый элемент массива студенческой группы содержит:

а) фамилию и имя;

в) итоги сдачи экзамена по программированию.

Программа выводит информацию остуденте по его порядковому номеру в списке группы(индекс массива, содержащего введенную информацию)

Текст С-программы может иметь вид:

#include <stdio.h>

#include <conio.h>

struct student

{

char fio[10]; // поле для ФИО студента

int est1; // поле для оценки

} gruppa[25]; // массив для списка группы

 

void main(void)

{

int i,j,k,priznak;

clrscr();

printf("\n Формирование списка до 25 человек");

/*------Формирование списка----------*/

for (i=1;i<=25;i++)

{

printf("\n Введите сведения о студенте %d и\

\n признак режима работы программы (0-окончить ввод )\

\n",i);

printf("\n Фамилия и инициалы: ");

fflush(stdin); // функция очистки буфера ввода

gets(gruppa[i].fio);

printf("\n Введите оценкy по программированию: ");

fflush(stdin);

scanf("%d",&gruppa[i].est1);

k=i; // запоминаем текущий номер введенной

// информации

printf(" \n Признак? ");

scanf("%d",&priznak);

k=i;

if(!priznak)break;

}

/*---------Просмотр списка------------*/

for (i=0; i<25; i++)

{

printf("\n Сведения о каком студенте?\n");

scanf("%d",&j);

if(j>k)

{

printf("\n НЕТ СВЕДЕНИЙ! ");

continue; // в случае отсутствия информации

} // переход на следующий шаг цикла

printf(" \n СТУДЕНТ: %s \n",gruppa[j].fio);

printf(" \n ВЕСЕННЯЯ СЕССИЯ, ОЦЕНКА\

по ПРОГРАММИРОВАНИЮ: %d",gruppa[j].est1);

printf("\n Признак? ");

scanf("%d",&priznak);

if(!priznak)break;

}

puts("\n РАБОТА ПРОГРАММЫ ЗАВЕРШЕНА! Press any key...");

getch();

}

Варианты индивидуальных заданий

В программах предусмотреть ввод исходной информации о четырех студентах

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

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

- год поступления в БГУИР;

- оценки за первый семестр:

- физика;

- высшая математика;

- информатика;

 

1. Распечатать список студентов, упорядоченный по алфавиту.

2. Распечатать список студентов. упорядоченный по году рождения.

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

4. Распечатать анкетные данные студентов. сдавших сессию на 4 и 5.

5. Распечатать список студентов. фамилии которых начинаются с буквы Б и их оценки по всем предметам.

6. Распечатать анкетные данные отличников.

7. Распечатать список студентов, фамилии которых начинаются с буквы А и их даты рождения.

8. Распечатать анкетные данные студентов, имеющих оценку 3 в сессию.

9. Распечатать список студентов и их оценки. Фамилии студентов начинаются с букв В и Г.

10. Распечатать фамилии и даты рождения студентов, не имеющих оценок 3.

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

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

13. Распечатать анкетные данные студентов, имеющих оценку 2.

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

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

16. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L кратна 2-м, то удаляются все числа, которые делятся на 2.

17. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L четная, то удаляются 2 первых и 2 последних символа.

18. Выяснить, имеются ли среди символов S1...Sn некоторой строки все буквы, входящие в слово DOS.

19. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L нечетная, то удаляется символ, стоящий посередине строки.

20. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Составить программу для замены в строке длиной К символов каждого второго символа ! на $.

21. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Составить программу для замены в строке длиной К символов всех пробелов на символ $.

22. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L >10, то удаляются все цифры.

23. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L кратна числу 3, то удаляются все числа, делящиеся на число 3.

24. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L кратна числу 5, то подсчитывается количество скобок всех видов.

25. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L кратна числу 4, то первая часть строки меняется местами со второй.

26. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L=10, то удаляются все A..Z.

27. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L >15, то удаляются все a..z.

28. В строке символов поменять местами символы на четных и нечетных позициях.

29. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L >6-и, то выделяется подстрока { } скобках.

30. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина L >5-и, то выделяется подстрока до первого пробела.

 

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

1. Как описываются структуры и строки в языке С?

2. Чем отличаются функции scanf() и gets(), printf() и puts()?

3. Поясните термин “указатель на структуру”?

 

 

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

Файлы в языке С.

Цель работы:

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

Краткие теоретические сведения.

Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое.

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

В алгоритмическом языке «С» это делает функция fopen. Она связывает физический файл на носителе, например B:\LR7.CPP, с логическим именем в программе. Логическое имя – это указатель на файл, т.е. на область памяти, где храниться информация о файле. Указатели на файлы необходимо объявлять. Формат объявления такого указателя следующий:

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

Например.

FILE *f;

f=fopen ("B:\LR7.СPP", "w");

Символ "w" определяет право доступа к открываемому файлу. В данном случае открывается файл LR7.СPP на диске B:\ только для чтения.

В «С» используются следующие коды, устанавливающие режимы доступа к открываемым файлам:

Символ Описание
R Файл открывается только для чтения. Если нужного файла на диске нет, то возникает ошибка.
W Файл открывается только для записи. Если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается.
A Файл открывается для дозаписи в его конец новой информации.
r+ Файл открывается для редактирования его данных. Возможны и запись, и чтение информации.
w+ То же, что и для r+.
a+ То же, что и для a, только запись можно выполнять в любое место файла. Доступно и чтение файла.
T Файл открывается в текстовом режиме. Указывается поле r, w, a, r+, w+, a+.
B Файл открывается в двоичном режиме. Указывается поле r, w, a, r+, w+, a+.

 

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

По умолчанию файл открывается в текстовом режиме.

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

Для открытия нескольких файлов введена функция, объявленная следующим образом: Void fcloseall(Void);

Если требуется изменить режим доступа к файлу, то для этого сначала необходимо закрыть данный файл, а затем вновь его открыть, но с другими правами доступа. Для этого используют стандартную функцию freopen, описанную в stdio.h как FILE* freopen (char filename, chov*mode, FILE *stream). Эта функция сначала закрывает файл, связанный с потоком stream (как это делает функция fopen), а затем открывает файл с именем filename и правами доступа mode, записывая информацию об этом файле в переменную stream.

В алгоритмическом языке С имеется возможность работы с временными файлами, т.е. с такими, которые нужны только в процессе работы программы и которые надо удалить после выполнения части вычислений. в этом случае используют функцию tmpfile со следующим объявлением: FILE* tmpfile (void).

Функция tmpfile создает на диске временный файл с правами доступа «w+b» и возвращает указатель на управляющий блок по типу атрибута FILE. После завершения работы программы или после закрытия временного файла он автоматически удаляется из диска.

Все действия по чтению/записи данных в файл можно дразделить на три группы:

1. Операции посимвольного ввода-вывода,

2. Операции построчного ввода-вывода,

3. Операции ввода-вывода по блокам.

Ниже приведены основные функции, применяемые в каждой из указанных трех групп операций.

Посимвольный ввод-вывод

В операциях посимвольного ввода-вывода происходит прием одного символа из файла или передача одного символа в файл.

Функция Действие функции
int fgets(FILE *fp) Чтение и возврат символа из открытого файла
int fgetchov(void) Читает и возвращает символ из файла stdin.
int ungetc(int ch, FILE *fp) Возвращает символ ch в файл. Следующая операция чтения символа из файла вернет этот символ.
int fputs(int ch, FILE *fp) Записывает в файл код ch символа.

 

Построчный ввод-вывод.

В операциях построчного ввода-вывода за один прием происходит перенос из файла (или в файл) строк символов.

Функция Действие функции
int gets (char *S) Читает байты из файла stdin и записывает их в строку S до тех пор, пока не встретит символ ' \n ', который заменяется на нуль – терминатор.
int fgets (char *S int m, FILE *fp) Извлекает байты из файла, описываемого fp, и записывает их в строку S до тех пор, пока не встретит символ ' \n ' или пока не будет считана m байтов.
int fputs (char *S, FILE *fp) Записывает в файл байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл не переносится и на символ ' \n ' не заменяется.
int puts (char *S) Записывает в файл, stdout байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл переносится и заменяется на символ ' \n '.

Блоковый ввод-вывод

В операциях блокового ввода-вывода работа происходит с целыми блоками информации.

Функции Действие функции
int fread (void *ptv, int size, int n, FILE *fp) Считывает n блоков по size байт каждый из файла fp, в область памяти, на которую указывает указатель ptv (необходимо заранее отвести память под считываемый блок).
int fwrite (void *ptv, int size, int n, FILE *fp) Записывае n блоков по size байт каждый из области памяти, на которую указывает ptv, в открытый файл fp.

 

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

#include <stdio.h>

#include <conio.h>

 

void main(void)

{

int a=1, b=20, c, d;

FILE *in, *out, *add;

clrscr();

/* ........ ЗАПИСЬ ЧИСЕЛ В ФАЙЛ ......*/

in=fopen("lr8.dat","wb");

fprintf(in,"%d %d \n",a,b);

fclose(in);

puts("ЧИСЛА a, b ЗАПИСАНЫ В ФАЙЛ");

puts("Press any key...");

getch();

/* ......... ЧТЕНИЕ ЧИСЕЛ ИЗ ФАЙЛА ........*/

out=fopen("lr8.dat","rb");

fscanf(out,"%d%d", &c, &d);

printf("\n a=%d b=%d ", c, d);

fclose(out);

puts("\n ЧИСЛА ПРОЧИТАНЫ ИЗ ФАЙЛА");

puts("Press any key...");

getch();

/* ......... ДОПОЛНЕНИЕ ФАЙЛА ..........*/

add=fopen("lr8.dat","a");

puts("ВВЕДИТЕ ЧИСЛА ЦЕЛОГО ТИПА c и d");

scanf("%d%d",&c,&d);

fprintf(add,"%d %d \n",c,d);

printf("\n c=%d d=%d \n ",c,d);

fclose(add);

puts("ЧИСЛА c и d ДОПИСАНЫ В ФАЙЛ");

puts("Press any key...");

getch();

 

/* ......... ЧТЕНИЕ ЧИСЕЛ ИЗ ФАЙЛА ........*/

out=fopen("lr8.dat","rb");

fscanf(out,"%d%d%d%d", &a, &b, &c, &d);

printf("\n a=%d b=%d ", a, b);

printf("\n c=%d d=%d ", c, d);

fclose(out);

puts("\n РАСШИРЕННЫЙ ФАЙЛ!");

puts("Press any key...");

getch();

}

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

 

Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое.

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

Это выполняет функция

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

она связывает физический файл на носителе (дискета, винчестер), путь к которому указывается в строке1, например “a:Mas_dat.dat”, “d:\\work\\Sved.txt”, с логическим именем, объявленным в программе.

В строке2 указываются коды режимов доступа к открываемым файлам (табл.1).

Логическое имя – это указатель на файл, т.е. на область памяти, где храниться информация о файле. Формат объявления указателя на файл следующий:

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

Например:

FILE *f;

f=fopen ("d:\\work\\Dat_sp.cpp", "w");

- открывается файл Dat_sp.cpp на диске d, в каталоге work, только для записи.

 

Таблица 1

Коды, устанавливающие режимы доступа к открываемым файлам

 

Символ Описание
R Файл открывается только для чтения; если такого файла нет, то возникает ошибка
W Файл открывается только для записи; если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается
A Файл открывается для добавления в его конец новой информации
r+ Файл открывается для редактирования данных; возможны и запись, и чтение информации
w+ То же, что и для r+
a+ То же, что и для a, только запись можно выполнять в любое место файла; доступно и чтение файла
T Файл открывается в текстовом режиме; указывается поле r, w, a, r+, w+, a+
B Файл открывается в двоичном режиме; указывается поле r, w, a, r+, w+, a+

 

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

По умолчанию файл открывается в текстовом режиме.

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

Для закрытия нескольких файлов введена функция, объявленная следующим образом: Void fcloseall(Void);

Если требуется изменить режим доступа к файлу, то для этого сначала необходимо закрыть данный файл, а затем вновь его открыть, но с другими правами доступа. Для этого используют стандартную функцию freopen, описанную в stdio.h как

FILE* freopen (char filename, char *mode, FILE *stream);

Эта функция сначала закрывает файл, связанный с потоком stream (как это делает функция fopen), а затем открывает файл с именем filename и правами доступа mode, записывая информацию об этом файле в переменную stream.

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

FILE* tmpfile (void);

Функция tmpfile создает на диске временный файл с правами доступа «w+b» и возвращает указатель на управляющий блок по типу атрибута FILE. После завершения работы программы или после закрытия временного файла он автоматически удаляется.

Все действия по чтению/записи данных в файл можно разделить на три группы:

- операции посимвольного ввода-вывода;

- операции построчного ввода-вывода;

- операции ввода-вывода по блокам.

Ниже приведены основные функции, применяемые в каждой из указанных трех групп операций.

Посимвольный ввод-вывод

В операциях посимвольного ввода-вывода происходит прием одного символа из файла или передача одного символа в файл.

 

Функция Действие функции
int fgetc(FILE *fp) Читает и возвращает символ из открытого файла
int fgetchar(void) Читает и возвращает символ из файла stdin
int ungetc(int ch, FILE *fp) Возвращает символ ch в файл; следующая опера­ция чтения символа из файла вернет этот символ
int fputc(int ch, FILE *fp) Записывает в файл код ch символа

 

Построчный ввод-вывод

В операциях построчного ввода-вывода за один прием происходит пере­нос из файла (или в файл) строк символов.

 

Функция Действие функции
int gets (char *S) Читает байты из файла stdin и записывает их в строку S до тех пор, пока не встретит символ '\n', который заменяется на ‘\0’ (нуль-терминатор)
int fgets (char *S,int m,FILE *fp) Извлекает байты из файла, описываемого fp, и записывает их в строку S до тех пор, пока не встретит символ '\n' или пока не будет считано m байтов

 

Варианты индивидуальных заданий

В программе предусмотреть создание меню со следующими пунктами

- СОЗДАНИЕ НОВОГО ФАЙЛА

- ПРОСМОТР СОЗДАННОГО ФАЙЛА

- КОРРЕКЦИЯ ФАЙЛА – дозапись новых данных или исправление старых.

 

ПРИМЕНИТЬ ФАЙЛ ТИПА ЗАПИСЬ!

1. Список товаров, имеющихся на складе, включает:

- наименование товара;

- количество единиц товара;

- цену единицы товара;

- дату поступления товара на склад.

ВЫВЕСТИ В АЛФАВИТНОМ ПОРЯДКЕ СПИСОК ТОВАРОВ, ХРАНЯЩИХСЯ БОЛЕЕ ОДНОГО МЕСЯЦА, СТОИМОСТЬ КОТОРЫХ ПРИВЫШАЕТ 1000000 РУБЛЕЙ.

2. Для получения места в общежитии формируется список студентов, который включает:

- Ф.И.О. студента;

- номер группы (буква и четыре цифры);

- средний балл;

- доход на одного члена семьи;

Общежитие в ПЕРВУЮ очередь предоставляется тем студентам, чьи доходы на члена семьи меньше двух минимальных зарплат, затем остальным в порядке уменьшения среднего балла.

ВЫВЕСТИ СПИСОК ОЧЕРЕДНОСТИ ПРЕДОСТАВЛЕНИЯ МЕСТА В ОБЩЕЖИТИИ.

3. В справочной автовокзала хранится расписание движения автобусов. Для каждого рейсов указаны:

- номер рейса;

- тип автобуса;

- пункт назначения;

- время отправления;

- время прибытия на конечный пункт;

ВЫВЕСТИ ИНФОРМАЦИЮ О РЕЙСАХ, КОТОРЫМИ МОЖНО ВОСПОЛЬЗОВАТЬСЯ ДЛЯ ПРИБЫТИЯ В ПУНКТ НАЗНАЧЕНИЯ РАНЬШЕ ЗАДАННОГО ВРЕМЕНИ.

4. На междугородней АТС информация о разговорах содержит:

- дату разговора;

- код и название города;

- время разговора;

- тариф;

- номер телефона в этом городе;

- номер телефона абонента;

ВЫВЕСТИ ПО КАЖДОМУ ГОРОДУ ОБЩЕЕ ВРЕМЯ РАЗГОВОРА С НИМ И СУММУ.

5. Информация о сотрудниках фирмы включает:

- Ф.И.О. сотрудников;

- табельный номер;

- количество проработанных часов за месяц;

- почасовой тариф;

Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере. Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 12% от суммы заработной платы.

6. Информация об участниках спортивных соревнований содержит:

- Ф.И.О. игрока;

- игровой номер;

- возраст;

- рост;

- вес;

Вывести информацию о самой молодой, рослой и легкой команде.

7. Для книг, хранящихся в библиотеке задаются:

- регистрационный номер книги;

- автор;

- название;

- год издания;

- издательство;

- количество страниц;

Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года.

8. Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают:

- наименование;

- количество;

- номер цеха;

Для заданного цехе необходимо вывести количество выпущенных изделий по каждому наименованию в порядке убывания количества.

9. Информация о сотрудниках предприятия содержит:

- Ф.И.О.;

- номер отдела;

- должность;

- дату начала работы;

Вывести список сотрудников по отделам в порядке убывания стажа.

10. Создать файл, содержащий сведения о месячной заработной плате сотрудников отдела. Каждая запись содержит поля: фамилия сотрудника, наименование отдела, размер заработной платы за месяц.

- Вычислить общую сумму выплат за месяц по отделу А, а также среднемесячный заработок сотрудникам этого отдела.

- Напечатать для бухгалтерии ведомость для сотрудников этого отдела, у которых зарплата ниже введенной с клавиатуры.

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

Считая данными (вводятся с клавиатуры) значения расценок Sa, Sв, Sc за выполненную работу по сборке единицы изделия категории А, В, С соответственно, выдать на печать следующую информацию:

общее количество изделий категории А, В, С, собранных рабочими цеха X;

ведомость заработной платы рабочих цеха X;

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

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

- по вводимой с клавиатуры фамилии абонента выдается номер телефона;

- определяется количество установленных телефонов с XXXX года (год вводится с клавиатуры).

13.Создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например 2 – 5, т.е. от 2 до 5 лет. Вывести на печать:

- название игрушек, которые подходят детям от 1 до 3 лет;

- стоимость самой дорогой игрушки и ее наименование;

- название игрушки, которая по стоимости не превышает «х» руб. Значение «х» вводится с клавиатуры.

14. Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: номер группы, фамилия студента, оценки по пяти экзаменам и пяти зачетам (зачет – незачет). На печать вывести:

- фамилии неуспевающих студентов с указанием номера группы и количества задолженностей;

- средний балл, полученный каждым студентом группы Х (вводится с клавиатуры), и всей группой в целом.

15. Создать файл, содержащий сведения об ассортименте обуви в магазине. Структура записи: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д для женской обуви, М для мужской, П для детской. На печать вывести информацию:

- о наличии и стоимости обуви артикула Х (вводится с клавиатуры);

- ассортиментный список женской обуви с указанием наименования и имеющего в наличии числа пар каждой модели.

16. Для участия в конкурсе исполнителей необходимо заполнить анкету с данными:

- Ф.И.О;

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

- название страны;

- класс музыкального инструмента (гитара, фортепиано, скрипка, виолончель).

ВЫВЕСТИ СПИСОК САМЫХ МОЛОДЫХ ЛАУРЕАТОВ КОНКУРСА ПО КЛАССАМ ИНСТРУМЕНТОВ В ПОРЯДКЕ ЗАНЯТЫХ МЕСТ.

17. Составить программу, которая записывает в файл S сначала компонент файла F, затем компонент файла G с сохранением порядка.

18. Составить программу, которая подсчитывает количество элементов непустого файла в типе int, больших среднего арифметического всех элементов этого файла и переписывает эти элементы в файл d.

19. Составить программу определения: совпадают ли компоненты файла FS с компонентами файла GS. Если нет, то определить номера 1-й и 2-й компонент, в которых есть отличие.

20. Написать программу, которая из файла a переписывает в файл w все весенние даты, а затем в файл t все осенние.

21. Написать программу, которая перепишет с сохранением порядка следования компоненты файла F в файл G, а компоненты файла G в файл F. (Использовать вспомогательный файл).

22. Написать программу, которая объеденит два файла типа int в один файл: сначало все положительные элементы, затем отрицательные элементы.

23. Задан текстовый файл С, состоящий из произвольной последовательности буквенных символов. Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены и переписать новый текст в файл D.

24. Даны два файла: a-типа int, b-типа chav. Составить программу слияния этих файлов в один по алгоритму – цифра вставляется после двух символов.

25. Переписать компоненты символьного файла FS в файл GS, заменив при этом каждый восклицательный знак на точку, а каждое двоеточие – тремя точками.

26. Компоненты файла FS – символ. Слова отделены пробелом. Получить копию файла FS в файле GS.

27. Компоненты файла H – натуральные числа. Переписать файл М все удвоенные нечетные числа.

28. Составить программу записи в файл GS всех чисел файла FS кратных 5, а файл HS – всех отрицательных чисел кратных 3.

29. Дан файл Е, который содержит данные о студентах групп (фамилия – имя – возраст). Создать файл F, который будет содержать данные о студентах, имеющих наибольший возраст.

30. Написать программу которая объединяет два файла типа int: сначала все сотни, потом десятки, потом 1.

 

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

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

2. Что такое “построчный ввод/вывод”?

 


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

 



Последнее изменение этой страницы: 2016-04-23; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.132.225 (0.018 с.)