Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Уровень А
Постановка задания
Разработать программу, реализующую простейшую базу данных, со следующими функциями:
- CreateFile(char *fileName) — создание двоичного файла данных, элементами которого являются записи со структурой, указанной в индивидуальном варианте.
- ReadFile(char *fileName) — просмотр записей во входном файле последовательно от первой до последней.
- Count(char *fileName) — подсчет количества записей в исходном файле в соответствии с вариантом.
Варианты заданий
№ | Формулировка | ||
А1 | АВТОМОБИЛИ. Входной файл содержит сведения об автомобилях:
Найти количество самых новых автомобилей. | ||
А2 | КАТАЛОГ СПОРТИВНЫХ ТОВАРОВ. Входной файл содержит сведения о спортивных товарах:
Найти количество самых дорогих товаров. | ||
А3 | КАТАЛОГ ЧАЙНОЙ ПРОДУКЦИИ. Входной файл содержит сведения о чайной продукции:
Найти количество самых дорогих сортов чая. | ||
А4 | КАТАЛОГ МОЛОЧНОЙ ПРОДУКЦИИ. Входной файл содержит сведения о молочной продукции:
Найти количество творожной продукции в каталоге. | ||
А5 | КАТАЛОГ МЕБЕЛЬНОЙ ПРОДУКЦИИ. Входной файл содержит сведения о мебельной продукции:
Найти количество самой тяжелой мебельной продукции. | ||
А6 | КАТАЛОГ ЧАСОВ. Входной файл содержит сведения о часах:
Найти количество механических часов в каталоге. | ||
А7 | ВИДЕОТЕКА. Входной файл содержит сведения о фильмах:
Найти количество самых продолжительных фильмов. | ||
А8 | АУДИОТЕКА. Входной файл содержит сведения о музыкальных произведениях:
Найти количество самых коротких музыкальных произведений. | ||
А9 | МОТОЦИКЛЫ. Входной файл содержит сведения о мотоциклах:
Найти количество самых тяжелых мотоциклов. | ||
А10 | КАТАЛОГ ЮВЕЛИРНЫХ УКРАШЕНИЙ. Входной файл содержит сведения об ювелирных украшениях:
Найти количество золотых украшений. | ||
А11 | КАТАЛОГ КАНЦЕЛЯРСКИХ ТОВАРОВ. Входной файл содержит сведения о канцелярских товарах:
Найти количество тетрадей в каталоге. | ||
А12 | БУТИК. Входной файл содержит сведения о товарах некоторого бутика:
Найти количество товаров из заданной страны. | ||
А13 | КОНДИТЕРСКИЕ ИЗДЕЛИЯ. Входной файл содержит сведения о кондитерских изделиях:
Найти количество самых дешевых кондитерских изделий. | ||
А14 | БЫТОВАЯ ТЕХНИКА. Входной файл содержит сведения о товарах некоторого бутика:
Найти количество самых дорогих товаров. | ||
А15 | ТОЧКИ ПЛОСКОСТИ. Входной файл содержит координаты точек трехмерного пространства:
Найти количество тех точек плоскости, которые содержатся внутри окружности с центром в начале координат и радиуса R. | ||
А16 | ПРАЗДНИЧНЫЕ ДНИ. Входной файл содержит сведения о праздничных днях:
Найти количество праздничных дней, которые имеются в заданном месяце. |
Уровень В
Постановка задания
Разработать программу, основной блок которой в режиме «МЕНЮ» позволяет выбрать и запустить рабочие функции следующего назначения:
- CreateFileIn(char *fileName) — создание двоичного файла данных, элементами которого являются записи со структурой, указанной в индивидуальном задании.
- AddFileIn(char *fileName) — добавление записей в конец входного файла.
- ReadFileIn(char *fileName) — просмотр записей во входном файле последовательно от первой до последней.
- CreateFileOut(char *fileName1, char *fileName2) — обработка данных из входного файла по заданию индивидуального варианта и вывод результатов в выходной файл.
- ReadFileOut(char *fileName) — просмотр записей в выходном файле последовательно от первой до последней.
Варианты заданий
№ | Формулировка | ||||
В1 | КНИЖНЫЙ МАГАЗИН. Входной файл содержит сведения о книгах:
Требуется в выходной файл записать все те записи о книгах, которые являются самыми дорогими:
| ||||
В2 | ХАРАКТЕРИСТИКИ ПК. Входной файл содержит сведения о персональных компьютерах:
Требуется в выходной файл записать сведения о всех тех ПК, которые имеют наибольшую тактовую частоту:
| ||||
В3 | ФИНАНСОВЫЕ ДОКУМЕНТЫ БУХГАЛТЕРИИ. Входной файл содержит информацию о работниках некоторой организации:
Требуется в выходной файл записать все фамилии работников без повторения в отсортированном виде:
| ||||
В4 | СТУДЕНЧЕСКАЯ ГРУППА. Входной файл содержит сведения о студентах некоторой группы:
Требуется в выходной файл записать сведения о тех студентах, которые имеют наибольший средний балл:
| ||||
В5 | СТУДЕНТЫ ФАКУЛЬТЕТА. Входной файл содержит информацию о студентах некоторого факультета:
Требуется в выходной файл записать информацию о студентах, которые принадлежат какой-то одной конкретной группе, причем записи должны быть отсортированы в алфавитном порядке относительно фамилий:
| ||||
В6 | РАБОТА С ФАЙЛАМИ. Во входном файле задана последовательность записей, которые содержат полный путь к тому или иному файлу на жестком диске:
Требуется из полного имени файла fileName выделить только имя файла и записать его в переменную name. При считывании очередной записи из входного файла требуется проверить, имеется ли файл с именем fileName на жестком диске. Если такой файл имеется, то в переменную flag записать 1, иначе 0. Также в переменную size записать размерность файла (в байтах); если же такого файла нет, то в переменную size записать -1. Компоненты выходного файла имеют такой вид:
| ||||
В7 | ГОРОДА. Входной файл содержит информацию о городах:
Требуется в выходной файл записать информацию о городах, которые являются самыми густонаселенными:
| ||||
В8 | МАГАЗИН. Входной файл содержит информацию о товарах:
Требуется в выходной файл записать сведения о тех продуктах, которые являются самыми дорогими:
| ||||
В9 | БИБЛИОТЕКА. Входной файл содержит сведения о книгах некоторой библиотеки:
Требуется в выходной файл записать данные о тех книгах, которые являются самыми старыми:
| ||||
В10 | ОРГАНИЗАЦИЯ. Входной файл содержит информацию о работниках некоторой организации:
Требуется в выходной файл записать сведения о тех работниках, которые являются самыми молодыми:
| ||||
В11 | СТУДЕНТЫ ФАКУЛЬТЕТА. Входной файл содержит информацию о студентах некоторого факультета:
Требуется в выходной файл записать все сведения о студентах из одной фиксированной группы:
| ||||
В12 | СТРАНЫ. Входной файл содержит информацию о странах:
Требуется в выходной файл записать информацию о таких странах, которые имеют наибольшую площадь:
| ||||
В13 | ПЕРЕВОД ЧИСЕЛ В ДРУГУЮ СИСТЕМУ СЧИСЛЕНИЯ. Входной файл содержит структуры:
Во входном файле задана последовательность десятичных чисел. Получить последовательность тех же чисел, но в системе счисления определяемой полем «basis» (значение которого может быть от 2 до 36), и в символьном представлении. Дополнительные цифры отобразить буквами «А», «В», «С» и т. д. Полученные числа записать в выходной файл (FOut) типа:
| ||||
В14 | КАТАЛОГ МОНИТОРОВ. Входной файл содержит сведения о мониторах LCD:
Требуется в выходной файл записать данные о тех мониторах, которые имеют наибольшую диагональ:
| ||||
В15 | ИНФОРМАЦИЯ О ФАЙЛАХ. Входной файл содержит сведения о некоторых файлах на ПК:
Требуется в выходной файл записать информацию о тех файлах, которые имеют наибольший размер:
|
Уровень С
Постановка задания
Разработать программу, основной блок которой в режиме «МЕНЮ» позволяет выбрать и запустить рабочие функции следующего назначения:
- CreateFileIn(char *fileName) — создание двоичного файла данных, элементами которого являются записи со структурой, указанной в индивидуальном варианте.
- AddFileIn(char *fileName) — добавление записей в конец входного файла.
- ReadFileIn(char *fileName) — просмотр записей во входном файле последовательно от первой до последней.
- CreateFileOut(char *fileName1, char *fileName2) — обработка данных из входного файла по заданию индивидуального варианта и вывод результатов в выходной файл.
- ReadFileOut(char *fileName) — просмотр записей в выходном файле последовательно от первой до последней.
- Две функции сортировки, которые сортируют входной файл по двум полям (поля выбрать по желанию).
Варианты заданий
№ | Формулировка | ||||
С1 | САМОЛЕТЫ. Входной файл содержит информацию о самолетах:
Требуется в выходной файл записать данные о тех самолетах, которые среди самых старых имеют наибольшую грузоподъемность:
| ||||
С2 | КАТАЛОГ ПРОЦЕССОРОВ. Входной файл содержит сведения о процессорах:
Требуется в выходной файл записать данные о тех процессорах, которые среди самых дорогих имеют наибольшую частоту:
| ||||
С3 | ХАРАКТЕРИСТИКИ НОУТБУКОВ. Входной файл содержит сведения о ноутбуках:
Требуется в выходной файл записать информацию о тех ноутбуках, которые среди самых дорогих имеют наибольшую диагональ:
| ||||
С4 | КАТАЛОГ МОНИТОРОВ. Входной файл содержит сведения о мониторах LCD:
Требуется в выходной файл записать информацию о тех мониторах, которые среди самых дорогих имеют наименьшую диагональ:
| ||||
С5 | ФИНАНСОВЫЕ ДОКУМЕНТЫ БУХГАЛТЕРИИ. Входной файл содержит информацию о работниках некоторой организации:
Требуется в выходной файл записать сведения о тех работниках, которые среди самых молодых имеют наибольшую заработную плату:
| ||||
С6 | КНИЖНЫЙ МАГАЗИН. Входной файл содержит информацию о книгах:
Требуется в выходной файл записать сведения о тех книгах, которые среди самых старых являются самыми дешевыми:
| ||||
С7 | КАТАЛОГ СОТОВЫХ ТЕЛЕФОНОВ. Входной файл содержит информацию о сотовых телефонах:
Требуется в выходной файл записать информацию о тех телефонах, которые среди самых дорогих имеют наибольшую диагональ:
| ||||
С8 | СТУДЕНТЫ ФАКУЛЬТЕТА. Входной файл содержит информацию о студентах некоторого факультета:
Требуется в выходной файл записать сведения о тех студентах, которые среди самых молодых имеют максимальный средний балл:
|
Образец выполнения (вариант В4)
Постановка задачи
СТУДЕНЧЕСКАЯ ГРУППА. Входной файл содержит сведения о студентах некоторой группы:
1 2 3 4 5 6 7 | struct Rec1 { long nomer; // номер записи в файле char name[30]; // фамилия int year; // год рождения float sred; // средний балл }; |
Требуется в выходной файл записать сведения о тех студентах, которые имеют наибольший средний балл:
1 2 3 4 5 6 | struct Rec2 { char name[30]; // фамилия int year; // год рождения float sred; // средний балл }; |
Реализация задачи на языке Си
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | #include <stdio.h> // консольный ввод-вывод #include <conio.h> // имитация задержки программы #include <locale.h> // русификация диалогов #include <Windows.h> // системные функции (например, CLS) #include <io.h> // для работы с файлами #include <math.h> // для функции fabs #include <string.h> // для функции strcpy // описание студента (входная информация) struct Rec1 { long nomer; char name[30]; int year; float sred; }; // описание студента, имеющего наибольший средний балл (выходная информация) struct Rec2 { char name[30]; int year; float sred; }; // главное меню программы int Menu(void) { int select; do { system("CLS"); printf("1 - СОЗДАНИЕ ДВОИЧНОГО ФАЙЛА ДАННЫХ"); printf("\n2 - ДОБАВИТЬ ЗАПИСЬ В КОНЕЦ ДВОИЧНОГО ФАЙЛА"); printf("\n3 - ПРОСМОТР ВСЕХ ЗАПИСЕЙ ВХОДНОГО ДВОИЧНОГО ФАЙЛА"); printf("\n4 - ОБРАБОТКА ДАННЫХ ИЗ ДВОИЧНОГО ФАЙЛА"); printf("\n5 - ПРОСМОТР ВСЕХ ЗАПИСЕЙ ВЫХОДНОГО ДВОИЧНОГО ФАЙЛА"); printf("\n6 - ВЫХОД ИЗ ПРОГРАММЫ"); printf("\n\tВыбор: "); scanf("%d", &select); } while((select < 1) || (select > 6)); return select; } // создание двоичного файла данных void CreateFileIn(char *fileName) { FILE *f; int student_count; int i; struct Rec1 stud; f = fopen(fileName, "wb"); printf("\nВведите количество студентов (натуральное число), информацию о которых планируется добавить в файл: "); scanf("%d", &student_count); for(i = 0; i < student_count; i++) { fflush(stdin); stud.nomer = i + 1; printf("\nВвод информации о студенте №%d\n", i + 1); printf("\t - введите фамилию: "); gets(stud.name); printf("\t - введите год рождения: "); scanf("%d", &stud.year); printf("\t - введите средний балл: "); scanf("%f", &stud.sred); fwrite(&stud, sizeof(struct Rec1), 1, f); } fclose(f); } // добавление записи в конец двоичного файла void AddFileIn(char *fileName) { struct Rec1 stud; FILE *f; fflush(stdin); f = fopen(fileName, "ab"); stud.nomer = filelength(fileno(f)) / sizeof(struct Rec1) + 1; printf("\n\t - введите фамилию: "); gets(stud.name); printf("\t - введите год рождения: "); scanf("%d", &stud.year); printf("\t - введите средний балл: "); scanf("%f", &stud.sred); fwrite(&stud, sizeof(struct Rec1), 1, f); fclose(f); } // просмотр всех записей во входном двоичном файле void ReadFileIn(char *nameFile) { struct Rec1 stud; FILE *f; f = fopen(nameFile, "rb"); printf("\t-----------------------------------------------------\n"); printf("\t| # | Фамилия | Год рождения | Средний балл |\n"); printf("\t-----------------------------------------------------\n"); while(fread(&stud, sizeof(struct Rec1), 1, f)) printf("\t| %d | %15s | %12d | %12.3f |\n", stud.nomer, stud.name, stud.year, stud.sred); printf("\t-----------------------------------------------------\n"); fclose(f); } // создание выходного двоичного файла, содержащего сведения о студентах, который имеют наибольший средний балл void CreateFileOut(char *fileName1, char *fileName2) { #define EPS 0.0001 FILE *fin, *fout; float max_averege_score = 0; struct Rec1 stud_in; struct Rec2 stud_out; fin = fopen(fileName1, "rb"); while(fread(&stud_in, sizeof(struct Rec1), 1, fin)) if(stud_in.sred > max_averege_score) max_averege_score = stud_in.sred; rewind(fin); fout = fopen(fileName2, "wb"); while(fread(&stud_in, sizeof(struct Rec1), 1, fin)) { if(fabs(stud_in.sred - max_averege_score) <= EPS) { stud_out.sred = stud_in.sred; stud_out.year = stud_in.year; strcpy(stud_out.name, stud_in.name); fwrite(&stud_out, sizeof(struct Rec2), 1, fout); } } fclose(fin); fclose(fout); } // просмотр всех записей в выходном двоичном файле void ReadFileOut(char *nameFile) { struct Rec2 stud; FILE *f; f = fopen(nameFile, "rb"); printf("\t-------------------------------------------------\n"); printf("\t| Фамилия | Год рождения | Средний балл |\n"); printf("\t-------------------------------------------------\n"); while(fread(&stud, sizeof(struct Rec2), 1, f)) printf("\t| %15s | %12d | %12.3f |\n", stud.name, stud.year, stud.sred); printf("\t-------------------------------------------------\n"); fclose(f); } // главная функция программы (точка входа) int main(void) { int select; // выбор меню пользователем setlocale(LC_ALL, ""); // русификация диалогов do { select = Menu(); // вызов главного меню программы switch(select) { case 1: { CreateFileIn("in.bin"); printf("\nИнформация о студентах успешно добавлена в двоичный файл.\n"); break; } case 2: { AddFileIn("in.bin"); printf("\nИнформация о студенте успешно добавлена в конец двоичного файла.\n"); break; } case 3: { printf("\nИнформация обо всех студентах в заданном двоичном файле:\n"); ReadFileIn("in.bin"); break; } case 4: { CreateFileOut("in.bin", "out.bin"); printf("\nВыходной результирующий двоичный файл успешно сформирован.\n"); break; } case 5: { printf("\nИнформация обо всех студентах, имеющих максимальный средний балл:\n"); ReadFileOut("out.bin"); break; } } if(select != 6) getch(); } while(select != 6); return 0; } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Добавить комментарий