Gå til innhold

daysleper

Medlemmer
  • Innlegg

    296
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av daysleper

  1. Takk for svar..

     

    Hvordan får jeg kalkulatoren til og regne ut forsjellige opprasjoner?

    Slik som /,*,- og +

    altså dele, gange, minus og pluss.

     

    
    cerr << tall1 << " - " << tall2 << " = " << tall1 - tall2 << endl; 
    
    cerr << tall1 << " * " << tall2 << " = " << tall1 * tall2 << endl; 
    
    cerr << tall1 << " / " << tall2 << " = " << tall1 / tall2 << endl; 
    
    

     

    Og hva slags fil er

    <limits>

     

    Både limits og iostream er standard headerfiler fra C++'s standardens biblioteker. Hvis du har en god bok vil du få en oversikt over mer eller mindre hele dette biblioteket. Dummies* -bøkene er desverre sjeldent gode. :( Men jeg tror de lærer deg hvordan du legger sammen tall?

    Ta en titt i FAQ'en for anbefalte bøker.

    I mellomtiden kan du kanskje ta en titt på www.cppreference.com , her er noen, ikke alle, av C++'s standard komponenter listet med en kort forklaring.

     

    Hvis du lurte på hvordan man organiserer koden - så kan man f.eks. gjøre det slik:

    #include <iostream>
    
    #include <limits>
    
    
    
    using namespace std;
    
    
    
    // summere
    
    int sum(int tall1, int tall2)
    
    {
    
    return(tall1 + tall2);
    
    }
    
    
    
    
    
    // trekke fra
    
    int differanse(int tall1, int tall2)
    
    {
    
    return(tall1 - tall2);
    
    }
    
    
    
    
    
    // gange
    
    int produkt(int tall1, int tall2) 
    
    {
    
    return(tall1 * tall2);
    
    }
    
    
    
    
    
    // dividere
    
    /*
    
     Legg merke til at divisjon() returnerer double.
    
     Hadde den returnert int ville svaret blitt forkortet, eller rundet av.
    
    */
    
    double divisjon(int tall1, int tall2)
    
    {
    
    return(tall1 / tall2);
    
    }
    
    
    
    
    
    int main()
    
    {
    
    int tall1;
    
    int tall2;
    
    
    
    cerr << "Skriv inn det første tallet: ";
    
    cin >> tall1;
    
    cerr << "Skriv inn det andre tallet: ";
    
    cin >> tall2;
    
    
    
    cerr << "Summen av " << tall1 << " og " << tall2 << " er: " << sum(tall1, tall2) << endl;
    
    cerr << "Differansen mellom " << tall2 << " og " << tall1 << " er: " << differanse(tall2, tall1) << endl;
    
    cerr << "Produktet av " << tall1 << " og " << tall2 << " er: " << produkt(tall1, tall2) << endl;
    
    cerr <<  tall1 << " delt på " << tall2 << " er: " << divisjon(tall1, tall2) << endl;
    
    
    
    return(0);
    
    }
    
    

    ..dette kalles et prosedyrellt design (riktig norsk ord?).. for jeg bruker funksjoner.. men dette finner du ut av siden.. :)

  2. Hvordan man skal lage en kalkulator for skikkelig store regneoperasjoner? Høres vanskelig ut ...men STOORE tall? --Ikke bry deg om sånne detaljer, aldri bry deg om sånne detaljer, i hvertfall ikke i starten.

    De du har tilgjengelig nå er store nok - garantert.

     

    Dette er i hvertfall måten man finner grenser for standard numeriske typer i C++:

     

    #include <iostream>
    
    #include <limits>
    
    
    
    using namespace std;
    
    
    
    const double Pi = 3.1415926; // holder i massevis
    
    
    
    
    
    int main()
    
    {
    
    cerr << numeric_limits<double>().min() << endl;
    
    cerr << numeric_limits<double>().max() << endl;
    
    
    
    return(0);
    
    }
    
    

     

    ..og det er ikke sikkert min maskin har de samme grensene som din! Så hvordan boka kan -vite- hvordan din maskin "ser" ut; vet ikke jeg.

     

    Liten "kalkulator":

    #include <iostream>
    
    #include <limits>
    
    
    
    using namespace std;
    
    
    
    int main()
    
    {
    
    int tall1;
    
    int tall2;
    
    
    
    cerr << "Skriv inn det første tallet: ";
    
    cin >> tall1;
    
    cerr << "Skriv inn det andre tallet: ";
    
    cin >> tall2;
    
    
    
    cerr << "Summen av " << tall1 << " og " << tall2 << " er: " << tall1 + tall2 << endl;
    
    
    
    return(0);
    
    }
    
    

    ..prøv -, * og / selv! :D

  3. #include <iostream>           
    
    #include <cstdlib> 
    
    using namespace std;
    
    
    
    int main()
    
    {
    
     cout << "HelloWorld!" << endl;
    
     system("pause");
    
     return(0);
    
    }
    
    

    Da jeg prøve dette kom det bare fram

    Trykk en tast for og fortsette...

    Uten HelloWorld eller noe

     

    Dette kan være fordi cout er "buffret" (den skriver ikke ut tekst før det er nødvendig).

    Du kan bruke

    cerr << "Hello World!"

    i stedet, siden cerr ikke er buffret (jeg bruker nesten altid cerr).

    Eller du kan "flushe" bufferen, cout.flush(); -- da tvinger du den til å skrive ut teksten selv om bufferen ikke er full.

  4. Har prøvd og sette inn "cin.get()" til slutt også men det funker ikke...

     

    Dette :

    #include <iostream>            
    
    using namespace std;
    
    
    
    int main()
    
    {
    
     cout << "HelloWorld!" << endl;
    
     cin.get();
    
     return(0);
    
    }
    
    

    ..fungerer altså ikke? Det fungerer utmerket her. :shrug:

     

    Du kan prøve dette:

    #include <iostream>           
    
    #include <cstdlib> 
    
    using namespace std;
    
    
    
    int main()
    
    {
    
     cout << "HelloWorld!" << endl;
    
     system("pause");
    
     return(0);
    
    }
    
    

     

    Si fra hvis det første eksempelet ikke virker men det andre gjør det, eller omvendt. Hos meg fungerer begge. Jeg kjører selv Windows XP (riktignok under VMWare i Linux, men det skulle ikke ha noe å si i det hele tatt).

     

    Kanskje du glemmer å recompilere (Rebuild) programmet ditt før du kjører det etter å ha lagt til cin.get()?

  5. [Til FAQ'en]

     

    FAQ: 4.1 - Hvordan programmere vinduer i Windows (Win32)?

     

    Det må først sies at Win32 programmering, som det kalles, kan være rimelig rotete og at det foregår i C, ikke C++. Det finnes andre alternativer som både er enklere, bedre og er plattform-uavhengige, altså som fungerer på andre operativsystemer enn Windows.

     

    Eksempler er:

    FLTK

    wxWindows

     

    Denne artikkelen har lite med OpenGL/DirectX å gjøre, det finnes en annen <artikkel om dette i FAQ'en>.

     

    Noen linker:

    http://winprog.org/tutorial/

    http://www.relisoft.com/win32/index.htm

     

    Jeg tar her for meg Dev-C++ siden det er det jeg har selv og det er det som er fritt tilgjengelig, men det skal gå å taste inn koden under og bruke den mot/i andre compilere/IDE'er også.

    (Noen som har noen erfaringer rundt dette i f.eks. Visual C++?)

     

     

    4.1.1 - Bruke en ferdig mal i Dev-C++

    - Start Dev-C++.

    - Velg File -> New -> Project.

    - Marker "Windows Application" og fyll inn name-rubrikken.

    - Gi .dev-filen et navn. Det som står der fra før av fungerer fint - trykk Save.

    - Du får et vindu med koden til et enkelt Win32-program.

    - Trykk F9 for å compilere og kjøre det (gi filen et navn og trykk Save hvis den spør om dette).

     

    Koden som ble generert fra malen ser slik ut:

    #include <windows.h>
    
    
    
    /*  Declare Windows procedure  */
    
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    
    
    /*  Make the class name into a global variable  */
    
    char szClassName[ ] = "WindowsApp";
    
    
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
    
                       HINSTANCE hPrevInstance,
    
                       LPSTR lpszArgument,
    
                       int nFunsterStil)
    
    
    
    {
    
       HWND hwnd;               /* This is the handle for our window */
    
       MSG messages;            /* Here messages to the application are saved */
    
       WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
    
    
       /* The Window structure */
    
       wincl.hInstance = hThisInstance;
    
       wincl.lpszClassName = szClassName;
    
       wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    
       wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    
       wincl.cbSize = sizeof (WNDCLASSEX);
    
    
    
       /* Use default icon and mouse-pointer */
    
       wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    
       wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    
       wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    
       wincl.lpszMenuName = NULL;                 /* No menu */
    
       wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    
       wincl.cbWndExtra = 0;                      /* structure or the window instance */
    
       /* Use Windows's default color as the background of the window */
    
       wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
    
    
       /* Register the window class, and if it fails quit the program */
    
       if (!RegisterClassEx (&wincl))
    
           return 0;
    
    
    
       /* The class is registered, let's create the program*/
    
       hwnd = CreateWindowEx (
    
              0,                   /* Extended possibilites for variation */
    
              szClassName,         /* Classname */
    
              "Windows App",       /* Title Text */
    
              WS_OVERLAPPEDWINDOW, /* default window */
    
              CW_USEDEFAULT,       /* Windows decides the position */
    
              CW_USEDEFAULT,       /* where the window ends up on the screen */
    
              544,                 /* The programs width */
    
              375,                 /* and height in pixels */
    
              HWND_DESKTOP,        /* The window is a child-window to desktop */
    
              NULL,                /* No menu */
    
              hThisInstance,       /* Program Instance handler */
    
              NULL                 /* No Window Creation data */
    
              );
    
    
    
       /* Make the window visible on the screen */
    
       ShowWindow (hwnd, nFunsterStil);
    
    
    
       /* Run the message loop. It will run until GetMessage() returns 0 */
    
       while (GetMessage (&messages, NULL, 0, 0))
    
       {
    
           /* Translate virtual-key messages into character messages */
    
           TranslateMessage(&messages);
    
           /* Send message to WindowProcedure */
    
           DispatchMessage(&messages);
    
       }
    
    
    
       /* The program return-value is 0 - The value that PostQuitMessage() gave */
    
       return messages.wParam;
    
    }
    
    
    
    
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    
    {
    
       switch (message)                  /* handle the messages */
    
       {
    
           case WM_DESTROY:
    
               PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
    
               break;
    
           default:                      /* for messages that we don't deal with */
    
               return DefWindowProc (hwnd, message, wParam, lParam);
    
       }
    
    
    
       return 0;
    
    }
    
    

     

     

    4.1.2 - Kort forklart hvordan koden fungerer

    ....må...skrive....her.....

     

     

    4.1.3 - Linker til andre resurser

    http://www.winprog.net/tutorial/ - Har en tutorial om Win32.

    www.gametutorials.com - Denne

    www.gamedev.net - ..og denne, tar for seg en del Win32 og annet.

  6. Jeg regner med at du mener hvilken editor eller IDE du kan bruke? Hvis ikke, så er det gcc/g++ du bruker.

     

    gcc brukes for programmer skrevet i C, mens g++ brukes for programmer skrevet i C++. Det fungerer likevell fint å bruke g++ til begge språkene.

     

    Du kan bruke hvilken som helst teksteditor (vi, nano, pico, emacs, vim) og kommandolinjen til å compilere med gcc/g++ slikt som beskrevet i FAQ'en.

     

    Hvis du foretrekker et IDE finnes disse:

    http://anjuta.sourceforge.net/

    http://www.kdevelop.org/ (hvis du kjører KDE)

     

    Selv bruker jeg emacs som IDE og gdb/ddd til debugging, og det er flere som mener dette er et fullgodt IDE. Det er kanskje litt vanskelig å komme i gang med for en nybegynner.

  7. [Til FAQ'en]

     

    FAQ: 2.2 - Anbefalte bøker for nybegynnere?

     

    ..og ja, det første du må lære deg er engelsk! All programmering foregår på engelsk. Noen som har sett kode med tyske/franske/norske kommentarer og variabel/klasse/funksjonsnavn? Rimelig ubrukelig for andre å forstå.

    Alle forklaringer og spørsmål du måtte ha kommer til å bruke engelske tekniske ord for at andre du kommuniserer med skal forstå deg.

    Noen som vet hva ord som "platelager", "tangentbord", "verdensveven", "nettvandrer" betyr? :woot:

    Det finnes selvfølgelig unntak, altså norske ord som er brukbare og som brukes av flere enn akkurat den ene norske forfatteren - men du må som regel lære deg engelsk til slutt uansett.

     

     

    Angående Toll

    http://nostdal.net/lars/forumstuff/toll.txt

     

    For deg som er helt ny

    Accelerated C++ (Andrew Koenig & Barbara Moo)

    Denne har jeg hørt mye bra om, og jeg anbefaler den for nybegynnere. Jeg tror den har en litt annen "vri" på det å lære C++ enn det andre tradisjonelle C++ bøker har, og du kommer fort i gang, noe som er bra. Den er flere ganger blitt anbefalt under news:comp.lang.c++.*.

     

    For deg som har programmert litt før (i andre språk f.eks.)

    The C++ Programming Language, Special Edition (Bjarne Stroustrup)

    Denne er kanskje(?) ikke for helt nybegynnere, men tok den med likevell. Denne er veldig komplett, og fungerer både som lærebok og oppslagsbok og gjør begge jobbene meget godt. Den inneholder veldig detaljerte forklaringer og er veldig "seriøs", noe som kan være en god ting hvis du kan litt programmering fra før av og vil lære C++.

     

    C++ How to Program (4th Edition) (Harvey M. Deitel, Paul J. Deitel)

     

    Object-oriented programming in C++, 4.utgave (Robert Lafore, Sams)

    Dette er en bok som er et komplett oppslagsverk for C++ og objekt orientert programmering. Det er ikke uten grunn denne brukes i undervisning f.eks. ved Høgskolen i Gjøvik sine C++ relaterte fag. (takk til invictus)

     

    For deg som vil lære C fremfor C++

    The C Programming Language (Brian W. Kernighan, Dennis M. Ritchie)

    For dere som vil lære C. Jeg anbefaller i et tidligere svar at det er lurere å lære C++ før C.

     

    Flere bøker for nybegynnere

    Er en del andre gode omtaler om bøker her, selv om noen av dem er av litt eldre dato kanskje:

    http://www.accu.org/bookreviews/public/rev...inner_s_c__.htm

     

    ..og her er det en omtale om en norsk bok: C++ og objekt orientert programmering 2. utgave. (Andreas Quale og Johan Havnen)

     

    Hvor kan man kjøpe bøkene?

    Jeg pleier å bestille bøker fra www.amazon.co.uk (i england) og dette har gått veldig bra; det har faktisk blitt billigere enn mange av de norske bokhandlene. Jeg vet ikke om de sender fra england hvis du bestiller fra www.amazon.com (usa).

     

    Norske bokhandlere som selger flere av disse bøkene:

    http://gnist.no/

    http://bokkilden.no

    http://www.datajungelen.no (takk til Orjanp)

     

    Det er i flere tilfeller lurt å søke på amazon.com først for å finne den nyeste revisjonen av boka for så å søke på dens ISBN-nummer i de norske bokhandlene. Grunnen til dette, etter det jeg opplevde sist jeg bestillte fra en norsk butikk i hvertfall, er at det på noen av de norske sidene er vanskelig å finne den nyeste revisjonen av boka.

     

    Siden jeg ikke eier alle bøkene jeg har foreslått baserer jeg anbefalingene på rykter og andre omtaler. Dere må si i fra hvis dere har dårlig erfaring med noen av forslagene! :)

  8. [Til FAQ'en]

     

    FAQ: 3.2 - Hvordan komme i gang med C/C++ under Linux?

     

    Denne tutorailen lærer deg hvordan du skriver inn programkode og hvordan du bruker en compiler til å lage en eksekverbar fil av programkoden.

     

     

    3.2.1 - Bruke en vanlig teksteditor og kommandolinjen

    Jeg går ut i fra at du har og kan bruke en standard editor som nano, pico eller Vi i konsollet (Terminal) til Linux. Her tar jeg for meg nano.

     

    Start opp nano: nano -w

    (-w slår av word-wrap)

     

    Skriv inn følgende kildekode:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
     cout << "Hei Verden! -- Dette er mitt første program skevet i C++!" << endl;
    
     return(0);
    }
    

     

    Trykk ctrl-o (^O WriteOut) og lagre filen som hello.cpp

     

    Trykk ctrl-x (^X Exit) for å avslutte.

     

    Skriv:

    g++ hello.cpp -o hello

     

    og start programmet:

    ./hello

     

    ..og du har ett program som skriver ut en liten beskjed!

    Kort fortalt så skriver cout data ut i konsollet (skjermen), << operatoren "sender" det som står til høyere for den mot cout. endl står for linjeskift.

     

    Det som er viktig å huske er at man bruker gcc til å kompilere programmer skrevet i C og g++ til programmer skrevet i C++.

    Det fungerer fint å bruke g++ til begge språkene.

  9. [Til FAQ'en]

     

    FAQ: 4.7 - Hvordan programmere nettverk/sockets i Linux?

     

    Fyr opp favoritteditoren din og skriv inn denne koden for serveren:

     

       /*
    
       ** server.c -- a stream socket server demo
    
       */
    
    
    
       #include <stdio.h>
    
       #include <stdlib.h>
    
       #include <unistd.h>
    
       #include <errno.h>
    
       #include <string.h>
    
       #include <sys/types.h>
    
       #include <sys/socket.h>
    
       #include <netinet/in.h>
    
       #include <arpa/inet.h>
    
       #include <sys/wait.h>
    
       #include <signal.h>
    
    
    
       #define MYPORT 3490    // the port users will be connecting to
    
    
    
       #define BACKLOG 10     // how many pending connections queue will hold
    
    
    
       void sigchld_handler(int s)
    
       {
    
           while(wait(NULL) > 0);
    
       }
    
    
    
       int main(void)
    
       {
    
           int sockfd, new_fd;  // listen on sock_fd, new connection on new_fd
    
           struct sockaddr_in my_addr;    // my address information
    
           struct sockaddr_in their_addr; // connector's address information
    
           socklen_t sin_size;
    
           struct sigaction sa;
    
           int yes=1;
    
    
    
           if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    
               perror("socket");
    
               exit(1);
    
           }
    
    
    
           if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
    
               perror("setsockopt");
    
               exit(1);
    
           }
    
           
    
           my_addr.sin_family = AF_INET;         // host byte order
    
           my_addr.sin_port = htons(MYPORT);     // short, network byte order
    
           my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP
    
           memset(&(my_addr.sin_zero), '', 8); // zero the rest of the struct
    
    
    
           if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))
    
                                                                          == -1) {
    
               perror("bind");
    
               exit(1);
    
           }
    
    
    
           if (listen(sockfd, BACKLOG) == -1) {
    
               perror("listen");
    
               exit(1);
    
           }
    
    
    
           sa.sa_handler = sigchld_handler; // reap all dead processes
    
           sigemptyset(&sa.sa_mask);
    
           sa.sa_flags = SA_RESTART;
    
           if (sigaction(SIGCHLD, &sa, NULL) == -1) {
    
               perror("sigaction");
    
               exit(1);
    
           }
    
    
    
           while(1) {  // main accept() loop
    
               sin_size = sizeof(struct sockaddr_in);
    
               if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,
    
                                                              &sin_size)) == -1) {
    
                   perror("accept");
    
                   continue;
    
               }
    
               printf("server: got connection from %sn",
    
                                                  inet_ntoa(their_addr.sin_addr));
    
               if (!fork()) { // this is the child process
    
                   close(sockfd); // child doesn't need the listener
    
                   if (send(new_fd, "Hello, world!n", 14, 0) == -1)
    
                       perror("send");
    
                   close(new_fd);
    
                   exit(0);
    
               }
    
               close(new_fd);  // parent doesn't need this
    
           }
    
    
    
           return 0;
    
       } 
    
    

     

    ..og denne koden for klienten:

     

       /*
    
       ** client.c -- a stream socket client demo
    
       */
    
    
    
       #include <stdio.h>
    
       #include <stdlib.h>
    
       #include <unistd.h>
    
       #include <errno.h>
    
       #include <string.h>
    
       #include <netdb.h>
    
       #include <sys/types.h>
    
       #include <netinet/in.h>
    
       #include <sys/socket.h>
    
    
    
       #define PORT 3490 // the port client will be connecting to 
    
    
    
       #define MAXDATASIZE 100 // max number of bytes we can get at once 
    
    
    
       int main(int argc, char *argv[])
    
       {
    
           int sockfd, numbytes;  
    
           char buf[MAXDATASIZE];
    
           struct hostent *he;
    
           struct sockaddr_in their_addr; // connector's address information 
    
    
    
           if (argc != 2) {
    
               fprintf(stderr,"usage: client hostnamen");
    
               exit(1);
    
           }
    
    
    
           if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info 
    
               perror("gethostbyname");
    
               exit(1);
    
           }
    
    
    
           if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    
               perror("socket");
    
               exit(1);
    
           }
    
    
    
           their_addr.sin_family = AF_INET;    // host byte order 
    
           their_addr.sin_port = htons(PORT);  // short, network byte order 
    
           their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    
           memset(&(their_addr.sin_zero), '', 8);  // zero the rest of the struct 
    
    
    
           if (connect(sockfd, (struct sockaddr *)&their_addr,
    
                                                 sizeof(struct sockaddr)) == -1) {
    
               perror("connect");
    
               exit(1);
    
           }
    
    
    
           if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
    
               perror("recv");
    
               exit(1);
    
           }
    
    
    
           buf[numbytes] = '';
    
    
    
           printf("Received: %s",buf);
    
    
    
           close(sockfd);
    
    
    
           return 0;
    
       } 
    
    

     

    Kompiler hver av dem og start først serveren, så starter du klienten:

    ./client localhost
    
    

     

    Hvis du starter serveren på en annen maskin, f.eks. en med ip 10.0.0.139, starter du klienten slik:

    ./client 10.0.0.139
    
    

     

    <forklare hvordan koden fungerer her>

    Koden er tatt fra: http://www.ecst.csuchico.edu/~beej/guide/n...html/index.html (released som public domain, for de som lurer) der du vil finne en engelsk forklaring og tutorial.

    Må også ha med litt om ACE og andre vanlige socket-libs.

     

     

    Kanskje ikke så intressant i en FAQ, men keg jobber med et C++ API for nettverk/socket-programmering som skal være enklere å bruke for nybegynnere (og meg selv), jeg poster mer om dette her siden.

  10. Heisann!

     

    Jeg er Linux-newbie. Har lyst til og lære om oppbygning av Linux og ikke minst programering i Linux. Driver og lærer meg C++ nå. Men hva mer bør jeg kunne om bash/C/Perl/C++?

     

    Noen bøker eller tutorials og annbefale?

     

    Jeg vet lite om bash og perl, men litt mer om C/C++ - så jeg får svare på det jeg kan.

     

    Du kommer sansynligvis til ha nok med å lære selve språket C/C++ hvis du ikke har programmert før - og du trenger ikke lære det som er spesiellt for Linux for å programmere programmer i C/C++ for Linux. Du kan gjøre masse i standard C/C++ som er nødvendig å kunne for og i det hele tatt begynne på det som kalles programmering under Linux. Hvis du begynner i "feil ende", kommer du sansynligvis til å måtte hoppe tilbake til det å lære C/C++. Ikke at dette gjør så mye kanskje - men det kan være noe å tenke på.

     

    Jeg skriver på en liten tutorial her: http://nostdal.net/forum/viewtopic.php?p=117#117 , som sagt så skriver jeg på den (mens jeg skriver dette :)) - så den er på langt nær ferdig. Kanskje den ender opp som en artikkel her på sourcecode.no litt siden. :)

     

    Uansett:

     

    *google litt*

    Litt forskjellig her:

    http://leapster.org/linoleum/linoleum.html

    Hvis du kombinerer dette med det du kan om C/C++ og info/man-sidene i Linux (eller i den mer grafiske help-funksjonen yelp, som følger med hvis du bruker Gnome i hvertfall).

     

    For programmering av GUI ("grafikk og vinduer og sånn") under Gnome: http://gtk.org/

     

    For programmering av GUI under KDE: http://developer.kde.org/

     

    *lete på amazon*

    Fannt noen som ser ut til å ha fått rimelig bra omtale:

    Beginning Linux Programming

    Advanced Linux Programming

     

    Det kan være lurt å kjøpe disse fra amazon.co.uk - siden *.uk er nærmere enn .com som er i Amerika. Vet ikke om dem sender fra *.uk (nærmeste "butikk") om du bestiller uansett.

     

    Hvis du har lagt inn Linux så inneholder som sagt Help-funksjonen en søkbar index som er veldig kjekk (help-programmet jeg brukes kalles yelp).

  11. Alt man kan gjøre i andre programmeringsspråk kan man gjøre i asm, men ikke omvendt!

     

    Jeg er på en måte enig i dette - men på en annen måte ikke, siden man kan bruke ASM i andre språk og da utvider man språket - på en måte. Man burde heller utvide eller oppgradere drivere til maskinvaren man programmerer mot mener nå jeg hvis man først skal progge i ASM; slik vil du (og andre?) få glede av koden din neste gang du skal bruke funksjonaliteten i den.

    Man kan, i noen programmeringsspråk som C/C++, skrive ASM "direkte i språket". Altså man skriver ASM innimellom den vanlige koden i språket. Eller man lager en egen komponent i ASM og kaller funksjonene i denne komponenten fra det språket man bruker til "vanlig".

    Det finnes flere funksjoner i standard C/C++ som kan være skrevet i ASM for den platformen de kjører på, så hvorfor gjøre jobben en gang til?

    Det er kanskje greit hvis man mener noen har implementert koden til disse funksjonene "for dårlig" - men da må man programmere om disse funksjonene i stedet for å legge til egne synes jeg.

     

    C/C++ blir forresten compilert til ASM/maskinkode uansett - og om du bruker en god compiler vil denne koden gå like kjapt stort sett, om ikke kjappere. Det brukes masse ressurser på å forbedre compilere og jeg tviler på om noen av oss "vanlige dødlige" greier å tenke ut bedre algoritmer enn det disse personene allerede har tenkt ut for oss - og i så fall; hvorfor ikke implementere dette i selve compileren slik at disse algoritmene også blir brukt "neste gang" til fordel og ære og berrømelse for deg og andre som bruker den?

    Jeg forstår at dette i visse tilfeller kan være vanskeligere å implementere i en compiler siden det kan være en del ting som spiller inn i en kode som ikke er din og som skal tolkes og undersøkes om er en gyldig kandidat for akkurat din optimaliserte algoritme. Men det vil uansett være en umulig oppgave for et menneske å gå igjennom 1000-vis av linjer med kode manuellt for å sjekke om den eller en annen algoritme kunne vært implementert akkurat her. Dette har vi compilere for.

     

    Jeg er klar over at det trengs ASM, eller ASM-lignende programmeringsteknikker for å implementere drivere til ny maskinvare og lignende, men jeg tviler på at det er det moesen er ute etter - og jeg tviler på at noen bruker det til noe mer enn det.

     

    Man må også tenke på hva man mener med "å gjøre alt". For det er noen som må skrive dette "alt" også, og det kan vise seg å bli en umulig oppgave på grunn av størrelse - og det er som sagt heldigvis noen som har gjordt mye av jobben for deg, og som har gjordt det på en slik måte at koden du skriver fungerer på andre plattformer også.

     

    Litt far out og off-topic kanskje, men fikk løst å skrive litt så;

    Sett hvis du snakker til meg, og du bruker et språk; norsk (C++).

    Hjernen min tolker disse ordene (compilerer) og gjør dem om til maskinkode.

    Vi vet ikke om denne innvendige maskinkoden i hjernen min er 0'ere eller 1'ere, som på en datamaskin, men det spiller ingen rolle. Vi vet heller ikke om denne maskinkoden er lik den i en annen hjerne, men det er den sansynligvis ikke (mac, linux, sun, *bsd, windows, amiga, etc.).

     

    ASM foregår et bittelite skritt over dette nivået, som sies å være lavnivå og er mer eller mindre dirkete avhengig av maskinen og hvilken type maskinkode den trenger. ASM kan sies å være maskinkode, tror jeg.

     

    Siden norsk er en standard (C/C++ standarden), vil flere enn meg forstå hva du snakker om (fungere på flere plattformer).

     

    Det som er fordelen med datamaskinen, men som desverre, kanskje, ikke går med hjernen er at man kan snakke direkte til den innimellom.

    Man kan innimellom ordene (C/C++ funksjoner) også legge maskinkode i form av ASM.

    Man kan gjøre det umulige, snakke med en ny maskinvare-dings eller lære hjernen å snakke -bedre- med en allerede eksisterende maskinvare-dings; alt man kan i ASM som ikke er implementert i C/C++, samtidig eller innimellom at man snakker vanlig norsk (C/C++).

     

    Skrev alt for mye - og husker ikke om jeg skrev visse ting fler enn én gang, men samme kan det være. Kanskje visse ting er uforståelige, da er det fordi jeg ikke har forklart dem godt nok.

    I grunn kunne jeg bare sagt:

    Bruk ASM hvis du skal kode mot maskinvare der dette er nødvendig (det ikke finnes andre alternativer) og C/C++ til resten.

    , men det finnes altid noen som mener dette ikke er godt nok, "blabla" :o , uten at de kanskje har evnen til å gjøre noe med det.

    De burde i såfall ikke programmere programmerer med denne assemblyen - men drivere, compilere eller kanskje en liten bootloader. :)

  12. Lage egen distro?

    Du trenger ikke kunne C eller C++ for å lage din egen distro.

    En distro består i første omgang (vanligvis) av en CD som gjør det mulig å installere selve distroen med dens mest nødvendige programmer på en maskin slik at man kan starte denne maskinen og ha et system som fungerer.

     

    Videre følger det i distroen ofte med en "pakke-håndterer" som gjør det mulig for en bruker å laste ned, installere og konfigurere andre programmer på en enklest mulig måte. Denne pakke-håndtereren, som er det som kanskje egentlig er det viktigste i en distro, kan være skrevet i et hvilket som helst språk; ikke nødvendigvis C eller C++.

     

    I LFS, etter som jeg har forstått, må du selv installere de mest nødvendige programmene og sørge for å få "bootstrappet" systemet som det kalles. Men hvem -vil- egentlig gjøre denne jobben om igjen og om igjen for hver installering, når man ender opp med et system som ikke er noe forskjellig fra det man hadde fått hvis man brukte en "vanlig" distro som gjorde denne, etter min mening, kjedlige jobben mer eller mindre automatisk?

    Bortkastet tid, synes nå jeg,- programmering er mer intressant. :)

     

    C eller C++..?

    0 og 1 (boolsk algebra) er enkelt og forstå - men vanskelig å lage noe

    fornuftig i.

     

    ASM er vanskeligere å forstå og lære enn 0'ere og 1'ere - men er litt lettere å lage noe fornuftig i enn 0'ere og 1'ere.

     

    C er vanskeligere å forstå og lære enn ASM - men enda litt lettere å lage noe fornuftig i enn ASM.

     

    C++ er vanskeligere å forstå og lære enn C - men enda litt lettere å lage noe fornuftig i enn C.

     

    Fornuftig?

    Fornuftig kan tolkes på mange måter, men jeg tenker kanskje mest på størrelse eller hvilke funksjoner programmet skal ha.

     

    Hvis du skal lage et program som bare legger sammen to tall (eller noe sånnt?!); kan du skrive det i hva som helst.

     

    Skal du lage et program som skal subtrahere, gange, lese fra tastaturet og skrive til skjermen er C litt lettere - når du kan det.

    Som en ekstra fordel når du har skrevet det i C, vil det fungere på andre maskiner også - siden C er en standard som fungerer på flere platformer.

    Det er riktignok mulig å skrive kode i C som bare fungerer på din platform og til og med bare på din type CPU, siden man kan skrive ASM i C koden eller bruke "ASM-lignende funksjonalitet" i den.

     

    Skal du lage et program som skal ha mulighet til å vise grafer, skrive ut ting, ha nettverks-muligheter og kommunisere med andre programmer er C++ litt lettere - når du kan det. C++ er/har også en standard, slik at det du skriver fungerer på flere plattformer.

     

    Men det som er snedig, er at alt du kan lage i C kan også lages i C++, siden C++ er C med litt ++ i. Samme med C, C er assembler med litt ekstra i og siden C++ fortsatt er C, så vil C++ bli alt i ett.

     

    Hvis du ikke vet konkret hva du skal lage, så lær C++ og gå bakover når du får behov for det. Det er lettere å lære hvordan man bruker en bil enn hvordan den fungerer invendig. Når man bruker C man lære seg hvordan ting fungerer innvendig (pekere, malloc, etc.), mens med C++ kan man ta dette siden - når man har behov for det (man bruker std::string i stedet for char*..etc.).

     

    Angående bøker og C før C++

    Jeg tror disse bøkene misforstår litt - C++ er også C.

    Det de kanskje mener er at man må kunne det som er -basic- og ganske likt uansett språk; slikt som løkker, funksjoner osv.

    Det som er forskjellen er at C bruker visse teknikker mer enn C++. Grunnen til dette er at i C++ trenger man ikke, (men man kan), bruke disse teknikkene og da trenger man heller ikke kunne C's teknikker for å lære og/eller bruke C++.

  13. Tror ikke den gjør så mye, for den kompileres ikke en gang.. :)

    Hva mener du? Er det noe feil? Vet ikke hva koden gjør eller noe jeg da. Det er et utdrag...

     

    Ja, det er noen skrive feil der - og det kan hende boken du leser på er litt gammel, for #include <iostream.h> er noe man gjorde i "gammle dager". :) Nå skal det være #include <iostream> og #include <cstdio>.

    Disse skrivefeilene vil gjøre at koden ikke kompileres og du får meldinger om dette. Ikke feilmeldinger, for det er ikke programmet som gjør feil for en gang skyld; men han som lager det (eller han som skrev boken). :wink:

     

    "Følgende program er et eksempel på bruk av bitvise operatorer. Programmet initialiserer to variabler

    
    int nArg1;
    
    nArg = 0x1234;
    
    

    og

    
    int nArg2;
    
    nArg2 = 0x00ff;
    
    

     

    Altså den deklarerer (forteller at "her er det") to variabler av typen "int" (heltall) og initialiserer dem (gir dem verdier) med tall. Tallene er i dette tilfellet av hexadesimal form, men dem kunne like godt vært av desimal form som 10 og 50, for eksempel.

     

    , og viser som utdata resultatet av å bruke OG, ELLER og EKSKLUSV ELLER på dem"

    Har litt trøbbel med og skjønne C++ :oops:

    Men jeg har så vidt lest... :roll:

    Men jeg vil skjønne alt, jeg skal vel egentlig det av meg selv da så langt som jeg har kommet(lest ca. 60sider) Men.. :shrug:

     

    Tror du burde prøve å skrive inn et program og compilere det for å experimentere litt:

    http://www.bloodshed.net/dev/devcpp.html

    , er en veldig god compiler (ed. bruker en), som er fritt tilgjengelig. Prøv den, og fortell åssen det går! :) Prøv å lage et "Hello World!" program:

     

    
    #include <iostream>
    
    
    
    using namespace std;
    
    
    
    int main()
    
    {
    
     cout << "Hei Verden, dette er mitt eget program skrevet i C++!" << endl;
    
     cout << "Trykk enter for å avslutte programmet ... :)" << endl;
    
     cin.get();
    
     return(0);
    
    }
    
    

     

    Ta en tur innom IRC hvis du skulle trenge "live" hjelp; jeg henger på undernet på kanalen #c++.no , kaller meg "daysleper" :)

     

    count vet jeg ikke hva er - men jeg tror det er en skrivefeil; tror det skal egentlig være cout, som er en funksjon (som noen andre har skrevet for deg) for å skrive ut tekst.

    Kraftig skrivefeil ja :oops:

     

    Blir en teit, kjapp og overfladisk forklaring (med sikkert mye (skrive)feil) det her, tror ikke du blir så mye klokere på den - lese en bok i stedet?

    Jeg skjønner litt mer ja, Takk :woot:

     

    Stå på! :yes:

  14. Det er bare et eksempel program på bitwise (operasjoner som kjører sammenligning bit for bit)

    ....

    Det er også noe som heter Logisk Og, Logisk Eller og Logisk Eksludernde Eller, disse skrives && || og ^^

    Vet ikke helt hva som er forskjellen, men logisk And gir litt andre resultater (tror jeg)

     

    Forskjellen er som du sier, at de bitwise operasjonene sammenligner bit for bit, mens de logiske operasjonene sammenligner hele objektet som en helhet:

     

    1 & 1 = 1 (bitwise Og)

    1 && 1 = 1 (logisk Og; 1 og 1 er like så denne vil returnere 1)

    11 & 10 = 10 (bitwise Og, vil returnere, i desimal form, tallet 3)

    11 && 10 = 0 (logisk Og, 11 og 10 er ikke like så denne vil returnere 0)

     

    Rett meg hvis jeg tar feil; har ikke testet dette eller brukt bitwise operasjoner så alt for mye + at jeg har helt i meg litt øl .. :)

  15. Takker for hjelp! :woot:

     

    Når jeg har lært meg C++, kan jeg da programere i Visual C++ da?

    Hvordan er Visual C++ egentlig, med Tools o.s.v.? Er det slik som i Visual Basic (6) ?

     

    C++ er et programmeringsspråk.

    En compiler er et "tool" som gjør om språket til programkode, "compilering" (.exe-fil).

    Et IDE er en teksteditor med flere "tools" for editering av programmeringsspråk.

     

    Du må skille mellom "C++", som er et språk, og "Visual C++" som er navnet på et IDE. Dette IDE'et inneholder flere "tools", blandt annet en compiler som du finner som et menyvalg når du vil compilere koden.

     

    Når du har lært deg C++, kan du bruke Visual C++, ja - men du kan også programmere under Linux, bruke andre IDE'er eller teksteditorer.

    Du kan bruke et gratis alternativ til Visual C++; Dev-C++, som også er ett IDE med flere tools og en compiler.

    Du kan programmere alle maskiner og platformer som har en C/C++ kompiler som støtter dem.

     

    Har programert litt i Visual Basic 6, og det var veldig lett egentlig...(litt ja)

    I C++ er det jo bare å sitte og skrive, litt kjedli i lengden egentlig :roll:

     

    Det ser ut som om man sitter å skriver tekst, men egentlig så er det en refleksjon (i form av tekst, ja) av det som skjer invendig når du prøver å finne den beste løsningen på et problem. Alle programmer er like unike som de personene dem som skriver dem. Untatt "Hello World" maybe :)

     

    All avanert programvare er utelukkende, stort sett, skrevet i C/C++ : http://www.research.att.com/~bs/applications.html

     

    "Just Do It"! :wink:

  16. Tror ikke den gjør så mye, for den kompileres ikke en gang.. :)

     

    Hvor har du fått koden fra? Står vel beskrevet hva den gjør der?

     

    Blir en teit, kjapp og overfladisk forklaring (med sikkert mye (skrive)feil) det her, tror ikke du blir så mye klokere på den - lese en bok i stedet?

     

    0x0ff

    er hexadesimale tall. 0x forteller at tegnene som følger er av hexadesimal form.

     

    #include

    henter inn tekst fra andre filer, dette skjer før kompilering.

     

    int main(),

    er en funksjon med navn main som returnerer ett objekt av typen int og tar ingen parametere.

     

    int,

    er navnet på en type, dette tilfellet typen som beskriver at dette er et heltall.

     

    Du kan lage egne funksjoner som f.eks:

    int sum(int tall1, int tall2),

    som er en funksjon med navn sum, som returnerer en int og som tar to parametere med navn tall1 og tall2; begge av typen int.

     

    {,

    viser at her følger koden til funksjonen main()

     

    } på slutten av koden,

    viser at her er koden til funksjonen main() ferdig.

     

    int nArg1,

    lager ett nytt objekt, også kalt variabel, av typen int med navn nArg1. All data har en type. Samme som at bilen din(nArg1) er et konkret objekt av typen kjøretøy(int).

     

    count vet jeg ikke hva er - men jeg tror det er en skrivefeil; tror det skal egentlig være cout, som er en funksjon (som noen andre har skrevet for deg) for å skrive ut tekst.

     

    return(0),

    forteller at funksjonen skal avsluttes - og at den i dette tilfellet skal returnere ett heltall 0. Dette forteller programmer som eventuellt starter programmet ditt at det ble avsluttet uten problemer. Hadde det oppstått problemer kunne programmet ditt returnert noe annet enn 0, en "error kode".

     

    int sum(int tall1, int tall2) funksjonen,

    kunne f.eks. returnert summen av tall1 og tall2: return(tall1 + tall2);

     

     

    main er navnet på funksjonen alle operativsystemer (som jeg vet om) leter etter inne i programmet ditt for å ha et sted å starte som standard.

     

    Det hender Windows bruker winmain btw. - mulig dette er en macro eller noe slikt, jeg vet lite om det; bruker stort sett Linux.

  17. Er overgangen fra delphi til c++ stor

    Delphi er basert på språket Pascal.

    Jeg gikk fra Pascal til C++ for noen år siden uten alt for store problemer. Tror det tok meg en uke før jeg fikk grepet på syntaxen og ting begynnte å gå av seg selv.

     

    , hva er lurest å lære seg av programering språk????

    Hva som er lurest av programmeringsspråk er avhengig av hva du har planer om å lage. Hva har du planer om å lage? Hvilke kvaliteter ser du som viktige i produktet du har utviklet?

    Men C++ er definitivt ikke noe dumt valg, hvis du ikke skal lage web-sider da. :)

     

    Er det noen gode bøker om c++ på norsk?

    Lær deg engelsk!

    Programmering foregår på engelsk og all kode (skal bli) blir kommentert på engelsk. Alle navn på variabler og funksjoner skal være, og er, på engelsk. (tenk deg tyske eller franske funksjons/variabelnavn?) Alle forklaringer og spørsmål du måtte ha kommer til å bruke engelske tekniske ord for at de du spør skal forstå deg.

     

    Eksempler på "norske dataord" er platelager(harddisk), tangentbord(tastatur), verdensveven, nettvandrer - hva er dette?

     

    Omtaler av gode bøker finner du her: http://www.accu.org/bookreviews/public/rev...inner_s_c__.htm

     

    Ta også en titt innom www.amazon.com for å se hva leserene har å si om bøkene der og om det finnes noen nyere utgivelser enn de som er beskrevet i linken ovenfor!

  18. pointe me den iriterende press any key meldinga e...?

     

    Poenget er at folk som programmerer under f.eks. Windows sliter med at vinduet som programmet kjører i lukkes når det er ferdig å kjøre. Noe som gå på et blunk hvis det er et lite program.

     

    Dette fungerer både under Linux og Windows og er i henhold til standaren:

     

    
    #include <iostream>
    
    
    
    int main()
    
    {
    
      std::cerr << "Hello World!" << std::endl;
    
      
    
      std::cerr << "Trykk enter for å fortsette" << std::endl;
    
      std::cin.get();
    
    }
    
    

     

    Grunnen til at det er vanskelig å lese taster direkte fra konsollet er at konsollet ikke er laget for dette.

    Konsollet er basert på muligheten til å svare på forespørsler fra brukeren; "J" (ja) eller "N" (nei). Dette er en fordel siden brukeren kan trykke feil, og må bekrefte med enter og har da en mulighet til å rette på svaret før det er for sent.

     

    Jeg tror u-buffret input i Linux er vanlig å implementeres v.h.a. (n)curses, dette vet jeg lite om bortsett fra at det visstok skal være et ganske uoversiktelig bibliotek.

  19. Fikk løst å skrive litt kode.. :)

     

    #include <iostream>
    
    #include <vector>
    
    
    
    using namespace std;
    
    
    
    
    
    class Object {
    
    public:
    
     inline string name() const { return(_name); };
    
     virtual void explode() {};
    
    
    
    private:
    
     string _name;
    
    };
    
    
    
    
    
    class Energy {
    
    public:
    
     virtual double energy() = 0;  
    
    };
    
    
    
    
    
    class Mass {
    
    public:
    
     //  virtual void mass(double mass) = 0;  
    
     virtual double mass() = 0;
    
    };
    
    
    
    
    
    class Gravity {
    
     // fill this in later when I think I know what it is
    
    };
    
    
    
    
    
    class Time {
    
     // fill this in later when I think I know what it is
    
    };
    
    
    
    
    
    class Space { // same thing as Time?
    
     // fill this in later when I think I know what it is
    
    };
    
    
    
    
    
    class Atom : public Mass, public Energy, public Time, public Gravity, public Space, public Object {
    
    public:
    
     Atom() : _mc(5) {};
    
     void split() { cerr << "Goodbye world" << endl; }; // I have no ide what's supposed to really happen here
    
     virtual double energy() { return(pow(_mc, 2)); }; // E = mc^2 ..or something 
    
     virtual double mass() { return(_mc); };
    
     
    
    private:
    
     double _mc; // amount of mass
    
    };
    
    
    
    
    
    class Wobject : public vector<Atom*>, public Object { // world object
    
    public:
    
     Wobject() { push_back(new Atom); }; // the objects in this world are very small by default
    
     virtual double energy()
    
     { 
    
       double sum = 0;
    
       for(vector<Atom*>::iterator i = begin(); i != end(); i++)
    
         sum += (*i)->energy();
    
       return(sum);
    
     };
    
     virtual double mass()
    
     {
    
       double sum = 0;
    
       for(vector<Atom*>::iterator i = begin(); i != end(); i++)
    
         sum += (*i)->mass();
    
       return(sum);
    
     };
    
    };
    
    
    
    
    
    class Bomb : public Wobject {
    
    public:
    
     Bomb() {}; // a very small bomb
    
     void explode() { cerr << "Bang!" << endl; (*begin())->split(); }; // Actually, the sound comes afterwards - doesn't it?
    
    };
    
    
    
    
    
    class Lifeform {
    
    public:
    
     virtual bool alive() = 0;
    
     virtual void die() = 0;
    
    };
    
    
    
    
    
    class Human : public Lifeform, public Wobject {
    
    public:
    
     Human() : _alive(true) {}; // will we get a "chicken-and-egg" problem here? at what moment are we "alive"?
    
     virtual bool alive() { return(_alive); }; // if false; is the object still a human?
    
     virtual void die() { _alive = false; };
    
    
    
    private:
    
     bool _alive;
    
    };
    
    
    
    
    
    class World : public vector<Atom*>, public vector<Object*>, public Object {
    
    public:
    
    
    
     
    
    private:
    
    };
    
    
    
    
    
    int main()
    
    {
    
     World my_world;
    
     my_world.vector<Object*>::push_back(new Human);
    
     my_world.vector<Object*>::push_back(new Bomb);
    
     my_world.vector<Object*>::back()->explode();
    
     return(0);
    
    }
    
    
    
    
    
    /*
    
    This was written as a joke and as an exercise for me in C++.
    
    How can this code ever be intelligent?
    
    It is a (very poor) model of the world as I see it right now. Maybe my perception of the world changes,
    
    or maybe the world it self changes so it no longer matches the model.
    
    
    
    I should learn to write code that evolves, that is alive, that changes with it's environment.
    
    The code for Human (Lifeform) is different for each human - but this code must be generated at runtime
    
    based on some simple basic rules over time. Maybe these rules lie in basic Physics?
    
    A.I. and A.L. is the same thing I think.
    
    
    
    I think - therefore I am, and to be is therefore to be intelligent. Or simething like that .. :)
    
    */
    
    

     

     

    Fyll inn resten - de av dere som har tid til det; hva nå enn det er.. :roll:

    --

    Mvh,

    Lars-Rune Nøstdal

×
×
  • Opprett ny...