All pastes #837251 Raw Edit

Unnamed

public c v1 · immutable
#837251 ·published 2007-12-29 14:00 UTC
rendered paste body
/* domacak.c */#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_LENGHT 100void merge(char a[], char b[], int levy, int pravy, int poslPravy) {    int poslLevy = pravy-1;    int i = levy;    int prvniLevy = levy;    while (levy<=poslLevy && pravy<=poslPravy)        b[i++] = (a[levy]<a[pravy])? a[pravy++] :a [levy++];    while (levy<=poslLevy) b[i++] = a[levy++];    while (pravy<=poslPravy) b[i++] = a[pravy++];}int min(int x, int y) {    if (x<y) return x;    else     return y;}void mergeSort(char a[], int n) {    char *pom = (char*)malloc(n*sizeof(char)),                *odkud = a, *kam = pom;    int delkaUseku = 1;    int posl = n-1, i;    while (delkaUseku<n) {        int levy = 0;        while (levy<=posl) {            int pravy = levy+delkaUseku;            merge(odkud, kam, levy, min(pravy, n), min(pravy+delkaUseku-1, posl));            levy = levy+2*delkaUseku;        }        delkaUseku = 2*delkaUseku;        char *p = odkud;        odkud = kam;        kam = p;    }    if (odkud!=a)        for (i=0; i<n; i++) a[i] = pom[i];}void prunik(char A[], int na,char B[], int nb,char C[], int cn) {    int ia = 0,ib=0,ic=0;    while (ia < na || ib < nb) {        if (A[ia]>B[ib]) ia++;        else if (A[ia]<B[ib]) ib++;        else if (A[ia]==B[ib]) {            C[ic++] = A[ia++];            ib++;        }    }}void sjednoceni(char A[], int na,char B[], int nb,char C[], int cn) {    int ia = 0,ib=0,ic=0;    char predchozi = 0;    while (ia < na && ib < nb) {        if (A[ia]==B[ib]) ia++;        else {            if (A[ia]<B[ib]) C[ic++] = A[ia++];            else C[ic++] = B[ib++];        }    }    while (ia<na) C[ic++] = A[ia++];    while (ib<nb) C[ic++] = B[ib++];}int main(void) {    char retezec1[MAX_LENGHT], retezec2[MAX_LENGHT], vysledek[2*MAX_LENGHT];    int prvni, druhy,i;    char jmenoSouboru1[MAX_LENGHT], jmenoSouboru2[MAX_LENGHT];    /*printf("Zadejte jmeno souboru mnoziny X: \n");    scanf("%s", jmenoSouboru1);    printf("Zadejte jmeno souboru mnoziny Y: \n");    scanf("%s", jmenoSouboru2);*/    FILE *soubor1;    soubor1 = fopen("a", "r");    fscanf(soubor1, "%s", retezec1);    FILE *soubor2;    soubor2 = fopen("b", "r");    fscanf(soubor2, "%s", retezec2);    prvni = strlen(retezec1);    druhy = strlen(retezec2);    mergeSort(retezec1, prvni);    mergeSort(retezec2, druhy);    printf("Mnozina X: %s  \n", retezec1);    printf("Mnozina Y: %s  \n", retezec2);    for (i = 0;i < (2*MAX_LENGHT);i++) vysledek[i] = 0;    prunik(retezec1, prvni,retezec2, druhy,vysledek,prvni+druhy);    printf("prunik: %s  \n", vysledek);    for (i = 0;i < (2*MAX_LENGHT);i++) vysledek[i] = 0;    sjednoceni(retezec1, prvni,retezec2, druhy,vysledek,prvni+druhy);    printf("sjednoceni: %s  \n", vysledek);    system("PAUSE");    return 0;}