Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <stdlib.h>
- #include <time.h>
- #include <windows.h>
- #define DEBUG_ACTIVE true
- #define NUMBER_RANGE 10
- #define NUMBER_COUNT 100
- int* iCreateRandomizedTable(int iTableSize)
- {
- int *iTable = (int *)malloc(sizeof(int) * iTableSize);
- int i;
- for (i = 0; i < iTableSize; i++)
- {
- iTable[i] = rand() % NUMBER_RANGE + 1;
- }
- return iTable;
- }
- void vWriteTableToFile(FILE *outputFile, int iTable[], int iTableSize)
- {
- int i;
- for (i = 0; i < (iTableSize - 1); i++)
- {
- fprintf_s(outputFile, "%d,", iTable[i]);
- }
- fprintf_s(outputFile, "%d", iTable[iTableSize - 1]);
- }
- int *iReadTableFromFile(FILE *outputFile, int iTableSize)
- {
- int i;
- int *iTable = (int *)malloc(sizeof(int) * iTableSize);
- for (i = 0; i < iTableSize; i++)
- {
- fscanf_s(outputFile, "%d,", &iTable[i]);
- }
- if (DEBUG_ACTIVE)
- {
- for (i = 0; i < iTableSize; i++)
- {
- printf_s("%d,", iTable[i]);
- }
- printf_s("\n");
- }
- return iTable;
- }
- void vCreateRandomFile(int iFileIndex)
- {
- int* iRandomizedTable;
- char cFileName[20];
- iRandomizedTable = iCreateRandomizedTable(100);
- sprintf_s(cFileName, "output%02d.txt", iFileIndex);
- FILE *outputFile;
- fopen_s(&outputFile, cFileName, "w");
- vWriteTableToFile(outputFile, iRandomizedTable, NUMBER_COUNT);
- free(iRandomizedTable);
- fclose(outputFile);
- }
- int *iReadRandomFile(int iFileIndex)
- {
- int* iTable;
- char cFileName[20];
- sprintf_s(cFileName, "output%02d.txt", iFileIndex);
- FILE *outputFile;
- fopen_s(&outputFile, cFileName, "r");
- iTable = iReadTableFromFile(outputFile, NUMBER_COUNT);
- fclose(outputFile);
- return iTable;
- }
- void vCreateRandomFiles(int iFileCount)
- {
- int i;
- for (i = 0; i < iFileCount; i++)
- {
- vCreateRandomFile(i);
- }
- }
- void vWriteLongestNumberStreak(FILE *outputFile, int iDataTable[])
- {
- int i;
- int currentCount;
- int currentNumber;
- int maxCount = 0;
- int maxNumber = 0;
- currentCount = 1;
- currentNumber = iDataTable[0];
- for (i = 1; i < NUMBER_COUNT; i++)
- {
- if (currentNumber == iDataTable[i])
- {
- currentCount++;
- }
- else //TODO: Co robimy gdy dwie liczby mają taki sam count? Może zrobić tablicę, a potem ją posortować?
- {
- if (currentCount > maxCount)
- {
- maxCount = currentCount;
- maxNumber = currentNumber;
- }
- currentNumber = iDataTable[i];
- currentCount = 1;
- }
- }
- if (currentCount > maxCount)
- {
- maxCount = currentCount;
- maxNumber = currentNumber;
- }
- fprintf_s(outputFile, "Najdluzszy ciag o dlugosci %d tworzy liczba %d\n", maxCount, maxNumber);
- }
- void vWriteNumberFrequency(FILE *outputFile, int iDataTable[])
- {
- int **iFreqencyTable = (int **)malloc(sizeof(int*) * NUMBER_RANGE);
- int i;
- int j;
- int x, y;
- for (i = 0; i < NUMBER_RANGE; i++)
- {
- iFreqencyTable[i] = (int *)malloc(sizeof(int*) * 2);
- iFreqencyTable[i][1] = i + 1;
- iFreqencyTable[i][0] = 0;
- }
- for (i = 0; i < NUMBER_COUNT; i++)
- {
- iFreqencyTable[iDataTable[i] - 1][0]++;
- }
- for (i = 0; i < NUMBER_RANGE - 1; i++)
- {
- for (j = 0; j < NUMBER_RANGE - i - 1; j++)
- {
- if (iFreqencyTable[j][0] > iFreqencyTable[j + 1][0])
- {
- y = iFreqencyTable[j + 1][0];
- x = iFreqencyTable[j + 1][1];
- iFreqencyTable[j + 1][0] = iFreqencyTable[j][0];
- iFreqencyTable[j + 1][1] = iFreqencyTable[j][1];
- iFreqencyTable[j][0] = y;
- iFreqencyTable[j][1] = x;
- }
- }
- }
- for (i = 0; i < NUMBER_RANGE; i++)
- {
- fprintf_s(outputFile, "Liczba %d wystepuje %d razy.\n", iFreqencyTable[i][1], iFreqencyTable[i][0]);
- }
- }
- void vReadRandomFiles(int iFileCount)
- {
- int i;
- FILE *outputFile;
- fopen_s(&outputFile, "FINAL.txt", "w");
- for (i = 0; i < iFileCount; i++)
- {
- char cFileName[20];
- sprintf_s(cFileName, "output%02d.txt", i);
- int *iTable = iReadRandomFile(i);
- fprintf_s(outputFile, "PLIK O NAZWIE: %s\n", cFileName);
- vWriteNumberFrequency(outputFile, iTable);
- vWriteLongestNumberStreak(outputFile, iTable);
- free(iTable);
- }
- fclose(outputFile);
- }
- int main()
- {
- const int iFileCount = 10;
- srand((unsigned int)time(0));
- vCreateRandomFiles(iFileCount);
- vReadRandomFiles(iFileCount);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement