diff --git a/zadanie111 b/zadanie111 index 9034123..1e3ae72 100755 Binary files a/zadanie111 and b/zadanie111 differ diff --git a/zadanie111.c b/zadanie111.c index 032a8f4..9111550 100644 --- a/zadanie111.c +++ b/zadanie111.c @@ -26,7 +26,7 @@ int main(int argc, char *argv[]) { int *arrBlockIndices; int *arrBlockSizes; - int numBufferSize; + size_t sizeBufferTotal; MPI_Status status; MPI_Init(&argc, &argv); @@ -36,21 +36,22 @@ int main(int argc, char *argv[]) { if (numRank == 0) { int numNumber, numCount = 0; // To avoid aggresive buffer growth at the beggining of the sequence - numBufferSize = INIT_BUFFER_SIZE; + sizeBufferTotal = INIT_BUFFER_SIZE; // Allocate enough memory for initial buffer - arrNumbers = my_malloc(numBufferSize * sizeof(int)); + arrNumbers = my_malloc(sizeBufferTotal * sizeof(int)); //int num[10]; FILE *ptrFile = my_fopen(INPUTFILE, "r"); // Read lines of numbers until an EOF or a character is read while (fscanf(ptrFile, "%d", &numNumber) == 1) { // Incorporate space for storing results received from slaves at the end of array - int numBufferUsed = numCount + numProcesses - 1; + // TODO: remove this incorporation + size_t sizeBufferUsed = numCount + numProcesses - 1; - if (numBufferSize == numBufferUsed) { + if (sizeBufferTotal == sizeBufferUsed) { // Grow buffer exponentially - numBufferSize *= GROWTH_FACTOR; - arrNumbers = my_realloc(arrNumbers, numBufferSize * sizeof(int)); + sizeBufferTotal *= GROWTH_FACTOR; + arrNumbers = my_realloc(arrNumbers, sizeBufferTotal * sizeof(int)); } arrNumbers[numCount++] = numNumber; @@ -62,7 +63,7 @@ int main(int argc, char *argv[]) { printf("*********************************************************************************\n\n"); exit(EXIT_FAILURE); } - //printf("count: %d, buffer: %d\n", numCount, numBufferSize); + //printf("count: %d, buffer: %d\n", numCount, sizeBufferTotal); int numBlockIndex = 0; int numRemainder = numCount % numProcesses; @@ -90,9 +91,9 @@ int main(int argc, char *argv[]) { } } - MPI_Bcast(&numBufferSize, 1, MPI_INT, 0, MPI_COMM_WORLD); - int *arrSlice = my_malloc(numBufferSize * sizeof(int)); - MPI_Scatterv(arrNumbers, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice, numBufferSize, MPI_INT, 0, MPI_COMM_WORLD); + MPI_Bcast(&sizeBufferTotal, 1, MPI_INT, 0, MPI_COMM_WORLD); + int *arrSlice = my_malloc(sizeBufferTotal * sizeof(int)); + MPI_Scatterv(arrNumbers, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice, sizeBufferTotal, MPI_INT, 0, MPI_COMM_WORLD); int numCount; MPI_Recv(&numCount, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); @@ -283,6 +284,6 @@ for (int i = 0; i < arrBlockSizes[numRank]; i++) { //int max = maximum(numUse, &arrNumbers[numStart]); //int max = maximum(numCount, arrNumbers); //printf("processes: %d, buffer: %d, count: %d, portion: %d \n", - //numProcesses, numBufferSize, numCount, numPortion); + //numProcesses, sizeBufferTotal, numCount, numPortion); //printf("start: %d, use: %d, max: %d\n", numStart, numUse, max); diff --git a/zadanie2 b/zadanie2 new file mode 100755 index 0000000..7777ef3 Binary files /dev/null and b/zadanie2 differ diff --git a/zadanie2.c b/zadanie2.c index f48ef1a..b4cca63 100644 --- a/zadanie2.c +++ b/zadanie2.c @@ -1,145 +1,73 @@ #include #include -#include -#include -// Avoids aggresive memory reallocation at the beginning of buffer growth sequence -#define INIT_BUFFER_SIZE 8 -// Optimal exponential buffer growth factor, 2 is sometimes used to +#define INPUTFILE "zadanie2.in" +#define MAX_LINE_LENGTH 8192 +#define INIT_BUFFER_SIZE 20 #define GROWTH_FACTOR 1.5 -#define INPUTFILE1 "zadanie1.in1" -#define INPUTFILE2 "zadanie1.in2" -//#define MIN_PORTION 2 - -int maximum(int n, int *arrNumbers); -int *array_slice(int n, int *arrNumbers, int start, int count); void *my_malloc(size_t size); void *my_calloc(size_t nitems, size_t size); void *my_realloc(void *p, size_t size); FILE *my_fopen(const char *filename, const char *mode); -int main(int argc, char *argv[]) { - int numProcesses, numRank; - //MPI_Status mpiStatus; - - int *arrNumbers; - int *arrBlockIndices; - int *arrBlockSizes; - - int numBufferSize; - MPI_Status status; - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numProcesses); - MPI_Comm_rank(MPI_COMM_WORLD, &numRank); +int main(void) { + char strBuffer[MAX_LINE_LENGTH]; + char *ptrBuffer; + int numValue; - if (numRank == 0) { - int numNumber, numCount = 0; - // To avoid aggresive buffer growth at the beggining of the sequence - numBufferSize = INIT_BUFFER_SIZE; - // Allocate enough memory for initial buffer - arrNumbers = my_malloc(numBufferSize * sizeof(int)); - //int num[10]; - FILE *ptrFile = my_fopen(INPUTFILE, "r"); - - // Read lines of numbers until an EOF or a character is read - while (fscanf(ptrFile, "%d", &numNumber) == 1) { - // Incorporate space for storing results received from slaves at the end of array - int numBufferUsed = numCount + numProcesses - 1; - - if (numBufferSize == numBufferUsed) { - // Grow buffer exponentially - numBufferSize *= GROWTH_FACTOR; - arrNumbers = my_realloc(arrNumbers, numBufferSize * sizeof(int)); - } - - arrNumbers[numCount++] = numNumber; - } + FILE *ptrFile = my_fopen(INPUTFILE, "r"); - if (numProcesses > numCount / 2) { - printf("*********************************************************************************\n"); - printf("The number of processes if greater than number of parallel computations required!\n"); - printf("*********************************************************************************\n\n"); - exit(EXIT_FAILURE); - } - //printf("count: %d, buffer: %d\n", numCount, numBufferSize); - - int numBlockIndex = 0; - int numRemainder = numCount % numProcesses; - - arrBlockIndices = my_malloc(numProcesses * sizeof(int)); - arrBlockSizes = my_malloc(numProcesses * sizeof(int)); + size_t sizeBufferUsed = 0, sizeBufferTotal = INIT_BUFFER_SIZE; + int *arrNumbers; + arrNumbers = my_malloc(sizeBufferTotal * sizeof(int)); - for (int i = 0; i < numProcesses; i++) { - arrBlockSizes[i] = numCount / numProcesses; - if (numRemainder > 0) { - arrBlockSizes[i]++; - numRemainder--; - } + int cols; - arrBlockIndices[i] = numBlockIndex; - numBlockIndex += arrBlockSizes[i]; + while (fgets(strBuffer, sizeof strBuffer, ptrFile) != 0) { + if (sizeBufferUsed == sizeBufferTotal) { + sizeBufferTotal *= GROWTH_FACTOR; + arrNumbers = my_realloc(arrNumbers, sizeBufferTotal * sizeof(int)); } - //for (int i = 0; i < numProcesses; i++) { - //printf("size[%d] = %d\tindex[%d] = %d\n", i, arrBlockSizes[i], i, arrBlockIndices[i]); - //} - - for (int i = 0; i < numProcesses; i++) { - MPI_Send(&arrBlockSizes[i], 1, MPI_INT, i, 1, MPI_COMM_WORLD); + ptrBuffer = strBuffer; + cols = 0; + while (*ptrBuffer != '\n') { + // Convert string to base 10 + numValue = strtol(ptrBuffer, &ptrBuffer, 10); + arrNumbers[sizeBufferUsed++] = numValue; + cols++; } } - MPI_Bcast(&numBufferSize, 1, MPI_INT, 0, MPI_COMM_WORLD); - int *arrSlice = my_malloc(numBufferSize * sizeof(int)); - MPI_Scatterv(arrNumbers, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice, numBufferSize, MPI_INT, 0, MPI_COMM_WORLD); - - int numCount; - MPI_Recv(&numCount, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); - //for (int i = 0; i < numCount; i++) { - //printf("rank %d: m[%d] = %d\n", numRank, i, arrSlice[i]); - //} - - int numMaximum = maximum(numCount, arrSlice); - //printf("max in %d is %d\n", numRank, numMaximum); - int *arrMaximums; - if (numRank == 0) { - arrMaximums = my_malloc(numProcesses * sizeof(int)); + printf("original matrix: \n"); + for (int i = 0; i < sizeBufferUsed; i++) { + printf("%d ", arrNumbers[i]); + if ((i + 1) % cols == 0) + printf("\n"); } - - MPI_Gather(&numMaximum, 1, MPI_INT, arrMaximums, 1, MPI_INT, 0, MPI_COMM_WORLD); - - MPI_Barrier(MPI_COMM_WORLD); - if (numRank == 0) { - //for (int i = 0; i < numProcesses; i++) { - //printf("arrMaximums[%d] = %d\n", i, arrMaximums[i]); - //} - printf("The maximum from file %s is %d.\n", INPUTFILE, maximum(numProcesses, arrMaximums)); + printf("\n"); + + int rows = sizeBufferUsed / cols; + int *arrIndices = my_malloc(sizeBufferUsed * sizeof(int)); + for (int i = 0; i < sizeBufferUsed; i++) { + int index = ((rows * i) / (cols * rows)) + ((rows * i) % (cols * rows)); + arrIndices[index] = i; } + printf("trasnposed matrix:"); + for (int i = 0; i < sizeBufferUsed; i++) { + if (i % rows == 0) + printf("\n"); + printf("%d ", arrNumbers[arrIndices[i]]); + } - MPI_Finalize(); - return (0); -} - -int maximum(int n, int *arrNumbers) { - int value = INT_MIN; - for (int i = 0; i < n; i++) { - if (value < arrNumbers[i]) { - value = arrNumbers[i]; - } - } - return value; + printf("\n"); + + return 0; } -int *array_slice(int n, int *arrNumbers, int start, int count) { - int *slice = my_malloc(count * sizeof(int)); - for (int i = 0; i < count && i < n; i++) - slice[i] = arrNumbers[start + i]; - - return slice; -} void *my_malloc(size_t size) { void *p = malloc(size); @@ -179,111 +107,17 @@ FILE *my_fopen(const char *filename, const char *mode) { return file; } - - - - //int *numBlockSize = &arrBlockSizes[numRank]; - //printf("r: %d, nbs %d\n", numRank, *numBlockSize); - - // If there is just the one root process, all the numbers must be passed to the final stage - //if (numRank == 0 && numProcesses != 1) - //if (numRank == 0 && numProcesses != 1) - //numBlockSize = numProcesses; - //int BlS = arrBlockSizes; - //MPI_Bcast(arrBlockciwSizes, numProcesses, MPI_INT, 0, MPI_COMM_WORLD); - //for (int i = 0; i < numProcesses; i++) - //printf("rank %d, nproc %d, abs[%i] = %d\n", numRank, numProcesses, i, arrBlockSizes[i]); - //printf("%d %d\n", arrBlockSizes[0], arrBlockSizes[1]); - //printf("%d: ", numRank); - //for (int i = 0; i < numProcesses; i++) { - //printf("%d ", arrBlockSizes[i]); - //} - //printf("\n"); - //int num = numProcesses + 100; - - - - - - //int *arrSlice = my_malloc(numBlockSize * sizeof(int)); - //arrSlice[numRank] = numRank * 10 + 5; - - - //if (numRank == 0) { - //printf("root received:\n"); - //for (int i = 0; i < numBlockSize; i++) { - //printf("m[%d] = %d\t", i, arrSlice[i]); - //} - //printf("\n"); - //} */ - - - - - -/* -//print what each process received -//printf("%d: ", numRank); -for (int i = 0; i < arrBlockSizes[numRank]; i++) { - //printf("m[%d] = %d\t", i, arrSlice[i]); - arrSlice[i] *= 10; - } - //printf("\n"); - */ - - - - - //printf("size = %d, remainder = %d\n\n", numBlockSize, numRemainder); - - // This is a slave process - //else { - //int numCount, numValue; - //MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpiStatus); - //MPI_Get_count(&mpiStatus, MPI_INT, &numCount); - - //if (numCount != MPI_UNDEFINED) { - //int *arrNumbers = my_malloc(numCount * sizeof(int)); - - ////printf("address before: %p\n", arrNumbers); - //MPI_Recv(arrNumbers, numCount, MPI_INT, 0, 1, MPI_COMM_WORLD, &mpiStatus); - ////printf("address after: %p\n", arrNumbers); - //numValue = maximum(numCount, arrNumbers); - //MPI_Send(&numValue, 1, MPI_INT, 0, 1, MPI_COMM_WORLD); - //} - //} - - - - - - - // If there are no slave processes, just find the maximum of the numbers from the file - //int numUse = numCount, numStart = 0; - //int numPortion = numCount; - - //if (numProcesses > 1) { - - ////int numSlaves = numProcesses - 1; - //numPortion = numCount / numProcesses; - - //// Send at least 2 numbers to compare to slave process, no less - //numPortion = numPortion >= 2 ? numPortion : 2; - - //// Do the loop for every slave process - //for (int numSlave = 1; numProcesses > numSlave; numSlave++) { - //printf("> sending %d to %d\n", numPortion, numSlave); - //MPI_Send(&arrNumbers[numStart], numPortion, MPI_INT, numSlave, 1, MPI_COMM_WORLD); - //numStart += numPortion; - //numUse -= numPortion; - //} - - + //printf("trasnposed matrix:"); + //for (int i = 0; i < sizeBufferUsed; i++) { + //if (i % rows == 0) + //printf("\n"); + //printf("%d ", arrTrans[i]); //} - //int max = maximum(numUse, &arrNumbers[numStart]); - //int max = maximum(numCount, arrNumbers); - //printf("processes: %d, buffer: %d, count: %d, portion: %d \n", - //numProcesses, numBufferSize, numCount, numPortion); +/* for (int i = 0; i < sizeBufferUsed; i++) {*/ + //if (i % rows == 0) + //printf("\n"); + //printf("%2d[%2d]\t", i, arrIndices[i]); + /*}*/ - //printf("start: %d, use: %d, max: %d\n", numStart, numUse, max); + //printf("rows: %zu, cols: %d\n", sizeBufferUsed / cols, cols); diff --git a/zadanie2.in b/zadanie2.in new file mode 100644 index 0000000..e77c8de --- /dev/null +++ b/zadanie2.in @@ -0,0 +1,6 @@ +1 1 1 1 +2 2 2 2 +3 3 3 3 +4 4 4 4 +5 5 5 5 +6 6 6 6 diff --git a/zadanie3.c b/zadanie3.c new file mode 100644 index 0000000..f48ef1a --- /dev/null +++ b/zadanie3.c @@ -0,0 +1,289 @@ +#include +#include +#include +#include + +// Avoids aggresive memory reallocation at the beginning of buffer growth sequence +#define INIT_BUFFER_SIZE 8 +// Optimal exponential buffer growth factor, 2 is sometimes used to +#define GROWTH_FACTOR 1.5 + +#define INPUTFILE1 "zadanie1.in1" +#define INPUTFILE2 "zadanie1.in2" +//#define MIN_PORTION 2 + +int maximum(int n, int *arrNumbers); +int *array_slice(int n, int *arrNumbers, int start, int count); +void *my_malloc(size_t size); +void *my_calloc(size_t nitems, size_t size); +void *my_realloc(void *p, size_t size); +FILE *my_fopen(const char *filename, const char *mode); + +int main(int argc, char *argv[]) { + int numProcesses, numRank; + //MPI_Status mpiStatus; + + int *arrNumbers; + int *arrBlockIndices; + int *arrBlockSizes; + + int numBufferSize; + MPI_Status status; + + MPI_Init(&argc, &argv); + MPI_Comm_size(MPI_COMM_WORLD, &numProcesses); + MPI_Comm_rank(MPI_COMM_WORLD, &numRank); + + if (numRank == 0) { + int numNumber, numCount = 0; + // To avoid aggresive buffer growth at the beggining of the sequence + numBufferSize = INIT_BUFFER_SIZE; + // Allocate enough memory for initial buffer + arrNumbers = my_malloc(numBufferSize * sizeof(int)); + //int num[10]; + FILE *ptrFile = my_fopen(INPUTFILE, "r"); + + // Read lines of numbers until an EOF or a character is read + while (fscanf(ptrFile, "%d", &numNumber) == 1) { + // Incorporate space for storing results received from slaves at the end of array + int numBufferUsed = numCount + numProcesses - 1; + + if (numBufferSize == numBufferUsed) { + // Grow buffer exponentially + numBufferSize *= GROWTH_FACTOR; + arrNumbers = my_realloc(arrNumbers, numBufferSize * sizeof(int)); + } + + arrNumbers[numCount++] = numNumber; + } + + if (numProcesses > numCount / 2) { + printf("*********************************************************************************\n"); + printf("The number of processes if greater than number of parallel computations required!\n"); + printf("*********************************************************************************\n\n"); + exit(EXIT_FAILURE); + } + //printf("count: %d, buffer: %d\n", numCount, numBufferSize); + + int numBlockIndex = 0; + int numRemainder = numCount % numProcesses; + + arrBlockIndices = my_malloc(numProcesses * sizeof(int)); + arrBlockSizes = my_malloc(numProcesses * sizeof(int)); + + for (int i = 0; i < numProcesses; i++) { + arrBlockSizes[i] = numCount / numProcesses; + if (numRemainder > 0) { + arrBlockSizes[i]++; + numRemainder--; + } + + arrBlockIndices[i] = numBlockIndex; + numBlockIndex += arrBlockSizes[i]; + } + + //for (int i = 0; i < numProcesses; i++) { + //printf("size[%d] = %d\tindex[%d] = %d\n", i, arrBlockSizes[i], i, arrBlockIndices[i]); + //} + + for (int i = 0; i < numProcesses; i++) { + MPI_Send(&arrBlockSizes[i], 1, MPI_INT, i, 1, MPI_COMM_WORLD); + } + } + + MPI_Bcast(&numBufferSize, 1, MPI_INT, 0, MPI_COMM_WORLD); + int *arrSlice = my_malloc(numBufferSize * sizeof(int)); + MPI_Scatterv(arrNumbers, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice, numBufferSize, MPI_INT, 0, MPI_COMM_WORLD); + + int numCount; + MPI_Recv(&numCount, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); + //for (int i = 0; i < numCount; i++) { + //printf("rank %d: m[%d] = %d\n", numRank, i, arrSlice[i]); + //} + + int numMaximum = maximum(numCount, arrSlice); + //printf("max in %d is %d\n", numRank, numMaximum); + int *arrMaximums; + if (numRank == 0) { + arrMaximums = my_malloc(numProcesses * sizeof(int)); + } + + MPI_Gather(&numMaximum, 1, MPI_INT, arrMaximums, 1, MPI_INT, 0, MPI_COMM_WORLD); + + MPI_Barrier(MPI_COMM_WORLD); + if (numRank == 0) { + //for (int i = 0; i < numProcesses; i++) { + //printf("arrMaximums[%d] = %d\n", i, arrMaximums[i]); + //} + printf("The maximum from file %s is %d.\n", INPUTFILE, maximum(numProcesses, arrMaximums)); + } + + + MPI_Finalize(); + return (0); +} + +int maximum(int n, int *arrNumbers) { + int value = INT_MIN; + for (int i = 0; i < n; i++) { + if (value < arrNumbers[i]) { + value = arrNumbers[i]; + } + } + return value; +} + +int *array_slice(int n, int *arrNumbers, int start, int count) { + int *slice = my_malloc(count * sizeof(int)); + for (int i = 0; i < count && i < n; i++) + slice[i] = arrNumbers[start + i]; + + return slice; +} + +void *my_malloc(size_t size) { + void *p = malloc(size); + if (p == NULL) { + printf("Memory allocation unsuccessful.\n"); + exit(EXIT_FAILURE); + } + return p; +} + +void *my_calloc(size_t nitems, size_t size) { + void *p = calloc(nitems, size); + if (p == NULL) { + printf("Memory allocation with initialisation unsuccessful.\n"); + exit(EXIT_FAILURE); + } + return p; +} + + +void *my_realloc(void *p, size_t size) { + void *temp = realloc(p, size); + if (temp == NULL) { + printf("Insufficient memory; can't add more items.\n"); + exit(EXIT_FAILURE); + } + return temp; +} + + +FILE *my_fopen(const char *filename, const char *mode) { + FILE *file = fopen(filename, mode); + if (file == NULL) { + printf("File %s could not be opened.\n", filename); + exit(EXIT_FAILURE); + } + return file; +} + + + + + //int *numBlockSize = &arrBlockSizes[numRank]; + //printf("r: %d, nbs %d\n", numRank, *numBlockSize); + + // If there is just the one root process, all the numbers must be passed to the final stage + //if (numRank == 0 && numProcesses != 1) + //if (numRank == 0 && numProcesses != 1) + //numBlockSize = numProcesses; + //int BlS = arrBlockSizes; + //MPI_Bcast(arrBlockciwSizes, numProcesses, MPI_INT, 0, MPI_COMM_WORLD); + //for (int i = 0; i < numProcesses; i++) + //printf("rank %d, nproc %d, abs[%i] = %d\n", numRank, numProcesses, i, arrBlockSizes[i]); + //printf("%d %d\n", arrBlockSizes[0], arrBlockSizes[1]); + //printf("%d: ", numRank); + //for (int i = 0; i < numProcesses; i++) { + //printf("%d ", arrBlockSizes[i]); + //} + //printf("\n"); + //int num = numProcesses + 100; + + + + + + //int *arrSlice = my_malloc(numBlockSize * sizeof(int)); + //arrSlice[numRank] = numRank * 10 + 5; + + + //if (numRank == 0) { + //printf("root received:\n"); + //for (int i = 0; i < numBlockSize; i++) { + //printf("m[%d] = %d\t", i, arrSlice[i]); + //} + //printf("\n"); + //} */ + + + + + +/* +//print what each process received +//printf("%d: ", numRank); +for (int i = 0; i < arrBlockSizes[numRank]; i++) { + //printf("m[%d] = %d\t", i, arrSlice[i]); + arrSlice[i] *= 10; + } + //printf("\n"); + */ + + + + + //printf("size = %d, remainder = %d\n\n", numBlockSize, numRemainder); + + // This is a slave process + //else { + //int numCount, numValue; + //MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &mpiStatus); + //MPI_Get_count(&mpiStatus, MPI_INT, &numCount); + + //if (numCount != MPI_UNDEFINED) { + //int *arrNumbers = my_malloc(numCount * sizeof(int)); + + ////printf("address before: %p\n", arrNumbers); + //MPI_Recv(arrNumbers, numCount, MPI_INT, 0, 1, MPI_COMM_WORLD, &mpiStatus); + ////printf("address after: %p\n", arrNumbers); + //numValue = maximum(numCount, arrNumbers); + //MPI_Send(&numValue, 1, MPI_INT, 0, 1, MPI_COMM_WORLD); + //} + //} + + + + + + + // If there are no slave processes, just find the maximum of the numbers from the file + //int numUse = numCount, numStart = 0; + //int numPortion = numCount; + + //if (numProcesses > 1) { + + ////int numSlaves = numProcesses - 1; + //numPortion = numCount / numProcesses; + + //// Send at least 2 numbers to compare to slave process, no less + //numPortion = numPortion >= 2 ? numPortion : 2; + + //// Do the loop for every slave process + //for (int numSlave = 1; numProcesses > numSlave; numSlave++) { + //printf("> sending %d to %d\n", numPortion, numSlave); + //MPI_Send(&arrNumbers[numStart], numPortion, MPI_INT, numSlave, 1, MPI_COMM_WORLD); + //numStart += numPortion; + //numUse -= numPortion; + //} + + + //} + + //int max = maximum(numUse, &arrNumbers[numStart]); + //int max = maximum(numCount, arrNumbers); + //printf("processes: %d, buffer: %d, count: %d, portion: %d \n", + //numProcesses, numBufferSize, numCount, numPortion); + + //printf("start: %d, use: %d, max: %d\n", numStart, numUse, max); diff --git a/zadanie3.in1 b/zadanie3.in1 new file mode 100644 index 0000000..b36d133 --- /dev/null +++ b/zadanie3.in1 @@ -0,0 +1,2 @@ +1 2 3 +4 5 6 diff --git a/zadanie3.in2 b/zadanie3.in2 new file mode 100644 index 0000000..04798af --- /dev/null +++ b/zadanie3.in2 @@ -0,0 +1,3 @@ +7 8 +9 10 +11 12 diff --git a/zadanie33 b/zadanie33 new file mode 100755 index 0000000..34bedb6 Binary files /dev/null and b/zadanie33 differ diff --git a/zadanie33.c b/zadanie33.c new file mode 100644 index 0000000..586c55e --- /dev/null +++ b/zadanie33.c @@ -0,0 +1,36 @@ +#include +#include + +#define MAX_LINE_LENGTH 8192 + +#define INPUTFILE1 "zadanie3.in1" +#define INPUTFILE2 "zadanie3.in2" + +FILE *my_fopen(const char *filename, const char *mode) { + FILE *file = fopen(filename, mode); + if (file == NULL) { + printf("File %s could not be opened.\n", filename); + exit(EXIT_FAILURE); + } + return file; +} + + +int main(void) { + char strBuffer[MAX_LINE_LENGTH]; + char *ptrBuffer; + int numValue; + + FILE *ptrFile = my_fopen(INPUTFILE2, "r"); + + while (fgets(strBuffer, sizeof strBuffer, ptrFile) != 0) { + //printf("Line contains "); + ptrBuffer = strBuffer; + while (*ptrBuffer != '\n') { + numValue = strtol(ptrBuffer, &ptrBuffer, 10); + printf("%d ", numValue); + } + printf("\n"); + } + return 0; +}