DOS C++ IDE/Complier

Ich suche eine C++ IDE welche unter DOS lauffähig ist. Wie Turbo Pascal, einfach c++. Eigentlich programmiere ich bevorzugt C#, aber es wird da wohl kaum einen Compiler geben für DOS.

Eine IDE würde ich bevorzugen, ist einfach praktischer als einen Kommandozeilen Compiler. Kennt jemand etwas passendes?

Hallo,

Ich suche eine C++ IDE welche unter DOS lauffähig ist. Wie
Turbo Pascal, einfach c++. Eigentlich programmiere ich
bevorzugt C#, aber es wird da wohl kaum einen Compiler geben
für DOS.

Wie sind denn die Randbedingungen? Welches DOS?

Gänge das hier:
http://dn.codegear.com/article/images/21751/tcpp101.zip
?

Grüße

CMБ

Hallo,

http://www.delorie.com/djgpp/

„DJGPP is a complete 32-bit C/C++ development system for Intel 80386 (and higher) PCs running DOS“

Wenn ich mich richtig erinnere, ist in einer der Zip-Dateien auch eine textbasierte IDE.

Grüße,
Moritz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Gänge das hier:
http://dn.codegear.com/article/images/21751/tcpp101.zip
?

Ja, sollte zumindest. Muss die Files noch mit disketten übertragen.

zu meinem system: Intel 486DX4, 8MB Ram, als Dos verwende ich eine Win98-startdiskette.

tcpp ist glaube ich genau das was ich gesucht habe.
Danke

http://www.delorie.com/djgpp/

Danke auch dir, werde es auch noch testen. Aber zuerst einmal tcpp.

Hallo Fragewurm,

Ich suche eine C++ IDE welche unter DOS lauffähig ist. Wie
Turbo Pascal, einfach c++. Eigentlich programmiere ich
bevorzugt C#, aber es wird da wohl kaum einen Compiler geben
für DOS.

Nein, da gibt es ein paar grundlegende Hindernisse.
C# benötigt .NET als Laufzeitumgebung und diese existiert nun mal nicht für DOS.

MfG Peter(TOO)

C# benötigt .NET als Laufzeitumgebung und diese existiert nun
mal nicht für DOS.

Es gibt aber doch auch C++ für .Net. Du kannst auch in Frankreich deutsch sprechen, du musst nur jemanden finden der dich versteht.
Obwohl C# eine MS Konstruktion ist handelt es sich auch hier nur um eine Sprache. KDevelop unterstützt auch C# (weiss jetzt nicht ob nur für mono [.Net für Linux]).

Hallo,

Ich glaube nicht, dass es eine C#-Implementierung gibt, die ohne VM auskommt, also in nativen i386-Objektcode compiliert. Dadurch würde man auch einige Vorteile der Sprache verlieren, wie z.B. die Interoperabilität mit anderen Sprachen. Genauso ist mir auch kein Java-Compiler bekannt, der „echte“ executables erzeugt. Womit man auch wieder die Plattformunabhängigkeit verlieren würde.

Grüße,
Moritz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo maetz

http://www.delorie.com/djgpp/

„DJGPP is a complete 32-bit C/C++ development system
for Intel 80386 (and higher) PCs running DOS“

Wenn ich mich richtig erinnere, ist in einer der Zip-Dateien
auch eine textbasierte IDE.

Nur als Ergänzung:
RHIDE -> http://www.rhide.com/
Das ist eine IDE, die wohl auf DJGPP aufsetzt, und fast genauso aussieht wie die Turbo-Pascal-Oberfläche. Muss man sie sich nur selbst übersetzen, also C++ und DJGPP muss schon vorhanden sein.

Aus den FAQ:
"RHIDE works under and is compiled with DJGPP V2. To compile your programs you need a working GCC-configuration, that means, GCC must be found in your path. Because DJGPP works only under DPMI you need a DPMI-Server. If you run it under Windows 3.1(1)/95, you have DPMI. Under MS-DOS you need either a memory-manager, which give you DPMI-services (I think QEMM is it, EMM386 has no DPMI-support), or you use CWSDPMI, the free DPMI-server from Charles W. Sandmann, which you can find on SimTel-ftp-sites. "

Mit freundlichen Grüssen
Klaus Bernstein

Ich glaube nicht, dass es eine C#-Implementierung gibt, die
ohne VM auskommt, also in nativen i386-Objektcode compiliert.
Dadurch würde man auch einige Vorteile der Sprache verlieren,
wie z.B. die Interoperabilität mit anderen Sprachen. Genauso
ist mir auch kein Java-Compiler bekannt, der „echte“
executables erzeugt. Womit man auch wieder die
Plattformunabhängigkeit verlieren würde.

Klar, gibt es nicht. Aber die theoretische Möglichkeit ist vorhanden. Ich bin nur der Ansicht das eine Sprache immer eine Sprache bleibt.

Wie sind denn die Randbedingungen? Welches DOS?
Gänge das hier:
http://dn.codegear.com/article/images/21751/tcpp101.zip

Turbo c++ läuft problemlos. Habe jetzt auch Dos6.22 installiert, startet schneller und bequemer als die Win98Disk. Habe aber dennoch einige schwierigkeiten. Villeicht kann mir jemand helfen.
Ich versuche ein Sudoku-Spiel zu basteln. Ich fülle also in ein „int[9][9]“ fortlaufend zufallszahlen ein, zeile für zeile. Jede zufallszahl wird auf korrektheit getestet und andernfalls nochmals generiert. Daher dass durch das zufällige generieren manchmal sackgassen entstehen, wird eine (im extrem fall zwei Zeilen) gelöscht und wieder aufgefüllt. Am schluss habe ich jedoch Lücken im 9x9Array. Die Lücken sind bei jedem Start anderst verteilt.

Den Code habe von einem eigenen C#-Projekt abgeändert, kann hier jetzt nicht posten da ich in diesem PC kein floppy habe. Aber der Code könnte höchsten falsch eingetragene Zahlen verursachen aber keine Lücken, ich springe nur zurück und nie nach vorne.
Ich habe jetzt zwei Vermutungen: Entweder hat Turbo probleme damit wenn ich den „Schleifenzähler“ in der Schleife zurücksetzte, oder es hat etwas mit der Speicherverwaltung zutun. Zweiteres wird wohl eher zutreffen da in .Net sowas automatisch gemacht wird.
Ich hoffe man versteht was ich meine und kann mir helfen.

Hallo,

Ich versuche ein Sudoku-Spiel zu basteln. Ich fülle also in
ein „int[9][9]“ fortlaufend zufallszahlen ein, zeile für
zeile.

Kapselst du das ganze als in einer Klasse?

Jede zufallszahl wird auf korrektheit getestet und
andernfalls nochmals generiert.

Was ist denn „auf korrektheit testen“ bei dir?

Daher dass durch das zufällige
generieren manchmal sackgassen entstehen, wird eine (im extrem
fall zwei Zeilen) gelöscht und wieder aufgefüllt. Am schluss
habe ich jedoch Lücken im 9x9Array. Die Lücken sind bei jedem
Start anderst verteilt.

Wie sieht denn das Löschen bei dir aus? Überschreiben der Elemente mit einer Null? Und wie sieht das Zurückspringen in einer Schleife aus? setzt du die Zählervariablen neu?
Erzeugst du irgendwo jemals Kopien deines zweidimenionalen Arrays?

Den Code habe von einem eigenen C#-Projekt abgeändert, kann
hier jetzt nicht posten da ich in diesem PC kein floppy habe.
Aber der Code könnte höchsten falsch eingetragene Zahlen
verursachen aber keine Lücken, ich springe nur zurück und nie
nach vorne.
Ich habe jetzt zwei Vermutungen: Entweder hat Turbo probleme
damit wenn ich den „Schleifenzähler“ in der Schleife
zurücksetzte,

Sollte bei ganz normalen for-Schleifen kein Problem sein

oder es hat etwas mit der Speicherverwaltung
zutun. Zweiteres wird wohl eher zutreffen da in .Net sowas
automatisch gemacht wird.
Ich hoffe man versteht was ich meine und kann mir helfen.

Dazu müssten wir erstmal wissen, was du genau getan hast.

Ich gehe beim erzeugen von Sudokus übrigens ein wenig anders vor: ich fülle zufällig etwa 26 Zahlen ein, und überprüfe dabei vor jedem Einfügen, dass diese Operation noch zu keinem Regelverstoß führt.
Dann teste ich, ob das Sudoku lösbar ist, wenn es keine Lösung gibt wird der Versuch einfach verworfen, wenn es mehrere Lösungen gibt werden weitere Zahlen eingefügt.
Näheres hier:
http://moritz.faui2k3.org/de/yasss#generate (Ist auch in C++ geschrieben)

HTH,
Moritz

Kapselst du das ganze als in einer Klasse?

Nein, in ist alles in „void sudoku()“ und wird vo der main gestartet.

Was ist denn „auf korrektheit testen“ bei dir?

int tmp=rand()%9+1;
for(z=0;z100)
{
for(z=0;z

Ich habe jetzt mal die If(zeile||spalte||quad) auseinander genommen, und aber fehler besteht weiterhin. Habe mal mit Trace durch den Code-gesteppt und feststellen müssen dass das Problem irgendwo in dieser if-Anweisung stecken muss. Denn er setzt sogar gleiche Zahlen in die gleiche Zeile. Was theoretisch aber nicht passieren kann. Ausser das Array[9][9] hat lücken, und dem ist leider so.
Ich bin am verzweilfeln. Ich würde den Code am liebsten mal djgpp testen aber kann zurzeit auf keine Disketten zugreifen.

Hallo,

Kapselst du das ganze als in einer Klasse?

Nein, in ist alles in „void sudoku()“ und wird vo der main
gestartet.

Was ist denn „auf korrektheit testen“ bei dir?

int tmp=rand()%9+1;
for(z=0;z100)
{
for(z=0;z 100 ist? und wieso setzt du eine Spalte zurück auf Null?

Das Ganze ist ohne Kontext kaum zu verstehen. Mein Tipp wäre, nach jedem Einfügen und jeden Löschen das Sudoku komplett auf dem Bildschirm ausgzugeben, dann siehst du, wo sich das erste Mal leere Felder einschleichen.

Und wenn du in Zukunft Quellcode hier reinkopierst/schreibst, dann packe den bitte in

-Tags, das machte es sehr viel leichter zu lesen.

Grüße,
Moritz

Irgendwie finde ich diesen Code komisch: was passiert, wenn x
== 0 ist und und x-- machst? eine -1 als Index ist natürlich
nicht so das Gelbe vom Ei.

Das ganze ist vor dem Ende der inneren schleife. Wird also nacher wieder eins addiert.

Außerdem: wenn du mit x-- in einer Zeile eins zurückgehst,
dann ist dort bereits eine Zahl drin. Dein Vergleich erlaubt
es aber nicht, dort nochmal die selbe Zahl einzutragen - ist
das gewollt?

Mit x-- bewirke ich eine wiederholung des feldes ohne eine Zahl einzutragen. (x wird bei im Schleifen-Kopf wieder x++)

if(Error>100)
{
for(z=0;z 100 ist? und wieso setzt du eine Spalte

zurück auf Null?

100 ist einfach irgendeine Zahl. Nach hundert Fehlversuchen innerhalb einer Zeile gehe ich davon aus das diese Zeile in einer Sackgasse endet, also das letzte feld keine Möglichkeit für korrektheit mehr hat. Dann wird die Zeile gelöscht, nicht spalte, und nochmals von Zeilen-Anfang begonnen. (im richtigen code habe ich auch da noch eine Sackgassen prüfung, welche bei 20 sackgassen Zeilen eine weitere zeile zurückgeht.) Ist eine nicht sehr wissenschaftliche Art und Weise aber sollte trotzdem funktionieren.

Das Ganze ist ohne Kontext kaum zu verstehen.

Werde den Code abschreiben und posten.

Und wenn du in Zukunft Quellcode hier reinkopierst/schreibst,
dann packe den bitte in

-Tags, das machte es sehr
viel leichter zu lesen.

Sorry, wusste nicht. Danke

#include 
#include 
#include 
#include 

void sudoku();

void main(void)
{
 sudoku();
}

void sudoku()
{
time\_t t;
int losung[9][9];
int x,y,z,tmp,erZ,erS;
clrscr();
srand((unsigned)time(&t));
erS=0;
for(y=0;y20)
 {
 for(z=0;z100) /\* löscht Zeile y \*/
 {
 for(z=0;z

Exakt so lasse ich den code laufen. (ohne Kommentare)
Achtung, manchmal endet der Code in einer Endlos-schleife. Unter Dos würde ich den Code vor dem testen speichern. (ähnlicher code in C# zeigt korrektes Sudoku und endet nie in einer endlosschleife, habe meherere tausend sudoku-Tafeln generieren lassen in C#)

Hallo,

> void sudoku()  
> {  
> time\_t t;  
> int losung[9][9];

Als erstes solltest du so ein Array initialisieren - das macht der Compiler nicht für dich auotmatisch.

> else  
> {  
> x--;  
> erZ++; /\*zählt um Sackgassen zu verhindern\*/  
> losung[ii][i]=0; /\*


An dieser Stelle meckert mein Compiler, dass weder i noch ii deklariert sind - sind sie auch nicht. 



> Exakt so lasse ich den code laufen. (ohne Kommentare)  
> Achtung, manchmal endet der Code in einer Endlos-schleife.  
> Unter Dos würde ich den Code vor dem testen speichern.  
> (ähnlicher code in C# zeigt korrektes Sudoku und endet nie in  
> einer endlosschleife, habe meherere tausend sudoku-Tafeln  
> generieren lassen in C#)


Naja, C++ ist halt nicht C#, und du solltest dich ein wenig über die Unterschiede informieren, bevor du wild drauf los programmierst.
Außer der Ausgabe verwendest du auch keine Features von C++, also kannst du dich eigentlich auch gleich über C informieren :wink:.

Wenn ich die Compilerfehler beseitige und das Array mit Nullen intialisiere wird bei mir am Ende ein leeres Sudoku ausgeben.

Ich finde den Code relativ unübersichtlich was das viele vor- und zurückgehen angeht, und ich bin mir dabei nie ganz sicher, ob die Indizes außerhalb des erlaubten Rahmens liegen können oder nicht.

Was ich dir empfehlen würde, wäre eine einzige Variable einzuführen, die bei jedem erfolgreichen setzen einer Zahl um eins erhöht wird, und aus der kannst du dir dann x und y berechnen.
Und das ganze kannst du dann in eine while(i 

Gelöst. Im vorherigen Quelltext habe ich die x-schleife zu früh geschlossen (abschreibe fehler), das wahre Problem lag aber tatsächlich in derjenigen Zeile welche ich als „eigentlich unnötig“ beschrieben habe. Diese löst das Löschen zuspät aus, es wird also ein Zeichen gelöscht welches nicht mehr eingetragen wird. Meine Angst vor sprach-spezifischen Fehlern hat mich das doch glatt übersehen lassen. Viel wirbel um etwas „eigentlich unnötiges“.
Vielen Dank Moritz.
Wenn du mir villeicht noch kurz sagen könntest welche Teile meines Codes C und welche C++ sind wäre ich dir noch dankbarer.

#include 
#include 
#include 
#include 
void sudoku();
void main(void)
{ 
 sudoku();
}
void sudoku()
{
 time\_t t;
 int losung[9][9]= {
 {0,0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0}, /\* habe auch ohne diesen Teil getestet\*/
 {0,0,0,0,0,0,0,0,0}, /\* Und es hat auch funktioniert \*/
 {0,0,0,0,0,0,0,0,0}, 
 {0,0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0}
 };

 int x,y,z,tmp,erZ,erS;
 clrscr();
 srand((unsigned)time(&t));
 erS=0;
 for(y=0;y20)
 {
 for(z=0;z1000) /\* löscht Zeile y \*/
 {
 for(z=0;z

Hallo,

Wenn du mir villeicht noch kurz sagen könntest welche Teile
meines Codes C und welche C++ sind wäre ich dir noch
dankbarer.

Nur die „Funktionen“ aus iostream.h (cout, cout.flush()) sind C++, sonst verwendest du nur C.

Grüße,
Moritz