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

> Внимание!

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

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

> структуры и функции, C++
сообщение
Сообщение #1


Бывалый
***

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

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


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

то,что у меня получилось к сожалению не работает...
может посмотрите и исправите какие-то ошибки?
заранее благодарна..
#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;

void f_read(T notebook[20])
{
ifstream fin ("file.txt");
if (!fin)
{
cout << "File file.txt don't found." << endl;
return 1;
};
int n;
fin >> n;
for (int i=0;i<n;i++)
{
fin >> notebook[i].mode >> notebook[i].hdd >> notebook[i].f >> notebook[i].d >>
notebook[i].disp_res_x >> notebook[i].disp_res_y >> notebook[i].price;
};
return;
};

void f_write(T notebook[20],int i)
{
ifstream fout ("file.txt");
if (!fout)
{
cout << "File can't open for writing." << endl;
return 1;
};
int n;
fin >> n;
fout << notebook[i].mode << notebook[i].hdd << notebook[i].f << notebook[i].d <<
notebook[i].disp_res_x << notebook[i].disp_res_y << notebook[i].price << endl;
return;
};
int main()
{
T notebook[20];

f_read(notebook[20]);
int n;
fin >> n;

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));
};
};

for (int i=0;i<n;i++)
{
if (notebook[i].f>120) f_write(notebook[20],i);
};
}



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


Гость






Цитата
а файл почему-то становится пустым.почему так происходит?
Ну, запускается -то оно запускается, только вот ЧТО оно делает?

По пунктам:
1) ты описала свою копию массива notebook И в f_read И в f_write И в main... И работаешь в каждой функции со своей копией массива. А они что, как-то взаимосвязаны? Увы, они существуют только до тех пор, пока выполняется процедура... Тебе нужен здесь глобальный массив...
2) то же самое касается и переменной n
3) аналогично - с файлом. Ты открываешь в каждой функции свою копию? Напрасно, открывай для ввода одну, в f_read, больше она тебе нигде не нужна, а для вывода - открывай в main и передавай как параметр...
4) То, что ты вызываешь f_read/f_write без (), на компилятор как-то не производит впечатления, синтаксис требует со скобками smile.gif
5) я бы все-таки для вывода создавал файл с другим именем...

Вот, смотри этот вариант:

#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;

int n;
T notebook[20];

void f_read()
{
ifstream fin ("N.txt");
if (!fin) cout << "File file.txt don't found." << endl;

fin >> n;
for (int i=0;i<n;i++)
{
fin >> notebook[i].mode >> notebook[i].hdd >> notebook[i].f >> notebook[i].d >>
notebook[i].disp_res_x >> notebook[i].disp_res_y >> notebook[i].price;
};
};

void f_write(ostream &fout, int i)
{
fout << notebook[i].mode << " "<< notebook[i].hdd << " "<< notebook[i].f << " "
<< notebook[i].d << " "<< notebook[i].disp_res_x << " "<< notebook[i].disp_res_y << " "
<< notebook[i].price << endl;
};

int main()
{
ofstream fout ("NOut.txt");
if (!fout) cout << "File can't open for writing." << endl;

f_read();

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));
};
};

for (i=0;i<n;i++)
{
if (notebook[i].f>120) f_write(fout, i);
};
return 0;
}
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Tribunal   структуры и функции   23.10.2006 13:10
volvo   Тебе здесь (это С++ программа) лучше всего сделать…   23.10.2006 17:52
Tribunal   честно говоря не знаю что за "operator=…   23.10.2006 17:59
volvo   Смотри... Ты переопределяешь для класса оператор п…   23.10.2006 19:39
Tribunal   в принципе...я могу с этим разобраться...видимо эт…   23.10.2006 19:46
volvo   Ну, нельзя классы, так поменяй class на struct - б…   23.10.2006 19:54
Tribunal   ок... нет,ну всё равно ... что не так с моей прогр…   23.10.2006 19:59
volvo   Если конкретно - то я тебе уже сказал: 1. Ты не …   23.10.2006 20:11
Tribunal   теперь программа даже запускается) так вот...а фай…   23.10.2006 20:50
volvo   Ну, запускается -то оно запускается, только вот ЧТ…   24.10.2006 0:37
Tribunal   в общем я решила всё же сделать вот так... а как …   30.10.2006 14:06
volvo   "Меня терзают смутные сомнения..." (С) Я…   30.10.2006 20:05
Tribunal   воспользовалась вашими функциями.вроде довольно ус…   4.11.2006 14:44
Tribunal   помогите.. :unsure: не могу найти ошибку...=(   7.11.2006 21:34
Tribunal   я вот попробовала написать ф-ии вот так,но заступо…   10.11.2006 22:02
Алена   Потому, что перед чтением из файла: while (re…   12.11.2006 2:06
Tribunal   спасибо,конечно, но мне это к сожалению не помогло…   12.11.2006 14:35
Алена   Присоедини сюда окончательный вариант программы, с…   12.11.2006 14:50
Tribunal   я ввожу кол-во записей,затем по порядку все поля з…   12.11.2006 15:00
Алена   Если бы ты не стала переделывать то, что было прив…   12.11.2006 16:06
Tribunal   получается нужна полная функция...хорошо,так и сде…   12.11.2006 16:16
Алена   Вот так: bin.close(); bin.open("note.…   12.11.2006 16:40
Tribunal   решила я всё-таки не стирать ничего из файла. а пр…   12.11.2006 17:09
Алена   Да что же тебя так тянет КАЖДЫЙ РАЗ менять что-то …   12.11.2006 17:38
Tribunal   огромное спасибо за уделённое время и помощь! …   12.11.2006 17:50


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

 





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