utworzony zostanie plik WEKTORY.BIN, w którym zapisane zostaną
współrzędne pewnej liczby wektorów, reprezentowanych przez
zdefiniowany poniżej typ:
struct wektor{
float x, y, z;
};
(2) wydrukowane zostaną wartości długości wektorów z pliku
WEKTORY.BIN (wskazówka: zapisz zawartość pliku do tablicy)
w kolejności od najkrótszego do najdłuższego. wykorzystaj funkcje fwrite(), fread(),
qsort(), funkcja porównująca długości dwóch wektorów powinna zwracać
1, -1 lub 0)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct wektor {
float x, y, z;
};
float randfrom(float min, float max);
int main(int argc, char* argv[])
{
FILE* p;
float a, b, c;
int i, j;
p = fopen("WEKTORY.BIN", "w+b");
srand(time(NULL));
for (i = 0; i < 10; i++) {
a = randfrom(0, 10);
b = randfrom(0, 10);
c = randfrom(0, 10);
fwrite(&a, sizeof(float), N, p);
fwrite(&b, sizeof(float), N, p);
fwrite(&c, sizeof(float), N, p);
}
fclose(p);
p = fopen("WEKTORY.BIN", "r+b");
struct wektor wektory[N];
fread(&wektory->x, sizeof(wektory[0]), N, p);
fread(&wektory->y, sizeof(wektory[0]), N, p);
fread(&wektory->z, sizeof(wektory[0]), N, p);
fclose(p);
for (j = 0; j < 10; j++)
printf("%.2f %.2f %.2f ", wektory->x, wektory->y, wektory->z);
return 0;
}
float randfrom(float min, float max)
{
float range = (max - min);
float div = RAND_MAX / range;
return min + (rand() / div);
}
Mam problem z wypełnieniem pliku i potem pobraniem w odpowiedni sposob tych danych.