Gå til innhold

Hvilket språk bør jeg lære meg?


Anbefalte innlegg

Hei,

har i lengre tid gått med planer om å lære meg et C-lignende språk, og har nå bestemt meg for å gjøre det. Men har to problemer: For det første, vet jeg ikke hvilket språk jeg bør lære meg. Står hovedsakelig mellom C#, Java, C++ og C, men er åpen for andre forslag. Har hørt mye bra om C#, og bruker selv flere Mono-programmer daglig, men så er det jo patentene, og vil helst ikke risikere å ha masse kunnskap om C# til ingen nytte. Java er vel ganske sakte (?), men kryssplatform. Kommer sannsynligvis etterhvert til å utvikle programmer for GNOME, så det er ikke så viktig at programmene kan kjøres på Windows eller Mac OS X.

 

Prøvde å lære meg C++ for et halvt år siden eller so, men forsto ikke så godt konseptet med pointers (men de er vel like i andre C-lignende språk) og strings. C kan jeg litt av fra før, men sluttet å lære meg det pga. omtrent de samme grunnene som med C++ i tillegg til at det ikke er objekt-orientert.

 

For det andre har jeg litt problemer med å finne gode bøker og nettsider der jeg kan lære meg språk. Har lånt noen Java, C++ og C-bøker på biblioteket, men synes ikke disse er særlig gode. De begynner veldig "rett på" ved for eksempel å vise et relativt avansert program og så forklare det, som jeg ikke trives veldig godt med. Kan Python og Pascal fra før.

 

Takker for alle svar! :)

Lenke til kommentar
Videoannonse
Annonse

C++. Begrunnelsen finner du rundt om i diverse tråder ved å søke. Rask oppsummering: Raskt, veldesignet, kraftig, elegant og effektivt. Med et kryssplattformbibliotek er C++ like kryssplattform som Java (om ikke mer) med unntak av at du må kompilere for hver plattform, men det er generelt ikke noe problem.

 

 

Accelerated C++ ansees som den beste boken for nybegynnere. Det lille jeg har kikket i den har vært svært lovende, og en bekjent av meg som holder på med å lære seg C++ går alltid med den under armen :)

Lenke til kommentar

Vær oppmerksom på at det er lettere å gå fra C++ til C enn omvendt. Om du kan C og skal lære C++ vil du ha problemer med å benytte deg av de avanserte elementene i språket, mens det vil være lettere å gå fra C++ til C (selv om du sannsynligvis vil savne mulighetene C++ byr på...).

Lenke til kommentar
  • 2 uker senere...
Okei. Nå har jeg kjøpt "Accelerated C++". Kommer sikkert noen flere spørsmål etter hvert :)

Holder på å lage et veldig enkelt program som skal spørre brukeren et spørsmål og kjøre funksjoner avhengig av svar. Problemet er det ikke virker. Kompileringen går helt fint, men når programmet kjøres og jeg blir spurt dette spørsmålet, svarer jeg på det, men ingen ting skjer utenom at programmet stopper. Her er koden:

 

#include <iostream>

using namespace std;

char hamlet[50];

class sentences
{

public:

static int hello()
{
cout << "Goodbye,\n";
cout << "cruel world!\n";
};

static int goodbye()
{
cout << "Hello,\n";
cout << "world!\n";
};

};

int main()
{
cout << "Are you a positive or a negative person?\n>";
cin >> hamlet;

if(hamlet == "negative")
{
 sentences::goodbye();
}

else if(hamlet == "positive")
{
 sentences::hello();
};

};

 

Og (den viktigste delen av) strace-outputet:

 

write(1, "Are you a positive or a negative"..., 41Are you a positive or a negative person?
) = 41
write(1, ">", 1>)                        = 1
fstat64(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe7000
read(0, positive
"positive\n", 1024)             = 9
_llseek(0, -1, 0xbffff678, SEEK_CUR)    = -1 ESPIPE (Illegal seek)
_llseek(0, -1, 0xbffff678, SEEK_CUR)    = -1 ESPIPE (Illegal seek)
munmap(0xb7fe8000, 4096)                = 0
exit_group(0)

 

Takker for alle svar! :)

Endret av Gimper
Lenke til kommentar

her er en litt annen men nesten helt lik måte og løse det på.

Istedenfor og bruke char, så bruker jeg string. Siden det er enklere og handtere.

 

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

string hamlet;

class sentences
{

public:
      int hello() {
          cout << "Goodbye,\n";
          cout << "cruel world!\n";
          }
          
      int goodbye() {
          cout << "Hello,\n";
          cout << "world!\n";
          }
};


int main() {
   sentences s;    

   cout << "Are you a positive or a negative person?\n>";
   cin >> hamlet;

   if(hamlet == "negative") {
         s.goodbye();
         }

else if(hamlet == "positive") {
    s.hello();
    }


system("pause");
return 0;
}

 

jaja vet at system("pause"); suger :p

Lenke til kommentar

Takker, men fikk det til å virke på en annen måte (takk til Ratix og Zyp :) ). Må tydeligvis bruke strcmp. Ny kode:

 

#include <iostream>

using namespace std;

char hamlet[50];

class sentences
{

public:

static int hello()
{
cout << "Goodbye,\n";
cout << "cruel world!\n";
};

static int goodbye()
{
cout << "Hello,\n";
cout << "world!\n";
};

static int minusplusletter()
{
char x;
char y;
x = 'X';
y = 'D';

x = x - 1;
y = y - 1;

x = x + 1;
y = y + 1;

cout << x;
cout << y << "\n";
};

};

int main()
{
cout << "Are you a positive or a negative person?\n>";
cin >> hamlet;

if (strcmp(hamlet, "negative") == 1)
{
 sentences::goodbye();
}

else if (strcmp(hamlet, "positive") == 1)
{
 sentences::hello();
}

 

Har likevel et problem igjen. Koden virker når jeg skriver inn "positive", og teksten skrives til skjermen, men når jeg skriver "negative" skjer ingenting og programmet stoppes. Har prøvd å bytte om på "negative" og "positive" i if-loopen, men det hjelper ikke. :(

Lenke til kommentar

Utdrag fra "Linux Programmers Manual":

STRCMP(3)                  Linux Programmer's Manual                STRCMP(3)

 

NAME

      strcmp, strncmp - compare two strings

 

SYNOPSIS

      #include <string.h>

 

      int strcmp(const char *s1, const char *s2);

 

      int strncmp(const char *s1, const char *s2, size_t n);

 

DESCRIPTION

      The  strcmp()  function compares the two strings s1 and s2.  It returns

      an integer less than, equal to, or greater than zero if  s1  is  found,

      respectively, to be less than, to match, or be greater than s2.

 

Endret av zirener
Lenke til kommentar

Hvorfor gjøre det vanskelig, når man kan gjøre det enkelt?

 

#include <iostream>
#include <string>

class sentences {
public:
    static void hello() {
        cout << "Goodbye,\n";
        cout << "cruel world!\n";
    }

    static void goodbye() {
        cout << "Hello,\n";
        cout << "world!\n";
    }
// minusplusletter() er irrelevant, og dermed fjernet
};

int main()
{
    using std::cout;
    using std::cin;
    using std::string;

    string hamlet;

    cout << "Are you a positive or a negative person?\n> ";
    cin >> hamlet;

    if (hamlet == "negative") {
        sentences::goodbye();
    }

    else if (hamlet == "positive") {
        sentences::hello();
    }
}

 

Vær oppmerksom på at strcmp() returnerer 0, ikke 1, når strengene er like.

 

 

Edit 1: Rettet skrivefeil

Edit 2: Endret returtype i medlemsfunksjonene fra int til void.

Endret av Myubi
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...