Wow, πολλές πληροφορίες :)
Αρχικά να πω ότι, πράγματι, απλώς σκεπάστηκε.. όμως δεν μπόρεσα να βρω τι συμβαίνει ακόμα - και δεν βλέπω να το καταλαβαίνω σύντομα. Το έψαξα πολύ, αλλά τπτ.
Control αντί για φόρμα. χμμ! Αφού κυριολεκτικά είναι ένα control αυτή η φόρμα, τότε ΝΑΙ! σίγουρα θα ήταν καλύτερα :)
Θα αρχίσω την αλλαγή από form σε control αυτές τις μέρες
Δεν κάνω τίποτα επειδή το "θεωρώ cool". Γενικά δεν είμαι άνθρωπος που σκέφτεται έτσι. Αν ήμουν τότε θα κάπνιζα, και θα ήμουν σε club κάθε βράδυ.
Πιστεύω στο open source. Δεν θεωρώ ότι τα πάντα θα πρέπει να είναι open source. Η γνώμη μου είναι ότι, εάν φτιάξω κάτι το οποίο -μπορεί να χρησιμοποιηθεί σχεδόν σε κάθε πρόγραμμα-, τότε γιατί να μην το μοιραστώ?
Και εδώ απάντησες ήδη για τη δικιά μου περίπτωση :Ρ επειδή είμαι νέος προγραμματιστής και θα έχω σίγουρα κάνει μλκία. Αυτό δεν το είχα σκεφτεί.. και έχεις δίκιο. Ίσως θα έπρεπε να περιμένω να μάθω πολύ καλύτερα προτού κάνω μια τέτοια κίνηση.
Δεν σκέφτομαι να το κατεβάσω τώρα που δημοσιεύτηκε, αλλά σίγουρα δεν θα ανεβάσω τίποτα άλλο μέχρι να μπορώ να αναφέρομαι στον εαυτό μου ως "προγραμματιστής".
Πιστεύω πάντως ότι θα μπορέσουν να κατανοήσουν τον κώδικα μου διότι έχω βάλει πάρα πολλά comments που εξηγώ ουσιαστικά τι κάνει το κάθε πράγμα.
Έχεις δίκιο και σε αυτό. είναι ώρα να φύγω από τη VB και να πάω σε κάτι "c". Πιστεύω ότι η C# θα είναι καλή για αρχή όμως. Μέχρι στιγμής οι μόνες διαφορές που είδα από VB σε C# είναι το πως συντάσσεται η κάθε γραμμή.
Εάν πάω σε C++, τότε τα πράγματα αλλάζουν πολύ. Εκτός του ότι λείπουν πολλά πράγματα, δεν θα μπορώ να χρησιμοποιήσω πια array με την κλασική έννοια MyString() διότι μόλις μπει σε ένα function μέσα, όλα έγιναν σκατά! ξεχνάει τι είναι και γίνεται ένα pointer το οποίο δεν ξέρει ούτε το μέγεθός του!
OMG! δεν είναι έτσι και η C# ε??? θα τρελαθώ αν είναι :(
Anyway. θα κάνω το πρώτο βήμα σε C#, και αργότερα σε c++.
Έχω ήδη δουλέψει c++ βασικά, όχι σε .net, απλή διότι ήθελαν να γίνεται compile και σε windows και σε linux και σε MacOS.
Μου έφυγαν τα μισά μαλλιά που δεν είχε ούτε καν τα κλασικά "ToString" "GetParent" "StartsWith" "Left" "Right" έεεελεος. (έχω τον κώδικα που έγραψα στο τέλος του post για να απαντήσω και στα υπόλοιπα ερωτήματά σου)
Προσπαθώ να χρησιμοποιώ λίγες γραμμές - αρκεί βέβαια να μην είναι υπερβολικά λίγες. Δλδ να μην είναι τόσο λίγες ώστε την επόμενη φορά που θα δω τον κώδικα, να μην καταλαβαίνω τη έγραψα.
Αυτό δεν το είχα σκεφτεί ποτέ.. Δεν κάνω πολλές κλάσεις, αλλά όταν χρειαστεί να κάνω κάτι τέτοιου τύπου, τότε κάνω κλάση... δεν έχω χρησιμοποιήσει ποτέ structure. Νομίζω ότι όταν διάβαζα γι αυτά τα πράγματα, έλεγε εκεί ότι η κλάση είναι η εξέλιξη του structure. Οπότε σκέφτηκα, αν είναι να χρησιμοποιήσω κάτι.. ας χρησιμοποιήσω την εξέλιξη (class).
Όμως απ'ότι κατάλαβα λες ότι η κλάση είναι πιο βαριά ε? Άρα αφού δεν κάνω καμία φορά inherit, ας αλλάξω και τις 3 κλάσεις που έχω σε structures. right?
degrade είναι να φανταστώ κάτι σαν αυτό που έκανα εγώ? δηλαδή κάτι που θα έπρεπε να ήταν control αλλά το έγινε σε form?
Ratio όσον αφορά τι???? Μέγεθος?? Width/Height?
Τέλος, το typebox που θα ήθελα να δεις εάν έχεις κάποιο χρόνο, είναι εδώ: http://www.dotnetzone.gr/cs/forums/thread/72468.aspx
δυστυχώς το text editor του forum είναι λίγο αδύναμο και δεν μου επιτρέπει να κάνω μια όμορφη παρουσίαση.. εάν θες να δεις παρουσίαση, δες απευθείας στην ιστοσελίδα μου http://www.NihilisTsLab.com/typebox
Κώδικας που έκανα σε pure C++:
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <iostream>
#include <type_traits>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/lexical_cast.hpp>
using namespace std;
#define VbCrLf "\n"
#define VbTab "\t"
string AppPath;
string AppFile;
string CurrentLanguage = "en-GB";
template<typename T> static string ToString(const T &Var) {
ostringstream ossVariableReader;
ossVariableReader << Var;
return ossVariableReader.str();
}
template<typename T> static T FromString(const string &Str) {
istringstream issStringReader(Str);
T Var;
issStringReader >> Var;
return Var;
}
string GetParent(char *FileOrPathName) {
string Return;
string strPath = FileOrPathName;
strPath = ToString(FileOrPathName);
return strPath.substr(0, strPath.find_last_of("/\\"));
}
bool Contains(string str, string StringToBeContained) {
unsigned Index = str.find(StringToBeContained);
if (Index != string::npos) {
return true;
}
else {
return false;
}
}
bool StartsWith (string Str, string StartsWithText) {
return boost::starts_with(Str, StartsWithText);
}
bool EndsWith (string Str, string EndsWithText) {
return boost::ends_with(Str, EndsWithText);
}
string Replace(string strToBeAmended, string ReplaceWhat, string WithWhat) {
string Result = strToBeAmended;
if (Contains(strToBeAmended,ReplaceWhat)) {
int IndexOfReplaceWhat = strToBeAmended.find(ReplaceWhat);
int LengthOfReplaceWhat = ReplaceWhat.length();
Result = strToBeAmended.replace(IndexOfReplaceWhat, LengthOfReplaceWhat, WithWhat);
}
return Result;
}
string Left(string Str, int Length) {
return Str.substr(0, Length);
}
string Right(string Str, int Length) {
return Str.substr(Str.length() - Length, Length);
}
string Mid(string Str, int StartIndex, int Length) {
return Str.substr(StartIndex, Length);
}
string SubString(string Str, int StartIndex) {
return Str.substr(StartIndex, Str.length() - StartIndex);
}
void StringStreamRemove(stringstream &ssStringStream, int StartIndex, int Length) {
ssStringStream.str(Left(ssStringStream.str(), StartIndex) + Right(ssStringStream.str(), ssStringStream.str().length() - Length - StartIndex));
}
template<typename T> static void StringStreamAppend(stringstream &ssStringStream, T &Var) {
string strVar = ToString(Var);
string strPrevious = ssStringStream.str();
ssStringStream.str(strPrevious + strVar);
}
template<typename T> static void StringStreamAppendLine(stringstream &ssStringStream, T &Var) {
string strVar = ToString(Var);
string strPrevious = ssStringStream.str();
ssStringStream.str(strPrevious + VbCrLf + strVar);
}
void StringStreamAppendLine(stringstream &ssStringStream) {
string strPrevious = ssStringStream.str();
ssStringStream.str(strPrevious + VbCrLf);
}
////////////////////
//Actual Functions//
////////////////////
string GetSubstrAfterString(const string &StrToBeSearched, const string &StrToGetSubstrAfter, const string &ResultIfStrNotFound = "", bool blStartsWith = false)
{
string strResult = ResultIfStrNotFound;
if (StrToBeSearched.find(StrToGetSubstrAfter) != string::npos)
{
int Index = -1;
if (! blStartsWith)
{
Index = StrToBeSearched.find(StrToGetSubstrAfter) + StrToGetSubstrAfter.length();
}
else if (StartsWith(StrToBeSearched, StrToGetSubstrAfter))
{
Index = StrToGetSubstrAfter.length();
}
if (Index != -1)
{
strResult = StrToBeSearched.substr(Index);
}
}
return strResult;
}
string GetSubstrAfterString(vector<string> &LstToBeSearched, const string &StrToGetSubstrAfter, const string &ResultIfStrNotFound = "", bool blStartsWith = true)
{
string strResult = ResultIfStrNotFound;
for (unsigned i = 0; i < LstToBeSearched.size(); i++)
{
if (Contains(LstToBeSearched, StrToGetSubstrAfter))
{
int Index = -1;
if (! blStartsWith)
{
Index = LstToBeSearched.find(StrToGetSubstrAfter) + StrToGetSubstrAfter.length();
}
else if (StartsWith(LstToBeSearched, StrToGetSubstrAfter))
{
Index = StrToGetSubstrAfter.length();
}
if (Index != -1)
{
strResult = LstToBeSearched.substr(Index);
break;
}
}
}
return strResult;
}
vector<string> GetMultipleSubstrAfterString(vector<string> &LstToBeSearched, const string &StrToGetSubstrAfter, bool ReturnNullListOnStrNotFound, bool blStartsWith = false) {
vector<string> strResult = vector<string>();
if (! ReturnNullListOnStrNotFound) {
strResult.push_back("");
}
for (unsigned i = 0; i < LstToBeSearched.size(); i++) {
if (Contains(LstToBeSearched, StrToGetSubstrAfter)) {
int Index = -1;
if (! blStartsWith) {
Index = LstToBeSearched.find(StrToGetSubstrAfter) + StrToGetSubstrAfter.length();
}
else if (StartsWith(LstToBeSearched, StrToGetSubstrAfter)) {
Index = StrToGetSubstrAfter.length();
}
if (Index != -1) {
strResult.push_back(LstToBeSearched.substr(Index));
}
}
}
return strResult;
}
string doProperPathName(string &DirectoryPath)
{
if (DirectoryPath.find("\\\\") != string::npos)
{
DirectoryPath = Replace(DirectoryPath, "\\\\", "\\");
}
if (DirectoryPath.find("/") != string::npos)
{
DirectoryPath = Replace( DirectoryPath, "/", "\\");
}
if (! EndsWith(DirectoryPath, "\\"))
{
DirectoryPath = DirectoryPath + "\\";
}
return DirectoryPath;
}
string doProperFileName(const string &FileName) {
string Result = FileName;
if (Result.find("\\\\") != string::npos)
{
Result = Replace(FileName, "\\\\", "\\");
}
if (Result.find("/") != string::npos)
{
Result = Replace(Result, "/", "\\");
}
if (EndsWith(Result, "\\"))
{
Result = Result.substr(0, Result.length() - 1);
}
return FileName;
}
template<typename T> string ArrayBox(vector<T> &var, const string &NonDelimitDelimiter = VbTab) {
string Result = ArrayBox(false, "", 1, true, var, false, NonDelimitDelimiter);
return Result;
}
template<typename T> string ArrayBox(bool doNumeriseItems, vector<T> &var, const string &NonDelimitDelimiter = VbTab) {
string Result = ArrayBox(doNumeriseItems, "", 1, true, var, false, NonDelimitDelimiter);
return Result;
}
template<typename T> string ArrayBox(const string &doDelimitItems, vector<T> &var, const string &NonDelimitDelimiter = VbTab) {
string Result = ArrayBox(false, doDelimitItems, 0, true, var, false, NonDelimitDelimiter);
return Result;
}
template<typename T> string ArrayBox(int SplitOnNum, vector<T> &var, bool IgnoreDelimitSpace = false, const string &NonDelimitDelimiter = VbTab) {
string Result = ArrayBox(false, "", SplitOnNum, true, var, IgnoreDelimitSpace, NonDelimitDelimiter);
return Result;
}
template<typename T>
string ArrayBox(bool doNumeriseItems, const string &doDelimitItems, int SplitOnNum, bool IgnoreNullValues, vector<T> &var, bool IgnoreDelimitSpace = false, const string &NonDelimitDelimiter = VbTab, const string DefaultSpace = " ") {
stringstream sbRet;
for (unsigned i = 0; i < var.size(); i++) {
if (var != 0 || (!IgnoreNullValues)) {
if (doNumeriseItems) {
StringStreamAppend(sbRet, (ToString(i + 1) + "] ") );
}
StringStreamAppend(sbRet, var);
if (doDelimitItems != "" && i != var.size() - 1) {
StringStreamAppend(sbRet, (doDelimitItems));
if (! IgnoreDelimitSpace) {
StringStreamAppend(sbRet, (DefaultSpace));
}
}
if ((SplitOnNum > 0) && (((i + 1) % SplitOnNum) == 0) && (i != (var.size() - 1))) {
if (IgnoreDelimitSpace) {
if ((doDelimitItems != "") && Right(sbRet.str(), doDelimitItems.length()) == doDelimitItems) {
StringStreamRemove(sbRet, sbRet.str().length() - (doDelimitItems.length()), doDelimitItems.length());
}
}
else if ((doDelimitItems != "") && Left(Right(sbRet.str(), doDelimitItems.length() + DefaultSpace.length()), doDelimitItems.length()) == doDelimitItems) {
StringStreamRemove(sbRet, sbRet.str().length() - (doDelimitItems.length() + DefaultSpace.length()), doDelimitItems.length() + DefaultSpace.length());
}
StringStreamAppendLine(sbRet);
}
else if ((i < (var.size() - 1)) && doDelimitItems == "") {
StringStreamAppend(sbRet, (NonDelimitDelimiter));
}
}
}
if (doDelimitItems != "" && Left(Right(sbRet.str(), (doDelimitItems.length() + 1)), doDelimitItems.length()) == doDelimitItems) {
StringStreamRemove(sbRet, sbRet.str().length() - (doDelimitItems.length() + 1), doDelimitItems.length() + 1);
}
return sbRet.str();
}
string ReadFile(char *FileName, string &Var) {
string line;
string Result;
int CurLine = 0;
ifstream TextReader;
TextReader.open(FileName);
getline(TextReader, line );
if (line != "")
{
CurLine += 1;
stringstream ssCurLine; //To become (of T) -> to string
ssCurLine << CurLine;
string strCurLine = ssCurLine.str();
Result = strCurLine + ") " + line;
while ( TextReader.good() ) {
getline(TextReader, line );
CurLine += 1;
stringstream ssCurLine; //To become (of T) -> to string
ssCurLine << CurLine;
string strCurLine = ssCurLine.str();
Result += VbCrLf + strCurLine + ") " + line;
}
}
TextReader.close();
Var = Result;
return Result;
}
void WriteFile(char *FileName, string TextTobeWritten) {
ofstream TextWriter;
TextWriter.open(FileName);
TextWriter <<TextTobeWritten;
TextWriter.close();
}
#include <exception>
#include "modCommon.h"
#include "clsFunctions.h"
#include <vector>
using namespace std;
#define VbCrLf "\n"
#define VbTab "\t"
int i = 0;
int NumberOfLoops = 0;
double dblStartingLoop;
double dblEndingLoop;
string ReadFile(char *FileName);
//Spherical Function Vars
double R;
double q;
int main(int argc, char* argv[]) {
try {
AppPath = GetParent(argv[0]);
AppFile = argv[0];
clsFunctions Functions; //Instantiating the Functions' Class
do {
cout <<"Please give a number for 'R': ";
cin >>R;
}
while ( R == 0 );
do {
cout <<"Please type the starting number of the loop: ";
cin >>dblStartingLoop;
}
while ( dblStartingLoop == 0 );
do {
cout <<"Please type the ending number of the loop: ";
cin >>dblEndingLoop;
}
while ( dblEndingLoop == 0 );
do {
cout <<"Please state how many loops you want to be performed: ";
cin >>NumberOfLoops;
}
while ( NumberOfLoops <= 0 );
vector<double> Results;
for (int i = 0; i < NumberOfLoops; i++) {
double q = ((dblEndingLoop - dblStartingLoop) / NumberOfLoops * (i+1)) + dblStartingLoop;
Results.push_back(Functions.SphericalBesselFunction(R, q));
}
string srtResults = ArrayBox(1, Results);
cout <<VbCrLf <<srtResults;
WriteFile("Results.txt", srtResults);
cout <<"\nDone!";
cout <<VbCrLf <<VbCrLf;
system("pause");
return 0;
} catch (exception& e) {
cout << "An error has occured!" << VbCrLf << e.what() << VbCrLf;
system("pause");
}
}