Форум программистов, компьютерный форум, киберфорум
Наши страницы

Файлы. Потоки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функции в С++ http://www.cyberforum.ru/cpp-beginners/thread571552.html
1. Написать программу, содержащую функцию вычисления площади прямоугольника. Параметрами функции являются длины сторон прямоугольника. 2. Написать программу вычисления, вписанной и описанной в...
C++ Программа с использованием перезагрузки ф-ций для определения абсолютного значения числа У меня завтра экзамен. Я решила все задачи кроме одной. Помогите пожалуйста или подскажите как сделать! Вот и задача! Программа с использованием перезагрузки ф-ций для определения абсолютного... http://www.cyberforum.ru/cpp-beginners/thread571541.html
C++ Удаление символов
Скажите, как удалить все символы в строке после 3-его
Вставить 0 перед n-м элементом последовательности C++
В заданной последовательности целых чисел вставить нолик перед каждым n-м по счету элементом, используя тип данных vector.
C++ Описать тип struct Cirlce, задающий замкнутый круг на плоскости с центром в точке (x, y) и радиусом R http://www.cyberforum.ru/cpp-beginners/thread571513.html
'Люди добрые,помогите чайнику,пожалуйста Описать тип struct Cirlce, задающий замкнутый круг на плоскости с центром в точке (x, y) и радиусом R. Реализовать в виде отдельных функций следующие...
C++ Найти точку D, симметричную точку A относительно стороны BC. помогите решить пожалуйста... подробнее

Показать сообщение отдельно
elvipka
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 54

Файлы. Потоки - C++

11.05.2012, 18:41. Просмотров 1315. Ответов 1
Метки (Все метки)

Помогите пожалуйста, нужно нормально доработать программу.. у меня не получается... нужно чтобы программа считывала с блокнота данные и записывал их правильно (считывает строку, переводит временно в числа и потом снова текстовую строку записывает, и в бинарном файле не то)
Основной вариант13й, 10 и 20 для ориентира.
Вариант 13
Для хранения данных о ноутбуках описать структуру вида, описанного в варианте 10.
Написать функцию, которая читает данные о ноутбуках из файла note.txt (см. вар. 20) в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта (целое) — число записей в файле; далее записи в формате структуры NOTEBOOK.
Написать программу, в которой на основе разработанных функций осуществляется запись в двоичный файл данных только о тех ноутбуках, максимальный объем ОЗУ которых не менее 40 Мбайт, отсортированных по объему.
Вариант 10
Для хранения данных о ноутбуках описать структуру вида (при необходимости дополнив ее):
struct NOTEBOOK{
char model[21]: // наименование
struct size
{ // габаритные размеры
float x;
float y;
float z;
};
float w; // вес
int price; // цена
}
Написать функцию, которая читает данные о ноутбуках из файла note.txt (см. вар. 20) в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта (целое) — число записей в файле; далее записи в формате структуры NOTEBOOK.
Написать программу, в которой на основе разработанных функций осуществля¬ется чтение данных только для тех ноутбуков, частота процессора которых больше 120 МГц, и запись в бинарный файл по убыванию цены.

Вариант 20
Для хранения данных о ноутбуках описать структуру вида, описанного в варианте 19.
Написать функцию, которая читает данные о ноутбуках из файла note.txt в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта — целое число записей в файле; далее записи в формате структуры NOTEBOOK. Написать программу, в которой па основе разработанных функций осуществляется запись в двоичный файл данных только о тех ноутбуках, цена которых больше $3500, отсортированные в порядке возрастания тактовой частоты процессора.
Пример файла note.txt:
Acer Note Light 2699 5.6 02.0x11.6x08.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
В файле note.txt находится текстовая информация о ноутбуках. Каждая строка содержит данные об одной модели. Данные в строке размещаются в следующих полях:
1 : 20 — наименование модели;
21 : 24 — цена в долларах (целое число);
26:28 — масса ноутбука в кг (число с десятичной точкой из четырех символов);
30 : 43 — габаритные размеры ноутбука в дюймах (ВЫСОТАхДЛИНАхШИРИНА — три числа с десятичной точкой (4 символа, включая точку, разделенные 'х');
44 : 47 — частота процессора в МГц (целое число из трех символов);
49 : 50 — максимальный объем ОЗУ в мегабайтах (целое число из двух символов);
52 : 55 — размер диагонали дисплея в дюймах (число с десятичной точкой из че¬тырех символов, включая точку);
57 — размер видеопамяти в мегабайтах — целое число из одного символа;
59 : 67 — разрешающая способность дисплея в пикселях (два целых числа, разделенные 'х');
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
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
111
112
113
#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, k=0;
 
void read()
    {
    char s[77];
    FILE *note, *fout;
    note = fopen("note.txt","r");
    fout = fopen("note.bin","wb");
    printf ("\nModel\t\t\tOzu\tOzuSort\n");
    while (!feof(note))
        {
        fgets(s,77,note);
        if (atoi(&s[49])>40)
            {
            k++;
            }
        }
    fwrite (&k, 2, 1, fout);
    fseek(note, 0L, SEEK_SET);             // выставление указателя в начало файла
 
    while (!feof(note))
    {
        fgets(s,77,note);
        if (atoi(&s[49])>40)
        {
        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].ozu < a[i+1].ozu)
                  {
                  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);
        }
    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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.