#include <stdio.h> #include <stdlib.h> #include <time.h> FILE *fp; int x, y, z; uint8_t v[1024][1024][314]; clock_t start, end; double cpu_time_used; uint64_t splitBy3(unsigned int a){ uint64_t x = a & 0x1fffff; x = (x | x << 32) & 0x1f00000000ffff; x = (x | x << 16) & 0x1f0000ff0000ff; x = (x | x << 8) & 0x100f00f00f00f00f; x = (x | x << 4) & 0x10c30c30c30c30c3; x = (x | x << 2) & 0x1249249249249249; return x; } uint64_t mortonEncode_magicbits(unsigned int x, unsigned int y, unsigned int z){ uint64_t answer = 0; answer |= splitBy3(x) | splitBy3(y) << 1 | splitBy3(z) << 2; return answer; } void swap(uint32_t *a, uint32_t *b) { uint32_t t = *a; *a = *b; *b = t; } int partition(uint32_t array[], int low, int high) { uint32_t pivot = array[high]; int i = (low - 1); for (int j = low; j < high; j++) { if (array[j] <= pivot) { i++; swap(&array[i], &array[j]); } } swap(&array[i + 1], &array[high]); return (i + 1); } void quickSort(uint32_t array[], int low, int high) { if (low < high) { int pi = partition(array, low, high); quickSort(array, low, pi - 1); quickSort(array, pi + 1, high); } } int main(void) { fp = fopen("c8.raw","rb"); if(fp == NULL){ printf("CHYBA S OTVORENIM"); return -1; } printf("Start: \n"); for (x = 0; x < 1024; x++) { for(y = 0; y < 1024; y++){ for(z = 0; z < 314; z++){ fread(&v[x][y][z], 1, sizeof(uint8_t), fp); } } } int poc = 0; //START start = clock(); //printf("%d\n", v[30][100][300]); //PRAHOVANIE for (x = 0; x < 1024; x++) { for(y = 0; y < 1024; y++){ for(z = 0; z < 314; z++){ if(v[x][y][z] <= 25) { v[x][y][z] = 0; } else { v[x][y][z] = 1; poc++; //printf("%d ", v[x][y][z]); } } } } //MORTON ADRESY uint32_t *voxels = (uint32_t*)malloc(poc * sizeof(uint32_t)); poc = 0; for (x = 0; x < 1024; x++) { for(y = 0; y < 1024; y++){ for(z = 0; z < 314; z++){ if(v[x][y][z] == 1) { voxels[poc] = mortonEncode_magicbits(x,y,z); poc++; } } } } //SORTING ADRIES quickSort(voxels, 0, poc - 1); //END end = clock(); //printf("\n%d", voxels[0]); //printf("\n%d", voxels[1]); //printf("\n%d", voxels[1000]); //printf("\n%d", voxels[poc-1]); //printf("\n%d", poc); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; printf("\nSpotrebovany cas : %f\n\n", cpu_time_used); free(voxels); fclose(fp); return 0; }
Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!
OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.
#include <stdio.h>
int main()
{
char name[50];
printf("Enter name:");
scanf("%s", name);
printf("Hello %s \n" , name );
return 0;
}
C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.
When ever you want to perform a set of operations based on a condition if-else
is used.
if(conditional-expression) {
// code
} else {
// code
}
You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to if-else-if ladder.
switch(conditional-expression) {
case value1:
// code
break; // optional
case value2:
// code
break; // optional
...
default:
// code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
// code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.
data-type array-name[size];
data-type array-name[size][size];
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
Two types of functions are present in C
Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,
User defined functions are the ones which are written by the programmer based on the requirement.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
//code
}