Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлам 
:(
    Опции темы
Stoun
Дата 22.7.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Доброе время суток. Я недавно начал изучать с++. Помогите, пожалуйста, разобраться с таким заданием, желательно с примерами исходного кода: 
Нужно написать прогу, в которой для двоичного файла, содержащего данные типа int, создать его копию, в которой заменить элементы с четным значением на 0, а нечетным значением на -1. Количество элементов в исходном файле не ограниченно. 
PM MAIL   Вверх
Earnest
Дата 22.7.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 2
Всего: 183



Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена!  


--------------------
...
PM   Вверх
Oleg_Ci
Дата 22.7.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Код

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

void SaveBinary(ofstream&);

void main()
{
  ifstream fin;
  ofstream fout;

// создаём файл file1.dat
  fout.open("file1.dat",ios_base::out|ios_base::binary);
  SaveBinary(fout);
  //fout.clear();    
  fout.close();

//открываем 2 файла
  fin.open("file1.dat",ios_base::in|ios_base::binary);
  fout.open("file2.dat",ios_base::out|ios_base::binary);
  if (!fin.is_open()||!fout.is_open()) return;

// здесь собственно сама программа чтения-сравнения-записи:
  int x;
  int len = sizeof x;
  while(fin.read((char*)&x, len))
  {
    cout<<x<<"  ";
    if(x&1) x = -1; //  if(x%2) x = 0; else x = -1;
    else x = 0;
    fout.write((char*)&x, len);
    cout<<x<<endl;
  }

  fout.close();
  fin.close();
  system("PAUSE");
}
//____________SaveBinary___________________________
void SaveBinary(ofstream& fin)
{ // записываем в файл 20 чисел
  for( int i=0; i<20; i++ )
    fin.write((char*)&i, sizeof i);
}
 
PM MAIL   Вверх
Rockie
Дата 22.7.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата
 для двоичного файла, содержащего данные типа int, создать его копию, в которой заменить элементы с четным значением на 0, а нечетным значением на -1. Количество элементов в исходном файле не ограниченно. 

Код
#include<fstream>
#include<conio>

using namespace std;

int main()
{ int temp = 0;
  ifstream read_file("1.txt");     // input file
  ofstream write_file("2.txt");    // output file

  while(read_file>>temp)
   { if(temp%2==0) write_file<<0<<' ';
     else write_file<<-1<<' ';
   }

  read_file.close();
  read_file.close();

  getch();
  return 0;
}


Добавлено @ 11:16 
то есть 
Код
write_file.close();
 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Oleg_Ci
Дата 22.7.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Rockie, а файл-то двоичный должен-быть, а у тебя текстовый. smile  

Это сообщение отредактировал(а) Олег4 - 22.7.2006, 12:52
PM MAIL   Вверх
Rockie
Дата 22.7.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(Олег4 @  22.7.2006,  12:51 Найти цитируемый пост)
Rockie, а файл-то двоичный должен-быть, а у тебя текстовый.   

как выглядит твой исходный файл? 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Rockie
Дата 23.7.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



да, действительно, проморгал 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Stoun
Дата 23.7.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



To Олег4. На экран производимые операции выводятся, но я никак не мог просмотреть двоичный файл, т.е. данные должны оставаться после выполнения проги.  Как создать копию исходного файла, чтобы производить операции над копией исходного файла(Результат работ проги должен выводиться на экран и в новый файл. Выходной файл - OUTPUT.DAT, входной - INPUT.DAT)?   

Это сообщение отредактировал(а) Stoun - 23.7.2006, 08:20
PM MAIL   Вверх
Oleg_Ci
Дата 23.7.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Код

#include <iostream>    
#include <fstream>    
#include <cstdlib>    
using namespace std;    
    
void main()    
{    
  ifstream fin;    
  ofstream fout;        
//открываем 2 файла    
  fin.open("INPUT.DAT",ios_base::in|ios_base::binary);    
  fout.open("OUTPUT.DAT",ios_base::out|ios_base::binary);    
  if (!fin.is_open()||!fout.is_open()) return;    
// здесь собственно сама программа чтения-сравнения-записи:    
  int x;    
  int len = sizeof x;    
  while(fin.read((char*)&x, len))    
  {    
    cout<<x<<"  ";    
    if(x&1) x = -1; //  if(x%2) x = 0; else x = -1;    
    else x = 0;    
    fout.write((char*)&x, len);    
    cout<<x<<endl;    
  }    
  fout.close();    
  fin.close();    
  system("PAUSE");    
}    
 
PM MAIL   Вверх
Stoun
Дата 23.7.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Как можно увеличить число элементов в исходном файле и сделать его копию? 
PM MAIL   Вверх
Oleg_Ci
Дата 23.7.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(Stoun @  23.7.2006,  18:58 Найти цитируемый пост)
Как можно увеличить число элементов в исходном файле и сделать его копию? 
Это как понимать? программа несчитывает всё ?
 
PM MAIL   Вверх
Stoun
Дата 26.7.2006, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Как сделать ввод данных в исходный файл с клавиатуры? 
PM MAIL   Вверх
Oleg_Ci
Дата 26.7.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Программа просит ввести числа, если введешь ноль - то ввод завершиться. Потом выводит содержимое файла"INPUT.DAT" на консоль.
Код

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

void main()
{
  ofstream fout;
//открываем 1 файл / ios_base::app - добавляем /
  fout.open("INPUT.DAT",ios_base::out|ios_base::binary|ios_base::app);
  if (!fout.is_open()) return;
// добавляем в файл "INPUT.DAT" дополнительные числа
  int num;
  int len = sizeof num;
  while(1)
  {
    cout<<"Number (0-exit) > "; // просим ввести число
    cin>>num;                 // считываем число
    if(!num) break; // если ввели ноль(0) - выход из цикла
    fout.write((char*)&num, len);  // дабавляем в файл число
  }
  fout.close();

//___________________________________________________________________
// дальше программа считывания всех данных из файла и вывода на консоль
//открываем 1 файл "INPUT.DAT"
  ifstream fin;
  fin.open("INPUT.DAT",ios_base::in|ios_base::binary);
  if (!fin.is_open()) return;

  len = sizeof num;
  while(fin.read((char*)&num, len))
    cout<<num<<endl;

  cout<<endl<<endl;
  fin.close();
  system("PAUSE");
}
 
PM MAIL   Вверх
Stoun
Дата 2.8.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.8.2005

Репутация: нет
Всего: нет



Доброе время суток. Меня интересует условие проверки числа на четность или нечетность:
if(x&1) x = -1;
else x = 0;
По какому принципу происходит эта проверка?
PM MAIL   Вверх
Oleg_Ci
Дата 2.8.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Это sergej.z объеснял
Цитата
Я бы посоветовал тебе разобраться с двумя вариантами.

Первый - ты проверяешь, делится ли число на 2 без остатка. 
Аналогично подобным способом можно проверить, делится ли число на 2,3 итд.

код C++    
    
bool even(int number)    
{    
 return !(number%2);    
}    



или 
Второй: Проверяешь последний бит числа. 
В двоичной цифре последний знак у нас или 0 или 1. 
Естествено, что во втором случае это и есть та самая еденица, 
которая не даст числу разделиться на 2 без остатка.

код C++    
    
bool even(int number)    
{    
 return !(number&1);    
}    


Второй вариант быстрее первого в N раз 
(Где N - количество бит int - в 32 двухбитной архитектуре - это 32 )

А ещё здесь тема недавно была, про то как определить чётное число или нет,index.php?showtopic=37913
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0750 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.