Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Функции и файлы 
V
    Опции темы
Nobel88
Дата 2.6.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



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

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 в гигабайтах (число с десятичной точкой из пяти символов). Все неописанные позиции заполнены пробелами.  
 

Это сообщение отредактировал(а) Alexeis - 19.4.2007, 13:35
PM MAIL   Вверх
londinium
Дата 2.6.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 21.1.2006

Репутация: нет
Всего: нет



Найти решебник Павловской и посмотреть решении чего-то подобного, поскольку задача явно оттуда. 
PM MAIL   Вверх
Nobel88
Дата 2.6.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



подскажите ссыслку на решебник по Павловской? 
PM MAIL   Вверх
Oleg_Ci
  Дата 3.6.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Код

#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++ писать надобыло. Так-что извеняй, сообщать в начале надобыло. 

Это сообщение отредактировал(а) Олег4 - 3.6.2006, 17:16
PM MAIL   Вверх
eldarovich
Дата 3.6.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 1.6.2006
Где: Оренбург

Репутация: нет
Всего: нет



Олег4, плюсик тебе могут ставить только опытные форумчане с >100 постов, а за задачу просто большое человеческое Спасибо! У меня похожая, переделаю 
PM MAIL ICQ   Вверх
Nobel88
Дата 4.6.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Спасибо, что помогли решить задачу! 
PM MAIL   Вверх
Nobel88
Дата 4.6.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Олег4 ты написал на Visual(using не определяется), а нужно на Turbo C++( все равно спасибо). 
PM MAIL   Вверх
Oleg_Ci
Дата 4.6.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Да там 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
}
 

Это сообщение отредактировал(а) Олег4 - 4.6.2006, 14:29
PM MAIL   Вверх
Nobel88
Дата 4.6.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Спасибо, что помог! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.