Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Tror ikke det finnes noe som er særlig mer komplekst enn C++. Men det er uansett et trygt valg å begynne med. Det er ikke det letteste språket å lære, men det er raskt, fleksibelt og verdifullt å kunne i profesjonell sammenheng.

 

PS. Jeg er ingen ekspert.

Endret av EasyRaider
Lenke til kommentar

Kansje Assembly eller makinkode som jeg nevnte ovenfor.

Jeg har hørt at det er mest pugging og sånt på Assembly men det er jo kanske komplekst de greiene man gjør da. Og samme med maskinkode anntar jeg bare at det er enda lettere å skrive, og enda vanskligere å skjønne.

 

Edit:

PS. Jeg er ingen ekspert.

Ikke jeg heller :p

Endret av zirener
Lenke til kommentar

Hvis han tenker på å lære seg et programmeringsspråk, tror jeg nok ikke assembly er tingen. Vanlige programmer lages ikke med det. Maskin kode er heller ikke det samme, såvidt jeg vet. Dette er kompilert kildekode, som dermed kan utføres av datamaskinen.

 

C++ er relativt avansert ja. Man kontollererer mye selv, men dette resulterer også i at det er mye å passe på. (minnelekasjer kan oppstå lett med uvettig programmering i C++. Det forekommer selvfølgelig i andre språk også...)

Språk som Java og Visual Basic er også "avanserte språk", men det er en del ting man slipper å ta hensyn til. I disse språkene er enkelt å greit å lage grafiske brukergrensesnitt. Dette er ikke fullt så enkelt med C++. Men tror det er kommet en del verktøy som gjør at du kan lage GUI veldig lett i C++ også.

 

Men basisen i programmering er mye det samme i veldig mange språk. Både C++ og Java kan være grei å begynne med. Visual Basic er ikke så lurt å begynne med tror jeg, for da er det lett å bli altfor opphengt i GUI'et i stedefor selve logikken. (VB er "veldig" GUI fokusert fra første stund).

Lenke til kommentar

Assembly? Som første språk? Er det ikke sånn at man må skrive 20 linjer bare for hello world eller noe sånn a?

Hva mente du med: "Dette er kompilert kildekode"? Du mente vel ikke at maskinkode blir kompilert? Det er jo det maskinen forstår så hvorfor skal det bli kompilert?

 

Mulig det bare er jeg som er litt treg ass :ermm:

 

Edit: Makinen ja, det hørtes jo bra ut :nei:

Endret av zirener
Lenke til kommentar

Var det ikke du som tenkte han kunne tenke på assembly da??

eller maskin kode??

 

Kansje Assembly eller makinkode som jeg nevnte ovenfor.

 

Jeg mente dette ikke var stedet å begynne. Dette er et lav-nivå språk, i forhold til mer moderne høy nivå språk som C++ og Java.

 

Og maskinkode? Det kan man da ikke "skrive" i det hele tatt, vel?

Med: "Dette er kompilert kildekode"mente jeg nettopp at kildekode blir til <maskinkode> når du har kompilert den.

Lenke til kommentar

Ojsann, tror jeg(eller begge) har missforstått litt jeg :p .

Var det ikke du som tenkte han kunne tenke på assembly da??

eller maskin kode??

Det var det jeg kunne komme på som avanserte språk, jeg mente egentlig ikke at han skulle sette i gang å lære deg ;) .

Og maskinkode? Det kan man da ikke "skrive" i det hele tatt, vel?

Med: "Dette er kompilert kildekode"mente jeg nettopp at kildekode blir til <maskinkode> når du har kompilert den.

Joda, det er mulig å "skrive" maskinkode, men det er jo veldig vanskligk, og veldig tidkrevente.

Med: "Dette er kompilert kildekode"mente jeg nettopp at kildekode blir til <maskinkode> når du har kompilert den.

Det gjør den, med unntak av noen små greier som jeg ikke husker. Tror det var noe med visual basic.net eller noe sånn, men mulig(sansynlig) jeg at jeg tar feil.

:)

 

Edit: Unødvendig med så mye QOUTE.

Endret av zirener
Lenke til kommentar

etter min mening er assambly et lett språk å forstå og lære, men vanskelig å lage store programmer, men c/c++ er vanskelig å lære, men "lett" å lage store programmer, men man trenger ikke å kunne 100% av C/C++ for å lage store programmer selv om de ofte blir bedre jo mere man kan

Lenke til kommentar
Assembly? Som første språk? Er det ikke sånn at man må skrive 20 linjer bare for hello world eller noe sånn a?

For noen er vel kanskje dette interessant. Her er forskjell på quicksort algoritmen i c/c++ og assembly. Assembly koden er min egen, så den er kanskje ikke helt optimalisert.

 

Først i c/c++.

/* Standard quicksort. */ 
static void quicksort(int a[], int left, int right) { 
   int lp = left - 1; 
   int rp = right; 
   int v = a[right]; 

   /* the partioning element */ 
   if (right <= left) 
       /* Array has one or null elements to sort */ 
       return; 

   /* No elements to the left of lp are greater than the partioning elemnt. */ 
   while (1) { 
       while (a[++lp] < v); 
       while (v < a[--rp]) /* In case the partioning element is the smallest in the array */ 
           if (rp == left) break; 
           if (lp >= rp) break; 
           /* Deadlock, switch elements and continue */ s
           wap(&a[lp], &a[rp]); 
   } 
   /* This completes the partioning */ 
   swap(&a[lp], &a[right]); 

   /* Now every element to the left of a[lp] are smaller than a[lp], * and every element to the right is larger. */ 
   quicksort(a, left, lp - 1); 
   quicksort(a, lp + 1, right); 
} 

void swap(int *x, int *y) { 
   int temp = *x; 
   *x = *y; 
   *y = temp; 
}

 

Så i assembly.

.586      ;32-bits(with pentium instructions).
.MODEL flat    	;Flat memory model.

;;Deklarering av metoder som ligger i .asm fila.
PUBLIC _quicksort

.DATA

dummy DB 1
.CODE      ;Begin code segment.



;;Plassering av argumenter på stakken.
tab = 16      ;EBP + 8
left = 20      ;EBP + 12
right = 24      ;EBP + 16

;;Plassering av lokale variabler på stakken.
;lp = - 4      ;EBP - 4
;rp = - 8      ;EBP - 8
;v = - 12      ;EBP - 12

;;	static void quicksort(int tab[], int left, int right) { 
_quicksort:

 push ebp    	;lagrer gammel base peker.
 push esi
 push edi
 
 mov ebp, DWORD PTR tab[esp]
 mov esi, DWORD PTR left[esp]
 mov edi, DWORD PTR right[esp]

;;	int lp = left - 1; 

 mov eax, esi    ;flytter left til EAX.
 dec eax      ;trekker en fra left.

;;	int rp = right; 
 mov ebx, edi    ;flytter right til EAX.
       
;;	int v = tab[right]; 
 mov ecx, [ebp+edi*4]    ;legger tab[right] til EAX.
 
;;	if (right <= left) 
 cmp edi, esi    ;sammenlikner right og left.
 
;;  return; 
 jle jumpPoint05    ;avslutter metoden hvis right er less or equal.


;;	while (1) { 

jumpPoint01:      	
;;	while (tab[++lp] < v); 
 inc eax
 cmp [ebp+eax*4], ecx  ;sammenlikner tab[++lp] < v
 jl jumpPoint01    ;hopper til jumpPoint01 hvis tab[++lp] er mindre enn v.
       	;fortsetter helt til den finner en verdi større enn pivot.

jumpPoint02:
;;	while (tab[--rp] > v)
 dec ebx
 cmp [ebp+ebx*4], ecx  ;sammenlikner tab[--rp] og v.  
 jle jumpPoint03    ;hopper til jumpPoint02 hvis tab[--rp] er mindre eller lik v
 
;;	if (rp == left) break; 
 cmp ebx, esi    ;sammenlikner rp med left.
 jne jumpPoint02    ;hopper til jumpPoint02 hvis rp ikke er lik left.

jumpPoint03:
;;	if (lp >= rp) break; 
 cmp eax, ebx    ;sammenlikner lp og rp.
 jge jumpPoint04    ;hopper til jumpPoint04 hvis lp er større eller lik rp.

;;	swap(&tab[lp], &tab[rp]); 
 push ecx
 mov edx, [ebp+eax*4]
 mov ecx, [ebp+ebx*4]
 mov [ebp+eax*4], ecx
 mov [ebp+ebx*4], edx
 pop ecx
;;	}    
 jmp jumpPoint01    ;hopper til jumpPoint01.
 

jumpPoint04: 
;;	swap(&tab[lp], &tab[right]);
 push ecx 
 mov edx, [ebp+eax*4]
 mov ecx, [ebp+edi*4]
 mov [ebp+eax*4], ecx
 mov [ebp+edi*4], edx
 pop ecx

;;	quicksort(tab, left, lp - 1); 
 push eax
 push ebx
 push ecx
 
 dec eax
 push eax
 push esi
 push ebp
 
 call _quicksort    ;kaller metoden _quicksort.
 add esp, 12    	;fjerner de variablene som ble pushet.
 
 pop ecx
 pop ebx
 pop eax
 
;;	quicksort(tab, lp + 1, right); 
 
 push eax
 push ebx
 push ecx
 
 push edi  
 inc eax
 push eax  
 push ebp
 
 call _quicksort    ;kaller metoden _quicksort.
 add esp, 12    	;fjerner de variablene som ble pushet.
 
 pop ecx
 pop ebx
 pop eax

jumpPoint05:
 pop edi
 pop esi
 pop ebp	
;;} 
ret        	;avslutter metoden.
end

Lenke til kommentar

og her er quicksort i haskell, til sammenlikning

qsort []     = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
                where
                  elts_lt_x   = [y | y <- xs, y < x]
                  elts_greq_x = [y | y <- xs, y >= x]

Lenke til kommentar
Hvilket av av alle programmerings språkene i denne jungelen er det mest komplekse? Trodde det var C++, men har hørt noen som mener det ikke er det.

Utvilsomt er Common Lisp (CL) det beste språket :thumbup: Men veien for å nå nirvana er lang. Her finns det abstraksjonsmekanismer som strekker seg langt utover det man finner i C++.

 

For å nevne noen egenskaper ved CL iforhold til C++.

1. Fleksibelt makro-system (kode=data), man må nesten trekke litt på smilebåndet med tanke på preprosessoren :laugh:

2. Dynamisk objektsystem og metaobjekt-protokoll

3. Condition-system (C++-programmerere skjønner som oftest ikke bæret når man sier at stacken ikke behøver å utrulles før man håndterer en unntaks-situasjon)

 

Mulig litt mye teori for newbies her, men man begynner gjerne ikke å programmere i CL før man har vært i felten noen tiår. Det tar ofte lang tid å skjønne konseptene.

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å
×
×
  • Opprett ny...