ОПЯВУ Отчет по КСР Веселов. Отчет по самостоятельной работе Выполнил слушатель гр. 403321 Фамилия, имя, отчество
Скачать 216.24 Kb.
|
ИИТ БГУИР Факультет повышения квалификации и переподготовки Кафедра МПСС Дисциплина: ОАПЯВУ Отчет по самостоятельной работе Выполнил слушатель гр. 40332-1 Фамилия, имя, отчество: Веселов Дмитрий Владимирович Задания: №40, №11 Минск 2015 40 Для хранения данных о ноутбуках описать структуру вида, описанного в Задаче 39. Написать функцию, которая читает данные о ноутбуках из файла note.txt в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта — целое число записей в файле; далее записи в формате структуры NOTEBOOK. Написать программу, в которой на основе разработанных функций осуществляется запись в двоичный файл данных только о тех ноутбуках, цена которых больше $3500, отсортированные в порядке возрастания тактовой частоты процессора. Пример файла note.txt: Aser Note Light 2699 5.6 02.0x11.8x08.3 100 40 10.4 1 1024x0768 60 0.774 ASW ND5123T 3489 7.2 02.3x11.8x10.1 133 32 12.1 2 1024x0768 70 1.300 ARMNote TS80CD 3699 7.2 02.0x11.5x08.8 133 64 11.3 1 1024x0768 75 1.300 AST Ascentla P50 4499 7.5 02.3x11.3x09.0 133 40 11.3 1 0800x0600 70 0.774 BSI NP8657D 2605 8.0 02.3x11.8x09.3 133 40 11.3 1 1024x0768 60 0.810 BSI NP5265A 3765 8.2 02.5x12.0x09.0 150 32 12.1 2 1024x0768 70 1.300 Dell Xpi P100SD 3459 6.0 02.3x11.0x08.8 100 40 10.3 1 1024x0768 60 0.773 Digital HiNote 4799 4.0 01.3x11.0x08.8 120 40 10.4 1 0800x0600 56 1.000 Gateway Solo S5 4499 5.6 02.0x11.9x08.8 133 40 11.3 2 1024x0768 60 0.686 Hertz Z - Optima NB 3995 8.0 02.3x11.9x09.0 150 40 11.2 2 1024x0768 75 1.000 HP Omni Book 5500 6120 7.1 02.0x11.5x09.0 133 64 11.4 1 1024x0768 75 1.300 IBM ThinkPad 560 3749 4.1 01.3x11.8x08.8 120 40 12.1 2 1024x0768 85 0.774 NEC Versa 4080H 4780 6.6 02.3x11.8x09.5 120 48 10.4 1 0800x0600 70 0.776 Polywell Poly 500 3300 7.9 02.3x11.9x09.0 120 40 10.4 1 1024x0768 72 1.000 Samsung SENS 810 3667 8.7 02.3x11.5x09.5 100 32 11.4 2 1024x0768 75 0.773 Twinhead Slimnote 2965 7.4 02.0x11.5x08.0 075 64 10.4 1 1024x0768 70 0.772 Схема алгоритма задание 40 Текст программы #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include int n = 0;//глобальный счетчик typedef struct notebook { char name[20];//20 наименование модели; int price;//5 цена в долларах; float weight;//4 масса ноутбука в кг; struct dem{//5x4x4 float width;//5 float lenght;//4 float height;//4 };//габаритные размеры ноутбука в дюймах(ВЫСОТАхДЛИНАхШИРИНА три числа с десятичной точкой(4 символа, включая точку, разделенные 'х'); dem dement; int freq;//4 частота процессора в МГц; int ram;//3 максимальный объем ОЗУ в мегабайтах; float ich;//4 размер диагонали дисплея в дюймах (число с десятичной точкой из четырех символов, включая точку); int gram;//2 размер видеопамяти в мегабайтах ; struct res{//5x4 int width;//5 int height;//4 }; // разрешающая способность дисплея в пикселах; res resol; int dfreq;// 3 частота регенерации дисплея в Гц; float hdd;// 6 объем HDD в гигабайтах. char x[5];//буфер для разделительных символов "x" }noot; noot a[40], b[20], c[20];//a для чтения из .txt b void func_read(){ setlocale(LC_CTYPE, "Russian"); char h; printf("\nДля продолжения нужен файл note.txt по адресу D:\\Work\\.\n h = _getch(); if (h != '\r')return;//чек подтверждение FILE *f; if (!(f = fopen("D:\\Work\\note.txt", "r+"))){ printf("Не могу открыть файл!\n"); return; } while ((fgets(a[n].name, 20, f) != NULL)) {//цикл пока можем считывать имя из начала новой строки fscanf(f, " %d %f %f%c%f%c%f %d %d %f %d %d%c%d %d %f\n", &a[n].price, &a[n].weight, &a[n].dement.width, a[n].x, &a[n].dement.lenght, a[n].x, &a[n].dement.height, &a[n].freq, &a[n].ram, &a[n].ich, &a[n].gram, &a[n].resol.width, a[n].x, &a[n].resol.height, &a[n].dfreq, &a[n].hdd); //считываем в структуру чмсловые значения и символы "х" n++; //инкремент } fclose(f); printf("\n Конец чтения note.txt\n\n прочитано %d строк", n); } void func_calc_and_sort(){ setlocale(LC_CTYPE, "Russian"); int ii = 0;//количество ноутов за $3500 for (int i = 0; i < n; i++){ if (a[i].price >= 3500){//если цена проходит приравниваем текущую позицию к полученному массиву структур b[ii] = a[i]; //printf("ii=%d\n",b[ii].price) ;//проверка через вывод прошедших значений ii++;//счетчик полученного массива структур } } c[0] = b[0]; // создаем начальные данные для сортировки массива for (int i = 1; i < ii; i++){//счет по возрастанию for (int k = i; k >= 0; k--) { // по убыванию с возрастающим количеством элементов if (b[i].freq <= c[k - 1].freq){// !!!!изменяя знак "<"- сортируем по возрастанию ">" -сортируем по убыванию c[k] = c[k - 1]; // смещение элементов в концу масива if (k == 1){ c[k - 1] = b[i]; break; }//исключения в случае сомого большого числа в массиве } else if (b[i].freq > c[k - 1].freq){ c[k] = b[i]; break; }// если встречается число бельшее чем сравниваемое!!!!изменяя знак ">"- сортируем по возрастанию <" -сортируем по убыванию } } //for (int i=0; i < ii;i++) printf("i=%d %d\n", i, c[i].freq);// проверка вывод отсортированных частот CPU printf("\n\n найдено и отсортировано по возрастанию %d строк с ценой больше $3500", n = ii);//колво строк(приравниваем глобальный счетчик к счетчику в функции) } void func_bin_write(){ setlocale(LC_CTYPE, "Russian"); FILE *f; if (!(f = fopen("D:\\Work\\note.dat", "wb"))){ printf("Не могу открыть файл!\n"); return; } fprintf(f, "%2d", n); //количество данных после сортировки fwrite(c, sizeof(c[0]), n, f);//сортированные даные fclose(f); printf("\n\nфайл D:\\Work\\note.dat записан \n\n"); //-------------------ПРОВЕРКА------------- //puts("Проверка:"); int d; noot D[10]; FILE *z = fopen("D:\\Work\\note.dat", "rb"); fscanf(z, "%2d", &d); int co = sizeof(D[0]); fread(D, sizeof(D[0]), d, z); for (int i = 0; i //printf(" %20s %5d %.1f %.1fx%.1fx%.1f\n %4d %3d %.2f %2d %5dx%d %3d %.4f\n", D[i].name, D[i].price, D[i].weight, D[i].dement.width, D[i].dement.lenght, D[i].dement.height, D[i].freq, D[i].ram, D[i].ich, D[i].gram, D[i].resol.width, D[i].resol.height, D[i].dfreq, D[i].hdd); fclose(z); //---------------------------------------- } void main(){ setlocale(LC_CTYPE, "Russian"); func_read(); func_calc_and_sort(); func_bin_write(); _getch(); } 11 С помощью текстового редактора БЛОКНОТ создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов). Файл должен иметь расширение DAT. Написать программу, которая:
Схема алгоритма задание 11 #define _CRT_SECURE_NO_WARNINGS #define N 1100 #include #include #include #include #include #include void readfile(char *te){ setlocale(LC_CTYPE, "Russian"); int i = 0, sp = 0, n = 0; char *D = "а"; FILE *f; if (!(f = fopen("D:\\work\\indwork.dat", "r+"))) { printf("Невозможно создать файл"); return; } for (;;){ char c = fgetc(f); if (c == EOF){ if (feof(f) != 0)break; } else if (c == '\n')continue; else if (c == ' ')sp = i; te[i] = c; printf("%c", te[i++]); } for (;;){ if (te[++sp] == *D) n++; else if (sp == i)break; } printf("\n Всего %d символов\t В последнем слове %d симолов %c", i, n, *D); fclose(f); } void main(){ setlocale(LC_CTYPE, "Russian"); char *Text = new char[N]; readfile(Text); delete[] Text; _getch(); } |