Avatar billede mollevp Nybegynder
22. juli 2005 - 19:38 Der er 19 kommentarer og
1 løsning

Løsninger til opgaver i The C++ Programming Language

Er der nogle der ved hvor man kan finde løsninger til opgaverne i Bjarne Stoustrups bog: The C++ Programming Language. Jeg har ikke lyst til at købe en bog mere, vil bare gerne lige vide om det jeg laver er forkert eller rigtigt..

MVH Morten
Avatar billede mollevp Nybegynder
22. juli 2005 - 19:45 #1
En del af opgaven som jeg sidder fast i er:
Lav en typedef af: pointer til et array af 7 pointere til int
Avatar billede mollevp Nybegynder
22. juli 2005 - 19:46 #2
Kan man det på en linje.. Jeg er helt lost :) - damn jeg fatter ikke hvordan den skal konstrueres..
Avatar billede arne_v Ekspert
22. juli 2005 - 20:18 #3
typedef int *((*fun)[7]);

måske
Avatar billede mollevp Nybegynder
22. juli 2005 - 20:26 #4
puhh.. kan du evt. forklare lidt hvordan du opbygger den, eller hvis du ligger inde med et godt link en god forklaring af det.. Jeg synes ikke helt det er grundigt nok forklaret i TC++PL
Avatar billede arne_v Ekspert
22. juli 2005 - 20:32 #5
jeg er ikke engang sikker på at det er rigtig

:-)

min logik er:

int *fun = pointer til int
int (*fun)[7] = array med 7 pointer til int
int *((*fun)[7]) = pointer til array med 7 pointer til int
Avatar billede mollevp Nybegynder
22. juli 2005 - 20:54 #6
he he .. jeg synes virkelig de opgaver er svære..

jeg kan godt din logik der.. Lad mig lige prøve en anden så:
Et array af 8 arrays af 7 pointere til int:

int *fun = pointer til int
int (*fun)[7] = array med 7 pointere til int
int ((*fun)[7])[8] = 8 arrays med 7 pointere til int
int (((*fun)[7])[8])[1] = et array med 8 arrays med 7 pointere til int

He he - hvad siger du til den?
Avatar billede mollevp Nybegynder
22. juli 2005 - 20:56 #7
Jeg skriver lige opgaven, som den står:
array of 8 arrays of 7 pointers to int
Avatar billede mollevp Nybegynder
22. juli 2005 - 20:57 #8
Måske skal jeg egentligt stoppe ved:

int ((*fun)[7])[8] = 8 arrays med 7 pointere til int
Avatar billede arne_v Ekspert
22. juli 2005 - 21:01 #9
tror jeg
Avatar billede arne_v Ekspert
22. juli 2005 - 21:02 #10
husk og lav et lille test program så du kan se om de virker !
Avatar billede mollevp Nybegynder
22. juli 2005 - 21:02 #11
Når man sidder og prøver at gennemskue hvordan sådan en sjover er allokeret, koger min hjerne total over :)
Jeg synes det er pænt træls at der ikke findes løsninger til de opgaver i Bjarnes bog.. Hvis der nogle der kender en bog, kunne jeg nok egentlig godt finde på at købe den.. For det er sku nederen ikke at kunne tjekke sine svar..
Avatar billede mollevp Nybegynder
22. juli 2005 - 21:04 #12
Ja, jeg vil lige prøve dem af.. Bare lig et svar Arne - takker for hjælpen..
Avatar billede arne_v Ekspert
22. juli 2005 - 21:04 #13
Avatar billede arne_v Ekspert
22. juli 2005 - 21:04 #14
ok
Avatar billede mollevp Nybegynder
22. juli 2005 - 23:40 #15
Arne jeg prøver at skrive et lille program, der kan fylde arrayet med int's og printe dem igen, men jeg løber simpelthen galt i byen her.. Jeg kan ikke lige gennemskue hvordan jeg skal dereference de pointere der...

Jeg har prøvet noget ala.

int h = 5;

for(int i = 0; i < 7; ++i)
    *(fun[i]) = &h;

men det giver en segment fejl, og det er sådan set også et wild guess.. Har du nogel forslag?
Avatar billede arne_v Ekspert
22. juli 2005 - 23:41 #16
det her udskriver 2 som forventet:

C:\>type ptr.cpp
#include <iostream>

using namespace std;

typedef int *((*fun)[3]);

int main()
{
  int a=1,b=2,c=3;
  int *tmp[3];
  tmp[0] = &a;
  tmp[1] = &b;
  tmp[2] = &c;
  fun p;
  p = &tmp;
  cout << *((*p)[1]) << endl;
  return 0;
}
Avatar billede mollevp Nybegynder
23. juli 2005 - 00:00 #17
Takker.. Det er nice - det giver sku god træning det her.. :)
Avatar billede mollevp Nybegynder
23. juli 2005 - 11:42 #18
Hvis nogle skulle have interesse i blev den anden opgave: array of 8 arrays of 7 pointers to int

Til:

// Typedef af 8 arrays af 7 pointere til ints

#include <iostream>
using namespace std;

int main()
{
    typedef int* test[8][7];
   
    int a = 1,
    b = 2,
    c = 3,
    d = 4,
    e = 5,
    f = 6,
    g = 7;
   
    test p = {{&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g},
          {&a,&b,&c,&d,&e,&f,&g}};
   
   
    for(int i = 0; i < 8; ++i){

    cout << "\nRow #" << i << " : ";
   
    for(int j = 0; j < 7; ++j) cout << " " << *(p[i][j]);
   
    }
    return 0;
}
Avatar billede bertelbrander Novice
24. juli 2005 - 00:06 #19
Jeg fandt en gang et program kaldet cdecl på nettet, det kan oversætte fra C/C++ til meneskesprog og omvendt
Hvis jeg skriver:
explain int *((*fun)[7])
Svarer det:
declare fun as pointer to array 7 of pointer to int

Og omvendt:
declare foo as array 9 of array 8 of pointer to double
Og svaret:
double *foo[9][8]
Avatar billede mollevp Nybegynder
24. juli 2005 - 11:45 #20
Det var sku da godt fundet på :) Det funker bare..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester