Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Функции и файлы


Автор: Nobel88 2.6.2006, 17:05
Для хранения данных о ноутбуках описать структуру вида(при необходимости ее дополнив):
Код

Struct NOTEBOOK {
Struct disp_res {          //разрешающая способность дисплея 
Int x;                             // по горизонтали
Int y;                             //  по вертикали
};
int f;                              //  частота регенерации
float d;                          //  размер диагонали дисплея
int price;                        //  цена
char model[21];            //  наименование
}

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

Пример файла note.txt:
Acer 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 Ascentia 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-Optlma NB    3995 8.0 02.3x11.9x09.0 150 40 11.2 2 1024x0768 75 1.000
HP OmnlBook 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.6x08.0 075 64 10.4 1 1024x0768 70 0.772
В файле note.txt находится текстовая информация о ноутбуках. Каждая строка
содержит данные об одной модели. Данные в строке размещаются в следующих
полях:
1:20 - наименование модели; 
21:24 — цена в долларах (целое число);
26:28 — масса ноутбука в кг (число с десятичной точкой из четырех символов); 30:43 - габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА — три числа с десятичной точкой (4 символа, включая точку, разделенные 'х'); 
44:47 — частота процессора в МГц (целое число из трех символов); 
49:50 — максимальный объем ОЗУ в мегабайтах (целое число из двух символов); 52:55 — размер диагонали дисплея в дюймах (число с десятичной точкой из че¬тырех символов, включая точку);
57 — размер видеопамяти в мегабайтах — целое число из одного символа; 
59:67 — разрешающая способность дисплея в пикселях (два целых числа, разде¬ленные 'х');
69:70 — частота регенерации дисплея в Гц (целое число из двух символов); 
7276 — объем HDD в гигабайтах (число с десятичной точкой из пяти символов). Все неописанные позиции заполнены пробелами.  
 

Автор: londinium 2.6.2006, 17:11
Найти решебник Павловской и посмотреть решении чего-то подобного, поскольку задача явно оттуда. 

Автор: Nobel88 2.6.2006, 17:13
подскажите ссыслку на решебник по Павловской? 

Автор: Oleg_Ci 3.6.2006, 13:52
Код

#include <iostream>
#include <fstream>
using namespace std;
#define X 16     // количество мониторов

fstream writ;    // чтение
ofstream out;    //  запись

struct NOTEBOOK {
     
    int x;          //разрешающая способность дисплея по горизонтали
    int y;        //  по вертикали
    float massa;        // масса
    float ix,iy,is;        // габаритные размеры ноутбука в дюймах ВЫСОТАхДЛИНАхШИРИНА
    int mb;        //   максимальный объем ОЗУ в мегабайтах
    int sv;        //   размер видеопамяти в мегабайтах
    float mg;    //   частота процессора в МГц
    float ggb;        // объем HDD в гигабайтах
    int f;                              //  частота регенерации
    float d;                          //  размер диагонали дисплея
    int price;                        //  цена
    char model[21];            //  наименование
};

NOTEBOOK inStruct (NOTEBOOK n[], int i )
{    // Функция чтения данных из файла в структуру
    char c;
    for ( int j = 0; j<20; j++ )
    {
        writ.get(c);
        n[i].model[j] = c;
    }
    n[i].model[20] = '\0';

    writ>>n[i].price;
    writ>>n[i].massa;
    writ>>n[i].ix;
    writ>>c;
    writ>>n[i].iy;
    writ>>c;
    writ>>n[i].is;
    writ>>n[i].mg;
    writ>>n[i].mb;
    writ>>n[i].d;
    writ>>n[i].sv;
    writ>>n[i].x;
    writ>>c;
    writ>>n[i].y;
    writ>>n[i].f;
    writ>>n[i].ggb;
    return n[i];
};

void fprint(NOTEBOOK n[], int i)
{    //  функция записи в файл "note.dat"
        out<<n[i].model;
        out<<n[i].price ;
        out<<n[i].massa ;
        out<<n[i].ix ;
        out<<n[i].iy ;
        out<<n[i].is ;
        out<<n[i].mg ;
        out<<n[i].mb ;
        out<<n[i].d ;
        out<<n[i].sv ;
        out<<n[i].x ;
        out<<n[i].y ;
        out<<n[i].f ;
        out<<n[i].ggb ;
};

void main()
{
    writ.open("note.txt");
    NOTEBOOK not[X];
    int i;
    for ( i=0; i<X; i++ )
        inStruct( not,i );
    writ.close();
    writ.clear();

    out.open( "note.dat", ios_base::app | ios_base::binary );
    for ( int i=0; i<X; i++ )
    {
        if ( not[i].massa < 7 )
            fprint( not, i );
    }
    out<<endl;
    out.close();

    cout<<"OK."<<endl<<"Press ENTER";
    cin.get();        // ожидание нажатия кл. Enter
}

 smile может я плюсик для репутации заслужил ? 
         Кстати, написано в Microsoft Visual Studio 2003. 
  И ещё - забыл что программа в начале записи в файл "должна первые два байта - целое число" записывать. 
  А ещё, я тебя сдесь в других топиках нашёл, и оказывается тебе надо на Turbo C++ писать надобыло. Так-что извеняй, сообщать в начале надобыло. 

Автор: eldarovich 3.6.2006, 17:59
Олег4, плюсик тебе могут ставить только опытные форумчане с >100 постов, а за задачу просто большое человеческое Спасибо! У меня похожая, переделаю 

Автор: Nobel88 4.6.2006, 10:09
Спасибо, что помогли решить задачу! 

Автор: Nobel88 4.6.2006, 12:46
Олег4 ты написал на Visual(using не определяется), а нужно на Turbo C++( все равно спасибо). 

Автор: Oleg_Ci 4.6.2006, 13:52
Да там includ <...  .h> поменять надо и помойму всё. 
Вот переделал под Turbo C++ 3.0. Но файл с текстом надо тогда набрать в каком-нибудь DOS редакторе надо, а то галиматья получается.
Код

#include <iostream.h>
#include <fstream.h>
#define X 16

fstream writ;    // чтение
ofstream out;    //  запись

struct NOTEBOOK {
     
    int x;          //разрешающая способность дисплея по горизонтали
    int y;        //  по вертикали
    float massa;        // масса
    float ix,iy,is;        // габаритные размеры ноутбука в дюймах ВЫСОТАхДЛИНАхШИРИНА
    int mb;        //   максимальный объем ОЗУ в мегабайтах
    int sv;        //   размер видеопамяти в мегабайтах
    float mg;    //   частота процессора в МГц
    float ggb;        // объем HDD в гигабайтах
    int f;                              //  частота регенерации
    float d;                          //  размер диагонали дисплея
    int price;                        //  цена
    char model[21];            //  наименование
};

NOTEBOOK inStruct (NOTEBOOK n[], int i )
{    // Функция чтения данных из файла в структуру
    char c;
    for ( int j = 0; j<20; j++ )
    {
        writ.get(c);
        n[i].model[j] = c;
    }
    n[i].model[20] = '\0';

    writ>>n[i].price;
    writ>>n[i].massa;
    writ>>n[i].ix;
    writ>>c;
    writ>>n[i].iy;
    writ>>c;
    writ>>n[i].is;
    writ>>n[i].mg;
    writ>>n[i].mb;
    writ>>n[i].d;
    writ>>n[i].sv;
    writ>>n[i].x;
    writ>>c;
    writ>>n[i].y;
    writ>>n[i].f;
    writ>>n[i].ggb;
    return n[i];
};

void fprint(NOTEBOOK n[], int i)
{    //  функция записи в файл "note.dat"
        out<<n[i].model;
        out<<n[i].price ;
        out<<n[i].massa ;
        out<<n[i].ix ;
        out<<n[i].iy ;
        out<<n[i].is ;
        out<<n[i].mg ;
        out<<n[i].mb ;
        out<<n[i].d ;
        out<<n[i].sv ;
        out<<n[i].x ;
        out<<n[i].y ;
        out<<n[i].f ;
        out<<n[i].ggb ;
};

void main()
{
    writ.open("note.txt", ios::in);
    NOTEBOOK not[X];
    int i;
    for ( i=0; i<X; i++ )
        inStruct( not,i );
    writ.close();
    writ.clear();

    out.open( "note.dat", ios::app | ios::binary );
    for ( i=0; i<X; i++ )
    {
        if ( not[i].massa < 7 )
            fprint( not, i );
    }
    out<<endl;
    out.close();

    cout<<"OK."<<endl<<"Press ENTER";
    cin.get();        // ожидание нажатия кл. Enter
}
 

Автор: Nobel88 4.6.2006, 18:21
Спасибо, что помог! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)