IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> структуры и функции, C++
сообщение
Сообщение #21


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


получается нужна полная функция...хорошо,так и сделаем...

дело в том,что в задании у меня сказано,что нужно дописать результаты в конец файла.
только вот действительно нет смысла в этом.ведь потом когда я допустим буду выводить содержимое файла на экран,будет выводится всё скопом,что не есть хорошо.
мне кажется ,что всё же стоит очищать файл и писать туда эл-ты структуры,соответствующие критерию.
правда,я не знаю как это делается unsure.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






Цитата
стоит очищать файл и писать туда эл-ты структуры,соответствующие критерию.
правда,я не знаю как это делается
Вот так:
    bin.close();
bin.open("note.bin", ios::in|ios::out|ios::binary|ios::trunc);
перед сортировкой... Но тогда у тебя совершенно пропадает смысл вообще записывать ВСЕ данные в файл. Они, конечно, будут записаны, только тут же удалятся, и перепишутся отфильтрованными данными. Лучше просто читай изначально в массив (без
write(bin,notebook[i]);
), а уже то, что подходит под критерий записывай в файл...

Сообщение отредактировано: Алена -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


решила я всё-таки не стирать ничего из файла.
а при выводе когда i=кол-ву изначальных записей,выводить слово result,
а потом отсортированную инф-ию.
НО на экран у меня выводится полный бред=(куча ноликов...а того,что нужно нет.
что же делать?
#include <iostream.h>
#include <fstream.h>

typedef struct tagT
{
int disp_res_x;
int disp_res_y;

int f;
float d;
float hdd;
char mode [20];
float price;
}T;

T notebook[20];

istream& read(istream &in, T &notebook)
{
return in.read((char*)&notebook, sizeof(notebook));
}

template <class T> iostream& write(iostream &io, T)
{
union
{
unsigned value;
char buf[2];
} size = {0};

io.seekg(0, ios::beg);
io.read(size.buf, sizeof(size.buf));
io.clear();

++size.value;
io.seekp(0, ios::beg);
io.write(size.buf, sizeof(size.buf));

io.seekp(0, ios::end);
io.write((const char*)&notebook, sizeof(notebook));
return io;
}

int n;


int main()
{
fstream bin("note.bin", ios::in|ios::out|ios::binary);
bin.close();
bin.open("note.bin", ios::in|ios::out|ios::binary|ios::trunc);


cout << "Number of notes:";cin >> n;
write(bin,n);
for(int i = 0; i < n; i++)
{
cout << "Note#" << i+1;
cout << "name:";cin >> notebook[i].mode;
cout << "chastota:";cin >> notebook[i].f;
cout << "diagonal:";cin >> notebook[i].d;
cout << "hdd:";cin >> notebook[i].hdd;
cout << "displey resolution:";cin >> notebook[i].disp_res_x;
cout << "x";cin >> notebook[i].disp_res_y;
cout << "price:";cin >> notebook[i].price;
write(bin,notebook[i]);
}



T buf;
for (int i=0;i<n;i++)
for (int j=n-1;j>=i+1;j--)
{
if (notebook[j-1].price > notebook[j].price)
{
memmove (&buf, &notebook[j-1], sizeof(T));
memmove (&notebook[j-1],&notebook[j], sizeof(T));
memmove (&notebook[j], &buf, sizeof(T));
};
};

bin.seekg(2, ios::beg);
for (int i=0;i<n;i++)
{
if (notebook[i].f>120) write(bin,notebook[i]);
}

bin.seekg(2, ios::beg);
int i;
i=0;
while (read(bin,notebook[i]))
{
cout << notebook[i].mode <<"--"<< notebook[i].f <<"--"<< notebook[i].d <<
"--"<< notebook[i].hdd <<"--"<< notebook[i].disp_res_x<<"--"<<
notebook[i].disp_res_y <<"--"<< notebook[i].price<<"--"<< endl;

i++;
if (i==n) cout << "result:" <<endl;
};

}


Сообщение отредактировано: volvo -


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






Да что же тебя так тянет КАЖДЫЙ РАЗ менять что-то кардинально в программе??? Формат вывода зачем изменила? Чего теперь удивляешься, что одни циферки? Ты ж их и выводишь!!! Вот раньше был нормальный вывод...

Зачем тебе понадобилось добавить template <class T> перед описанием функции write? Чтоб программа перестала соответствовать Стандарту? Убери это... Вот так должен выглядеть заголовок write:
iostream& write(iostream &io, const T &notebook)
{
...
}
Чтобы теперь программа компилировалась, нужно убрать строку

    cout << "Number of notes:";cin >> n;
// write(bin,n); // <--- Вот эту
(запись размера происходит автоматически при вызове write)

А чтобы программа стала работать правильно -

    streampos mark = bin.tellg(); // Запоминаем позицию, в которой находились ДО фильтрации
bin.seekg(2, ios::beg);
for (int i=0;i<n;i++) // Фильтруем файл
{
if (notebook[i].f>120) write(bin,notebook[i]);
}

// И восстанавливаем ту позицию, которую сохранили... Теперь
// будут читаться только данные, удовлетворяющие твоему условию...
bin.seekg(mark, ios::beg);

i=0;
while (read(bin,notebook[i]))
{
cout << "Note#" << i+1;
cout << "name:" << notebook[i].mode << endl;
cout << "chastota:" << notebook[i].f << endl;
cout << "diagonal:" << notebook[i].d << endl;
cout << "hdd:" << notebook[i].hdd << endl;
cout << "displey resolution:" << notebook[i].disp_res_x;
cout << "x" << notebook[i].disp_res_y << endl;
cout << "price:" << notebook[i].price << endl;
i++;
};
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


огромное спасибо за уделённое время и помощь! give_rose.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.10.2022 21:22
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name