Avatar billede svnne Nybegynder
05. februar 2004 - 11:23 Der er 13 kommentarer og
1 løsning

lidt div. omkring grundlæggende forståelse af C

Jeg er efterhånden blevet gammel i gårde.. men når det kommer til C er jeg helt som en lille baby..

Derfor ville jeg meget gerne vide lidt om datastruktur i C - er der nogen der kan fortælle mig lidt om det evt. ved hjælp af et lille program og så fortælle mig hvor man kan se evt. datastruktur... Derudover vil jeg gerne vide lidt om hvordan man implementere programmer skrevet i C.

Meget gerne eks. så kan jeg bedre forstå det, men også gerne straight tekst som forklare det eller links til hvor jeg kan læse det.. Kender godt siderne fra SSLUG så med mindre der et sted lige præcis står noget om ovenstående - så behøver I ikke henvise der til!

Som I nok kan læse ud af ovenstående spørgsmål er det især det "millitære" i koden jeg vil vide lidt om.. Jeg er jo også gammel millitærmand så derfor kan jeg godt lide orden..
Avatar billede x-masman Nybegynder
05. februar 2004 - 11:41 #1
Den største forskel i C i forhold til andre sprog ligger formentlig i den hyppige brug af pointere. Det vil sige at mange steder referere man ikke til elementet selv men adressen i lageret, hvor det ligger. Lidt kode:

int x = 1, y = 2, z[10]

int *ip; // ip er en pointer til int
ip = &x;  //ip peger nu på x
y = *ip // y er nu 1
*ip = o; //x er nu 0
ip = &z[o]; //ip peger nu på z[0]

Det er altså sådan at man referere til f.eks. int i C.

C er jo ikke objekt orienteret, og der er derfor ikke klasser og andet stads. Dette er der i C++. Derfor hvis du er vandt til f.eks java, vil jeg råde dig til at bruge c++. Her ligger de største forskelle i pointers og at der i c++ ikke er en garbage collector, hvilket vil sige at du selv skal ryde op efter dig selv. Dette gøres ved commandoen free eller delete som frigøre den plads der er blevet allokeret i lageret. Man behøver ikke at ryde op efter en pointer.
Når du har vendet dig til at ryde op efter dig selv (brug af datastrukturer og objekter etc.) og har fundet ud af pointere, er der kun en lille syntaks forskel fra java.
Avatar billede svnne Nybegynder
05. februar 2004 - 11:47 #2
Har jeg forstået det rigtigt, at i C så er det pointere der definere en form for datastruktur??
Avatar billede x-masman Nybegynder
05. februar 2004 - 12:24 #3
nej. Det kommer an på hvad du anser som datastrukturer. Hvis integer er en datastruktur så er det ikke pointeren der definere den. integer er også en type i sig selv, men man bruger bare pointere til at referere til dem. Med dette menes, at den funktion f.eks. ville være forkert:

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

Denne funktion ville korrekt se således ud:

void swap(int *px, int *py){
int temp;

temp = *px;
*px = *py;
*py = temp;
}

Dette skyldes at C benytter call by value ved den første funktion.

Jeg håber dette giver svar på dit spm.
Avatar billede x-masman Nybegynder
05. februar 2004 - 12:28 #4
Altså behandler man typer med pointere. Ellers er der de samme typer som i andre sprog: int, longint, char, string etc.

Hvis datastrukturer er arrays etc. Så er disse også som i så mange andre sprog, men man referere bare til dem på en anden måde (pointere)

På samme måde er c++. Hvis du foreksempel har en klasse test med funktionen bla, vil du i java bruge den sådan her:

test.bla();

mens man i C++ vil bruge en pil:

test->bla();
Avatar billede danielhep Nybegynder
05. februar 2004 - 12:39 #5
http://www.strath.ac.uk/IT/Docs/Ccourse/
http://www.lysator.liu.se/c/bwk-tutor.html
http://members.tripod.com/~johnt/c.html
http://www-h.eng.cam.ac.uk/help/tpl/languages/C/teaching_C/teaching_C.html
http://www.acm.org/crossroads/xrds1-1/ovp.html

Her er en masse online tutorials og guides, de er rigtig gode for en som ikke ved det store omkring c programmering.
De fortæller en masse gode ting og sager omkring c programmering, og nogle løsninger til små problemer.

Mvh

Daniel
Avatar billede x-masman Nybegynder
05. februar 2004 - 12:41 #6
Derudover kan det nævned, at men i c bruger en .h fil for at kunne kalde funktioner fra en fil i en anden fil. F.eks er der denne klasse i c++: (dyn_array.cpp)

#include "dyn_array.h"
#include <math.h>
#include <iostream>

dyn_array::dyn_array(double k){
  K = k;
  size = (int) K;
  E = new int[size];
  num = 0;
}

dyn_array::~dyn_array(){
// nedlæg array
  delete[] E;
}

void dyn_array::expand(){
  int* a = new int[(int)ceil(size * K)];
  for(int i = 0; i < num; i++){
    a[i] = E[i];
  }
  delete[] E; //Free whatever E points to
  E = a; //E points to array
  size = (int)ceil(K * size);
}

void dyn_array::contract(){
  int* a = new int[(int)ceil(size/K)];
  for(int i = 0; i < num; i++){
    a[i] = E[i];
  }
  delete[] E; //Free whatever E points to
  E = a; //E points to a
  size = (int)ceil(size/K);
}

void dyn_array::table_insert(int x){
  E[num] = x;
  num++;
  if (size == num) {
    expand();
  }
}

mere kode....


For at bruge disse funktioner i en anden fil/klasse laves en .h fil:

class dyn_array{
  // Private variables
  double K; // K-value
  int size; // Size of dynamic array
  int num;  // Number of elements
  int* E;//int_array; // The internal array

  // Private methods
  void expand();  // Expand dynamic array
  void contract(); // Contract dynamic array

public:

  dyn_array(double k); // Constructor
  ~dyn_array(); // Destructor

  void table_insert(int x); // Insert element x
  void table_delete();    // Delete last element in list
  HuffNode& get_item(int i);    // Return item i
  HuffNode& operator[](int i);
  int get_num();          // Return number of elements
  int get_size();        // Return size of dynamic array
  int main();
};
Avatar billede web_the_world Nybegynder
05. februar 2004 - 13:01 #7
ok - synes ikke det er  helt nemt - måske jeg er for gammel til at starte på at kode...

Vil datastruktur kunne være int, char osv men også arrays??

Og hvad med hensyn til implementeringen??

Ved implementeringen er der så forskel på om man programmere med tråde eller processer.. Jeg kan se i denne tutorial jeg har fået af min arbejdsgiver, at der er et eksempel på "de spisende filosoffer" og her skal jeg vælge mellem at kode det med tråde eller processere - hvad er smartest og hvorfor?? hvad er forskellen på tråde og processer??
Avatar billede x-masman Nybegynder
05. februar 2004 - 13:07 #8
int, char etc. er typer. Mens lister, arrays etc. datastrukturer. Man kan også opbygge sine egne strukturer.

Med hensyn til processer og tråde fandt jeg blandt andet dette:

On Linux, there is no real difference between threads and processes. On some
other systems, there is unnecessary overhead for processes. "Threads" are
from a programming perspective multiple points of execution that share an
awful lot of state. Which basically, processes can be if you tell them to
share this state.

>From a system perspective threads are a hack to avoid a lot of the overhead
processes have poisoning caches and setting up and tearing down page tables
and such. Linux processes don't have this level of overhead.

So -ON LINUX- there isn't much difference between threads and processes.
Because the process overhead threads try to avoid has been optimized away,
and thus there is a real world implementation of the two concepts which
behaves in an extremely similar manner. Thus the conceptual difference
between the two is mostly either artificial or irrelevant, certainly in this
context. If there is a context without this difference, then in other
contexts it would appear to be an artifact of implementation.


On Solaris there is a difference between threads and processes, but the
reason is that Solaris' processes are inefficient (and shown by the
benchmarks you don't seem to like).
Avatar billede svnne Nybegynder
05. februar 2004 - 13:31 #9
jeg takker for indput....

Jeg regner dog med at web_the_world... selv opretter et spørgsmål en anden gang....
Avatar billede x-masman Nybegynder
05. februar 2004 - 13:41 #10
hmmm. det havde jeg slet ikke set. Hvad sker der?!?
Avatar billede web_the_world Nybegynder
05. februar 2004 - 13:43 #11
jeg undskylder for den ulejlighed det åbenbart har skabt... jeg troede godt andre måtte deltage.. Det ligger bare mget nær op af en opgave vi har fået på stuidet, min arbejdsgiver ;-), og derfor ville jeg, som ikke er nogen ørn til at kode i C - bare lige have uddybet det lidt... jeg undskylder
Avatar billede x-masman Nybegynder
05. februar 2004 - 13:46 #12
det er helt iorden. Man må gerne stille spm. på den måde, men jeg troede bare at det var dig der havde oprettet spm. og derfor blev jeg forvirret.

Iøvrigt hvad er det for et studie i edb der er på KUA?
Avatar billede svnne Nybegynder
05. februar 2004 - 13:54 #13
jeg læser ikke på KUA - det er muligt at personen web_the_world skriver at han/hun er gammel, men jeg er sgu nok endnu ældre og kan derfor nok ikke lige få lov til at læse på KUA mere....

Tak for hjælpen x-masman
Avatar billede x-masman Nybegynder
05. februar 2004 - 14:10 #14
Det var så lidt, men det var også et spm. rettet mo web the world, da jeg kiggede hans gamle spm. igennem.

Derudover er der ikke alders begrænsning på universiteterne. Jeg læser på samme hold som efterlønnere o.lig.
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