[ create a new paste ] login | about

Link: http://codepad.org/oFStfeIv    [ raw code | output | fork ]

C, pasted on Oct 26:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MINDIFF 2.25e-308

double sqroot(double square){ //finding root

    double root=square/3, last, diff=1;
    if (square <= 0) return 0;
    do {
        last = root;
        root = (root + square / root) / 2;
        diff = root - last;
    } while (diff > MINDIFF || diff < -MINDIFF);
    return root;
}

controlPoint(int size, int **array,int row, int column){ //checking four sides of all "2"s
                    if(array[row-1][column]==1 && row>0){
                        array[row-1][column]=2;
                        controlPoint(size,array,row-1,column);
                    }
                    if(array[row+1][column]==1 && row<size-1){
                        array[row+1][column]=2;
                        controlPoint(size,array,row+1,column);
                    }
                    if(array[row][column-1]==1 && column>0){
                        array[row][column-1]=2;
                        controlPoint(size,array,row,column-1);
                    }
                    if(array[row][column+1]==1 && column<size-1){
                        array[row][column+1]=2;
                        controlPoint(size,array,row,column+1);
                    }
}

controlOnetoTwo(int size, int **array, int row, int column){ //checking four sides of all assigned "1"s
                    if(array[row-1][column]==2 && row>0){
                        array[row][column]=2;
                        controlPoint(size,array,row,column);
                    }
                    if(array[row+1][column]==2 && row<size-1){
                        array[row][column]=2;
                        controlPoint(size,array,row,column);
                    }
                    if(array[row][column-1]==2 && column>0){
                        array[row][column]=2;
                        controlPoint(size,array,row,column);
                    }
                    if(array[row][column+1]==2 && column<size-1){
                        array[row][column]=2;
                        controlPoint(size,array,row,column);
                    }
}

randomAssign(int size, int **array){ //assigning "1" random row and column
    int i = rand()%size;
    int j = rand()%size;

    if(array[i][j] == 1 || array[i][j] == 2){ // eliminating duplicate randoms
        randomAssign(size,array);
    } else {
        if(i == 0){
            array[i][j] = 2; // if assigned "1" is on first line, make it 2
            controlPoint(size,array,i,j);
        }
        if(array[i][j] == 0){
            array[i][j] = 1;
            controlOnetoTwo(size,array,i,j);
        }
    }
}

printGrid(int size, int **array){ //print last grid
    int i, j;
    printf("---------------------------\n");
    for(i=0;i<size;i++){
            for(j=0;j<size;j++){
                printf("%d", array[i][j]);
            }
            printf("\n");
        }
    printf("---------------------------\n");
}

calculations(int howmanytimes, double avgMean[howmanytimes]){ // calculate mean and stddev
    int i;
    double sumstddev = 0, summean = 0, averagemean = 0, stddevsquare = 0;
    for(i=0;i<howmanytimes;i++){
        summean += avgMean[i];
    }
    averagemean = summean / howmanytimes;

    for(i=0;i<howmanytimes;i++){
        sumstddev += (avgMean[i] - averagemean) * (avgMean[i] - averagemean);
    }
    stddevsquare = sumstddev / (howmanytimes - 1);

    printf("mean()   = %.7f\n",averagemean);
    printf("stddev() = %.7f\n",(sqroot(stddevsquare)));

    printf("---------------------------\n");
}

int main()
{
    int size, i, j, howmanytimes, y, z, x, k;
    scanf("%d",&size);
    scanf("%d",&howmanytimes);
    double avgMean[howmanytimes];
    int **array;
    array=(int **) malloc(size*sizeof(int *));
    for(i=0;i<size;i++){
        array[i]=(int *) malloc(size*sizeof(int));
    }

    srand(time(NULL)); // use time for random numbers

for(k=1;k<=howmanytimes;k++){
    for(i=0;i<size;i++){ // fill grid with "0"s
            for(j=0;j<size;j++){
                array[i][j] = 0;
            }
    }
            double counter = 0;
            int t = 1;
        while(t){
            for(y=0;y<size;y++){
                if(array[size-1][y]==2){ // check last line for transmitting
                    t=0; // flag for break while loop
                }
            }
            if(t != 0){
                randomAssign(size, array);
            }
        }
        for(x=0;x<size;x++){
            for(z=0;z<size;z++){
                if(array[x][z]==1 || array[x][z]==2){
                    counter++;
                }
            }
        }
        avgMean[k-1] = counter / (size * size);
    }
    printGrid(size,array);
    calculations(howmanytimes, avgMean);

    return 0;
}


Output:
1
Segmentation fault


Create a new paste based on this one


Comments: