Προς το περιεχόμενο

Γενικό thread αποριών για τη C#.


Alithinos

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλό...Ασφαλώς δεν έχει. Απλά ο περιορισμός του Int στη γλώσσα αυτή είναι θέμα. Αλλά δεν το σκέφτηκες καλά. Πριν από αυτόν τον περιορισμό παίζει και άλλος ένας. Πόσο μεγάλο πίνακα μπορούσε να φτιάξει σε ένα 128 kbyte Ram; Όπου από αυτή τη μνήμη παίρνει και η οθόνη; Αν θυμάμαι καλά δεν παίζει πίνακας μεγαλύτερος από 64 kbytes άρα το πολύ 16384 (διορθώθηκε) όριο. Μετά πας σε bit, με μετατροπή ή σε assembly Z80, και εκεί ξεφεύγεις από sign Int, ας πούμε σε 100 kbytes θα έχεις 800000 το μέγιστο.

Δεν είχα Amstrad. Τον είχα χειριστεί ελάχιστα. Είχα Acorn μηχανήματα με BBC BASIC, που είχε 4 bytes Integer.

Επεξ/σία από M2000
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 505
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Καλό...Ασφαλώς δεν έχει. Απλά ο περιορισμός του Int στη γλώσσα αυτή είναι θέμα. Αλλά δεν το σκέφτηκες καλά. Πριν από αυτόν τον περιορισμό παίζει και άλλος ένας. Πόσο μεγάλο πίνακα μπορούσε να φτιάξει σε ένα 128 kbyte Ram; Όπου από αυτή τη μνήμη παίρνει και η οθόνη; Αν θυμάμαι καλά δεν παίζει πίνακας μεγαλύτερος από 64 kbytes άρα το πολύ 16768 όριο. Μετά πας σε bit, με μετατροπή ή σε assembly Z80, και εκεί ξεφεύγεις από sign Int, ας πούμε σε 100 kbytes θα έχεις 800000 το μέγιστο.

Δεν είχα Amstrad. Τον είχα χειριστεί ελάχιστα. Είχα Acorn μηχανήματα με BBC BASIC, που είχε 4 bytes Integer.

μόνο τραγωδία μπορώ να χαρακτηρίσω το παραπάνω

Ένα integer overflow στον κύριο !

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φαντάσου...από 128 Kbytes πριν 35 χρόνια, έχουμε σήμερα για πλάκα 2048000 kbytes.. 16000 φορές παραπάνω.Αλλά συνεχίζουμε να ασχολούμαστε με πρώτους ..από 1 έως 100, και θέλουμε να γίνεται...με ότι άλλο κατεβάσει η κούτρα μας.

Ασφαλώς Τραγικό....

Φαντάσου...από 128 Kbytes πριν 35 χρόνια, έχουμε σήμερα για πλάκα 2048000 kbytes.. 16000 φορές παραπάνω.Αλλά συνεχίζουμε να ασχολούμαστε με πρώτους ..από 1 έως 100, και θέλουμε να γίνεται...με ότι άλλο κατεβάσει η κούτρα μας.

Ασφαλώς Τραγικό....

 

(16384... στο προηγούμενο...μήνυμα..όχι 16768..)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Note πως αντί για int.MaxValue έχω βάλει short.MaxValue σαν workaround

 

Νομίζω ακόμα καλύτερα να μπει το limit εκεί. Δε σε κάνει να αναρωτιέσαι what is special about that number.

Μούφα...πρόγραμμα.....και ο λόγος; Όταν έχεις βγάλει το πολλαπλάσια του 2, με πίνακα,  τότε δεν υπάρχουν ούτε του 4, ούτε του 8 κοκ...Οπότε ο σωστός αλγόριθμος ποτέ δεν θα πάει στο 4 για να βγάλει τα πολλαπλάσια!!!!!!

Defacer έλαβες Μαθηματικά...0

 

"Δυστυχώς" αν γίνει με τον πατροπαράδοτο τρόπο τότε αναγκαστικά πρέπει να υπάρχει shared state, οπότε χάνεις το πλεονέκτημα ότι η υλοποίηση είναι με functional προσέγγιση και σου μένει μόνο το πρακτικά ανούσιο "αντί για for το κάνω με LINQ".

 

Φαντάσου...από 128 Kbytes πριν 35 χρόνια, έχουμε σήμερα για πλάκα 2048000 kbytes.. 16000 φορές παραπάνω.Αλλά συνεχίζουμε να ασχολούμαστε με πρώτους ..από 1 έως 100, και θέλουμε να γίνεται...με ότι άλλο κατεβάσει ή κούτρα μας.

Ασφαλώς Τραγικό....

 

Τραγικό είναι το να ασχολείται κανείς με ο,τι μαλακία κατεβάσει η κούτρα του όπως λες και να βαφτίζει το παραγόμενο έκτρωμα "προσανατολισμένο στην εκμάθηση" και άλλα φαιδρά.

 

Το να εξετάζει κανείς προσεγγίσεις με διαφορετική νοοτροπία από την άλλη είναι όντως σκόπιμο διδακτικά. Αναγνωρίζω βέβαια ότι ως συνήθως δεν καταλαβαίνεις για τι πράγμα μιλάμε, πόσο μάλλον με ποιό τρόπο είναι διαφορετικό, οπότε δεν έχω απαιτήσεις.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να λέμε την αλήθεια, μου άρεσε το πρόγραμμά σου. Δεν θα το χρησιμοποιούσα για να βρω 1000000 πρώτους, ή για την ακρίβεια δεν θα το χρησιμοποιούσα καθόλου. Όμως ως μια πρόταση με ειδικό χειρισμό συναρτησιακού προγραμματισμού είναι οκ. Είναι για διάβασμα δηλαδή, μια άσκηση.

Τα χαζά έμμεσα για τη Μ2000, περί φαιδρότητας, είναι για να καταπραΰνει τον εγωισμό...Είναι για το λόγο αυτό...αποδεκτά.

 

Πάω να κάνω εξάσκηση στο pong που έφτιαξα. Έχω βαφτίσει Defacer τον αντίπαλο...να το ευχαριστηθώ...

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό που μια κατηγορία ανθρώπων (στην οποία δυστυχώς περιλαμβάνεσαι και συ) δυσκολεύεται ιδιαίτερα να καταλάβει είναι ότι ο "αντίπαλος" είναι πρόσωπο μόνο στην πολιτική. Στην επιστήμη αντίπαλος είναι η ημιμάθεια και η παραπληροφόρηση.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σώπα ρε Επιστήμονα....

Βάλε στο νου σου βέβαια ότι ο άνθρωπος...δεν βγήκε από την επιστήμη...την δημιούργησε. Προφανώς η επιστήμη, είναι το απόσταγμα ημιμαθών και παραπληροφορημένων, που με τα χρόνια... και την άσκηση...βλέπε πειράματα...άνοιξαν τα μάτια τους και των άλλων.

Και η Μ2000 πείραμα είναι.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να λέμε την αλήθεια, μου άρεσε το πρόγραμμά σου. Δεν θα το χρησιμοποιούσα για να βρω 1000000 πρώτους, ή για την ακρίβεια δεν θα το χρησιμοποιούσα καθόλου. Όμως ως μια πρόταση με ειδικό χειρισμό συναρτησιακού προγραμματισμού είναι οκ. Είναι για διάβασμα δηλαδή, μια άσκηση.

Τα χαζά έμμεσα για τη Μ2000, περί φαιδρότητας, είναι για να καταπραΰνει τον εγωισμό...Είναι για το λόγο αυτό...αποδεκτά.

 

Πάω να κάνω εξάσκηση στο pong που έφτιαξα. Έχω βαφτίσει Defacer τον αντίπαλο...να το ευχαριστηθώ...

 

χαχαχαχ καλο.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

DDevil,

όλοι καλοί είμαστε...εδώ κάνω λίγο χιούμορ. Επιπλέον έφτιαξα το Pong2 (παίζει πιο επιθετικά ο αντίπαλος...κάνει "κατεβασιές"...)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βεβαίως. Sieve με LINQ λοιπόν:

 

Func<int, IEnumerable<int>> nonPrimesUpTo = limit => 
    Enumerable.Range(2, (int)(Math.Sqrt(limit)) - 1)
              .SelectMany(x => Enumerable.Range(2, limit / x).Select(y => x * y))
              .Distinct();

Func<int, IEnumerable<int>> sieve = limit => Enumerable.Range(2, limit - 1)
                                                       .Except(nonPrimesUpTo(limit));

foreach (var prime in sieve(100))
{
    Console.WriteLine(prime);
}

Μπορεί να γίνει και μονοκόμματο, το χώρισα για να διαβάζεται (kind of).

 

 

αυτά τα κόλπα γίνονται σε c++; ( προφανώς όχι 99, από τελευταίες εκδόσεις αν έχει κάτι ) ξέρω πως από την 11 έχεις lambdas αλλά τι είδους support υπάρχει; το λέω γιατί μου θύμισε λίγο scala και θέλω να δω κατά πόσο μπορώ να μεταφέρω αυτό το στυλ και σε c++

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

αυτά τα κόλπα γίνονται σε c++; ( προφανώς όχι 99, από τελευταίες εκδόσεις αν έχει κάτι ) ξέρω πως από την 11 έχεις lambdas αλλά τι είδους support υπάρχει; το λέω γιατί μου θύμισε λίγο scala και θέλω να δω κατά πόσο μπορώ να μεταφέρω αυτό το στυλ και σε c++

Δες εδώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μέχρι να λύσω το θέμα με τα Non-Local (αν λυθεί ποτέ...)

Αυτή είναι η λύση για High Order Function

H Compose δίνει αντικείμενο και το αντικείμενο έχει μια Val() που εκτελεί του "ορισμούς" που έχουν αποθηκευτεί σε δυο αλφαριθμητικά. Ακόμα και να φύγουμε από το σημείο που είναι οι F και Twice, δηλαδή να "επιστρέψουμε" το αντικείμενο, θα υπάρχουν οι συναρτήσεις "μέσα του".

 

το παράδειγμα το πήρα από python:

 

>>> def twice(function):
... return lambda x: function(function(x))

>>> def f(x):
... return x + 3

>>> g = twice(f)

>>> print g(7)
13
>>> print g(8)
14

 

 

Και εδώ σε Μ2000 (αντί να έχω Read X  και μετά = Χ+3 , με την Number διαβάζω την τιμή της παραμέτρου απευθείας στην έκφραση)

 

\\ Higher-Order Function
\\ no pointers - use of object
Function F {
      =Number+3
}
Function Twice {
      read &F()
      =F(F(Number))
}
Function Compose {
      Group AA {
            A$, B$
            Function Val {
                  =Function(.A$,.B$, Number)
            }
      }
      Read AA.A$, AA.B$
      =AA
}
G=Compose(&Twice(),&F())
Print G.Val(7) \\ 13
Print G.Val(8) \\ 14

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

αυτά τα κόλπα γίνονται σε c++; ( προφανώς όχι 99, από τελευταίες εκδόσεις αν έχει κάτι ) ξέρω πως από την 11 έχεις lambdas αλλά τι είδους support υπάρχει; το λέω γιατί μου θύμισε λίγο scala και θέλω να δω κατά πόσο μπορώ να μεταφέρω αυτό το στυλ και σε c++

Πανω κατω ναι, απλα στη c# εχει ζαχαριτσα :P

πχ transform σε C# (η Select)


namespace FooBar
{
    class Program
    {
        static void Main(string[] args)
        {
            var persons = new[] { new { Name = "foo", Age = 20 }, new { Name = "bar", Age = 44 } };
            var names = persons.Transform(x => x.Name);

            foreach (var item in names)
                Console.WriteLine(item);

        }
        
    }
    public static class Foo
    {
        public static IEnumerable<R> Transform<R,T>(this IEnumerable<T> seq, Func<T,R> op)
        {
            foreach (var item in seq)
                yield return op(item);
        }
    }
}

Και το ιδιο σε C++ (η std::transform)

template<class ItIn, class ItOut, class Op>
void transform1(ItIn first, ItIn last, ItOut output, Op op)
{
	for (; first != last; ++first)
		*++output = op(*first);
}

struct Person
{
	std::string Name;
	int Age;
};


int main(int argc, char **argv)
{
	auto persons = std::vector<Person>{ Person{ "Foo", 20}, Person{"Bar", 34} };
	std::vector<std::string> out;
	transform1(persons.begin(), persons.end(), std::back_inserter(out), [](const Person& p) {return p.Name; });

	for (auto item : out)
		std::cout << item << std::endl;
	return 0;
}

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...