Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2009, 14:47   #1
Many man
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 83
По умолчанию Задача на бинарный файл

Дана задача
Создать файл и записать в него обратные натуральные числа 1,1/2,....,1/n. Вывести на экран все компоненты файла с порядковым номером, кратным 3.
Код:
#include"iostream"
#include"fstream"
using namespace std;
int main()
{
	ofstream out("f.dat",ios::binary);
	double i,n;
	for (i=1;i<n;i/=2;)
		out.write((char*)&i,sizeof(i));
	out.close();
	ifstream in("f.dat",ios::binary);
	in.seekg(sizeof(double));
	while(in.peek()!=EOF)
	{
		in.read((char*)&i,sizeof(double));
		cout<<i<<' ';
		in.seekg(sizeof(double),ios::cur);
	}
	in.close();
}
Написал но что-то наверно неправильно, помогите исправить
Many man вне форума Ответить с цитированием
Старый 10.05.2009, 16:13   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;

int main()
{
ofstream out("f.dat",ios::binary);
int i,n=12;
double m;

for (i=1;i<n;i++)
{
   m = (double)1/i;
   out.write((const char*)&m,sizeof(m));
 }
out.close();

ifstream in("f.dat",ios::binary);
i=0;
while(in.peek()!=EOF)
{
  i++;
  in.read((char*)&m,sizeof(m));
  if(i%3==0)	cout<<m<<" ";
}
in.close();
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.05.2009, 19:31   #3
Many man
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 83
По умолчанию

Зачем нужна эта скобка
Код:
(double)
, в строчке
Код:
m = (double)1/i;
?
Many man вне форума Ответить с цитированием
Старый 10.05.2009, 19:41   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Зачем нужна эта скобка
Т.к. в правой части происходит деление int на int, то и результат приводится к int. Поэтому нужно явно привести одну из переменных к типу double. Иначе m все время будет равно 0 (кроме самого первого раза, когда оно равно 1), вместо вещественных значений.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чистый бинарный код НикСерг Общие вопросы C/C++ 16 09.11.2009 15:06
Бинарный файл mchip Microsoft Office Excel 10 05.03.2009 19:10
Бинарный файл Bayazet Общие вопросы Delphi 1 04.03.2009 16:39
Нужен совет(бинарный поиск в 2-d массиве) sergey31 Помощь студентам 2 27.04.2008 13:49
Бинарный поиск Gendalf Помощь студентам 1 07.07.2007 22:09