Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
#1

Функции и файлы (Павловская Т.А.) Вариант 18 - C++

08.05.2009, 16:34. Просмотров 3004. Ответов 21
Метки нет (Все метки)

Здравствуйте, куча лаб и все ндо сделать до понедельника-вторника...
Помогите, чем сможете, оч прошу, обещаю учиться лучше и помогать потом буду))
А щас прошу мне помочь =(

Для хранения данных о ноутбуках описать структуру вида, описанного ниже

C++
1
2
3
4
5
6
7
8
9
10
struct NOTEBOOK {
    struct  disp_res {   // разрешающая способность дисплея
              int x;         // по горизонтали
                     int y;         // по вертикали
                     };
           int f;                   // частота регенерации
           float d;                // размер диагонали дисплея
           int price;              // цена
           char model[21];     // наименование
}
Написать функцию, которая читает данные о ноутбуках из файла note.txt
Acer Note Light 2699 5.6 02.0x11.8x08.3 100 40 10.4 1024x0768 60 0.774
ASW ND5123T 3489 7.2 02.3x11.8x10.1 133 32 12.1 1024x0768 70 1.300
ARMNote TS80CD 3699 7.2 02.0x11.5x08.8 133 64 11.3 1024x0768 75 1.300
AST Ascentia P50 4499 7.5 02.3x11.3x09.0 133 40 11.3 0800x0600 70 0.774
BSI NP8657D 2605 8.0 02.3x11.8x09.3 133 40 11.3 1024x0768 60 0.810
BSI NP5265A 3765 8.2 02.5x12.0x09.0 150 32 12.1 1024x0768 70 1.300
Dell Xpi P100SD 3459 6.0 02.3x11.0x08.8 100 40 10.3 1024x0768 60 0.773
Digital HiNote 4799 4.0 01.3x11.0x08.8 120 40 10.4 0800x0600 56 1.000
Gateway Solo S5 4499 5.6 02.0x11.9x08.8 133 40 11.3 1024x0768 60 0.686
Hertz Z-Optima NB 3995 8.0 02.3x11.9x09.0 150 40 11.2 1024x0768 75 1.000
HP OmniBook 5500 6120 7.1 02.0x11.5x09.0 133 64 11.4 1024x0768 75 1.300
IBM ThinkPad 560 3749 4.1 01.3x11.8x08.8 120 40 12.1 1024x0768 85 0.774
NEC Vers 4080H 4780 6.6 02.3x11.8x09.5 120 48 10.4 0800x0600 70 0.776
Polywell Poly 500 3300 7.9 02.3x11.9x09.0 120 40 10.4 1024x0768 72 1.000
Samsung SENS 810 3667 8.7 02.3x11.5x09.5 100 32 11.4 1024x0768 75 0.773
Twinhead Slimnote 2965 7.4 02.0x11.5x08.0 075 64 10.4 1024x0768 70 0.772
p.s. Текст блокноте надо выровнять в начале по пробелам, после названия ноутбука, а дальше всё нормально.
в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта - целое число записей в файле; далее записи в формате структуры в NOTEBOOK.

Написать программу в которой на основе разработанных функций осуществляется запись в двоичный файл данных только о тех ноутбуках, тактовая частота которых больше 120МГц, отсортированных в порядке уменьшения веса.

1:20 - наименование модели;
21:24 - цена в долларах (целое число);
26:28 - масса ноутбука в кг (число с десятичной точкой из четырех символов);
30:43 - габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА) - три числа с десятичной точкой (4 символа, включая точку, разделенные 'x');
44:47 - частота процессора в МГц (целое число из трез символов);
49:50 - максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
52:55 - размер диагонали дисплея в дюймах (число с десятичной точкой из четырех символов, включая точку);
57 - размер видеопамяти в мегабайтах - целое число из одного символа;
59:67 - разрешающая способность дисплея в пикселах (два целых числа, разделенные 'x');
69:70 - частота регенерации дисплея в Гц (целое число из двух символов);
72:76 - объем HDD в гигабайтах (число с десятичнойточкой из пяти символов).
Все неописанные позиции заполнены пробелами.
Вот все, что смог написать =/
C++
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
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <string.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    struct NOTEBOOK {
        struct  disp_res {
                int x;
                int y;
                };
        int f;
        float d;
        int price;
        char model[21];
    }
 
    FILE *fin;
    if ((fin = fopen("note.txt", "r")) == NULL) {
        puts("Error of opening of an entrance file\n"); return 1; }
    FILE *fout;
    if ((fout = fopen("note.bin", "wb")) == NULL) {
        puts("Error of opening of a target file\n"); return 1; }
 
    while (!feof(fin)) {
    fgets(,,fin)
    fscanf(fin, "",,)
     printf("\n",,,)
    fwrite();
    }
    fclose(fout);
    prinf("The binary file is written down\n");
 
    getch();
    return 0;
}
Добавлено через 2 минуты 43 секунды
Уважаемые модераторы, прошу удалить одну из моих идентичных тем. Из-за интернета, одна оказалось лишней, заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2009, 16:34     Функции и файлы (Павловская Т.А.) Вариант 18
Посмотрите здесь:

Как бы вы написали кусок программы, Вариант 1 или Вариант 2? C++
C++ где взять ответы из учебника Т.А.Павловская C/C++
C++ Структуры Вариант 18 Павловская Т. А.
C++ Зачем нужные поразрядные операции. Книга Павловская, Щупак
Файлы и функции C++
Файлы + функции C++
в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
10.05.2009, 17:55  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #2
Вообщем так, посидел я подумал, и написал вот такую структуру, прям по заданию...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct NOTEBOOK {
           char model[21];             //наименование
           int price;                      //цена
           float weight;                 //масса
           struct  nb_size {               //Габаритные размеры ноутбука
                float h;                      //высота
                float a;                      //длина
                float b;                      //ширина
                };
           int mhz;                        //частота в МГц
           int ozu;                        //ОЗУ
           float d;                        //размер диагонали дисплея
           int v;                          //размер видеопамяти
           struct  disp_res {          //Разрешающая способность дисплея
               int x;              //по горизонтали
               int y;              //по вертикали
               };
           int f;                           //частота регенерации
           double hdd;                  //объем HDD    
}
Ребята, кто готов помочь, но всю задачу решить не может или не хочет, тех я прошу помогать мне с минизаданиями, на которые я разбил всё задание
Минизадание: Написать функцию, которые читает данные о ноутбуках из файла note.txt в структуру приведенного вида.

Форматированный текст для программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Acer Note Light     2699 5.6 02.0x11.8x08.3 100 40 10.4 1024x0768 60 0.774
ASW ND5123T         3489 7.2 02.3x11.8x10.1 133 32 12.1 1024x0768 70 1.300
ARMNote TS80CD      3699 7.2 02.0x11.5x08.8 133 64 11.3 1024x0768 75 1.300
AST Ascentia P50    4499 7.5 02.3x11.3x09.0 133 40 11.3 0800x0600 70 0.774
BSI NP8657D         2605 8.0 02.3x11.8x09.3 133 40 11.3 1024x0768 60 0.810
BSI NP5265A         3765 8.2 02.5x12.0x09.0 150 32 12.1 1024x0768 70 1.300
Dell Xpi P100SD     3459 6.0 02.3x11.0x08.8 100 40 10.3 1024x0768 60 0.773
Digital HiNote      4799 4.0 01.3x11.0x08.8 120 40 10.4 0800x0600 56 1.000
Gateway Solo S5     4499 5.6 02.0x11.9x08.8 133 40 11.3 1024x0768 60 0.686
Hertz Z-Optima NB   3995 8.0 02.3x11.9x09.0 150 40 11.2 1024x0768 75 1.000
HP OmniBook 5500    6120 7.1 02.0x11.5x09.0 133 64 11.4 1024x0768 75 1.300
IBM ThinkPad 560    3749 4.1 01.3x11.8x08.8 120 40 12.1 1024x0768 85 0.774
NEC Vers 4080H      4780 6.6 02.3x11.8x09.5 120 48 10.4 0800x0600 70 0.776
Polywell Poly 500   3300 7.9 02.3x11.9x09.0 120 40 10.4 1024x0768 72 1.000
Samsung SENS 810    3667 8.7 02.3x11.5x09.5 100 32 11.4 1024x0768 75 0.773
Twinhead Slimnote   2965 7.4 02.0x11.5x08.0 075 64 10.4 1024x0768 70 0.772
В файле note.txt находится текстовая информация о ноутбуках. Каждая строка содержит данные об одной модели. Данные в строке размещаются в следующих полях

1:20 - наименование модели;
21:24 - цена в долларах (целое число);
26:28 - масса ноутбука в кг (число с десятичной точкой из четырех символов);
30:43 - габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА) - три числа с десятичной точкой (4 символа, включая точку, разделенные 'x');
44:47 - частота процессора в МГц (целое число из трез символов);
49:50 - максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
52:55 - размер диагонали дисплея в дюймах (число с десятичной точкой из четырех символов, включая точку);
57 - размер видеопамяти в мегабайтах - целое число из одного символа;
59:67 - разрешающая способность дисплея в пикселах (два целых числа, разделенные 'x');
69:70 - частота регенерации дисплея в Гц (целое число из двух символов);
72:76 - объем HDD в гигабайтах (число с десятичнойточкой из пяти символов).
Все неописанные позиции заполнены пробелами.
Жду с нетерпением комментариев и помощи канеш =)
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.05.2009, 18:20     Функции и файлы (Павловская Т.А.) Вариант 18 #3
Структуру помоему нельзя объявлять в другой структуре, так что disp_res надо выносить за пределы NOTEBOOK, а в NOTEBOOK объявить
disp_res resolution;
для чтения - записи лучше использовать операторы write/read вида
fileOut.write((char*) &NOTEBOOK, sizeof(NOTEBOOK));
fileIn.read((char*) &NOTEBOOK, sizeof(NOTEBOOK));
ISergey
Maniac
Эксперт С++
1347 / 880 / 52
Регистрация: 02.01.2009
Сообщений: 2,645
Записей в блоге: 1
10.05.2009, 18:26     Функции и файлы (Павловская Т.А.) Вариант 18 #4
Цитата Сообщение от kazak Посмотреть сообщение
Структуру помоему нельзя объявлять в другой структуре, так что disp_res надо выносить за пределы NOTEBOOK, а в NOTEBOOK объявить
Можно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Employee{
    int data;
    struct Emp{
        int data;
        int x;
    };
    Emp empl;
};
int main()
{
    Employee em;
    em.data = 10;
    em.empl.data  = 15;
    return 0;
}
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
10.05.2009, 21:03  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #5
Цитата Сообщение от kazak Посмотреть сообщение
для чтения - записи лучше использовать операторы write/read вида
fileOut.write((char*) &NOTEBOOK, sizeof(NOTEBOOK));
fileIn.read((char*) &NOTEBOOK, sizeof(NOTEBOOK));
Допустим, тогда дальше перед нами встает следующий пункт задачи..
Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта - челое число записей в файле; далее записи в формате структуры NOTEBOOK.
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
11.05.2009, 12:41     Функции и файлы (Павловская Т.А.) Вариант 18 #6
У меня так получилось
C++
1
2
3
4
5
6
7
8
9
void Record(ofstream &fileOut, notebook &pc)
{
   static short int count = 1;
   fileOut.seekp(0);
   fileOut.write((char*)&count, sizeof(count));
   fileOut.seekp(0, ios::end);
   fileOut.write((char*)&pc, sizeof(pc));
   count++;
}
для работы этой функции подключи <fstream.h>
в main'е объяви
C++
1
2
3
4
5
6
7
ofstream fileOut;
fileOut.open("notebook.bin");
if (!fileOut.is_open)
{
   cout << "File error" << endl;
   exit(1);
}
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
12.05.2009, 05:20  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #7
Вот что получилось

C++
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
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
 
//---------------------------------------------------------------------------
 
    struct NOTEBOOK {
        char model[21];     //наименование
        int price;          //цена
        float weight;       //масса
        struct  nb_size {   //Габаритные размеры ноутбука
                float h;        //высота
                float a;        //длина
                float b;        //ширина
                };
        int mhz;            //частота в МГц
        int ozu;            //ОЗУ
        float d;            //размер диагонали дисплея
        int v;              //размер видеопамяти
        struct  disp_res {  //Разрешающая способность дисплея
                int x;          //по горизонтали
                int y;          //по вертикали
                };
        int f;              //частота регенерации
        double hdd;         //объем HDD    
    }
 
    
    void Record(ofstream &fileOut, notebook &pc)    {
        static short int count = 1;
        fileOut.seekp(0);
        fileOut.write((char*)&count, sizeof(count));
        fileOut.seekp(0, ios::end);
        fileOut.write((char*)&pc, sizeof(pc));
        count++;
    }
    
    
#pragma argsused
int main(int argc, char* argv[])
{
    ifstream fin ("note.txt", ios::in);
    if (!fin) {
        cout << "Error of opening of an entrance file.\n" return 1;
    }
    
    ofstream fileOut;
    fileOut.open("notebook.bin");
    if (!fileOut.is_open)   {
        cout << "File error" << endl;
        exit(1);
    }
    
 
    getch();
    return 0;
}
Прикомпиляции пишет, что какая-то там ошибка в 32ой строке.
[C++ Error] Unit1.cpp(32): E2176 Too many types in declaration
[C++ Error] Unit1.cpp(32): E2303 Type name expected
Прошу, помогите с этой ошибкой и скажите, вообще правильно ли я делаю =/

Заранее спасибо
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.05.2009, 09:21     Функции и файлы (Павловская Т.А.) Вариант 18 #8
С++ различает прописные и строчные буквы, поэтому NOTEBOOK в имени структуры и notebook в прототипе функции две совершенно разные вещи.
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
12.05.2009, 13:00  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #9
И так что делать то? =)
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.05.2009, 13:05     Функции и файлы (Павловская Т.А.) Вариант 18 #10
Как структуре имя дашь, так дальше в программе его и используй - если хочешь struct NOTEBOOK {, тогда дальше пиши void Record(ofstream &fileOut, NOTEBOOK &pc)
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
12.05.2009, 16:50  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #11
Тогда начинает выводить другие ошибки

[C++ Error] Unit1.cpp(32): E2176 Too many types in declaration
[C++ Error] Unit1.cpp(32): E2111 Type 'NOTEBOOK' may not be defined here
[C++ Warning] Unit1.cpp(39): W8070 Function should return a value
[C++ Error] Unit1.cpp(47): E2379 Statement missing ;
[C++ Error] Unit1.cpp(52): E2235 Member function must be called or its address taken
Добавлено через 2 часа 3 минуты 53 секунды
Изменил регистр, и одна проблема заменилась на другие ПОмогите :'(
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.05.2009, 05:59     Функции и файлы (Павловская Т.А.) Вариант 18 #12
Вот мои наброски.
Вложения
Тип файла: txt listing.txt (4.1 Кб, 25 просмотров)
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
13.05.2009, 10:54  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #13
Подскажи, а как можно посмотреть то, что написано какозябрами типа "<< "Aan" << ": " <<" или выложи тут норм текст, плиииз
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.05.2009, 11:10     Функции и файлы (Павловская Т.А.) Вариант 18 #14
Сейчас должно быть нормально.
Вложения
Тип файла: txt listing.txt (4.1 Кб, 55 просмотров)
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
13.05.2009, 11:25  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #15
Люди, а кто как делает, чтобы по-русски сообщения нормально выводились в консоли, а не иероглифами?
Я устал обращаться к переводчику, чтобы все было на английском
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.05.2009, 11:33     Функции и файлы (Павловская Т.А.) Вариант 18 #16
Я в Borland в основном работаю, единственный вариант который у меня в нем прокатывает это в программе пишешь system("chcp 1251");, а при запуске правой кнопкой мыши на заголовке окна(или <Alt>+<пробел>), в контекстном меню - Свойства - Вкладка Шрифт - выбираешь Lucida Console. В VC еще можно так setlocale(LC_ALL, "rus");
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
14.05.2009, 15:44  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #17
Ого, не пойму, это вся лаба полностью чтоли?)))
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.05.2009, 01:22     Функции и файлы (Павловская Т.А.) Вариант 18 #18
Почти, я только сортировку не делал.
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
15.05.2009, 12:01  [ТС]     Функции и файлы (Павловская Т.А.) Вариант 18 #19
При запуске твоей проги пишет...

Текущая кодовая страница: 1251
Файл не возможно открыть
Для продолжения нажмите любую клавишу . . .
оО, здесь норм отобразил кодировку... хм... у меня кароч каряво с иерогилфами все три строки =/
А теперь вижу что и файл не может открыть, в чем причина то? =/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2009, 12:10     Функции и файлы (Павловская Т.А.) Вариант 18
Еще ссылки по теме:

Лабораторная работа по С++ Павловская C++
C++ Правильно ли я написал программу? Из книжки Павловская Щупак
Какой вариант оформления функции лучше? C++
Вычислить и вывести на экран в виде таблицы значения функции F на интервале (Павловская) C++
C++ Выбрать вариант не имеющий ошибки и к каждому написать почему этот вариант правильный/неправильный

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.05.2009, 12:10     Функции и файлы (Павловская Т.А.) Вариант 18 #20
Разбей проверку файлов на две части
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (!fileIn.is_open())
{
   cout << "Input file error" << endl; // чтоб точно прочитать смог:)
   system("pause");
   exit(1);
   }
if (!fileOut.is_open())
{
   cout << "Output file error" << endl;
   system("pause");
   exit(1);
}
, а там смотри какого файла не хватает и проверь есть ли такой в папке с программой, файлы должны называться notebook.txt и book.bin, если ты по своему назвал файлы, не забудь поменять их в программе вот здесь
fileIn.open("notebook.txt");
fileOut.open("book.bin", ios::binary);// добавь этот ios обязательно для fileOut, в программе я его пропустил
Yandex
Объявления
15.05.2009, 12:10     Функции и файлы (Павловская Т.А.) Вариант 18
Ответ Создать тему
Опции темы

Текущее время: 09:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru