Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: beginner in c++ ziet door de bomen het bos niet meer....... ivm libraries  (gelezen 2470 keer)

Offline wimapon2

  • Lid
    • amateur radio-astronomisch waarnemingsstation
LS,
Ik programmeer al 40 jaar in diverse talen. Nu ben ik met Ubuntu begonnen en tegelijk maar met c.
Ik heb G++ compiler geinstalleerd en die werkt goed.
Ook heb ik geany als werk-omgeving geinstalleerd.

Ik haal overal voorbeeld programmaatjes vandaan om mee te leren.
Meestal werken ze niet omdat de libraries niet kloppen.........(denk ik)
simpele dingen als SQRT kan hij dan ineens niet vinden. (de wortel uit...)

Waar kan ik nu vinden wat bij mijn c-dialect past en wat voor functies erin zitten en hoe ik ze dan
moet aanroepen......
Graag zou ik op 1 dialect met 1 set libraries van start gaan... maar ik zie door de bomen het bos
niet meer...

Ik wordt er moedeloos van.

Wim

Een computer is een prachtig stuk gereedschap, jammer dat het zoveel tijd kost om het ding precies te laten doen wat je wilt......

Je moet het pakketje build-essential installeren, daarin zitten alle library's.
Als je dan de math library gebruikt dan zou een vierkantswortel moeten werken.
Als een vierkantswortel dan nog niet werkt dan doe je een getal tot de macht 0.5, dat is hetzelfde als de vierkantswortel trekken van iets. Dat gaat zelfs in verschillende programmeertalen sneller dan de wortel functie.
http://leerubuntu.org (ubuntu zonder moeilijke woorden)
VoidWarranties (Hackerspace) Antwerpen
Microsoft isn't evil, they just make really crappy operating systems. - Linus Torvalds

Offline Mossie

  • Lid
Voor de functie sqrt() (let op: kleine letters! C is hoofdlettergevoelig) heb je inderdaad de math bibliotheek nodig. Die kan je met je programma linken door de optie "-lm" mee te geven aan de compiler.
Bijvoorbeeld:
gcc in.c -o uit -lmWat ook handig is, is het pakket 'manpages-dev' installeren. Hier zit documentatie in van heel veel C-functies. Er staat in wat voor argumenten de functies nodig hebben, het type ervan, wat een functie precies doet, wat ie returned. Ook staat het in de manpage van de benodigde functie als je voor het gebruik van die functie je programma nog met een speciale bibliotheek moet linken (type maar eens 'man sqrt' in in de terminal, je zult zien dat hierbij de opmerking 'Link with -lm' staat).

Offline wimapon2

  • Lid
    • amateur radio-astronomisch waarnemingsstation
Beste Ward De Ridder, dankje voor je antwoord.
de build-essential was al geinstalleerd.
Toch blijft de vraag, welke libraries heb ik beschikbaar, wat zit erin, en hoe roep ik het aan, met welke parameters.....
Waar kan ik die info vinden?
(SQRT werkt nog steeds niet)
Wim
Een computer is een prachtig stuk gereedschap, jammer dat het zoveel tijd kost om het ding precies te laten doen wat je wilt......

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Nu ben ik met Ubuntu begonnen en tegelijk maar met c.
Ik heb G++ compiler geinstalleerd en die werkt goed.
Dit klinkt een beetje raar. Ben je nou met C of met C++ bezig?

Misschien kun je wat code laten zien. Wellicht kan iemand je dan verder daarmee helpen. En kom je dan bij libs die je wilt/kunt gebruiken daarvoor....
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Citaat
macbook:~ seysayux$ gcc -x c - && ./a.out
#include <stdio.h>
#include <math.h>

int main(void) {
    printf("%f\n",sqrt(16));
    return 0;
}
^D
4.000000
macbook:~ frank$

Sorry, ik weet niet waar het probleem zit (afaik is -lm standaard).
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
De fout komt simpelweg omdat je C broncode probeert te compileren met een C++ compiler. G++ is een C++ compiler. Als je C wilt compileren moet je GCC gebruiken, deze wordt meegeleverd met Ubuntu.

Er zijn subtiele verschillen tussen C en C++ bij het gebruik van de onderdelen die deze programmeertalen gemeen hebben.

Eén van de opvallendste is de naamgeving van includebestanden. Ten eerste schrijf je in C++ niet ".h" na de naam van een includebestand uit de standaardbibliotheek. En ten tweede zijn de namen van de includebestanden uit de standaardbibliotheek niet hetzelfde in C en C++.

Jij maakt dus de fout dat je de C++ preprocessor "math.h" wilt laten in voegen, terwijl dit ten eerste geen geldige naam is voor een includebestand uit de standaardbibliotheek van C++, en ten tweede dit bestand gewoonweg niet bestaat in de standaardbibliotheek van C++.

Het "math.h" includebestand uit de standaardbibliotheek van C bestaat nog in C++, maar in C++ heeft het de naam "cmath".

Dus om jouw programma te laten werken moet je dit schrijven:
#include <cmath>

Hier komt de rest van jouw programma;
...
...
...
...

Ik hoop dat dit werkt!

Offline wimapon2

  • Lid
    • amateur radio-astronomisch waarnemingsstation
Beste mensen, wat een hoop info. Dankjewel!
ik ga het allemaal proberen.
Inderdaad, ik ben wat chaotisch bezig.. Ik weet gewoon niet wat het beste voor mij zal zijn:
c, c++ ,gcc   etc...
Misschien kunnen jullie me raad geven: 
wat ik het meeste programmeer zijn rekenprogrammaś, en programmaś die de resultaten van
die berekeningen in zelfgemaakte grafieken presenteren., dat natuurlijk samen met grote data-bestanden.
Ik heb een site, waarop de resultaten van deze progs te zien zijn.. Ik maakte ze in Quick Basic
en JustBasic.
kijk op: http://home.kpn.nl/apon001/huis.htm  en kijk naar de menu items  Phasing interferometry
en Now working on.

Onderstaand programma zou een kern-taak moeten worden die ik een kleine 1400 maal per dag zal gaan gebruiken.....
Ik programmeerde hem tot nu toe in Quick Basic ...

=========================================================

/*
   This computes an in-place complex-to-complex FFT
   x and y are the real and imaginary arrays of 2^m points.
   dir =  1 gives forward transform
   dir = -1 gives reverse transform
*/
short FFT(short int dir,long m,double *x,double *y)
{
   long n,i,i1,j,k,i2,l,l1,l2;
   double c1,c2,tx,ty,t1,t2,u1,u2,z;

   /* Calculate the number of points */
   n = 1;
   for (i=0;i<m;i++)
      n *= 2;

   /* Do the bit reversal */
   i2 = n >> 1;
   j = 0;
   for (i=0;i<n-1;i++) {
      if (i < j) {
         tx = x;
         ty = y;
         x = x[j];
         y = y[j];
         x[j] = tx;
         y[j] = ty;
      }
      k = i2;
      while (k <= j) {
         j -= k;
         k >>= 1;
      }
      j += k;
   }

   /* Compute the FFT */
   c1 = -1.0;
   c2 = 0.0;
   l2 = 1;
   for (l=0;l<m;l++) {
      l1 = l2;
      l2 <<= 1;
      u1 = 1.0;
      u2 = 0.0;
      for (j=0;j<l1;j++) {
         for (i=j;i<n;i+=l2) {
            i1 = i + l1;
            t1 = u1 * x[i1] - u2 * y[i1];
            t2 = u1 * y[i1] + u2 * x[i1];
            x[i1] = x - t1;
            y[i1] = y - t2;
            x += t1;
            y += t2;
         }
         z =  u1 * c1 - u2 * c2;
         u2 = u1 * c2 + u2 * c1;
         u1 = z;
      }
      c2 = sqrt((1.0 - c1) / 2.0);
      if (dir == 1)
         c2 = -c2;
      c1 = sqrt((1.0 + c1) / 2.0);
   }

   /* Scaling for forward transform */
   if (dir == 1) {
      for (i=0;i<n;i++) {
         x /= n;
         y /= n;
      }
   }
   
   return(TRUE);
}

================================================================

Ik krijg hem dus niet aan de praat.....

Verder wil ik niet graag in een tekstvenster programmeren, zoals ik 40 jaar geleden al deed,maar
in een grafische omgeving... het lijkt met dat geany de job doet...

Een computer is een prachtig stuk gereedschap, jammer dat het zoveel tijd kost om het ding precies te laten doen wat je wilt......

Voor wiskundige dingen zou ik eerder python aanraden dan c++, hier zijn enkele redenen:

python kan overweg met zeer grote (oneindig groot, met het aantal geheugen in de computer als beperking) getallen, je moet er dus geen rekening mee houden dat je integers groter zijn dan 32bit
in python zitten zeer veel wiskundige functies standaard in
python is volledig platformonafhankelijk, terwijl je bij c en c++ altijd met andere library's en zo gaat sukkelen
...

Moest je toch in de c richting willen blijven zou ik voor c++ gaan. C zelf is zo goed als uitgestorven.

Wat geany betreft zit je inderdaad met een hele mooie ontwikkelomgeving, voor zowel python als c als c++, waarmee je dan als kers op de taart ook nog je zelfgemaakte dingen met 1 druk op de knop kan compileren en kan uitvoeren.
http://leerubuntu.org (ubuntu zonder moeilijke woorden)
VoidWarranties (Hackerspace) Antwerpen
Microsoft isn't evil, they just make really crappy operating systems. - Linus Torvalds

Citaat
macbook:~ frank$ g++ -x c++ - && ./a.out
#include <iostream>
#include <cmath>

int main() {
    std::cout << std::sqrt(16) << std::endl;
    return 0;
}
^D
4
macbook:~ frank$

Ik zie nog steeds het probleem in C++ niet.
python kan overweg met zeer grote (oneindig groot, met het aantal geheugen in de computer als beperking) getallen, je moet er dus geen rekening mee houden dat je integers groter zijn dan 32bit
Ooit gehoord van bigint en libgmp?

Citaat
in python zitten zeer veel wiskundige functies standaard in
En in C(++) icm. libgmp niet zeker? (Ik wil graag even verwijzen naar Sylph::Math, een library die ik zelf aan het schrijven ben, maar nog niet helemaal klaar is, als onderdeel van LibSylph)

Citaat
python is volledig platformonafhankelijk, terwijl je bij c en c++ altijd met andere library's en zo gaat sukkelen
Zeggen dat python goed is omdat het op alle platformen werkt is zoals zeggen dat anale seks goed is omdat het op alle geslachten werkt ;)
Eventjes serieus, ik heb meer moeite om een pythonprogramma dan een (goed geschreven) C++-programma op Mac of Windows aan de praat te krijgen (ik bedoel in een manier dat het werkt alsof het gemaakt is voor dat platform). Omdat python direct "platform-onafhankelijk" is, terwijl je bij C(++) moeite moet doen, zijn de platform-specifieke delen in een C(++)-programma vaak beter ondersteund dan bij een pythonprogramma.
En ik wil niet beginnen over het sukkelen met libraries in een pythonprogramma.

Citaat
Moest je toch in de c richting willen blijven zou ik voor c++ gaan. C zelf is zo goed als uitgestorven.
Overtuig de meerderheid van de programmaschrijvers op Linux hier even van, wil je (vb Linux, het halve GNU-project, X.org, Gnome, etc...-

Citaat
Wat geany betreft zit je inderdaad met een hele mooie ontwikkelomgeving, voor zowel python als c als c++, waarmee je dan als kers op de taart ook nog je zelfgemaakte dingen met 1 druk op de knop kan compileren en kan uitvoeren.
Serieus, dat kan je met Kate ook. Een ontwikkelomgeving die dat niet heeft, is een teksteditor.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline wimapon2

  • Lid
    • amateur radio-astronomisch waarnemingsstation
Re: beginner in c++ ziet door de bomen het bos niet meer....... ivm libraries
« Reactie #10 Gepost op: 2010/09/07, 09:06:03 »
Na een tijdje rommelen met het bovenstaande FFT programma en met jullie tips heb ik het
aan de praat gekregen.
Toch voel ik me onzeker over welke libraries er voor c++ zijn en waarvoor ik ze kan gebruiken.

Is er een plek waar ik een overzicht hierover kan krijgen.

Wim

Een computer is een prachtig stuk gereedschap, jammer dat het zoveel tijd kost om het ding precies te laten doen wat je wilt......

Re: beginner in c++ ziet door de bomen het bos niet meer....... ivm libraries
« Reactie #11 Gepost op: 2010/09/07, 17:00:51 »
Na een tijdje rommelen met het bovenstaande FFT programma en met jullie tips heb ik het
aan de praat gekregen.
Toch voel ik me onzeker over welke libraries er voor c++ zijn en waarvoor ik ze kan gebruiken.

Is er een plek waar ik een overzicht hierover kan krijgen.

Wim



Niet echt. Er zijn duizenden en duizenden libraries, en er zijn vaak meerdere libraries die (ongeveer) hetzelfde doen. Vaak zal je gewoon op google "c++ <iets waar je je mee wilt bezighouden>" moeten zoeken. Let op, dit is niet specifiek aan C++, maar heel veel programmeertalen (eigenlijk alle programmeertalen die een vorm van includes of libraries ondersteunen). Een kort, onvolledig overzicht:

* libc: de C-bibliotheek. Standaard in ieder C of C++-programma opgenomen.
* libstdc++: De C++ standaardbibliotheek. Standaard in ieder C of C++-programma
* boost: een verzameling van libraries die veel extra features in C en C++ geven
* libgc: "Garbage collection": automatische opruiming van ongebruikte pointers.
* libicu: Ondersteuning voor unicode.
* libxml2: Zoals de naam al zegt, XML.
* libz: Gzip en zip
* SDL: Spelletjes, voornamelijk invoer- en uitvoer.
* Irrlicht: 3D-engine
* OpenGL: basis 3D-handelingen
* Bullet: physics engine
* Qt: Programma's met een grafische interface maken, ook andere dingen
* LibSylph: Vervanger en uitbreider op de standaardbibliotheek van C++ en boost. Zeer aan te raden voor beginners, een goede kant-en-klaaroplossing. Wij van WC-eend adviseren nogmaals WC-eend ;). Voornamelijk georienteerd op Linux.

Specifiek aan een besturingssysteem:
* Win32: Standaard C-bibliotheek op Windows.
* MFC: Win32 in C++
* COM: Componentenmodel voor MFC
* CLI: Nieuwere vervanger voor MFC, heeft een heel eigen taal nodig en werkt met VMs en zo...
* DirectX: Verzameling van libraries (3D, I/O, netwerk, audio) voornamelijk georienteerd op games
* Carbon: C++-bibliotheek op Mac die instaat voor grafische omgeving, sinds 10.6 officieel verouderd.
* Core Foundation: Objective-C standaardbibliotheek op Mac met allerlei extra's. Een crossplatform vervanger, GNUStep, bestaat ook.
* Cocoa: Een op Core Foundation gebaseerde bibliotheek voor GUI-programma's.
* Quartz: Een op Cocoa gebaseerde bibliotheek voor allerlei mooie 2D en 3D-effecten.
* GTK: Maken van grafische programma's op Gnome.
* X: Maken van grafische programma's in het algemeen, maar niet aan te raden (veel te moeilijk in gebruik).

Dat is zo ongeveer het belangrijkste waar ik direct opkom, zoek zeker zelf wat uit!
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net