Показать сообщение отдельно
иксуй!
Аватар для иксуй!
Сообщения: 9,556
Регистрация: 23.11.2007
Старый пост, нажмите что бы добавить к себе блог 2 ноября 2014, 09:45
  #3176 (ПС)
-Цитата от aqvl Посмотреть сообщение
-Цитата от NEMM Посмотреть сообщение
-Цитата от aqvl Посмотреть сообщение
тема рип?
скину, может кто сможет помочь. нужно до четверга сдать задачу
язык си

мой говнокод
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <math.h>
#include <string.h>

#define BUF 1000

int cmp (const void *p1, const void *p2);
void error(char *s);

int main(int argc, char **argv) {
if (argc == 1) return 1;
int f, d;
size_t k = BUF, i = 0;
char err[] = "Can't open file\n",
err2[] = "Not enough memory\n";
double *a;
if ((f = open(argv[1], O_RDONLY)) < 0) error(err);
a = malloc(k*sizeof(double));
if (a == NULL) error(err2);
while ((d = read(f, &a[i], BUF*sizeof(double))) > 0) {
i += (size_t) d/sizeof(double);
if (i == k) {
k += BUF;
a = realloc(a, k*sizeof(double));
if (a == NULL) error(err2);
}
}
qsort(a, i, sizeof(double), cmp);
for (size_t j = 0; j < i; j++)
write(1, &a[j], sizeof(double));
free(a);
close(f);
return 0;
}

int cmp (const void *p1, const void *p2) {
double a = *(double *) p1, b = * (double *) p2;
if (fabs(a) > fabs(b)) return 1;
if (fabs(a) < fabs(b)) return -1;
if (a > 0) return -1; else return 1;
}

void error(char *s) {
write(2, s, strlen(s));
exit(1);
}


Добавлено через 9 минут
было бы хорошо, если бы кто-нибудь хотя бы объяснил мне, как тестировать такую задачу
т.е. как создать файл, в котором в бинарном виде хранятся даблы
Это си шарп не?
Если учесть, что я не знаю никаких шарпов, то вряд ли
Я исправил все, кстати
Но с файлом все равно не понял, ибо пробовал писать в текстовом файле что-нибудь типа "2.0 3.0 4.0" и считывалась хуйня какая-то
просто написав что-то в текстовом виде ты получишь текстовый файл. чтобы получить бинарный ты должен записать соответствующие значения из программы, открыв файл в бинарном режиме, например функцией fopen: FILE my_binary_file = fopen("my_binary_file", "wb");
буква b во втором параметре означает открытие его в бинарном режиме. суть в том, что чтобы понимать данные из бинарного файла, нужно знать какие данные там записаны и как их правильно считывать. то есть может быть известно что файл состоит из записей по 20 байт, тогда размер файла должен быть кратен 20 байтам обязательно, и допустим первые 4 байта это какой-то int, следующие 16 это два каких-то double. советую почитать хотя бы русскую статью на вики на эту тему.
http://xvadim.chgk.info/articles/formats.html вот ещё тут немного написано.

Добавлено через 5 минут 29 секунд
с 2^7 страницей всех

offline
Ответить с цитированием