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

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

Войти
Регистрация
Восстановить пароль
 
Bober_Cant_Fly
0 / 0 / 0
Регистрация: 16.04.2009
Сообщений: 8
#1

Задача с файлом и функцией - C++

16.04.2009, 17:30. Просмотров 859. Ответов 2
Метки нет (Все метки)

Мне была задана такая задача:
Для хранения данных о ноутбуках описать структуру вида (при необходимости дополнив ее):
C++
1
2
3
4
5
6
7
8
9
10
struct NOTEBOOK { 
char model[21]; // наименование  
struct size { // габаритные размеры  
float x; 
float y; 
float z;  
};  
float w; // вес  
int price; // цена  
}
Написать функцию, которая читает данные о ноутбуках из файла note.txt в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла:
  • первые два байта (целое) — число записей в файле;
  • далее записи в формате структуры NOTEBOOK.
Написать программу, в которой на основе разработанных функций осуществляется чтение данных только для тех ноутбуков, частота процессора которых больше 120 МГц, и запись в бинарный файл по убыванию цены.

Пример файла note.txt :
Acer Note Light 2699 5.6 02.0x11.8x08.3 100 40 10.4 1 1024x0768 60 0.774
AS W 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 Ascent1a 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 PIOOSD 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 N B 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
NE C 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

В файле note.txt находится текстовая информация о ноутбуках. Каждая строка
содержит данные об одной модели. Данные в строке размещаются в следующих
полях:
1 : 20 — наименование модели;
21 : 24 — цена в долларах (целое число);
26 : 28 — масса ноутбука в кг (число с десятичной точкой из четырех символов);
30 : 43 — габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИ-
НА — tpn числа с десятичной точкой (4 символа, включая точку, разделенные 'х');
44 : 47 — частота процессора в МГц (целое число из трех символов);
49: 50 — максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
52 : 55 — размер диагонали дисплея в дюймах (число с десятичной точкой из че*
тырех символов, включая точку);
57 — размер видеопамяти в мегабайтах — целое число из одного символа;
59 : 67 — разрешающая способность дисплея в пикселах (два целых числа, разде*
ленные 'х');
69 : 70 — частота регенерации дисплея в Гц (целое число из двух символов);
72 : 76 — объем HDD в гигабайтах (число с десятичной точкой из пяти симво*
лов).
Все неописанные позиции заполнены пробелами.

У меня проблема даже самое начало сделать... обычное чтение note.txt весь день пытался сделать, но ничего хорошего не получилось. Помогите пожалуйста. Работаю в DEV-C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2009, 17:30     Задача с файлом и функцией
Посмотрите здесь:

Трабла с функцией ( C++
C++ Работа с функцией
C++ задача с функцией
C++ Помогите с функцией
Помогите с функцией. C++
C++ Pascal to C++, задача с функцией
задача с бинарным файлом C++
Задача на работу с файлом C++
C++ Функции , Варианты написания программы , Задача с функцией C++
C++ Ошибка с функцией
Задача с файлом C++
Работа с функцией C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bober_Cant_Fly
0 / 0 / 0
Регистрация: 16.04.2009
Сообщений: 8
31.05.2009, 16:52  [ТС]     Задача с файлом и функцией #2
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
    struct NOTEBOOK{
        char model[21];  // наименование
        int cost;        // цена в долларах (целое число);
        float bulk;      // масса ноутбука в кг (число с десятичной точкой из четырех символов);
        struct SIZE{     // габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА — tpn числа с десятичной точкой (4 символа, включая точку, разделенные 'х');
            float x;     // высота
            float y;     // длина
            float z;     // ширина
            };SIZE sz;
        int freq;        // частота процессора в МГц (целое число из трех символов);
        int ozu;         // максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
        float diagonal;  // размер диагонали дисплея в дюймах (число с десятичной точкой из четырех символов, включая точку);
        int video;       // размер видеопамяти в мегабайтах — целое число из одного символа;
                         // разрешающая способность дисплея в пикселах (два целых числа, разделенные 'х');
        int hg;          // высота
        int wd;          // ширина
        int hz;          // частота регенерации дисплея в Гц (целое число из двух символов);
        float hdd;       // объем HDD в гигабайтах (число с десятичной точкой из пяти символов).
    };
    NOTEBOOK a[16];
    NOTEBOOK b[16];
    int i=0;
    int j;
    void read(){
    char s[77];
    FILE *note;
    note = fopen("note.txt","r");
    while (!feof(note)){
        fgets(s,77,note);
        strncpy(a[i].model,s, 18);
        a[i].cost = atoi(&s[19]);
        a[i].bulk = atof(&s[24]);
        a[i].sz.x = atof(&s[28]);
        a[i].sz.y = atof(&s[33]);
        a[i].sz.z = atof(&s[38]);
        a[i].freq = atoi(&s[43]);
        a[i].ozu = atoi(&s[47]);
        a[i].diagonal = atof(&s[50]);
        a[i].video = atoi(&s[55]);
        a[i].hg = atoi(&s[57]);
        a[i].wd = atoi(&s[62]);
        a[i].hz = atoi(&s[67]);
        a[i].hdd = atof(&s[70]);
        i++;
        }
    fclose(note);
    i=0;
    printf ("\n");
    printf ("n Model\t\t\tHgz\tCost\n");
    for (j=0;j<16;j++){
            if (a[j].freq>120){
            b[i]=a[j];
            i++;
            }
        }
    int t=0;
    int iz=0;
    while (t==0){
          for (j=0;j<i-1;j++){
              if(b[j].cost < b[j+1].cost){
                  iz=1;
                  a[1]=b[j];
                  b[j]=b[j+1];
                  b[j+1]=a[1];
                  }
                }
          if (iz==0){t=1;}else{iz=0;}}
    for (j=0;j<i;j++){
        printf ("%d %s\t%d\t%d\n",j+1,b[j].model,b[j].freq,b[j].cost);
        }
    printf ("\nNumber of records=%d\n",i);
    printf ("\nnote.txt write in struct...OK\n");
 
    }
    void save(){
        FILE *fout;
        fout=fopen("note.bin","w+b");
        fwrite (&i, 2, 1, fout);
        fwrite (b, sizeof &b, 152, fout);
        fclose(fout);
        printf ("note.bin write...OK\n");
        }
    int main(){
    FILE *note;
    if((note = fopen("note.txt", "r")) == 0){
    printf("error with opening the input file\n"); system("pause");return 1;}
    fclose(note);
    FILE *fout;
    if ((fout = fopen("note.bin", "wb")) == NULL) {
    puts("Error of opening of a target file\n"); system("pause"); return 1; }
    fclose(fout);
    note = fopen("note.txt", "r");  // открытие файла
    fseek(note, 0, 2);              // выставление указателя в конец файла
    long end = ftell(note);         // вычисление длины файла. функция возвращает текущее положение
    char *text;
    text = (char *) malloc(end);    // возвращает указатель на end байт неинициализированной памяти
    fseek(note, 0L, 0);             // выставление указателя в начало файла
    fread(text, end, 1, note);      // читаем файл в переменную text
    printf("%s\n", text);           // печатаем...
    fseek(note, 0L, 0);             // выставление указателя в начало файла
    fclose(note);
    read();
    save();
    system ("pause");
    return 0;
}
Bober_Cant_Fly
0 / 0 / 0
Регистрация: 16.04.2009
Сообщений: 8
11.06.2009, 10:53  [ТС]     Задача с файлом и функцией #3
Та с ошибками... вот эту приняли

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct NOTEBOOK{
        char model[21];  // наименование
        int cost;        // цена в долларах (целое число);
        float bulk;      // масса ноутбука в кг (число с десятичной точкой из четырех символов);
        struct SIZE{     // габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА — tpn числа с десятичной точкой (4 символа, включая точку, разделенные 'х');
            float x;     // высота
            float y;     // длина
            float z;     // ширина
            };SIZE sz;
        int freq;        // частота процессора в МГц (целое число из трех символов);
        int ozu;         // максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
        float diagonal;  // размер диагонали дисплея в дюймах (число с десятичной точкой из четырех символов, включая точку);
        int video;       // размер видеопамяти в мегабайтах — целое число из одного символа;
                         // разрешающая способность дисплея в пикселах (два целых числа, разделенные 'х');
        int hg;          // высота
        int wd;          // ширина
        int hz;          // частота регенерации дисплея в Гц (целое число из двух символов);
        float hdd;       // объем HDD в гигабайтах (число с десятичной точкой из пяти символов).
};
NOTEBOOK a[16];
NOTEBOOK b[1];
int i=0, k=0;
 
void read(){
    char s[100];
    FILE *note, *fout;
    note = fopen("note.txt","r");
    fout = fopen("note.bin","wb");
    printf ("n Model\t\t\tHgz\tCost\n");
    while (!feof(note)){
        fgets(s,100,note);
        if (atoi(&s[43])>120){k++;}
        }
    fwrite (&k, 2, 1, fout);
    fseek(note, 0L, SEEK_SET);             // выставление указателя в начало файла
 
    while (!feof(note)){
        fgets(s,100,note);
        if (atoi(&s[43])>120){
        strncpy(a[i].model,s, 18);
        a[i].cost = atoi(&s[19]);
        a[i].bulk = atof(&s[24]);
        a[i].sz.x = atof(&s[28]);
        a[i].sz.y = atof(&s[33]);
        a[i].sz.z = atof(&s[38]);
        a[i].freq = atoi(&s[43]);
        a[i].ozu = atoi(&s[47]);
        a[i].diagonal = atof(&s[50]);
        a[i].video = atoi(&s[55]);
        a[i].hg = atoi(&s[57]);
        a[i].wd = atoi(&s[62]);
        a[i].hz = atoi(&s[67]);
        a[i].hdd = atof(&s[70]);
        i++;
        }}
 
    int t=0;
    int iz=0;
    while (t==0){
          for (i=0;i<k-1;i++){
              if(a[i].cost < a[i+1].cost){
                  iz=1;
                  b[0]=a[i];
                  a[i]=a[i+1];
                  a[i+1]=b[0];
                  }
                }
          if (iz==0){t=1;}else{iz=0;}}
 
    for (i=0;i<k;i++){
        printf ("%d %s\t%d\t%d\n",i+1,a[i].model,a[i].freq,a[i].cost);
        }
    fwrite (&a, sizeof (NOTEBOOK), k, fout);
    fclose(note);
    fclose(fout);
    printf ("\nNumber of records=%d",k);
    printf ("\nnote.txt write in struct...OK\n");
    printf ("note.bin write...OK\n");
}
 
 
int main(){
    FILE *note;
    if((note = fopen("note.txt", "r")) == 0){
    printf("error with opening the input file\n"); system("pause");return 1;}
    fclose(note);
    read();
system ("pause");
return 0;
}
Yandex
Объявления
11.06.2009, 10:53     Задача с файлом и функцией
Ответ Создать тему
Опции темы

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