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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2014, 15:45   #1
EasyMak
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 27
По умолчанию Работа с бинарным файлом(СИ).

Помогите пожалуйста! Очень нужно сдать задачку!

Компоненты бинарного файла – вещественные числа. Изменить содержимое файла, прибавив к каждой положительной компоненте первую, а из отрицательных компонент вычесть значение последней.
EasyMak вне форума Ответить с цитированием
Старый 28.12.2014, 17:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я так понимаю что попыток не было и не будет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2014, 17:45   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Примерно так

Код:
#include <stdio.h>

struct double_n
{
double a;

double_n() {}
double_n(double s) { a = s;}
};

struct double_n_list
{
double_n* a;
double_n_list* next;

double_n_list() { next = 0; a = new double_n;}
double_n_list(double s)  { next = 0; a = new double_n(s);}
~double_n_list(){ if (next) { delete next->a; delete next; } }
void add_next(double s) {double_n_list* t = this; while(t->next) t = t->next;  t->next = new double_n_list(s);}
void print() { if (next) { printf("%f\n", a->a); next->print(); } else { printf("%f\n", a->a); } }
void change() { double_n_list* t = this; double first; first = t->a->a;printf("first:%f\n", first);double last;while(t->next) t = t->next; last = t->a->a;printf("last:%f\n", last);t = this;while(t->next) {if (t->a->a >= 0)  t->a->a += first;else t->a->a -= last;t = t->next; } }
void write()
{
FILE* f; 
f = fopen("binfile", "wb"); 
double_n_list* t = this; 
while(t->next)
{
fwrite(&(t->a->a), sizeof(double_n), 1, f);
t = t->next;
}
fwrite(&(t->a->a), sizeof(double_n), 1, f);
}
};

void write_binary_file() { double_n a; FILE* f; f = fopen("binfile", "wb"); a.a = 0.3456; fwrite(&a, sizeof(double_n), 1, f); a.a = -0.2456; fwrite(&a, sizeof(double_n), 1, f); a.a = -0.4456; fwrite(&a, sizeof(double_n), 1, f); a.a = 0.5456; fwrite(&a, sizeof(double_n), 1, f); a.a = 0.6456; fwrite(&a, sizeof(double_n), 1, f); a.a = 0.7456; fwrite(&a, sizeof(double_n), 1, f);fclose(f); }

void read_binary_file() 
{ 
double_n_list* s = 0; 
double_n_list* t = new double_n_list; 
FILE* f; 
f = fopen("binfile", "rb");
while(fread( &(t->a->a), sizeof(double_n), 1, f) )
{
if (s) { s->add_next(t->a->a); }
else { s = new double_n_list; s->a->a = t->a->a; }
}
fclose(f);
s->print();
s->change();
s->print();
s->write();
}


void main()
{
write_binary_file();
read_binary_file();
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось challengerr; 28.12.2014 в 17:47.
challengerr вне форума Ответить с цитированием
Старый 28.12.2014, 18:36   #4
EasyMak
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я так понимаю что попыток не было и не будет?
Попытки были бы, если бы понимал тему...
EasyMak вне форума Ответить с цитированием
Старый 28.12.2014, 18:38   #5
EasyMak
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 27
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Примерно так
А можно несколько проще?
Да и при компиляции выдает миллион ошибок...
EasyMak вне форума Ответить с цитированием
Старый 29.12.2014, 05:06   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Предыдущий код на языке C++.

На С будет примерно так

Код:
#include <stdio.h>
#include <malloc.h>

struct double_list { double a; struct double_list* next; };

void write_binary_file();
void read_binary_file();

void main() { write_binary_file(); read_binary_file(); }

void write_binary_file() 
{ 
struct double_list a; 
FILE* f;  
f = fopen("binfile", "wb"); 
a.a = 0.3456; fwrite(&a, sizeof(struct double_list), 1, f); 
a.a = -0.2456; fwrite(&a, sizeof(struct double_list), 1, f); 
a.a = -0.4456; fwrite(&a, sizeof(struct double_list), 1, f); 
a.a = 0.5456; fwrite(&a, sizeof(struct double_list), 1, f); 
a.a = 0.6456; fwrite(&a, sizeof(struct double_list), 1, f); 
a.a = 0.7456; fwrite(&a, sizeof(struct double_list), 1, f); 
fclose(f); 
}

void read_binary_file() 
{ 
struct double_list s; 
struct double_list t; 
struct double_list* i;
int g;
FILE* f; 
double first;
double last;

f = fopen("binfile", "rb");
g = 0;
s.next = 0;
t.next = 0;
while(fread( &(t.a), sizeof(struct double_list), 1, f) )
{
if (g != 0) 
{ 
i = &s;
while(i->next) i = i->next;
i->next = (struct double_list*) malloc(sizeof(struct double_list));
i->next->a = t.a;
i->next->next = 0;
}
else 
{ 
s.a = t.a;
s.next = 0;
g = 1;
}
}
fclose(f);

printf("s.a: %f\n", s.a); 

i = &s; while(i->next)  { printf("%f\n", i->a);  i = i->next; } printf("%f\n", i->a); 

i = &s;  first = i->a; while(i->next) i = i->next;  last = i->a; printf("first:%f\n", first); printf("last:%f\n", last);

i = &s;  while(i->next) { if (i->a >=0) i->a += first; else i->a -= last; i = i->next;  } if (i->a >=0) i->a += first; else i->a -= last;

i = &s; while(i->next)  { printf("%f\n", i->a);  i = i->next; } printf("%f\n", i->a); 

f = fopen("binfile", "wb"); i = &s;   while(i->next)   {  fwrite(&(i->a), sizeof(struct double_list), 1, f); i = i->next; } fwrite(&(i->a), sizeof(struct double_list), 1, f);

}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 29.12.2014, 18:44   #7
EasyMak
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 27
По умолчанию

Во! То что нужно !!!
Спасибо огромное , второй раз уже выручаете
EasyMak вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с бинарным файлом rus_phantom Общие вопросы C/C++ 4 08.11.2011 22:05
Работа с бинарным файлом Celestia Общие вопросы Delphi 7 17.01.2011 14:43
Работа с бинарным файлом. griba Помощь студентам 4 11.12.2010 13:08
Работа с бинарным файлом (С) madmonk Помощь студентам 4 20.11.2010 20:58
работа с бинарным файлом Bayazet Помощь студентам 3 17.03.2009 15:37