lnostdal
-
Innlegg
490 -
Ble med
-
Besøkte siden sist
Innholdstype
Profiler
Forum
Hendelser
Blogger
Om forumet
Innlegg skrevet av lnostdal
-
-
-
Eg sitter nå å prøve å programmere et program i Labview. Og i det programmet eg lage så benytter eg meg av "formula node" hvor det skal være mulig å programmere "c lignende kode" som det så fint står i helpen.
I denne formula node skal eg lage en enkel for setning, som telleren skal begynne på -10 og gå til 10. Så har eg en formel som beskriver hvilken verdi Y skal ha.
Y er en funksjon som består av 2 variabler:
a, som er en verdi brukeren velger
i, som er telleren.
Det som skal sender ut av denne her er, i som eg kobler til x-grafen ( i praksis er i=x-aksen) og y som er verdien.
Her er det som eg har skrevet i formula node:
int32 i = -10; for (i<11;) { y1=a*i**2; i++; }
Input på formula node er a, og output'er er y og i.
Utgangene kobles til en "Build XY graph" som lager et koordinat-system av dette.
Men eg får feilmelding om at eg mangler en "left parantese" i begynnelsen av linje2. Men ser ikkje at det er feil det eg har skrevet.
Noen tips?
ok, kan det være så enkelt at den vil ha parantesen helt innat for'en? ..slik:
for(i<11;)
forøvrig ser dette litt merkelig ut:
y1=a*i**2;
sikker på at det ikke skal stå y1=a*i*2; her?
edit:
du nevner også at y skal være en funksjon - det høres ut som om du sier at den er en funksjon som aksepterer to argumenter .. funksjoner kalles slik i C:
y(x, y);
-
ok, vel dette er umulig å få til med kun et batch-script .. så du må sette deg inn i et språk om du skal forstå dette
språk som passer til denne type oppgaver er:
* python
* common lisp (dette er hva jeg brukte her)
* perl
* ruby
..vel, dette er de mest vanlige til slike oppgaver vil jeg tro..
edit:
skal du jobbe med veldig store datamengder er common lisp raskest av disse - om du ønsker noe ennå raskere kan optimalisert C være ennå raskere i noen tilfeller (men C er et helvette å jobbe med; så drop C - optimaliser altid til sist)
-
CLISP og cl-ppcre (begge fungerer både under Linux og Windows):
#!/usr/bin/env clisp ;; see http://clisp.cons.org/impnotes/quickstart.html (asdf:operate 'asdf:load-op :cl-ppcre) (defmacro awhile (result-symbol expr &body body) (let ((ret (gensym))) `(let ((,ret nil)) (do ((,result-symbol ,expr ,expr)) ((not ,result-symbol) ,ret) (setf ,ret ,@body))))) (with-open-file (ss (first ext:*args*)) (awhile line (read-line ss nil nil) (let ((p1 (subseq line 2 6)) (p2 (cl-ppcre:split "#|\\s" (subseq line 7)))) (format t "data from line: '~A', '~A', '~A'~%" p1 (first p2) (second p2)))))
M$XXXX#872D23C25EDE820A993ED63AD773DDF1 YYYYYM$BBBB#972F23E25EDE320A093ES63AD873DPF1 AAAA
M$BBBB#972F23E25E0aaoeuaoeu93ES63AD873DPF1 AAAA34ui
M$BBBB#972F23E25EDE320A093EaoeuoaeuiueS63AD873DPF1 AAAA23u23ui
lars@ibmr52:~/programming/lisp/clisp$ ./script2.lisp disco808.txt data from line: 'XXXX', '872D23C25EDE820A993ED63AD773DDF1', 'YYYYY' data from line: 'BBBB', '972F23E25EDE320A093ES63AD873DPF1', 'AAAA' data from line: 'BBBB', '972F23E25E0aaoeuaoeu93ES63AD873DPF1', 'AAAA34ui' data from line: 'BBBB', '972F23E25EDE320A093EaoeuoaeuiueS63AD873DPF1', 'AAAA23u23ui'
edit:
ser du bare var ute etter de på "yttersidene", men jeg har tatt med den "i midten" også - rop om du ikke greier å fjerne dette selv
-
1 hvordan skal jeg lage en algoritme som kan forandre seg etter jeg har brukt 200 timer
Du tar med sjekken for 200 i algoritmen - altså du gjør en sjekk og splitter om unntaket gjelder:
if(something < 200) doSomething(); else doSomethingElse();
Hum .. åssen forventer du at en annen skal svare på dette i denne sammenhengen?
-
to ting etter at ubuntu er installert:
* aktivere "repositories" som er deaktivert som standard slik at du får tilgang til codecs og programvare som ikke er tilgjengelig i standard-repositoriene: https://help.ubuntu.com/community/Repositories/Ubuntu
* følge denne guiden: https://help.ubuntu.com/community/RestrictedFormats
videre om du ønsker 3D-aksellerasjon (NVidia/ATI): https://help.ubuntu.com/community/BinaryDriverHowto
..XGL, Beryl/AIGLX o.l. taes til slutt..
-
Forstår du forskjellene mellom det du gjør og det jeg gjør - og fordeler/bakdeler ved hver av dem?
Forresten - om man først skal bruke C++ så bruker man templates for å generere kode for utskrift og behandling av forskjellige typer.
* Du skriver ikke ut arrayer og minnesegmenter av ukjente typer (eller tar ikke hensyn til "utvidbarhet").
* Du resirkulerer ikke koden for iterasjon over ukjente typer.
* m.m.
-
-
hum .. noen som har noen artige sider (ikke reklame .. lol) der man kan teste tingen? .. eneste stedene jeg ikke blokker flash er på video.google.com og youtube - og de fungerer med flash7.x
-
(edit: dette er slik jeg installerte den under Ubuntu Dapper)
sudo aptitude remove flashplugin-nonfree wget http://www.adobe.com/go/fp9_update_b1_installer_linuxplugin tar xf FP9_plugin_beta_101806.tar.gz cd flash-player-plugin-9.0.21.55/ sudo mv libflashplayer.so /usr/lib/firefox/plugins/
Restart Firefox (pass på at alle vinduer er lukket), og sjekk her om det fungerte: http://www.adobe.com/products/flash/about/
..om du skulle støte på problemer fjerner du ganske enkelt `libflashplayer.so' fra `/usr/lib/firefox/plugins' og installerer pakken `flashplugin-nonfree' igjen..
-
dette blir veldig kort - sjekk også FUSE: http://fuse.sourceforge.net/
-
en mulig optimalisering (eller kanskje det går tregere?):
void iterateVectorSegment(VectorSegment* vector_segment, VectorCallback vector_callback){ // NOTE: Temporary leaves `vector_segment->vector' in a non-sane state. // Set up fake environment so we can reuse code in `iterateVector'. Vector* vector = vector_segment->vector; void* old_data = vector->data; vector->data = getVectorElt(vector, vector_segment->start_index); size_t old_num_elements = vector->num_elements; vector->num_elements = vector_segment->end_index - vector_segment->start_index; iterateVector(vector, vector_callback); // Restore original environment. vector->data = old_data; vector->num_elements = old_num_elements;}
edit:
det er også mer vanlig at testen i for-loopen i `iterateVector' ser slik ut:
i < vector->num_elements
-
nei, et array er ikke noe annet en ett "flytende" allokert minnesegment - det inneholder hverken informasjon om:
* antall elementer
* start-index (0)
* slutt-index (5)
du må bygge et "språk" over disse tingene (pekere og arrays) ved å abstrahere v.h.a. structs og funksjoner .. dette har gått fryktelig fort og det kan hende jeg må redigere denne posten litt ettersom det kan være endel bugs her, men her har du en ting som "reflekterer" array eller minnesegmenter og pakker dem inn i strukturer og funksjoner (blir nesten OOP) som gjør at man har litt mer meta-data å jobbe med når man skal gjøre ting:
edit: koden i dette forumet blir selvfølgelig seendes helt jævlig ut, så her: http://paste.lisp.org/display/28235
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef char bool; typedef struct { /* We build an abstraction over plain arrays/memory-allocations that contain more information. */ size_t num_elements; size_t element_size; bool reflection; void* data; } Vector; Vector* reflectArray(void* array, size_t num_elements, size_t element_size){ // Constructor. Vector* vector = malloc(sizeof(Vector)); vector->data = array; vector->num_elements = num_elements; vector->element_size = element_size; vector->reflection = 1; return vector;} void deleteVector(Vector* vector) { // Destructor. if(!vector->reflection) free(vector->data); free(vector);} void* getVectorElt(Vector* vector, size_t index){ return(vector->data + (vector->element_size * index));} typedef void (*VectorCallback)(void*); void iterateVector(Vector* vector, VectorCallback vector_callback){ {size_t i = 0; for(; i != vector->num_elements; i++) vector_callback(getVectorElt(vector, i));}} typedef struct { size_t start_index; size_t end_index; Vector* vector; } VectorSegment; VectorSegment* newVectorSegment(Vector* vector, size_t start_index, size_t end_index){ // Constructor. VectorSegment* vector_segment = malloc(sizeof(VectorSegment)); vector_segment->vector = vector; vector_segment->start_index = start_index; vector_segment->end_index = end_index; return(vector_segment);} void deleteVectorSegment(VectorSegment* vector_segment){ // Destructor. free(vector_segment);} void iterateVectorSegment(VectorSegment* vector_segment, VectorCallback vector_callback){ // Set up fake environment so we can reuse code in `iterateVector'. {Vector* tmp = reflectArray(getVectorElt(vector_segment->vector, vector_segment->start_index), vector_segment->end_index - vector_segment->start_index, vector_segment->vector->element_size); iterateVector(tmp, vector_callback); deleteVector(tmp);}} //// USER CODE //// void printVectorOfDoubles(double* vector_element){ printf("vector_element: %f\n", *vector_element);} int main(){ double double_array[6] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 }; Vector* vector = reflectArray(double_array, 6, sizeof(double)); printf("iterateVector:\n"); iterateVector(vector, (VectorCallback)&printVectorOfDoubles); printf("\n\niterateVectorSegment:\n"); VectorSegment* vector_segment = newVectorSegment(vector, 2, 4); iterateVectorSegment(vector_segment, (VectorCallback)&printVectorOfDoubles); deleteVectorSegment(vector_segment); deleteVector(vector); return 0;}
lars@ibmr52:~/programming/c$ gcc -Wall -g a.c -o a && ./a iterateVector: vector_element: 0.000000 vector_element: 1.000000 vector_element: 2.000000 vector_element: 3.000000 vector_element: 4.000000 vector_element: 5.000000 iterateVectorSegment: vector_element: 2.000000 vector_element: 3.000000
-
Det varierer - hvilket språk og bibliotek bruker du? Noen er basert på substring(string, start_pos, end_pos) .. altså _ikke_ substring(string, start_pos, length) .. noe som betyr at du må gjøre:
substring(string, the_start_pos, the_start_pos + the_end_pos) .. u see?
..det som kan skje om dette er tilfellet er at den (edit:) slutter på gal posisjon..
Her er forøvrig en oppdatering av det jeg pastet over .. v.h.a. CLISP kan man bruke dette som et script/program fra konsollet:
#!/usr/bin/env clisp (if (= 3 (length ext:*args*)) (princ (subseq (third ext:*args*) (parse-integer (first ext:*args*)) (+ (parse-integer (first ext:*args*)) (parse-integer (second ext:*args*))))) (format t "Usage: ~A <start> <length> <string>" *load-pathname*))
lars@ibmr52:~/programming/lisp/clisp$ chmod +x script2.lisp lars@ibmr52:~/programming/lisp/clisp$ ./script2.lisp 2 5 "Lars Rune Nøstdal" rs Ru lars@ibmr52:~/programming/lisp/clisp$ ./script2.lisp 2 5 Usage: script2.lisp <start> <length> <string>
(I eksempelet gir jeg filen etternavnet `.lisp', men en kan godt unnlate å gi den et etternavn. Da vil det for brukeren ikke være synlig at dette er et Lisp-script.)
-
ok, fra posisjon 43 og 45 tegn utover:
cl-user> (let* ((start 43) (end (+ start 45))) (subseq "01100110011010010110111001100100010111110110000101101110011011110111010001101000011001010111001001011111011101110110000101111001" start end)) "000010110111001101111011101000110100001100101"
edit: pasten over er tydeligvis noe forumet ikke takler , så jeg postet her også: http://paste.lisp.org/display/28205
-
Gitt følgende kode
#include <stdio.h> #include <malloc.h> int main(int argc, char **argv) { int x; double *buf = (double*)malloc(sizeof(double)*5*5); for(x=0; x<15; x++) buf[x] = x + 0.25; }
Hvordan finner jeg ut hvor mange double(25) det er plass til i buf?.
Hvordan kan jeg finne ut hvor mange elementer(15) det er i buf?
Ørjan...
sizeof(double) * 25 forteller kun `malloc' om _størrelser_; ikke _antallet_ av noe. Antall må du holde styr på selv på et eller annet vis.
Når du vet at `malloc'-kallet gikk bra - altså at det ikke returnerte NULL kan du regne ut hvor mange elementer av en viss type (altså størrelse) du får plass til i minnet du har allokert fordi du vet den totale størrelsen og størrelsen til hvert enkelt element du ønsker å lagre. F.eks:
#include <stdio.h> int main() { printf("sizeof(int): %d\n", sizeof(int)); printf("sizeof(double): %d\n", sizeof(double)); return 0; } /* lars@ibmr52:~/programming/c$ gcc -g -Wall a.c -o a && ./a sizeof(int): 4 sizeof(double): 8 */
..dette betyr at "for hver double" jeg allokerer har plass til to int'er, så på min maskin er dette sikkert:
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main() { assert((sizeof(double) / 2) == sizeof(int)); int* i = malloc(sizeof(double) * 1); i[0] = 1234; i[1] = 4321; printf("i[0]: %d\n", i[0]); printf("i[1]: %d\n", i[1]); free(i); return 0; } /* lars@ibmr52:~/programming/c$ gcc -g -Wall a.c -o a && ./a i[0]: 1234 i[1]: 4321 */
..uhm.. vel, heh .. uansett -- poenget er at malloc har ikke noe forhold til antall i det hele tatt; kun størrelse minne den skal forsøke å allokere.
Måten man løser disse tingene på er ved ting som:
typedef struct { void* data; size_t num_elements; } Stuff;
..og/eller..
void someFunction(void* data, size_t num_elements);
..altså man må holde styr på _antall_ separat. :}
-
Jeg kan godt poste en artikkel om koding av GTK+ under både Linux og Windows der jeg også tar i bruk Glade. Tror i grunn flere kan ha glede av dette.
..gi meg noen dager..
edit:
Nei, jeg har ombestemt meg - dette har jeg ikke tid til. Poster alikevel kort om åssen man kommer i gang under Ubuntu:
C og C++-kompiler, man-pages og verktøy:
sudo aptitude install build-essential glibc-doc manpages
GTK+-biblioteker, Glade og dokumentasjon:
sudo aptitude install libgtk2.0-dev libgtk2.0-doc libglib2.0-doc libglade2-dev glade libpango1.0-doc
Manualer, oppslagsverk og tutorialer havner da her:
file:///usr/share/doc/libgtk2.0-doc/gtk/index.html
file:///usr/share/doc/libgtk2.0-doc/gdk/index.html
file:///usr/share/doc/libgtk2.0-doc/glib/index.html
file:///usr/share/doc/libgtk2.0-doc/gobject/index.html
file:///usr/share/doc/libgtk2.0-doc/pango/index.html
file:///usr/share/doc/libgtk2.0-doc/gtk-tutorial/book1.html
Header-filer er også greit å se over: file:///usr/include/gtk-2.0
Scons brukes til å bygge programvare:
sudo aptitude install scons
Etter dette følger du GTK+-tutorialen. Spesielt:
http://www.gtk.org/tutorial/c39.html#SEC-HELLOWORLD
og
http://www.gtk.org/tutorial/x111.html
..enkelt..
edit2: jeg skal se om det går kjappt å få opp noe v.h.a. cygwin til Win32 .. orker ikke manuelt med mingw atm.
-
Ønsker å kommentere et par ting. Når man poster kode i forum gjør man gjerne mest mulig for å isolere hvor problemet oppstår slik at de som skal hjelpe ikke må parse en masse ikke-relevant informasjon.
I ditt tilfelle noe slikt:
#include <iostream> using namespace std; void accountNumber(unsigned long int account_number) { cout << "account_number: " << account_number << endl; } int main(int argc, char* argv[], char* env[]) { accountNumber(36245564177); // blah.cpp:14 return 0; }
lars@ibmr52:~/programming/c$ g++ -Wall -g blah.cpp -o blah && ./blah blah.cpp:14: error: integer constant is too large for ‘long’ type
(legg merke til at jeg tar med linjenummer som kommentar også)
..ok, vel..
Stol på kompileren, forstå engelsk og det den forsøker å fortelle deg. Den "tuller ikke" eller "babbler" slik som andre feilmeldinger ofte gjør i Windows.
meldingen: "integer constant is too large for "long" type"
konto1.settKontonr(36245564177); <== "integer constant"
void settKontonr(unsigned long int kontonr); <== "long type"
kjetil7 har allerede postet løsningen:
#include <iostream> using namespace std; void accountNumber(unsigned long long account_number) { cout << "account_number: " << account_number << endl; } int main(int argc, char* argv[], char* env[]) { accountNumber(36245564177LL); return 0; }
lars@ibmr52:~/programming/c$ g++ -Wall -g blah.cpp -o blah && ./blah account_number: 36245564177
edit:
Dette er litt av grunnen til at det er lurt å kunne engelsk og bruke engelske bøker når man driver med programmering. (hva er "integer"? .. hva er "constant"?)
edit2:
Nevne også at det som regel kun er den første eller de to første meldingene fra kompileren man bør konsentrere seg om; resten er ofte følgefeil.
-
oki..
for å kalle VB i C.. hvordan gjør man dette?
Man definerer callbacks på VB-siden. (et google-søk på "callbacks vb" gir noen treff)
Callbacks er forøvrig en term som brukes i sammenheng med andre språk enn VB også. I Common Lisp definerer man callbacks v.h.a. CFFIs `defcallback'.
"Callback" er altså en generel term, se her: http://en.wikipedia.org/wiki/Callback_%28computer_science%29
Eller er det _mye_ bedre/lettere med Galde for C/VB-noobs som meg?Nei, du må forstatt kunne språket og forstå hva som skjer "under" - enten det er VB, C eller andre.
edit: Det kan kanskje diskuteres om dette er viktigere i språk som C enn i språk som f.eks. Python og VB.
Slike verktøy (bør) brukes av mennesker som allerede forstår hva som skjer slik at de kan spare tid. Forstår man ikke hva som skjer sitter man fast når man støter på problemer noe man _garantert_ gjør i ikke-trivielle sammenhenger.
I tillegg har man under platformer (eller lukkede biblioteker fra MS generelt sett) som Win32 liten mulighet til å se (og dermed forstå) eller rette på det som skjer under lokket så der er ikke-triviell utvikling ennå mer tuklete. Derfor er det også der lurt å holde seg til åpne løsninger som f.eks. GTK+ der debug-symboler og kildekode følger med for å forbedre situasjonen litt.
Nei, Glade bruker GTK+ og genererer GUIer som vises v.h.a. (bruker) GTK+. GTK+ fungerer under både:
* Linux
* Mac
* Windows
* *BSD
* m.fl.
-
Nå forstår jeg ikke hva du mener:
* Man kan kalle VB fra C
* Man kan kalle C fra VB
..altså man kan kombinere bruken av språkene i samme prosjekt.. men så spørs det hva du er _ute etter_..
* Om du er ute etter å tegne opp GUIer uten å måtte kode disse "manuelt" har man ting som Glade (GTK+).
Det er altså ikke bare i VB dette er mulig. Ved hjelp av Glade navgir en widgets (knapper o.s.v.) en tegner opp og refererer siden til disse navnene i kode (samme om det er C eller hva) som definerer oppførsel.
..generelt sett kan man kombinere språk mer eller mindre som man ønsker selv; jeg kombinerer mye Lisp og C..
-
legg en i både / og /bin .. den i / "viderefører kallet" til den i /bin
det er noen år siden jeg surret med make, men jeg tror optionen -C er den du er ute etter
$(MAKE) -C bin
OT: har du vurdert Scons? -- ting man antar at er trivielle med make er ofte ikke det; slik er det ikke med Scons
-
ok, jeg har ikke tid til å se over koden her, men mener det går å slå av generering av "exception-kode" ved å angi et argument til kompileren - kan det være det?
-
hva er forskjellen(e) egentlig?
nå er det i grunn rimelig sjeldent jeg bruker VNC siden SSH og SSHFS gjør alt jeg vil; men tightvnc har fungert de gangene jeg har hatt behov for remote-desktop-stuffs
-
tightvnc; både win32 og *nix
det følger forøvrig med en vnc-server i ubuntu
angående administrering av linux-servere så er det langt mer vanlig (tror jeg) å bruke ssh (shell-tilgang) til dette
Flash 9 (vel, beta) ute til Linux
i Operativsystemer
Skrevet
hum .. på http://www.enemyterritory.com/ så får jeg opp en svart side med en link "Sorry, Enemyterritory.com requires Adobe Flash 8. " ennå jeg har Flash 9 installert
heh .. altså; sammenligner de med == eller >=, ellerhva? O_o