Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define N 10
- #define M 300
- #define eps 0.000001
- int compInt(const void *element1, const void*element2)
- {
- return *(int*)element1 - *(int*)element2;
- }
- int compChar(const void *element1, const void*element2)
- {
- return (*(char*)element1 - *(char*)element2);
- }
- int compDouble(const void *element1, const void*element2)
- {
- if ((*(double*)element1)-(*(double*)element2)>eps)
- return 1;
- else if ((*(double*)element1)-(*(double*)element2)<eps)
- return -1;
- else
- return 0;
- }
- int compStr (const void*element1, const void* element2)
- {
- return strcmp(*(char**)element1, *(char**)element2);
- }
- void swapChar(const void*element1, const void* element2)
- {
- char tmp;
- tmp = *(char*)element1;
- *(char*)element1 =*(char*) element2;
- *(char*)element2 = tmp;
- }
- void swapInt(const void*element1, const void* element2)
- {
- int tmp;
- tmp = *(int*)element1;
- *(int*)element1 =*(int*) element2;
- *(int*)element2 = tmp;
- }
- void swapDouble(const void*element1, const void* element2)
- {
- double tmp;
- tmp = *(double*)element1;
- *(double*)element1 =*(double*) element2;
- *(double*)element2 = tmp;
- }
- void swapStr(const void*element1, const void* element2)
- {
- char *tmp = *(char **)element1;
- *(char **)element1 = *(char **)element2;
- *(char **)element2 = tmp;
- }
- int main()
- {
- int size_of_element, i = 0, j = 0, flag;
- scanf("%d", &flag);
- scanf("%d", &size_of_element);
- getchar();
- void * arr;
- int(*cmp)(const void*, const void*);
- void(*swap)(const void*, const void *);
- arr = (void*) malloc(N*size_of_element);
- switch (size_of_element)
- {
- case 1:
- for (i = 0; i < N; i++)
- scanf(" %c", &((char*)arr)[i]);
- cmp = compChar;
- swap = swapChar;
- break;
- case 4:
- if(flag) //int
- {
- for (i = 0; i < N; i++)
- scanf("%d", &((int*)arr)[i]);
- cmp = compInt;
- swap = swapInt;
- }
- else //str(char *)
- {
- for (i = 0; i < N; i++)
- {
- ((char **)arr)[i] = (char *)malloc(M);
- fgets(((char **)arr)[i], M, stdin);
- }
- cmp = compStr;
- swap = swapStr;
- }
- break;
- case 8:
- for (i = 0; i < N; i++)
- scanf("%lf", &((double*)arr)[i]);
- cmp = compDouble;
- swap = swapDouble;
- break;
- }
- for (i = 0; i < N - 1; i++)
- {
- for (j = 0; j < N - 1 - i; j++)
- {
- if (cmp(arr + j*size_of_element, arr + (j + 1)*size_of_element) > 0)
- swap(arr + j*size_of_element, arr + (j + 1)*size_of_element);
- }
- }
- printf("\n");
- switch (size_of_element)
- {
- case 1:
- for (i = 0; i < N; i++)
- printf("%c ", ((char*)arr)[i]);
- break;
- case 4:
- if (flag)
- for (i = 0; i < N; i++)
- printf("%d ", ((int*)arr)[i]);
- else
- for (i = 0; i < N; i++)
- printf("%s", ((char **)arr)[i]);
- break;
- case 8:
- for (i = 0; i < N; i++)
- printf("%lf ", ((double*)arr)[i]);
- break;
- }
- printf("\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement