![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
по идее программа должна иметь две ф-ии: чтение из файла данных для структуры и запись в файл структуры в конец файла.и выполнять следующе:запись в файл информации только о тех ноутбуках ,тактовая частота которых больше 120 МГц,+их нужно отсортировать в порядке возрастания цены.
то,что у меня получилось к сожалению не работает... может посмотрите и исправите какие-то ошибки? заранее благодарна.. #include <iostream.h> -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата может посмотрите и исправите какие-то ошибки? Тебе здесь (это С++ программа) лучше всего сделать сортировку не через memmove, а через "operator =", что будет проще и красивей... Тоже самое касается и ввода/вывода: делаешь переопределение "operator <<" и "operator >>" и все прекрасно работает...Если тебя такое решение устроит, скажи, я помогу (чтоб просто так не делать, вдруг тебе нужно именно так, как ты начала ![]() А ошибки начинаются с того, что ты из void-функции пытаешься вернуть значение, как это? ![]() |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
честно говоря не знаю что за "operator=".но немного объяснений и я пойму=)
...а с void так вышло,потому что я пыталась ф-ию заставить работать...почему-то не получалось...в общем в итоге я запталась...а теперь вообще не знаю,как ее определить... -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата честно говоря не знаю что за "operator=" Смотри... Ты переопределяешь для класса оператор присваивания, то есть, задаешь действия, которые программа должна выполнить, если ты делаешь, например:T a, b; Как это сделать... Все очень просто: #include <stdlib.h> Если что непонятно в логике работы - спрашивай... Вместо вывода на консоль через cout можно открыть ofstream f_out("res.txt") и точно так же направить вывод туда: f_out << notebook[i]; Чтение происходило вот из этого файла: ![]() (он содержит для каждого ноута следующие данные: модель, цена, масса, габариты(длина/ширина/высота), тактовая частота CPU, размер памяти, диагональ дисплея, размер видеопамяти, разрешение монитора(X/Y), рабочая частота монитора, размер хард-диска. если у тебя формат файла данных другой, то придется подправить operator >>) |
Tribunal |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
в принципе...я могу с этим разобраться...видимо это действительно гораздо проще...
но дело в том,что по заданию классы использовать нельзя... может всё-же попробовать исправить то,что у меня получилось? или там совсем всё плохо? -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ну, нельзя классы, так поменяй class на struct - будешь работать со структурами... В C++ это равнозначно...
![]() |
Tribunal |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
ок...
нет,ну всё равно ... что не так с моей программой если конкретно? -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Если конкретно - то я тебе уже сказал:
1. Ты не имеешь права в void-функции возвращать параметры. 2. Для вывода информации должен использоваться ofstream, а не ifstream, как у тебя... 3. В функции f_write ты почему-то ЧИТАЕШЬ из файла, который хочешь открыть на запись... Пока исправляй это, потом посмотрим... |
Tribunal |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
теперь программа даже запускается)
так вот...а файл почему-то становится пустым.почему так происходит? #include <iostream.h> -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата а файл почему-то становится пустым.почему так происходит? Ну, запускается -то оно запускается, только вот ЧТО оно делает?По пунктам: 1) ты описала свою копию массива notebook И в f_read И в f_write И в main... И работаешь в каждой функции со своей копией массива. А они что, как-то взаимосвязаны? Увы, они существуют только до тех пор, пока выполняется процедура... Тебе нужен здесь глобальный массив... 2) то же самое касается и переменной n 3) аналогично - с файлом. Ты открываешь в каждой функции свою копию? Напрасно, открывай для ввода одну, в f_read, больше она тебе нигде не нужна, а для вывода - открывай в main и передавай как параметр... 4) То, что ты вызываешь f_read/f_write без (), на компилятор как-то не производит впечатления, синтаксис требует со скобками ![]() 5) я бы все-таки для вывода создавал файл с другим именем... Вот, смотри этот вариант: #include <iostream.h> |
Tribunal |
![]()
Сообщение
#11
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
в общем я решила всё же сделать вот так...
а как быть ,если нужно работать с бинарными файлами? #include <iostream.h> -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата а как быть ,если нужно работать с бинарными файлами? "Меня терзают смутные сомнения..." (С) Я делал точно такую же задачу про ноутбуки в прошлом году... Вот это выдрано оттуда (запись в бинарный файл/чтение из него): istream& read(istream &in, TNotebook ¬e) |
Tribunal |
![]()
Сообщение
#13
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
воспользовалась вашими функциями.вроде довольно успешно.
но программа записывает в файл то,что вводится с клавиатуры,а потом ничего больше не происходит. почему такое происходит? ![]() #include <iostream.h> Сообщение отредактировано: volvo - 7.04.2010 10:28 -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#14
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
помогите..
![]() не могу найти ошибку...=( -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#15
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
я вот попробовала написать ф-ии вот так,но заступорилась на функции для считывания.
да и то,что написано выше...там я пытаюсь первые 2 байта файла читать как размерность массива структуры. +мне же нужно ДОписывать в файл полученные данные после выполнения программы... я совсем запуталась(( очень прошу о помощи. int append_data(const Notebook ¬e,const char* filename) -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата программа записывает в файл то,что вводится с клавиатуры,а потом ничего больше не происходит. почему такое происходит? Потому, что перед чтением из файла:while (read(bin,notebook[i])) ... нужно опять перебросить stream position на начало, как ты уже делала раньше: bin.seekg(2, ios::beg); Если этого не сделать, то из потока ничего читаться не будет, т.к. после записи в него указатель находится в самом конце потока... Это первое... Второе - расскажи мне, зачем тебе внешний цикл for? У тебя же есть цикл while, который будет читать данные до тех пор, пока файл не закончится, а в твоем случае чтение будет происходить на итерации i=0 и ВСЕ данные будут записаны в нулевую ячейку массива, остальные заполнены не будут (я о программе из поста №13)... |
Tribunal |
![]()
Сообщение
#17
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
спасибо,конечно,
но мне это к сожалению не помогло... всё равно получается так,что идет запрос на заполнение файла,я ввожу данные,после чего больше ничего не происходит.=( -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#18
|
Гость ![]() |
Присоедини сюда окончательный вариант программы, с которым работаешь (лучше - в аттач), и полностью напиши те данные, которые вводишь, в какой последовательности ты это делаешь, и ЧТО ИМЕННО ты хочешь, чтобы при этом происходило...
Сообщение отредактировано: Алена - 12.11.2006 10:50 |
Tribunal |
![]()
Сообщение
#19
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
я ввожу кол-во записей,затем по порядку все поля записи.
затем всё это по идее должно писаться в бинарный файл. далее я сортирую массив записей по возрастанию цен,так как затем мне нужно результат вывести именно таким образом. затем я ввожу условие частота>120.если оно выполняется,запись пишется в конец бинарного файла. после всего этого хотелось бы,чтобы результат был выведен на экран. хммм...а ведь у меня в программе получается должен выводиться весь файл. ух...кажется,я совсем запуталась=( Прикрепленные файлы ![]() -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата я ввожу кол-во записей,затем по порядку все поля записи. Если бы ты не стала переделывать то, что было приведено в посте №12 (я о функции
затем всё это по идее должно писаться в бинарный файл. iostream& write(iostream &io, const TNotebook ¬e)), оно даже и записывалось бы в файл... А так - у тебя ничего не пишется, файл note.bin остается пустым... Второе: ДАЖЕ если ты запишешь в файл всю информацию, введенную в начале, что должно происходить потом? Сортировка, хорошо... Дальше? Запись данных, удовлетворяющих определенному критерию, в тот же файл? А что с ПРЕЖНИМИ данными? Новые же будут добавляться, так реализована функция write... Выходов 2... Или после сортировки стереть все, что было из файла note.bin, и потом записывать только то, что удовлетворяет критерию, или работать с 2-мя файлами: в одном - полная информация, во втором отфильтрованная... Учти также, что при последовательных запусках программы содержимое твоего файла будет накапливаться (из него ничего нигде не удаляется), так что нужно либо при старте программы спрашивать, что делать (удалять старую информацию/не удалять), либо делать что-то другое, но не оставлять это просто так... Сообщение отредактировано: Алена - 12.11.2006 12:07 |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 2:18 |