МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 4
по дисциплине «Основы алгоритмизации и программирования»
Работа с текстовыми файлами
Выполнил: студент гр. ИТ-12
Жаворонков Д.В.
Принял: Лозовская Е.В.
Дата сдачи отчета: _____________________
Дата допуска к защите: _____________________
Дата защиты: _____________________
Гомель 2012
Лабораторная работа №4
РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ
Цель работы:
Изучить принципы работы с тестовыми файлами. Научиться создавать, изменять и удалять файлы.
Задача №1
ВАРИАНТ 4
Выбрать все записи с данными только о тех ноутбуках, максимальный объем ОЗУ которых не менее 40 Мбайт. Записи в выходном файле должны быть упорядочены по невозрастанию объема ОЗУ.
Листинг файла note.txt
В файле note.txt находится информация о ноутбуках. Каждая строка содержит данные об одной модели. Данные в строке размещаются в следующих полях:
1:20 - наименование модели;
21:24 - цена в долларах США (целое число);
26:28 - масса ноутбука, кг (число с десятичной точкой из 4-х символов);
30:43 - габаритные размеры ноутбука в дюймах (высота х ширина х длина - три числа с десятичной точкой (4 символа, включая точку, разделенные "х"));
44:47 - частота процессора в МГц (целое число из 3-х символов);
49:51 - максимальный объем ОЗУ в мегабайтах (целое число из 3-х символов);
53:56 - размер дисплея по диагонали в дюймах (число с десятичной точкой из 4-х символов, включая точку);
58 - размер видеопамяти в мегабайтах (целое число из 1-го символа);
60:68 - разрешающая способность дисплея в пикселах (два целых числа, разделенные "х");
70:71 - частота регенерация дисплея в Гц (целое число из 2-х символов);
73:77 - объем HDD в гигабайтах (число с десятичной точкой из 5-ти символов);
Acer Note Light 2699 5.6 02.0x11.8x08.3 100 040 10.4 1 1024x0768 60 0.774
ASW ND5123T 3489 7.2 02.3x11.8x10.1 133 032 12.1 1 1024x0768 70 1.300
ARMNote TS80CD 3699 7.2 02.0x11.5x08.3 133 064 11.3 1 1024x0768 75 1.300
AST Ascentia H50 4499 7.5 02.3x11.3x09.0 133 040 11.3 1 0800x0600 70 0.774
Таблица соответствия переменных
Имя переменной | Имя на С | Тип | Комментарий |
Длина имени | lnm | Const int | Длина имени |
Длина размера | Lrazm | Const Int | Длина размера |
Длина пикселей | Lpix | Const int | Длина пикселей |
L | l | Const int | Длина строки |
name | n.name | Char | Имя ноута |
cena | n.cena | int | Цена ноута |
massa | n.massa | Float | Масса ноута |
razm | n.razm | char | Размер ноута |
chast | n.chast | Int | Частота процессора |
ozu | n.ozu | Int | Оперативная память |
dig | n.dig | Float | Диагональ |
vid | n.vid | Int | Размер видео |
pix | n.pix | char | Размер в пикселях |
gc | n.gc | Int | Частота в ГЦ |
hdd | n.hdd | Float | Объем HDD |
s | s | char | Дополнительная строка |
I | i | Int | Количество ноутов |
k | K | Int | Параметр цикла |
max | max | int | Максимум ОЗУ |
z | z | Int | Номер максимума |
t | t | int | параметр |
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
char bufRus[256];
char* Rus(const char*text)
{ CharToOem(text, bufRus);
return bufRus;
}
main()
{ const int lnm=20,lrazm=15,lpix=10,
l=20+5+4+15+4+4+5+2+10+3+6;
struct Note
{ char name[lnm];
int cena;
float massa;
char razm[lrazm];
int chast;
int ozu;
float dig;
int vid;
char pix[lpix];
int gc;
float hdd;
};
Note n[10];
char s[l];
int i=0,k,max=0,z=0,t;
FILE *fin,*fo,*f1;
if((fin=fopen("note.txt","r"))==NULL)
{ puts(Rus("ошибка открытия\n"));
fflush(stdin);
getchar();
return(1);
}
puts(Rus("файл открыт"));
fo=fopen("out.txt","w");
f1=fopen("noteNew.txt","w");
while(!feof(fin))
{ fgets(s,l,fin);
//puts(s);
strncpy(n[i].name,s,lnm-1);
n[i].name[lnm-1]='\0';
n[i].cena=atoi(&s[19]);
n[i].massa=atof(&s[24]);
strncpy(n[i].razm,&s[28],lrazm-1);
n[i].razm[lrazm-1]='\0';
n[i].chast=atoi(&s[43]);
n[i].ozu=atoi(&s[47]);
n[i].dig=atof(&s[51]);
n[i].vid=atoi(&s[56]);
strncpy(n[i].pix,&s[58],lpix-1);
n[i].pix[lpix-1]='\0';
n[i].gc=atoi(&s[68]);
n[i].hdd=atof(&s[71]);
i=i+1;
//fputs(s,fo);
}
for(k=0;k<i;k++)
{ printf("%9s%5d%4.1f%15s%4d%4d%5.1f%2d%10s%3d%6.3f\n",n[k].name,n[k].cena,n[k].massa,n[k].razm,n[k].chast,n[k].ozu,n[k].dig,n[k].vid,n[k].pix,n[k].gc,n[k].hdd);
}
puts("\n");
for(t=0;t<i-1;t++)
{ for(k=0;k<i;k++)
{ if(n[k].ozu>=max)
{ max=n[k].ozu;
z=k;
}
}
if(n[z].ozu>=40)
{ fprintf(f1,"%9s%5d%4.1f%15s%4d%4d%5.1f%2d%10s%3d%6.3f\n",n[z].name,n[z].cena,n[z].massa,n[z].razm,n[z].chast,n[z].ozu,n[z].dig,n[z].vid,n[z].pix,n[z].gc,n[z].hdd);
//printf("%9s%5d%4.1f%15s%4d%4d%5.1f%2d%10s%3d%6.3f\n",n[z].name,n[z].cena,n[z].massa,n[z].razm,n[z].chast,n[z].ozu,n[z].dig,n[z].vid,n[z].pix,n[z].gc,n[z].hdd);
n[z].ozu=0;
z=0;max=0;
}
}
fclose(fin);fclose(fo);fclose(f1);
fflush(stdin);
getchar();
return(0);
}
Блок-схема
Тест
Листинг файла notenew.txt
ARMNote TS80CD 3699 7.2 02.0x11.5x08.3 133 64 11.3 1 1024x0768 75 1.300
AST Ascentia H50 4499 7.5 02.3x11.3x09.0 133 43 11.3 1 0800x0600 70 0.774
Acer Note Light 2699 5.6 02.0x11.8x08.3 100 40 10.4 1 1024x0768 60 0.774
Задача №2
Организовать бинарный файл с полями соответствующими пункту “атрибуты”.
Программа должна:
- Создавать бинарный файл.
- Добавлять запись в конец файла.
- Добавлять запись по номеру.
- Выводить на экран все записи в виде таблицы.
- Удалять запись по номеру.
- 6.Осуществлять поиск в соответствии с запросами указанными в пункте «основные функции». Результаты поиска выводить на экран в виде таблицы.
- Диалог с пользователем организовать в виде меню.
- Удалять весь файл.
- Копировать данные из файла в резервный файл.
ВАРИАНТ 4