Zum Inhalt springen

Zakum

Mitglieder
  • Gesamte Inhalte

    67
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Zakum

  1. Vertrackte Sache, das! Gut zu wissen, dankeschön.
  2. Ohh... Ersteres war mir nicht bewusst! Oo Irgend wann verliert man den Überblick, welches Hochkomma in welcher Sprache was bedeutet. ^^ Nehme an, das "..." kennzeichnet einen Stringliteral, und deswegen der char*? Zweiteres... Danke. Drittens hab ich erfolgreich verdrängt gehabt. Könntest du in einer freien Minute kurz anreißen, was der explizite cast an Schaden anrichten kann? Nur so, aus purer Neugier. Ansonsten mal wieder ein großes Dankeschön, ich weiß gar nicht mehr, das wievielte Jahr in Folge du mir schon bei meinen Wehwehchen zur Seite stehst.
  3. Ich sitze seit einer Weile an einem Problem fest, die Lösung ist vermutlich trivial, aber mittlerweile sehe ich das IKEA vor lauter Möbeln nicht, vlt. ist ja jemand so nett, mir die Augen zu öffnen. Folgendes Code-Schnipsel zum Testen meiner Funktion void* alloc(): ... int main(){ char* adr1=(char*)alloc(); *adr1="E"; // <-- Warnung int* adr2=(int*)alloc); *adr2="2"; // <-- Warnung float* adr3=(float*)alloc(); *adr3=3.5; printf("%c %d %f\n",*adr1,*adr2,*adr3); return 0; } Der Compiler warnt an zwei Stellen vor "Zuweisung erzeugt Ganzzahl von Zeiger ohne Typkonvertierung." Entsprechend sieht auch die Ausgabe aus: ` 134514018 3.500000 Alloc ist eine eigene Speicherverwaltung, und gibt mir die Startadresse eines reservierten Speicherblocks zurück. Im Test versuche ich nun, an die jeweils entsprechenden Adressen zuerst einen Charackter, dann einen Integer und am Ende eine Float zu speichern, und testweise aus zu geben. Da alloc einen Zeiger auf void zurück gibt, caste ich das ganze zuerst auf Zeiger in den entsprechenden Typ, und dereferenziere bei der Zuweisung des Wertes. Warum funktioniert dieser Weg bei int und char nicht? Und warum klappt es dafür mit einem float? Habe ich das was mit den Typen vermengt? Vielen Dank schon jetzt für eure Hilfe! -Zakum
  4. Vielen Dank, das klappt bisher sehr gut. Allerdings entsteht dabei ein ganz anders Problem, irgendwo im Restprogramm, wobei das natürlich ganz meine Sorge ist. Also nochmals danke schön, das ist ne sehr angenehme Funktion.
  5. Hallo, ich arbeite gerade zum ersten Mal mit zwei Forms in einem Delphi-Projekt (war iwie nie von Nöten, bisher Oo) und bin da auf folgendes Problem gestossen: Mitten in einer Prozedur soll das zweite Formular escheinen, dort werden dann, während die "rufende Prozedur" schläft, einige Angaben gemacht und auf Festplatte gespeichert, dann darfs im ersten Formular/Unit weiter gehen, das diese Daten von Festplatte lädt und weiter verarbeitet (Oder kann ich die beiden irgendwie kommunizieren lassen und muss nicht auf Festplatte zwischen speichern?). Ich hab das wie folgt realisiert: filme_form.visible:=true; //zweites Formular erscheint main_form.Caption:='Pause'; While main_form.Caption='Pause' do Application.ProcessMessages; //wir warten, bis die Caption wieder geändert wird ... Und in der Unit des erscheinende Formulars passiert dann folgendes: ... main_form.Caption:='Aktiv'; filme_form.visible:=false; Was soll ich sagen... Es funktioniert. Nun höre ich aber schon im Geiste den Doktor über schlechten Programmierstil zettern. Naja, ganz im Ernst, das ist wirklich etwas übers Knie gebrochen. Weiß jemand, wie das schöner geht? Ohne Endlosschleife wäre ja zumindest nicht schlecht... Vielen Dank schon im Vorraus, Zakum
  6. Hey Chief, das Anwendungsforum läuft aber unter Fachliches... So wichtig hab ich meine Anfrage nun doch nicht eingeschätzt. Vielen Dank für den Tipp, mal sehen, ob ich mit den ganzen schlauen Wörtern in deinem Post zurecht komme, wenn nicht, dann meld ich mich. ^^ Bin aber auch für weitere Vorschläge offen, also wenn jemand was kennt... Immer her damit.
  7. Hey, ich hab mir die Tage endlich mal einen Laptop geleistet, eigentlich nur als Arbeitstier, da ich an meinem Desktop doch sehr hänge. Nun hab ich aber das Problem, dass ich auf 2 Rechnern arbeite, aber gerne einen einzigen, vollständigen Kalender (in digitaler Ausführung ^^) hätte. Kennt jemand ne passende Software, mit der man (am besten online) sowas einrichten kann. Am liebsten natürlich kostenlos. Ciao, Zakum
  8. Ja, ich nehme an, ich habe die Idee verstanden. Clever gelöst! :uli Ich glaube aber, das kann ich in dem Kontext nicht umsetzen: Das ganze soll eine Content Providing Unit werden, in array of movies werden also alle Filme gespeichert, die ein User bereits gesehen hat. Auf dieser Basis soll das Programm dann Vorschläge für Filme liefern, die den User gefallen könnten. Da für jeden Film (für jeden User) eine neue Datei zu speichern, würde wohl schnell in Chaos ausarten. Aber den Trick merk' ich mir, der ist ziemlich praktisch! Ist ja nicht das erste mal, das ich auf ein Finalization Problem stoße, und bestimmt nicht das Letze. Mit sivestrigen Grüßen, Zakum
  9. Hallo allerseits. Bin gerade eben auf ein eher theoretisches Problem gestoßen und mir fällt kein cleverer Ausweg ein- vielleicht kann ja jemand helfen. Ich möchte einen Verbund, der dynamische Arrays enthält in typisierten Dateien speichern, um so praktischer darauf zugreifen zu können. Der Verbund: user = record name:string[20]; saw: array of movie; favGenre: array of string[20]; favActor: array[1..7] of string[20]; favDirec: array[1..3] of string[20]; end; Die gewünschte Datei: var datei:file of user; Tja, nun liefert mir mein Freund der Compiler den Fehler: Type user needs finalization- not allowed in file type Ertappt! Mein saw ist dynamisch, damit unterscheiden sich also die User in ihrer Größe von einander... Lässt sich hier trotzdem irgendwie der "file of user" verwenden? Ich würde nur ungern auf TextFile umsteigen. Vielleicht kennt ja jemand nen Ausweg, oder weiß das dies unmöglich ist? Wäre für jeden Hinweis dankbar. Ciao Zakum
  10. Also Guybrushs Link hat mir eigentich sehr geholfen, alles funktioniert bisher einwandfrei. Zumal ich leider in C schreiben muss, da werd ich mit den .hpp headern wohl nicht weit kommen. Aber trotzdem danke.
  11. Merci beaucoup! Das nenne ich eine klare und umfassende Antwort.
  12. Hallo Leute. Ich schreibe gerade ein Programm, dass unter Ubuntu, Linux laufen soll. Das Programm liest eine ziel.txt ein und verarbeitet das Ding dann. Somit muss der Nutzer, wenn er eine andere Datei verarbeitet haben möchte, diese Datei in ziel.txt umbenennen. Das ist natürlich nicht unbedingt schön. Ich hab gehört, es wäre theoretisch möglich, beim Programmaufruf durch ein Terminal, einfache den Dateinamen mitzugeben (als Suffix?), der verarbeitet werden soll. Allerdings habe ich absolut keine Idee, wie das umsetzbar wäre, an sich ist das ja ein ziemlicher Batzen an Problemen (der wohl etwas über meine "Gehaltsstufe" steht ...ich denke da nur an das parsen). Weiß zufälliger Weise jemand, ob es da vlt. entsprechende Bibliothek gibt? Oder wie wird das sonst in solchen Fällen geregelt? Ciao Zakum
  13. Zakum

    mp3 abspielen

    Hmm... ich weiß nicht, wie du ein C Programm zu mehr kompatibilität bekommst. Allerdings wird, fals ich richtig informiert bin, sehr gerne Java verwendet, wenn ein Programm wirklich plattfom unabhängig sein soll. Eventuell solltest du also überlegen, für dieses Problem auf Java umzusteigen.
  14. Zakum

    Zeiger in Rekursionen

    :upps Manchmal ist man aber auch wie vernagelt! Hab dieses ++count einfach jedes mal übersehen, war natürlich das, was ich gesucht hatte. Vielen Dank, bubble!
  15. Hallo Ich hab (mal wieder ) einen kleinen Disput mit meinem Compiler und bin etwas ratlos. Und zwar geht es darum, dass ich ein Programm, das vorher mit lauter globalen Variablen (fehlerfrei) lief jetzt modularisieren möchte... Also weg mit dem ganzen globalen zeug, dachte ich mir. Ging auch ganz gut, bis es dazu kam, dass ich in einer rekursiven Funktion Zeiger übergeben wollte: void lokalisieren(int x, int y, int *count, double grauwert[256][256]) { tmp[*count].x=x; tmp[*count].y=y; //Koordinaten des schwarzen Punktes speichern grauwert[x][y]=50; //schwarzen Punkt löschen, damit nicht doppel gezählt wird ++ Farbänderun, später weg ++count; if (grauwert[x][y+1]==0) lokalisieren(x,y+1,&count,grauwert); if (grauwert[x][y-1]==0) lokalisieren(x,y-1,&count,grauwert); if (grauwert[x-1][y+1]==0) lokalisieren(x-1,y+1,&count,grauwert); if (grauwert[x-1][y]==0) lokalisieren(x-1,y,&count,grauwert); if (grauwert[x-1][y-1]==0) lokalisieren(x-1,y-1,&count,grauwert); if (grauwert[x+1][y+1]==0) lokalisieren(x+1,y+1,&count,grauwert); if (grauwert[x+1][y]==0) lokalisieren(x+1,y,&count,grauwert); if (grauwert[x+1][y-1]==0) lokalisieren(x+1,y-1,&count,grauwert); } sowie natürlich der Aufruf: lokalisieren(x,y,&count,grauwert); So wie das ganze jetzt aussieht, liefert mir der Compiler für jede der if-Zeilen folgende Warnung: Übergabe von Argument 3 von lokalisieren von inkompatiblen Zeigertyp Was beim ausführen natürlich auch einen Segmentation-faul verursacht. Als ich testweise das & weggelassen habe, war der compiler wieder still... Gab allerdings wieder einen Segmentation-fault (was ja auch logisch ist, ich will ja schlieslich die Adresse übergeben). Weiß vlt. jemand, was das alles zu bedeuten hat? :eek
  16. Zakum

    Konturensuche

    Sodele, eine Woche ist rum und "isch hab fertisch". flashpixx pdf ist seeeeeehr interessant, hätte ich mehr Zeit würd ich mich da auf jeden Fall ransetzen, die mathe ist sehr elegant, aber so muss ich mich mit einfachen Methoden begnügen. Hab letztendlich babas 2te Idee umgesetzt, so sieht das Ding aus, fals jemand interesiert ist : void lokalisieren(int x, int y) { tmp[count].x=x; tmp[count].y=y; //Koordinaten des schwarzen Punktes speichern grauwert[x][y]=50; //schwarzen Punkt löschen, damit nicht doppel gezählt wird ++ Farbänderun, später weg ++count; if (grauwert[x][y+1]==0) lokalisieren(x,y+1); if (grauwert[x][y-1]==0) lokalisieren(x,y-1); if (grauwert[x-1][y+1]==0) lokalisieren(x-1,y+1); if (grauwert[x-1][y]==0) lokalisieren(x-1,y); if (grauwert[x-1][y-1]==0) lokalisieren(x-1,y-1); if (grauwert[x+1][y+1]==0) lokalisieren(x+1,y+1); if (grauwert[x+1][y]==0) lokalisieren(x+1,y); if (grauwert[x+1][y-1]==0) lokalisieren(x+1,y-1); } tmp und grauwert sind globale Variablen, ist ja hier schlieslich die Testvariante. Der Aufruf: for (y=0;y<256;++y) { for (x=0;x<256;++x) { if (grauwert[x][y]==0) { //Wenn eine Pivot Null gefunden wird: starte lokalisation lokalisieren(x,y); ++fleckenzahl; //fleckenzahl merken (test) tmp[count].x=666; //Länge wird gespeichert if (lang_ziel()<lang_tmp()) { //sollte der neue Fleck größer sein als der alte for (count=0;count<lang_tmp();++count) {//Speichern des größeren Flecks ziel[count].x=tmp[count].x; ziel[count].y=tmp[count].y; } ziel[count+1].x=666; //größe des Ziel speichern } count=0; } } } Es ergab sich leider das Problem, dass einzelne "schwarze pixel" eingekesselt wurden, also im Prinzip alles um sie herum gelöscht wurde, so, dass sie ignoriert wurden. Die Rahmenbedingungen sind jedoch so, dass sie im Anschluss an lokalisieren leicht erkannt und beseitigt werden können: void fuellen(double reproduktion[256][256]){ int x=0,y=0; for (y=1;y<255;++y) { for (x=1;x<255;++x) { if ((reproduktion[x][y]!=0)&&((reproduktion[x+1][y]==0)&&(reproduktion[x-1][y]==0))) { reproduktion[x][y]=0; //Löcher mit 1px breite gelöscht } if ((reproduktion[x][y]!=0)&&((reproduktion[x][y+1]==0)&&(reproduktion[x][y-1]==0))) { reproduktion[x][y]=0;//Löcher mit 1px Höhe gelöscht } } } } In dem Sinne also nochmals ein Dankeschön für die Anregungen.
  17. Zakum

    Konturensuche

    Hallo alle zusammen! Endlich Männertag: Ich hab Zeit wieder zu posten. Also natürlich erstmal vielen Dank für die ganzen Idee. Wie richtig erkannt, es handelt sich um Bildverarbeirung. Die pdf schau ich mir gleich mal an. Babas 2te Idee ist mir zwischendurch auch erschienen, mal sehen wie sich das umsetzen lässt... An sich klingt es aber verdächtig rekursiv.
  18. Zakum

    Konturensuche

    Hallo. Ich bin gerade auf ein (mMn ) ziemlich hartes Problem gestoßen, und wollte mal schauen, ob vieleicht jemand mir weiterhelfen könnte. So sieht das Problem aus: Ich hab ein 256*256 2D Feld, dass mit zahlen befüllt ist. Dabei gibt es mehere "Flecken" (sprich: zusammenhängende Domänen) von Nullen. Und nun möchte ich die Kontur des Flecks mit dem größten Umfang in einem Feld von Koordinaten speichern. Ich hab ein bisschen hin und her überlegt, aber das einzige was mir eingefallen ist, ist so konfus und programiertechnisch hässlich, dass ichs nur ungern posten würde: Es würde einen haufen Platz einnehmen und nur potenzielle Helfer abschrecken. Vieleicht hatte ja schonmal jemand ein ähnliches Problem oder kennt gar eine "Musterlösung"? Wobei ich latürnich auch für einzelne Anregungen dankbar bin. Ciao Zakum
  19. Hallo. Ich versuche gerade die FFTW3 Bibliothek unter Windows einzurichten, aber irgendwie habe ich absolut keinen Ansatz, wie ich das Anstellen soll. Ich hab in der Komandozeile versucht, diesen Befehl auszuführen, aber dort wird lib nicht erkannt. Auch die Suche auf der Festplatte nach einer Lib.exe konnte nicht weiterhelfen. In MVC konnte ich auch keine Hilfe finden. Falls jemand schon Erfahrungen damit gesammelt hat, wie man die Bibo zum Laufen kriegt oder auch so weiß was zu tun wäre, wäre es nett, wenn er mir weiterhelfen könnte. Ciao Zakum
  20. :upps Ich bin doch blöd...! Ich will ja mein 2D Array ausgeben, aber die [2] bei void ausgabe(fftw_complex grauwert[256][129][2], FILE *f2) { ist natürlich völlig sinnfrei und deutet auf ein 3D array hin. Mea culpa! :old
  21. So ungern ich das abgehackte Thema wieder nach oben schiebe, bei mir hat sich wieder eine (vermutlich noobige) Frage ergeben: Nach dem ich nun nur noch fftw verwende, habe ich versucht, einige Daten in einer Datei auszugeben: void ausgabe(fftw_complex grauwert[256][129][2], FILE *f2) { int i,j; for (i=0;i<256;++i) { for (j=0;j<129;++j){ [B] if((j+1)%256 == 0) fprintf(f2,"%f\n",grauwert[i][j][0]); else fprintf(f2,"%f\t",grauwert[i][j][0]); [/B] } } fclose(f2); } Nun gibt der Kompiler allerdings folgende Warnung: format >>%f<< erwartet Typ >>double<<, aber Argument 3 hat Typ >>double *<< Heißt das grauwert[j][0] ist ein Zeiger? (Hmm, kam aus der Dokumentation für mich nicht raus, aber gut.:eek) Wie könnte ich den mit fprintf einen Zeiger ausgeben?
  22. @Bubble: Dein Gefühl trügt dich keineswegs, C ist für mich schwammiges Gebiet, hab vor knapp einem halben Jahr angefangen, da sind noch so einige Lücken drin. Umso mehr danke ich für die Ausführungen. Das ist mir klar, was mich verwirrt ist, dass FFT keinerlei Probleme mit der fftw_complex struktur aus complex.h hat, obwohl diese ja offensichtlich anders aufgebaut ist... Werd da nochmal die Beschreibung von FFTW wälzen. @dundee: Jap, wenn fftw_complex so definiert ist: typedef double fftw_complex[2] dann hast du mit fftw_complex fft[iFoo][iFoo]im Prinzip ein 3d-Feld... Allerdings habe ich den Fehler begangen, eine andere Bibo zuerst einzubinden, so dass fftw_complex von vornherein anders definiert war. Deswegen konnte ich auch durch fft[posX][posY] zugreifen, anscheind ist DAS der richtige weg, wenn man die complex.h nutzt.
  23. Ich arbeite mit dem gcc. Hab gerade etwas herumgespielt: Eine weitere Bibliothek ist anscheinend schuld an der Misere! Complex.h #include <fftw3.h> void main() { fftw_complex fft[256][129]; fft[0][0]=0; } Gibt einen anständigen Fehler zurück, so wie sich das gehört. #include<complex.h> #include <fftw3.h> void main() { fftw_complex fft[256][129]; fft[0][0]=0; } dagegen zeigt dass von mir beschriebene Verhalten. Danke für den Denkanstoss, scheint als wäre das des Rätsels Lösung! Allerdings bringt mich das irgendwie nicht weiter Die complex.h brauche ich unbedingt, und kann sie nicht einfach weglassen. *grübel*
  24. Hallo, ich arbeite gerade mit der FFTW Bibliothek und bin dabei auf folgendes Problem gestossen: Ich habe ein zweidimensionales Array vom Typ fftw_complex fftw_complex fft[256][129] wobei laut Hilfe fftw_complex wie folgt definiert ist: Nun, ich wollte jetzt einfach mal einen Wert in diesem Array löschen: fft[Xpos][Ypos]=0; Das klappt komischerweise, nur weiß ich nicht, welcher Teil den nun gelöscht wird, oder ob gar alle Null gesetzt werden. Wenn ich versuche fft[Xpos][Ypos][0]=fft[Xpos][Ypos]=0; zu verwenden, dann bekomme ich den Fehler:"Indizierter Wert ist weder Feld noch Zeiger" Daher meine Frage: Wie greife ich auf ein Array[][] of Array[2] zu?
  25. Du hast völlig recht, das Problem liegt bei der Deklaration der Funktion. In C werden Arrayas immer als Referenzen, also als Pointer übergeben. //Edit: du hast die Sprache nicht erwähnt, aber ich vermute in C++ stimmt meine Aussage auch Mit void ausles(char* datei_best) erwartet deine Prozedur ein Array mit Pointern und kein Pointer auf ein Array. Richtig müsste es so heißen: void ausles(char datei_best[3][16][10])

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...