/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Div. begynderspørgsmål til C++.
Fra : Tommy Helgevold


Dato : 14-12-01 09:46

Hej gruppe,

Jeg er *helt* fersk i C++, og har for 3-4 dage siden downloadet min
"free" udgave af Borland C++ builder v.5.

Nu har jeg plugget mig igennem div. tutorials og det ser ud til at
køre riktig så godt, men jeg har nogle spørgsmål som jeg håber i
kan hjelpe mig med:

1) - Includes og Libraries, - Jeg har set at mange af jer foretrækker
at skrive f.eks #include <iostream> istedet for
#include <iostream.h>, hvorfor? Min compiler brokker sig
dersom jeg fjerner ".h" de to tegn.

2) - Er der nogen god dokumentation på nettet over includes & libraries
om hvad man kan bruge den enkelte include til og hvordan man
bruger den (f.eks til et grafisk vindu hvis man vil kode et spil)?

3) - Jeg lavede i morges dette lille program for at teste om jeg overhovedet
kan finde ud af C++. Min opgave gik ud på at lave et lille program
der oversetter et binært tal til en synlig "8-bit" blok (til f.eks
display
af punkterne i en 8 bits blok:

// program starter her------------------------------------------
#include<iostream.h>
int doof(1),baffle(0);

// initializing b1 - b8 with the value 0 (in order to reset the bits)

int b1(0),b2(0),b3(0),b4(0),b5(0),b6(0),b7(0),b8(0);
int main (void)
{
do {
baffle=0;
b1=0;b2=0;b3=0;b4=0;b5=0;b6=0;b7=0;b8=0;
cout << "Decimal to bit (0-255):";
cin >> baffle;
doof = baffle;

if (baffle>=128)
{b1=1;baffle -= 128;}
else
b1=0;
if (baffle>=64)
{b2=1;baffle -= 64;}
else
b2=0;
if (baffle>=32)
{b3=1;baffle -= 32;}
else
b3=0;
if (baffle>=16)
{b4=1;baffle -= 16;}
else
b4=0;
if (baffle>=8)
{b5=1;baffle -= 8;}
else
b5=0;
if (baffle>=4)
{b6=1;baffle -= 4;}
else
b6=0;
if (baffle>=2)
{b7=1;baffle -= 2;}
else
b7=0;
if (baffle==1)
{b8=1;}
else
b8=0;

cout << b1<<b2<<b3<<b4<<b5<<b6<<b7<<b8<<"\n";
} while (doof > 0);
return 0;

}
// Program slutter her -----------------------------------------

3) fortsat......mit spørgsmål er ....der må da være en nemmere
måde at lave overstående kode på, men de tutorials på nettet jeg
har været igennem (dem jeg har fundet) kunne jeg ikke finde
en forklaring på f.eks følgende problemstilling:

I f.eks gammel basic kunne man skrive:

Start:
Len a(10)
for a=1to10
b=b+1
a(b)=10*a
next a

Det som overstående kode gør er at fylde variablene a1 til a10
med tallverdien 10*a. Men i C++ så er det totalt anderledes,
der ville a(b) være at variabelen a ville få et nyt tal
(ligesom om man skrev : int a(10) eller ligesågodt: int a(5)

spørgsmålet er....hvordan kan jeg effektivisere min c++ rutine
med bedre kode? Jeg kunne bruge nogle forslag til overstående.

Håber i kan hjelpe en newbie

--
Med venlig hilsen
Tommy Helgevold
http://www.qsl.net/oz4kid



 
 
Tommy Helgevold (14-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 14-12-01 09:50

"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> skrev i Min opgave gik ud på
at lave et lille program
> der oversetter et binært tal til en synlig "8-bit" blok (til f.eks
> display af punkterne i en 8 bits blok:

Det skulle selvfølgelig være:

Programmet går ud på at oversætte et desimaltal til binær kode og
vise det i binær form.

DOH DOH DOH....I må unskylde...

Mvh
Tommy




Mogens Hansen (14-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 14-12-01 10:18


"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> wrote in message
news:3c19bc05$0$67505$edfadb0f@dspool01.news.tele.dk...
> Hej gruppe,
>
> Jeg er *helt* fersk i C++, og har for 3-4 dage siden downloadet min
> "free" udgave af Borland C++ builder v.5.
>
> Nu har jeg plugget mig igennem div. tutorials og det ser ud til at
> køre riktig så godt, men jeg har nogle spørgsmål som jeg håber i
> kan hjelpe mig med:
>
> 1) - Includes og Libraries, - Jeg har set at mange af jer foretrækker
> at skrive f.eks #include <iostream> istedet for
> #include <iostream.h>, hvorfor? Min compiler brokker sig
> dersom jeg fjerner ".h" de to tegn.

Fordi det er ISO C++ Standard at skrive "#include <iostream> og det er
gammel stil (før Standard) at skrive "#include <iostream.h>.
En af de gode ting ved at skrive ISO C++ Standard compliant kode, er at det
er en fast, rimelig præcis, reference.
Dermed kan det understøttes af mange compilere, og der er overensstemmelse
med hvad compilerene opfatter som rigtigt, og hvad der står beskrevet i gode
bøger.

Hvad brokker din compiler sig over ?
Min Borland C++Builder V5.0 brokker sig ikke (normal - "cassert" er en dum
untagelse) over at bruge ISO C++ compliant includes

>
> 2) - Er der nogen god dokumentation på nettet over includes & libraries
> om hvad man kan bruge den enkelte include til og hvordan man
> bruger den (f.eks til et grafisk vindu hvis man vil kode et spil)?
>

www.dinkum.com er en mulighed.
Men ellers er der mange gode bøger.
Vær opmærksom på at ISO C++ _ikke_ har noget GUI bibliotek. Man bruger
typisk noget platform og compiler specifikt.
Når du bruger C++Builder er det nærliggende at bruge VCL - men vær opmærksom
på at GUI koden ikke kan flyttes til andre compilere og platforme (med
mindre Borland bestemmer det).

> 3) - Jeg lavede i morges dette lille program for at teste om jeg
overhovedet
> kan finde ud af C++. Min opgave gik ud på at lave et lille
program
> der oversetter et binært tal til en synlig "8-bit" blok (til f.eks
> display
> af punkterne i en 8 bits blok:
>
> // program starter her------------------------------------------
> #include<iostream.h>
> int doof(1),baffle(0);
>
> // initializing b1 - b8 with the value 0 (in order to reset the bits)
>
> int b1(0),b2(0),b3(0),b4(0),b5(0),b6(0),b7(0),b8(0);
> int main (void)
> {
> do {
> baffle=0;
> b1=0;b2=0;b3=0;b4=0;b5=0;b6=0;b7=0;b8=0;

skriv typen (int) på variable - selvom det ikke er påkrævet.
Det gør programmet tydeligere.

> cout << "Decimal to bit (0-255):";
> cin >> baffle;
> doof = baffle;
>
> if (baffle>=128)

Det er tydligere at skrive

if(baffle & (1 << 7))

hvor & er bitwise and
og << er skifte operation

> }
> // Program slutter her -----------------------------------------
>
> 3) fortsat......mit spørgsmål er ....der må da være en nemmere
> måde at lave overstående kode på, men de tutorials på nettet jeg
> har været igennem (dem jeg har fundet) kunne jeg ikke finde
> en forklaring på f.eks følgende problemstilling:
>

>
> spørgsmålet er....hvordan kan jeg effektivisere min c++ rutine
> med bedre kode? Jeg kunne bruge nogle forslag til overstående.

En umiddelbar løsning, som ikke ligger langt fra din er

#include <iostream>

using namespace std;

int main(void)
{
unsigned char baffle = 176;

for(int bit = 7; bit >= 0; --bit) {
cout << ((baffle & (1 << bit)) ? '1' : '0');
}
cout << endl;

return 0;
}

En lidt kortere og direkte måde er at bruge template klassen "std::bitset"

#include <iostream>
#include <bitset>

int main(void)
{
unsigned char baffle = 176;
std::cout << std::bitset<8>(baffle) << std::endl;
}



Venlig hilsen

Mogens Hansen



Tommy Helgevold (14-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 14-12-01 11:05

"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:3c19c3ce@lxcs1.manbw.dk...

> Hvad brokker din compiler sig over ?

Hvis jeg nu skriver include# <iostream> istedet for include# <iostream.h>
så vil det program eksemplet i mit forrige indlæg give følgende fejl:

Error E2451 bitconv.cpp 18: Undefined symbol 'cout' in function main()
Error E2451 bitconv.cpp 19: Undefined symbol 'cin' in function main()

Dersom jeg skifter tilbage til den "gamle stil" så fungerer programmet som
normalt. Ved ikke hvorfor.

> Vær opmærksom på at ISO C++ _ikke_ har noget GUI bibliotek. Man
bruger typisk noget platform og compiler specifikt.

Kan jeg så ikke programmere "GUI" koden f.eks for windows kompatibillitet
som et objekt og så have forskellige objekts for forskellige platforme?

> Når du bruger C++Builder er det nærliggende at bruge VCL

VCL - det bliver jeg nødt til at kigge lidt på nettet om information - nu er
du inde på et område jeg ved enda mindre end ingenting om

Tak for informationen, hjælpen og kodeforslagene.
Dine kode-eksempler fungerede perfekt, går straks i gang med at lære
de funktioner.

Mvh
Tommy




Mogens Hansen (14-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 14-12-01 11:15


"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> wrote in message
> "Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
>
> > Hvad brokker din compiler sig over ?
>
> Hvis jeg nu skriver include# <iostream> istedet for include# <iostream.h>
> så vil det program eksemplet i mit forrige indlæg give følgende fejl:
>
> Error E2451 bitconv.cpp 18: Undefined symbol 'cout' in function main()
> Error E2451 bitconv.cpp 19: Undefined symbol 'cin' in function main()
>
> Dersom jeg skifter tilbage til den "gamle stil" så fungerer programmet som
> normalt. Ved ikke hvorfor.

"cout" og "cin" ligger i namespace "std".
Du skal skrive
using namespace std;
eller
using std::cout; using std::cin;
eller
std::cout << ...
std::cin >> ...

Skynd dig at købe bogen
Accelerated C++: Practical Programming by Example
Andrew Koenig and Barbara E. Moo
ISBN: 0-201-70353-X

Den er rigtigt god, og forklarer alt dette bedre end hvad der kan gøres på
en nyhedsgruppe (du er naturligvis velkommen til at spørge - det er ikke
sådan ment).

>
> > Vær opmærksom på at ISO C++ _ikke_ har noget GUI bibliotek. Man
> bruger typisk noget platform og compiler specifikt.
>
> Kan jeg så ikke programmere "GUI" koden f.eks for windows kompatibillitet
> som et objekt og så have forskellige objekts for forskellige platforme?
>

Nej.
Så skal du vælge GUI biblioteker (f.eks. Qt eller wxWindows) som
understøtter det.
Det oplagte er at holde GUI koden og beregning koden skapt adskilt (det er
lettere sagt end gjort).

> > Når du bruger C++Builder er det nærliggende at bruge VCL
>
> VCL - det bliver jeg nødt til at kigge lidt på nettet om information - nu
er
> du inde på et område jeg ved enda mindre end ingenting om

Det er et klassebibliotek, der følger med C++Builder, til at lave forms,
knapper etc. med.
Se hjælpesystemet for en beskrivelse.

Venlig hilsen

Mogens Hansen



Tommy Helgevold (14-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 14-12-01 11:49

"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:3c19d133$1@lxcs1.manbw.dk...

> Skynd dig at købe bogen
> Accelerated C++: Practical Programming by Example
> Andrew Koenig and Barbara E. Moo
> ISBN: 0-201-70353-X

Det lyder som en riktig god idé.

> Det er et klassebibliotek, der følger med C++Builder, til at lave forms,
> knapper etc. med.
> Se hjælpesystemet for en beskrivelse.

Åbenbart ikke i min version
Jeg håber ikke det er et sådan "visual" system som "bygger" en's kode for
en.....

Mvh
Tommy



Mogens Hansen (14-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 14-12-01 13:29


"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> wrote in message
> "Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse

>
> > Det er et klassebibliotek, der følger med C++Builder, til at lave forms,
> > knapper etc. med.
> > Se hjælpesystemet for en beskrivelse.
>
> Åbenbart ikke i min version

Er det kommando-linie compileren (Borland C++ V5.5) du bruger ?
Den indeholder _ikke_ VCL.
VCL er en del af det kommercielle produkt Borland C++Builder, som bruger
samme C++ compiler.

> Jeg håber ikke det er et sådan "visual" system som "bygger" en's kode for
> en.....
>

Hvorfor håber du ikke det ?

Den laver ikke en masse kode (som f.eks. MFC Wizards i Microsoft Visual
C++) - den laver kun erklæringer og ingen implementering.
Den gør det muligt på en enkel måde at lave bl.a. grafiske
brugergrænseflader på stort set samme måde som Microsoft Visual Basic.

Venlig hilsen

Mogens Hansen



Tommy Helgevold (14-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 14-12-01 16:46

"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:3c19f08b$1@lxcs1.manbw.dk...

> Er det kommando-linie compileren (Borland C++ V5.5) du bruger ?
> Den indeholder _ikke_ VCL.
> VCL er en del af det kommercielle produkt Borland C++Builder, som bruger
> samme C++ compiler.

Jeps - det er den som var "free/gratis!", ville ikke investere i et totalt
developer kit til flere tusinde uden at jeg ved om det er noget for mig.

> > Jeg håber ikke det er et sådan "visual" system som "bygger" en's kode
for
> > en.....
> Hvorfor håber du ikke det ?

Vel - det er vel lidt nostalgisk tror jeg, I "gamle" dage kodede jeg i
assembly på både 6502 & 68k processorer (C64 & Amiga), på pc
har jeg ikke riktig gjort noget andet end 3dstudio max ting & tang,
men fik pludselig et "lyn" fra himmelen i hovedet og fik den lyse idé
at jeg skulle kode i C++ på pc'ern. Og jeg kan bedst lide at kode det
hele selv for det øger forståelsen (det gjorde det ihvertfald i assembly).

> Den laver ikke en masse kode (som f.eks. MFC Wizards i Microsoft Visual
> C++) - den laver kun erklæringer og ingen implementering.

Godt! Jeg ønsker at have så meget kontrol over egne programmer som mulig
samt at slippe af med alle disse "m$ & andre companies" royalties i tilfælde
af at jeg skulle lave noget af interæsse så at kode tingene selv er en måske
lidt tung sag - men hey....der er da nogle frynsegoder involveret i det.

Det jeg frygter mest er at være "system-venlig" Det er vel DET der er
sværest at lære?

> Den gør det muligt på en enkel måde at lave bl.a. grafiske
> brugergrænseflader på stort set samme måde som Microsoft Visual Basic.

Har aldrig set eller prøvet visual basic.....er det Basic? som "gamle" basic
bare i lidt mere teknisk udgave med flere muligheder der passer til
nutiden?

Det duer vel ikke direkte at kode D3D spil i passende hastighed vel?
Jeg er *helt* grøn på området.

--
Med venlig hilsen
Tommy Helgevold
http://www.qsl.net/oz4kid




>
> Venlig hilsen
>
> Mogens Hansen
>
>



Thomas Krog (14-12-2001)
Kommentar
Fra : Thomas Krog


Dato : 14-12-01 17:44

> Det duer vel ikke direkte at kode D3D spil i passende hastighed vel?
> Jeg er *helt* grøn på området.

Et D3D kald kører stort set lige hurtigt uanset hvilket programmeringssprog
du bruger [1]. Dvs hvis spillet kun indeholder D3D kald kører det sikkert
næsten ligeså hurtigt i basic. Så hastighedsforskellen kan kun mærkes hvis
der står en masse tunge beregninger i din kildekode. Fx fysisk simulation af
tøj,vand,lys mm. Kunstig intelligens kan også være krævende (selv simple
ting som at finde korteste vej fra et sted til et andet).

[1] Der kan måske gå lidt tid med at konvertere argumenterne hvis typerne
ikke passer med basics typer men typisk er indholdet af et D3D kald så
tidskrævende at det ikke betyder noget.



Tommy Helgevold (14-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 14-12-01 18:34



--
Med venlig hilsen
Tommy Helgevold
http://www.qsl.net/oz4kid
"Thomas Krog" <rick@kampsax.dtu.dk> skrev i en meddelelse
news:9vdad9$ris$1@eising.k-net.dk...
> > Det duer vel ikke direkte at kode D3D spil i passende hastighed vel?
> > Jeg er *helt* grøn på området.
>
> Et D3D kald kører stort set lige hurtigt uanset hvilket
programmeringssprog
> du bruger [1]. Dvs hvis spillet kun indeholder D3D kald kører det sikkert
> næsten ligeså hurtigt i basic.

Ja - det er vel kun en kommunikation mellem Sprog -> D3D som inneholder
Vertex punkter & fill information (textures osv)? Kan vel ikke kræve det
helt store.

> Så hastighedsforskellen kan kun mærkes hvis
> der står en masse tunge beregninger i din kildekode. Fx fysisk simulation
af
> tøj,vand,lys mm.

Der går nok lidt på kommunikationen af de forskellige objekter
i en "virtuel verden" som hele tiden skal "live" opdateres med vertex
koordinater
m.m. Hvad ved jeg - så langt har jeg ikke kommet endnu

> Kunstig intelligens kan også være krævende (selv simple
> ting som at finde korteste vej fra et sted til et andet).

Absolut! For at ikke tale om hvis der skal være mange "væsener" med
AI koding og de skal reagere interaktivt på sine omgivelser (off screen
også).

> [1] Der kan måske gå lidt tid med at konvertere argumenterne hvis typerne
> ikke passer med basics typer men typisk er indholdet af et D3D kald så
> tidskrævende at det ikke betyder noget.

Jeg har primært valgt C++ da det er stort set det spilbranchen bruger,
jeg vil ikke være særlig tjent med at kode i visual basic og så få vide at
de søger kodere der kan c++ / direct x / d3d /opengl etc. Det er rart
å kunne det hele.

Frygter programmering af "system-venlighed" derimod Men skal ikke
tage noget på forskud. Har du nogle ideér om alle de dev-pack's jeg
skal bruge for en komplet pakke (til at lave executable's som er så lidt
..dll & include) afhengig som overhovedet mulig? Er som sagt totalt
Newbie så jeg er ikke engang sikker på hvad jeg spørger om

Mvh
Tommy



Thomas Krog (14-12-2001)
Kommentar
Fra : Thomas Krog


Dato : 14-12-01 21:49

> Frygter programmering af "system-venlighed" derimod Men skal ikke
> tage noget på forskud.

Hvad mener du med "system-venlighed"?

> Har du nogle ideér om alle de dev-pack's jeg
> skal bruge for en komplet pakke (til at lave executable's som er så lidt
> .dll & include) afhengig som overhovedet mulig?

Nej, jeg bruger opengl og directx direkte. Algoritmer er som regl til at
finde på internettet hvis du først kender navnet på dem



Tommy Helgevold (15-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 15-12-01 04:28

"Thomas Krog" <rick@kampsax.dtu.dk> skrev i en meddelelse
news:9vdonf$81g$1@eising.k-net.dk...

> Hvad mener du med "system-venlighed"?

Programmere rent og ordentlig, overtage systemresourcer på en godkendt
måde uden at få fejl eller systemafbrydelser. Levere ram resourcer & andre
hardware ting pent tilbage til "windows" eller andre styresystemer efter
brug.
Jeg ved ikke hvor gjældende denslags er under Windows (og evnt. unix)
men i "gamle dage" på Amiga - var dette yderst nødvendig hvis man ville have
det til at fungere perfekt på "alle" maskiner.

> Nej, jeg bruger opengl og directx direkte. Algoritmer er som regl til at
> finde på internettet hvis du først kender navnet på dem

Hvilke libraries / includes skal man bruge for at bruge disse "direkte" ?
Er det ikke noget windows ville brokke sig over? Newbie spørgsmål...jeg ved
men ellers bliver jeg jo aldrig klogere

--
Mvh Tommy




Thomas Krog (15-12-2001)
Kommentar
Fra : Thomas Krog


Dato : 15-12-01 12:34

> Hvilke libraries / includes skal man bruge for at bruge disse "direkte" ?

Som regl følger disse libs og header-filer med oversætteren. Hvis
oversætteren brokker sig over at noget ikke er defineret plejer jeg at søge
efter denne streng i lib biblioteket (almindelig fil søgning) og derpå kan
jeg se hvilke libs der skal tilføjes (fx. skal ddraw.lib tilføjes til et
projekt i visual c++ men der skal ikke tilføjes lib filer for at bruge
opengl)

> Er det ikke noget windows ville brokke sig over? Newbie spørgsmål...jeg
ved
> men ellers bliver jeg jo aldrig klogere

Nej, hvis man blot sørger for at bruge nogle biblioteker (fx. directx eller
opengl). Dog brokker windows sig hvis du fx. forsøger at skrive direkte til
video ram uden brug af nogle biblioteker.



Tommy Helgevold (15-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 15-12-01 16:16

"Thomas Krog" <rick@kampsax.dtu.dk> skrev i en meddelelse
news:9vfcjq$qr6$1@eising.k-net.dk...
> > Er det ikke noget windows ville brokke sig over?
> Nej, hvis man blot sørger for at bruge nogle biblioteker

Udemærket! Takker!

Mvh
Tommy



Anders Melchiorsen (17-12-2001)
Kommentar
Fra : Anders Melchiorsen


Dato : 17-12-01 12:34

"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> skrev den 15-Dec-01:

> Jeg ved ikke hvor gjældende denslags er under Windows (og evnt.
> unix) men i "gamle dage" på Amiga - var dette yderst nødvendig hvis
> man ville have det til at fungere perfekt på "alle" maskiner.

Under moderne operativsystemer er der beskyttelse af resurser, så du
kan ganske enkelt kun tilgå resurserne gennem systemets funktioner.
Prøver du for eksempel at tilgå hukommelse, du ikke har reserveret,
bliver dit program afbrudt med en "Segmentation fault".

Operativsystemet holder også øje med, hvilke resurser, det uddeler til
hvilke programmer. Når et program afbrydes (frivilligt eller tvungent,
fx på grund af segmentation fault) frigiver systemet automatisk de
resurser, der var reserveret af programmet.

Den type problemer fra dine Amiga-demo-dage er altså et nærmest
overstået kapitel.


Du kan stadig komme i problemer med at programmet ikke kan køre på
alle maskiner, hvis du prøver at oversætte dit program på forskellige
platforme. Visse ting er det i C++ standarden overladt til
oversætteren at definere, så hvis du bruger forskellige oversættere,
kan det være defineret forskelligt. Det drejer sig fx om noget så
grundlæggende som størrelsen på typen "int", hvilket har betydning
for, hvor store tal du kan gemme i en variabel af denne type.

At lave portable programmer kan være svært nok, men det er en god idé
at tilstræbe det, hvor det er muligt. Selv om du måske ikke regner med
at skulle bruge en ny oversætter kan det jo være, at næste version af
din oversætter vælger at definere nogle ting anderledes - og så står
du dér. Derfor er det også en god idé at starte med en bog, som holder
sig til den del af C++, som standarden lægger fast. Så er du sikker på
kun at lære vaner, som virker alle steder (teoretisk i hvert fald, der
kan være fejl i oversættere).


Anders.

Tommy Helgevold (17-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 17-12-01 16:01

"Anders Melchiorsen" <anders@kalibalik.dk> skrev i en meddelelse

> Derfor er det også en god idé at starte med en bog, som holder
> sig til den del af C++, som standarden lægger fast. Så er du sikker på
> kun at lære vaner, som virker alle steder (teoretisk i hvert fald, der
> kan være fejl i oversættere).

Jeg er fuldstændig enig med dig på området. Der er lige nu gode vaner
skal indpodes og det er egentlig også derfor jeg stiller spørgsmål ved
mine rutiner "Det må da være en nemmere måde / bedre måde at
løse opgaven på".

Tusind tak for de gode råd.

--
Med venlig hilsen
Tommy Helgevold
http://www.qsl.net/oz4kid




Tommy Helgevold (14-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 14-12-01 16:54

"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:3c19d133$1@lxcs1.manbw.dk...

> Skynd dig at købe bogen
> Accelerated C++: Practical Programming by Example
> Andrew Koenig and Barbara E. Moo
> ISBN: 0-201-70353-X

Jeg har lige været en tur indenom byen og kigget i 4 boghandlere,
ingen havde bogen og det ville tage til langt efter jul at få den ind,
så får jeg ikke brugt julen til noget fornuftig....der var derimod 6 c++
bøger at vælge mellom (alle 700-1000 siders) 600 kroners

Jeg købte en: 950 siders bog

Ivor Horton's
Beginning C++ The complete language
ANSI / ISO Compliant.
WROX
ISBN: 1-861000-12-X

En bog beregnet for folk der har programmeret i et sprog før (f.eks basic).
Den ser rimelig "venlig" ud....faktisk så venlig at den nesten er kedelig
men den inneholder den "måde" du skriver programmer på "moderne C++"
såvidt jeg kan se.

Gaaaa.....nu mangler jeg bare en måde at kommunikere med
"Windows" på sådan at jeg kan få en grafisk-konsoll at lave noget
med alle tallene Nogle forslag?

--
Med venlig hilsen
Tommy Helgevold
http://www.qsl.net/oz4kid





Jesper Wolf Jesperse~ (15-12-2001)
Kommentar
Fra : Jesper Wolf Jesperse~


Dato : 15-12-01 00:41

Hej Tommy.
Bogen kan købes hos polyteknisk boghandel i lyngby for 421 kroner (også via
nettet) eller via amazon.co.uk for ca 390 kroner.

Accellerated C++ er pengene værd.

med venlig hilsen
Jesper Wolf Jespersen

"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> wrote in message
news:3c1a2040$0$94417$edfadb0f@dspool01.news.tele.dk...
> "Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
> news:3c19d133$1@lxcs1.manbw.dk...
>
> > Skynd dig at købe bogen
> > Accelerated C++: Practical Programming by Example
> > Andrew Koenig and Barbara E. Moo
> > ISBN: 0-201-70353-X
>
> Jeg har lige været en tur indenom byen og kigget i 4 boghandlere,
> ingen havde bogen og det ville tage til langt efter jul at få den ind,
> så får jeg ikke brugt julen til noget fornuftig....der var derimod 6 c++
> bøger at vælge mellom (alle 700-1000 siders) 600 kroners
>
> Jeg købte en: 950 siders bog
>
> Ivor Horton's
> Beginning C++ The complete language
> ANSI / ISO Compliant.
> WROX
> ISBN: 1-861000-12-X
>
> En bog beregnet for folk der har programmeret i et sprog før (f.eks
basic).
> Den ser rimelig "venlig" ud....faktisk så venlig at den nesten er kedelig
> men den inneholder den "måde" du skriver programmer på "moderne C++"
> såvidt jeg kan se.
>
> Gaaaa.....nu mangler jeg bare en måde at kommunikere med
> "Windows" på sådan at jeg kan få en grafisk-konsoll at lave noget
> med alle tallene Nogle forslag?
>
> --
> Med venlig hilsen
> Tommy Helgevold
> http://www.qsl.net/oz4kid
>
>
>
>


Mogens Hansen (14-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 14-12-01 11:16


"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> wrote in message

>
> I f.eks gammel basic kunne man skrive:
>
> Start:
> Len a(10)
> for a=1to10
> b=b+1
> a(b)=10*a
> next a
>
> Det som overstående kode gør er at fylde variablene a1 til a10
> med tallverdien 10*a. Men i C++ så er det totalt anderledes,
> der ville a(b) være at variabelen a ville få et nyt tal
> (ligesom om man skrev : int a(10) eller ligesågodt: int a(5)
>

"a(b)" vil være at kalde funktionen a med parameteren b;
int a(10);
er at erklære variablen a af typen int og initialisere den med 10.
Man kan også skrive
int a = 10;
i stedet

Ikke compileret eksempel:

void foo(void)
{
int a[10]; // Not initialized
for(size_t i = 0; 10 != i; ++i) {
a[i] = 10*i;
}
}

Venlig hlisen

Mogens Hansen



Kasper Vibe Grevsen (15-12-2001)
Kommentar
Fra : Kasper Vibe Grevsen


Dato : 15-12-01 16:20

Hejsa,

> Ikke compileret eksempel:
>
> void foo(void)
> {
> int a[10]; // Not initialized
> for(size_t i = 0; 10 != i; ++i) {
> a[i] = 10*i;
> }
> }
>

Hvad betyder size_t ?

mvh.
Kasper


---
Denne mail er kontrolleret for virus med AVG. Sidst opdateret 4/12-01.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.307 / Virus Database: 168 - Release Date: 11-12-01



Mogens Hansen (15-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 15-12-01 18:02


"Kasper Vibe Grevsen" <kaspervg@mail1.stofanet.dk_> wrote

> > void foo(void)
> > {
> > int a[10]; // Not initialized
> > for(size_t i = 0; 10 != i; ++i) {
> > a[i] = 10*i;
> > }
> > }
> >
>
> Hvad betyder size_t ?
>

size_t er typen på variablen "i".
size_t er defineret i headeren "cstddef" (i C++, og "stddef.h" i C).
Det er et unsigned type, der garanteret og portabelt er stor nok til at
rumme størrelsen på det største objekt på den pågældende platform.
Det er typen på resultatet, når man trækker 2 pointere fra hinanden (men det
er vel nogenlunde det samme, sagt på en anden måde).
Det er en god type at bruge som index i et array (i stedet for int eller
unsigned). int er f.eks. ikke stor nok til at kunne adressere et _stort_
array i Win64.

Venlig hilsen

Mogens Hansen



Byrial Jensen (15-12-2001)
Kommentar
Fra : Byrial Jensen


Dato : 15-12-01 19:35

Mogens Hansen <mogens_h@dk-online.dk> skrev:
>
> size_t er defineret i headeren "cstddef" (i C++, og "stddef.h" i C).
> Det er et unsigned type, der garanteret og portabelt er stor nok til at
> rumme størrelsen på det største objekt på den pågældende platform.

Ja.

> Det er typen på resultatet, når man trækker 2 pointere fra hinanden (men det
> er vel nogenlunde det samme, sagt på en anden måde).

Når man trækker 2 pointere fra hinanden har man brug for en
signed type. Jeg kan ikke udtale mig om C++, men i C bruges
typen ptrdiff_t til dette. Den er defineret i stddef.h.

size_t er derimod typen på resultatet ved brug af sizeof
operatoren i C (og rimeligvis også i C++).

Mogens Hansen (15-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 15-12-01 19:43


"Byrial Jensen" <bjensen@nospam.dk> wrote in message
news:slrna1n5si.4un.bjensen@ask.ask...

>
> Når man trækker 2 pointere fra hinanden har man brug for en
> signed type. Jeg kan ikke udtale mig om C++, men i C bruges
> typen ptrdiff_t til dette. Den er defineret i stddef.h.
>

Ups - det har du ret i



Venlig hilsen

Mogens Hansen



Anders Bo Rasmussen (17-12-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 17-12-01 21:41

On Sat, 15 Dec 2001 18:35:28 GMT,
Byrial Jensen <bjensen@nospam.dk> wrote:

>> Det er typen på resultatet, når man trækker 2 pointere fra hinanden (men det
>> er vel nogenlunde det samme, sagt på en anden måde).
>
> Når man trækker 2 pointere fra hinanden har man brug for en
> signed type. Jeg kan ikke udtale mig om C++, men i C bruges
> typen ptrdiff_t til dette. Den er defineret i stddef.h.

Hvilken type er saa smart at bruge som iterator i et array?

--
Like a rat in a maze Anders Bo Rasmussen mailto:fuzz01@spamfilter.dk
The path before me lies Frimestervej 42 1.tv http://www.fuzz.dk
And the pattern never alters 2400 Kbh. NV
Until the rat dies.

Igor V. Rafienko (17-12-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 17-12-01 23:39

[ Anders Bo Rasmussen ]

[ snip ]

> > Når man trækker 2 pointere fra hinanden har man brug for en signed
> > type. Jeg kan ikke udtale mig om C++, men i C bruges typen
> > ptrdiff_t til dette. Den er defineret i stddef.h.
>
> Hvilken type er saa smart at bruge som iterator i et array?


std::vector<>::iterator :) (da må man forkaste arrays, men _det_ er
vel ikke noe å bry seg om).

Seriøst -- size_t er nok den riktige typen for _indekser_ i en array,
i og med at size_t er garantert stor nok til å romme selv den aller
største indeksen:

int
main()
{
const size_t nelements = 10U;
int a[nelements];

for ( size_t i = 0U; i != nelements; ++i )
   a[i] = 10*i;
}

(ved nærmere ettertanke burde man kanskje ha sagt "size_t
a[nelements]", men pytt sånn).





ivr
--
Typical biased DRC opinion: All ADT's should be made in C++ rather than C
if a choice between those two fundamental languages exists. Templates make
the old C way of doing things downright foolish (when it comes to ADT's).
          --   Dann Corbit on <news:comp.lang.c>

Kasper Vibe Grevsen (16-12-2001)
Kommentar
Fra : Kasper Vibe Grevsen


Dato : 16-12-01 14:38

Hejsa,

> > > for(size_t i = 0; 10 != i; ++i) {
> >
> > Hvad betyder size_t ?
> >
> Det er et unsigned type, der garanteret og portabelt er stor nok til at
> rumme størrelsen på det største objekt på den pågældende platform.
....
> Det er en god type at bruge som index i et array (i stedet for int eller
> unsigned). int er f.eks. ikke stor nok til at kunne adressere et _stort_
> array i Win64.

Okay, men reserverer man så ikke unødigt meget plads eller er det en slags
auto-type?




---
m.v.h. Kasper

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.307 / Virus Database: 168 - Release Date: 11-12-01



Mogens Hansen (16-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 16-12-01 16:00


"Kasper Vibe Grevsen" <kaspervg@mail1.stofanet.dk_> wrote in message

> > > > for(size_t i = 0; 10 != i; ++i) {
> > >
> > > Hvad betyder size_t ?
> > >
> > Det er et unsigned type, der garanteret og portabelt er stor nok til at
> > rumme størrelsen på det største objekt på den pågældende platform.
> ...
> > Det er en god type at bruge som index i et array (i stedet for int eller
> > unsigned). int er f.eks. ikke stor nok til at kunne adressere et _stort_
> > array i Win64.
>
> Okay, men reserverer man så ikke unødigt meget plads eller er det en slags
> auto-type?
>

Nej - ikke så det spiller nogen praktisk rolle overhovedet.
Det er kun et spørgsmål om hvor stor "i" kan blive - ikke hvor stort det
allokerede array er.
I det konkrete tilfælde er "i" automatisk allokeret (typisk på stakken).
size_t vil ofte have en størrelse, som er optimal for den pågældende CPU
arkitektur.
F.eks:
16 bit for Intel 8086
32 bit for IA32 (Intel 80386 til og med Pentium 4) i 32 bit protected
mode
64 bit for IA64 (Itanium)

Venlig hilsen

Mogens Hansen



R. A. Larsen (14-12-2001)
Kommentar
Fra : R. A. Larsen


Dato : 14-12-01 19:45

"Tommy Helgevold" <tommyhe@e-m*nospam*ail.dk> wrote:
>
> I f.eks gammel basic kunne man skrive:
>
> Start:
> Len a(10)
> for a=1to10
> b=b+1
> a(b)=10*a
> next a

Denne C++ kode gør næsten det samme som den ovenstående BASIC kode:

int a[10], b = 0;
for (int i = 0; i != 10; i++) {
a[i] = 10 * ++b;
}

a[] får så værdierne:
a[0] = 10;
a[1] = 20;
...
a[9] = 100;

Husk at det første elememt i a er nummer 0 og at du normalt ikke
bruger både a og a[] i din kode (SVJH er det sådan, at a er det samme
som adressen på a[0]. Teste, teste... Ja, *(a+5) er det samme som
a[5]).

> Det som overstående kode gør er at fylde variablene a1 til a10
> med tallverdien 10*a. Men i C++ så er det totalt anderledes,
> der ville a(b) være at variabelen a ville få et nyt tal
> (ligesom om man skrev : int a(10) eller ligesågodt: int a(5)

Problemet er, at du bruger de forkerte tegn: [] bruges til tabeller.

MVH, René
--
Using Virtual Access
http://www.vamail.com


Tommy Helgevold (15-12-2001)
Kommentar
Fra : Tommy Helgevold


Dato : 15-12-01 04:20

"R. A. Larsen" <r_larsen@image.dk> skrev i en meddelelse
> Problemet er, at du bruger de forkerte tegn: [] bruges til tabeller.

Lige precis den information jeg kunne bruge!
Tak for hjelpen!

--
Med venlig hilsen
Tommy Helgevold
http://www.qsl.net/oz4kid



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste