Beiträge von Plantschkuh!
-
-
Zitat von Primenumber
_itoa(foo, bar, 10);
Diese Funktion _itoa ist aber nicht Teil von ISO C oder ISO C++ und wird nur auf bestimmten Plattformen unterstützt. In echtem C kann man zum Beispiel sprinf verwenden. Ich finde übrigens nicht, daß es total häßlich ist, die Ziffern einzeln mit Modulo- und Divisionsoperationen zu ermitteln.
new ist übrigens C++, aber nicht C; eventuell hilft das fips nicht weiter. Ich würde allen empfehlen, die sinnlose Kategorie "C/C++" zu ignorieren und stattdessen explizit ihn ihren Post zu schreiben, in welcher Sprache sie ihre Lösung haben möchten. (Oder man nervt halt die Mods so lange, bis anständig benannte Kategorien eingeführt werden.) Und man bekommt vielleicht auch mehr Hilfe und weniger Beschwerden von Leuten wie mir, wenn man seinem Thread auch einen brauchbaren Titel gibt... -
Für nichttriviale Parser empfehlen sich Parsergeneratoren. Für Java habe ich da neulich mit JavaCC (https://javacc.dev.java.net/) ganz brauchbare Erfahrungen gemacht, vielleicht eignet es sich auch für deine Zwecke.
Im Prinzip mußt du nur eine kontextfreie Grammatik für deine Eingabesprache schreiben können, den Rest macht dir der automatisch generierte Parser. -
-
Zitat von leviathan
für C unter UNIX?
Ich finde, das ist schon mal der falsche Ansatz: Wenn du ein Buch mit dem Titel "C unter UNIX" liest, dann lernst du damit vielleicht, wie man effektiv UNIX-Programme schreibt; C (die Programmiersprache) lernst du damit aber nicht. D.h. du wirst nicht unterscheiden können, was jetzt C ist und was UNIX, und beim ersten Plattformwechsel fällt dir das auf den Kopf.
Ich würde daher empfehlen, zuerst die Sprache zu lernen. Die paar Betriebssystemaufrufe, die bei Sysprog dann noch dazukommen, sind erstens nicht so schwer zu lernen und zweitens zum Teil sowieso Sysprog-spezifisch, du wirst einige also sowieso nirgendwo anders finden.
Hier ein paar Links für echtes, portables C:
http://www.eskimo.com/~scs/C-faq/top.html
http://users.powernet.co.uk/eton/clc/cbooks.html
http://home.att.net/~jackklein/c/c_books.html
Weiters ist (bzw. war, ich hab sie schon länger nicht mehr gelesen) die Newsgroup comp.lang.c absolut genial und voll mit Experten, man muß aber aufgrund des hohen Traffics entsprechend Zeit zum lesen investieren, wenn man das ganze Wissen aufsaugen will. -
-
Empfehlen würde ich das vielleicht nicht direkt, aber ich verwende nicotine (früher pyslsk genannt).
-
Zitat von daff
Und HTML als Alternative zur Darstellung von Dokumenten vorzuschlagen ist irgendwie schon grob fahrlässig
Vor allem natürlich, wenn es sich um Dokumente mit viel dargestellter Mathematik handelt.
Bei http://mathworld.wolfram.com scheint es ganz gut zu funktionieren (z.B. http://mathworld.wolfram.com/PoissonDistribution.html). Für Texte, die zum online-browsen mit Hyperlinks gedacht sind, ist HTML oft eine gute Wahl; man muß sich nur zu helfen wissen. -
Was willst du sonst verwenden? PostScript ist gut dokumentiert, wird von vielen Laserdruckern direkt gefressen, läßt sich leicht aus LaTeX erzeugen und ist eine Turing-vollständige Programmiersprache (http://public.planetmirror.com/pub/pshttpd/).
Mögliche Alternativen sind bei anderen Leuten auch unbeliebt: http://www.complang.tuwien.ac.at/anton/why-not-pdf.html -
Zitat von Kuschelmaus
ich glaub nicht, dass es sinn macht, den code zu posten, da er alleine eh nicht rennt weil das ganze in ein größeres projekt eingebettet ist.
Deswegen hab ich ja gemeint, du sollst ihn abspecken, aber eben so weit, daß du noch ein kleines, lauffähiges Programm hast, das deinen Fehler demonstriert. Also sowas:C
Alles anzeigen#include <stdio.h> #include <stdlib.h> int main(void) { unsigned int m, n; float **array; float *data; unsigned int i, j; if (scanf("%u %u", &m, &n) == 2) { printf("m = %u, n = %u\n", m, n); /* lege großen Speicherblock an */ data = malloc(m * n * sizeof *data); /* lege Array von Pointern an */ array = malloc(m * sizeof *array); if (data == NULL || array == NULL) { puts("data oder array konnte nicht angelegt werden"); exit(EXIT_FAILURE); } /* setze Pointer an den Anfang jeder "Spalte" */ for (i = 0; i < m; i++) array[i] = data + i * n; /* teste den Speicher */ for (i = 0; i < m; i++) for (j = 0; j < n; j++) array[i][j] = i * n + j; puts("alles ok"); /* gebe Pointer und Gesamtspeicherblock frei */ free(array); free(data); } return 0; }
oder auch:C
Alles anzeigen#include <stdio.h> #include <stdlib.h> int main(void) { unsigned int m, n; float **array; unsigned int i, j; if (scanf("%u %u", &m, &n) == 2) { printf("m = %u, n = %u\n", m, n); /* erste Dimension anlegen: ein Array von Pointern, für die * dann jeweils eine Spalte der Matrix angelegt wird */ array = malloc(m * sizeof *array); if (array == NULL) { puts("array konnte nicht angelegt werden"); exit(EXIT_FAILURE); } for (i = 0; i < m; i++) { /* erzeuge i-te Spalte */ array[i] = malloc(n * sizeof *array[i]); if (array[i] == NULL) { printf("array[%u] konnte nicht angelegt werden", i); exit(EXIT_FAILURE); } /* weise jedem Element des Arrays einen Wert zu. * Eventuelle Probleme sollten spätestens hier * auftauchen. */ for (j = 0; j < n; j++) array[i][j] = n * i + j; } puts("alles ok soweit"); /* gebe einzelne Spalten frei */ for (i = 0; i < m; i++) free(array[i]); /* gebe Spaltenarray frei */ free(array); } return 0; }
Die erste Variante legt dabei einen großen Speicherblock für die gesamte Matrix an und erzeugt dynamisch Pointer, die jeweils an den Anfang einer Spalte zeigen. Die zweite Version legt für jede Spalte ein eigenes dynamisches Array an, hier ist der Speicherblock für die gesamte Datenstruktur nicht zusammenhängend.
Beide funktionieren bei mir tadellos, z.B. mit dem Input "16000 1800". Ob sie wirklich korrekt sind, ist eine andere Sache -
Die Frage ist sehr schwer zu beantworten, ohne deinen Code zu kennen. Poste am besten eine kleine, abgespeckte Version des Programms.
-
Starte das Programm aus einer DOS-Box. ("Eingabeaufforderung" oder wie die heißt.)
-
Dafür gibt es p (paragraph) als Spaltentyp. Man muß dabei die Breite der Spalte angeben, ein Beispiel habe ich in diesem Thread gepostet: http://hades.gothic.at/iforum/showthread.php?t=17786
-
Ein paar Tips für die erfolgreiche Hilfesuche:
- Wähle ein anständiges Subject, das dein Problem beschreibt.
- Beschreibe nicht nur die Angabe, sondern auch das, was du schon hast.
- Sag uns, wo du anstehst.
- Sag uns, warum du anstehst.
- Stelle konkrete Fragen.
- Erwarte nicht, daß wir das Programm für dich schreiben; sag uns, wobei du Hilfe brauchst.
- Lies das: http://www.catb.org/~esr/faqs/smart-questions.html
-
Zitat von jenny_psion
incompatible types
[javac] found : java.lang.Object
[javac] required: char
[javac] char opTop = myStack.pop();
[javac] ^
Javas Stacks (und Vectors und das ganze sonstige Collection-Zeug) geben immer ein java.lang.Object zurück. Das mußt du dann immer auf den Typ casten, den du gern hättest. Hier halt (char). (Das steht aber alles in der Fehlermeldung.) -
Zitat von JohnFoo
Gibt es von VMWare eine Studentenlizenz?
Nö: http://sts.tuwien.ac.at/sss.php (Zumindest nicht vom ZID der TU, falls das gemeint war.)ZitatOder kennt jemand von euch ein Open-Source-Projekt, welches das selbe kann?
Yep: http://bochs.sourceforge.net/
(Wobei ich jetzt nicht meine Hand dafür ins Feuer lege, daß bochs deiner Definition von "das selbe" genügt. Aber es soll theoretisch das gleiche können.) -
Zitat von )(eNoN
also gegeben is eine baumstruktur, die is immer anders, soll nur ein unterprogramm sein, also die struktur soll nich eingegeben werden
Wenn du dich nicht klar ausdrückst, machst du es anderen nicht gerade leichter, dir zu helfen.
Also: Wie ist der Baum definiert? Welches Interface soll deine Funktion haben? -
Zitat von Kongo
Was sind eigentlich die Unterschiede zwischen dem translation und dem binary mode?
Es gibt keinen translation mode, es gibt einen text mode. Ein 't' im mode-string ist ein Fehler und erzeugt undefined behavior.Es gibt folgende mode strings (siehe hier, das ist der letze öffentliche Draft des C99-Standards):
Zitat von n869
r open text file for reading
w truncate to zero length or create text file for writing
a append; open or create text file for writing at end-of-file
rb open binary file for reading
wb truncate to zero length or create binary file for writing
ab append; open or create binary file for writing at end-of-file
r+ open text file for update (reading and writing)
w+ truncate to zero length or create text file for update
a+ append; open or create text file for update, writing at end-of-file
r+b or rb+ open binary file for update (reading and writing)
w+b or wb+ truncate to zero length or create binary file for update
a+b or ab+ append; open or create binary file for update, writing at end-of-file
Alles, was nicht in dieser Liste aufscheint, ist ein Fehler.Zitat von KongoEin Unterschied ist, dass im translation mode die carriage return rausgeschnitten werden. Was ist da aber sonst noch anders?
Das kommt auf die Plattform an. Bei text-streams wird eben die Textdarstellung im File an die Konventionen von C angepaßt. Unter Unix zum Beispiel findet die Transformation, die du angesprochen hast, auch nicht statt, da gibt es keinen Unterschied zwischen Text- und Binärdateien.
Da die gelesenen Zeichen eben nicht genau den gespeicherten entsprechen, sind fseek/ftell auf Textfiles auch eingeschränkt. -
Zitat von nordtiroler
ich darf mich mit ein paar problemen anschließen, weils hier grad recht gut dazupasst. ich hab mehrere tabellen mit jeweils mehreren spalten.
Ich hab mal einen kleinen Demotext gebastelt:LaTeX
Alles anzeigen\documentclass[a4paper]{article} \usepackage{ngerman} \begin{document} \begin{tabular}{||p{0.2\textwidth} | p{0.5\textwidth} p{0.3\textwidth}||} text & mehr text & noch mehr text \\ neue & zeile gef"allig? & geht auch \\ Und sogar ganz ganz ganz lange Texte passen wunderbar in diese Tabelle & ja & wirklich \end{tabular} Hier etwas F"ulltext, damit keiner meint, ich w"urde mit meinen Tabellen schummeln. % selber Tabellenkopf wie oben \begin{tabular}{||p{0.2\textwidth} | p{0.5\textwidth} p{0.3\textwidth}||} na dann & schaun & wir mal, ob die tabellen gleich breit sind \end{tabular} \end{document}
Ich glaub, das sollte deine Fragen beantworten.
Mit p wird der Text der Zelle als ein Absatz formatiert; das hat halt den Nachteil, daß du dir nicht mehr so komfortabel aussuchen kannst, ob eine Spalte links- oder rechtsbündig bzw. zentriert sein soll (zumindest wüßte ich nicht, wie das gehen könnte). -
Zitat von Olli
Danke für den Hinweis. Das mit c ist mir zu umständlich. Ich werde wohl auch die Excel-Sache machen..
Wenn du schon extern sortierst, dann reicht vielleicht auch das Unix-Kommando sort für deine Zweicke aus. Dann mußt du nicht mit Excel rumtun und kannst vor allem direkt deinen Text damit munchen, ohne Konversionen vorher oder nachher.
Möglicher Nachteil: Die ganze Zeile der Tabelle muß in einer Zeile im Source stehen. Könnt vom Aufwand aber trotzdem noch günstiger sein.