Gå til innhold

søppel

Medlemmer
  • Innlegg

    838
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av søppel

  1. Skal du både lese inn tegn, strenger og tall bør du lese inn i en std::string og (eventuellt) konvertere til andre typer (int f.eks.) etterpå.

     

    #include <iostream>
    #include <sstream>
    
    
    template<typename T1, typename T2>
    T1 toType(T2 const& source)
    {
            std::stringstream oss;
            oss << source;
            T1 target;
            oss >> target;
            return(target);
    } // toType
    
    int main()
    {
            using namespace std;
    
            int i = 1234;
            string s = toType<string>(i);
    
            cout << s << endl;
    
            i = toType<int>(s);
            cout << i << endl;
    
            return(0);
    } // main
    

  2. 	template<typename T>
    void readStdin(T& t, std::string msg, std::string on_wrong_input)
    {	
     std::cout << msg << std::flush;
     while(!(std::cin >> t)) {
     	std::cout << on_wrong_input;
     	std::cin.clear();
     	std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
     	std::cout << msg << std::flush;
     }
    } // readStdin
    

     

    Edit:

    Bør seff generaliseres til å håndtere input fra andre streamer enn cin .. og håndteringsrutinger bør også spesifiseres "utenifra" (generaliseres) ...

  3. ta en titt på cin.ignore()

     

    bokstaven (eller det som ikke var et tall) ligger fortsatt i stdin-bufferen .. derfor looper programmet hver gang du venter på ny input (cin >> something) .. da det ellerede ligger data i bufferen .. men denne er feil .. og feiler igjen .. og igjen

     

    skrevet fryktelig fort dette ... les noe om io-bibliotekene

     

     

    edit:

     

    ooh ... btw ..

    cin returnerer false om noe feiler ..

    if(!(cin >> option)) {

    cin.igonre(); // noe silkt .. blabla

     

    } else if(option == 1) {

    doStuff();

    }else if(option == 2) {

    doSomeOtherStuff();

    } ...etc.

  4. Spiller omtrent ingen rolle hvilket språk du velger - "alle" har mulighet for slike ting.

     

    Som det ble nevnt her; hvis du allerde kan Java bør vel det være godt nok i massevis for slike ting. Hvis du ikke føler at du har lyst å lære et nytt språk sånn uansett da .. (men det er litt dårlig timing hvis det er noen som sitter å venter på at du skal få ferdig en ting)

  5. Hvordan kan det ha seg at nesten all progamvare jeg er borti kjører raskere under *nix enn Win32?

     

    Jeg har ingen benchmarks å backe up med hensyn til selve kompilerene, men det jeg sa ovenfor kan jeg bekrefte. Og er det ikke da naturlig å tro at de som har spandert mye tid på å optimalisere *nix-programvare også har optimalisert kompileren?

     

    Edit:

    Uansett er GCC/MinGW mer enn bra nok for mitt bruk. Den har kompilert Doom3, Quake og UT2004 (+++) .. det går som olja lyn.

     

    Jeg tviler på at noen her "møter veggen" med tanke på evnen GCC har til å optimalisere.

  6. hmmmmmmmmmmmmmmm

    Hvis det ikke skal være mulig for de "store gutta" (dooh) å diskutere er ikke dette et værende sted.

     

    Fredrik får svar på spørsmålene sine, uten tvil, -- men ting foregår "samtidig". Om ting blir rotete er det fordi dette ikke er et trådet forum (eller en Wiki).

  7. Ja - det er akkurat det man gjør.

     

    Edit:

    Men det finnes IDEer (editorer) med RAD-støtte, det vil si at du kan "tegne opp" GUIet; så genererer den kode for deg.

     

    Jeg foretrekker å kode selv -- da det blir minst uventet krøll av det, og koden får samme stil som resten av prosjektet.

     

    (og ikke minst -- det er når du gjør det selv at du lærer av det, og skjønner noe av det som foregår i koden)

  8. Her er en i Common Lisp:

     

    (defun palindrome (x)
     (let ((s (princ-to-string x)))
       (if (string-equal s (reverse s))
         t
         nil)))

     

    (garantert bedre måter å gjøre dette på .. jeg lærer .. hadde det bare vært snakk om lister hadde noe annet vært raskere .. etc.)

     

    (palindrome "abba")

    T

    (palindrome "abbaa")

    NIL

    (palindrome 123)

    NIL

    (palindrome 1221)

    T

     

    ..og...

     

    (dotimes (i 10000)
     (if (palindrome i)
       (format t "~A " i)
       nil))
    
    0 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 101 111 121 131 141 151 161 171 181 191 202 212 222 232 242 252 262 272 282 292 303 313 323 333 343 353 363 373 383 393 404 414 424 434 444 454 464 474 484 494 505 515 525 535 545 555 565 575 585 595 606 616 626 636 646 656 666 676 686 696 707 717 727 737 747 757 767 777 787 797 808 818 828 838 848 858 868 878 888 898 909 919 929 939 949 959 969 979 989 999 1001 1111 1221 1331 1441 1551 1661 1771 1881 1991 2002 2112 2222 2332 2442 2552 2662 2772 2882 2992 3003 3113 3223 3333 3443 3553 3663 3773 3883 3993 4004 4114 4224 4334 4444 4554 4664 4774 4884 4994 5005 5115 5225 5335 5445 5555 5665 5775 5885 5995 6006 6116 6226 6336 6446 6556 6666 6776 6886 6996 7007 7117 7227 7337 7447 7557 7667 7777 7887 7997 8008 8118 8228 8338 8448 8558 8668 8778 8888 8998 9009 9119 9229 9339 9449 9559 9669 9779 9889 9999 

     

    Sum-saken:

     

    (let ((ans 0))
     (dotimes (i 10000)
       (if (palindrome i)
         (incf ans i)
         nil))
     ans)
    545040

     

    Edit:

    eehh .. orginaloppgaven var jo ikke helt slik, men samme.

  9. Skal være rettet nå - var en "bøgg" der.

     

    Jeg har ikke tid å se på den forrige nå - kan ta en titt siden hvis det ikke ordner seg.

     

    Edit:

    cout'en i "hovedloopen" er litt uheldig plassert med tanke på ans, men du skjønner greia.

     

    Om du er ute etter hastighet bør funskjonene inlines. (husk å kompilere med minimum -O2 for at dette skal tre i kraft)

     

    Håper den gir ut riktig svar nå da ..

  10. #include <iostream>
    #include <sstream>
    
    
    template<typename T1, typename T2>
    inline T1 toType(T2 const& source)
    {
    std::stringstream oss;
    oss << source;
    T1 target;
    oss >> target;
    return(target);	
    } // toType
    
    
    // Intrusive (faster) version.
    template<typename T1, typename T2>
    inline void toType(T2 const& source, T1& target)
    {
    std::stringstream oss;
    oss << source;
    oss >> target;
    } // toType
    
    
    std::string reverse(std::string const& s)
    {
    std::string ret = ""; // Yup - since we're inserting.
    unsigned int const n = s.length();
    
    for(unsigned int i = 0; i < n; i++)
     ret.insert(0, 1, s[i]);  
    
    return(ret);
    } // reverse
    
    
    // Intrusive (faster) version.
    void reverse(std::string const& s, std::string& ret)
    {
    ret = ""; // Yup - since we're inserting.
    unsigned int const n = s.length();
    
    for(unsigned int i = 0; i < n; i++)
     ret.insert(0, 1, s[i]);  
    } // reverse
    
    
    template<typename T>
    bool palindrome(T const& o)
    {
    std::string tmp = toType<std::string>(o);
    
    return(tmp == reverse(tmp));
    } // palindrome
    
    
    using namespace std;
    
    
    
    int main()
    {
    unsigned long ans = 0; 
    
    for(unsigned y = 0; y < 1000; y++)
     for(unsigned x = 0; x < 1000; x++) {
     	cout << "x: " << x << " Y: " << y << " pal(" << x * y << "): " << palindrome(x * y) << " ans: " << ans << endl;
     	if(palindrome(x * y))
       ans += x * y;
     }
    
    return(0);
    } // main
    

     

    Edit:rettet

×
×
  • Opprett ny...