Wątek zablokowany 2022-06-06 09:44 przez cerrato.

Wątek przeniesiony 2022-06-06 09:14 z JavaScript przez cerrato.

Optymalizacja kodu do programu "Generator liczb losowych z zapisem do pliku z wykorzystaniem parametrów"

0

Siemanko. Mam pytanie. Czy poniższy skrypt można bardziej zoptymalizować, bo jak do parametrów przekażesz 2cyfrowe wartości liczbowe program się wysypuje. Parametry się przekazuje kiedy aktywuje się skrypt i nie jestem pewny czy prawidłowo przeprowadziłem walidacje parametrów. Potrzebuje szybkiej odpowiedzi.

generator -- do dopracowania.rar

3

a weź to jakoś wstaw online czy coś zamiast w rarze.

0

main.cpp

#include <iostream>
#include <windows.h>

#include "assets/Args.cpp"
#include "assets/generateData.cpp"
#include "assets/saveData.cpp"

#define MAX_ARGUMENTS 2

using namespace std;

int main(int argc, char **argv){
    system("cls");
    
    try{
        Args <int, MAX_ARGUMENTS> arguments(argc, argv);
        int* nums = arguments.get();
        int** data = generateData(nums);

        saveData(data, nums);

        cout << "Done!" << endl;
    }

    catch(const invalid_argument &e){ 
        if(e.what() == "stoi") cout << "Wprowadzono litere zamiast liczby!" << endl;
        else cout << e.what() << endl;
    }

    system("pause");
    return 0;
}

assets/Args.cpp

#include <iostream>
#include <string>
using namespace std;

template <typename T = string, int MAX_ARGUMENTS = 1> class Args {
    T * argv = new T();
    int argc;

    T value(string value){
        if(is_same<T, int>::value) return stoi(value);
    }
    
    public:
        Args(int argc, char **argv){
            if((argc - 1) != MAX_ARGUMENTS) throw invalid_argument("Nieprawidlowa ilosc argumentow! Liczba argumentow musi wynosic " + to_string(MAX_ARGUMENTS) + "!"); 

            for(int i = 1; i < argc; i++){
                int value = this->value(argv[i]);

                if(value <= 0) throw invalid_argument("Wartosc nie moze byc mniejsza od zera!");
                this->argv[i - 1] = value;
            }

            this->argc = argc - 1;          
        }

        ~ Args() { delete[] this->argv; }
        T *get() { return this->argv; }
};

assets/generateData.cpp

#include <iostream>
#include <time.h>

int** generateData(int* nums){
    srand(time(NULL));

    int x = nums[0], y = nums[1];
    int** rows = new int* ();

    for(int i = 0; i < x; i++){
        int* cols = new int();

        for(int j = 0; j < y; j++) cols[j] = rand() % 100 + 1;
        rows[i] = cols;
    }

    return rows;
}

assets/saveData.cpp

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void saveData(int** data, int *nums){
    int x = nums[0], y = nums[1]; fstream f;
    f.open("data.txt", ios::out);

    for(int i = 0; i < x; i++){
        for(int j = 0; j < y; j++)
            f << to_string(data[i][j]) << " ";

        f << "\n";
    }
    
    f.close();
}
0

@cerrato: Dzięki za przeniesienie tego na inny forum.
Jeżeli chcesz pomoc to wcześniej z rana stworzyłem nowy post. oto link:
https://4programmers.net/Forum/C_i_C++/361440-optymalizacja_kodu_do_programu_generator_liczb_losowych_z_zapisem_do_pliku_z_wykorzystaniem_parametrow

0

Skoro mamy 2x to samo, to ten wątek nadaje się do skasowania.
Dlatego - ten zamykam, a wszystkie osoby proszę o pisanie w drugim - https://4programmers.net/Forum/C_i_C++/361440-optymalizacja_kodu_do_programu_generator_liczb_losowych_z_zapisem_do_pliku_z_wykorzystaniem_parametrow?p=1849146#id1849146

1 użytkowników online, w tym zalogowanych: 0, gości: 1