Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » rechnen, speichern, auslesen, vergleichen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] > 5 < [ 6 ]
040
25.07.2004, 19:29 Uhr
~Nachtträumer
Gast


Hi du,

hab die sache mal etwas erweitert und geordnet (hat ewig gedauert ), scheint auch schon fast zu funktionieren.

C++:

// 12345.cpp : neue Datei - Definiert den Einsprungpunkt für die Konsolenanwendung.
//

#include <iostream>
#include <fstream>

using namespace std;


int main(int argc, char* argv[])
{
    unsigned long l_endzahl;
    unsigned long l_checkzahl = 1;
    unsigned long l_checkzahl_tmp = l_checkzahl;
    int dateiende =0;
    const char delim ='x';
    char read_from_file[20];
    
    cout << "Bitte letzte zu testende Zahl eingeben: ";
    cin >> l_endzahl;

    while(l_checkzahl <= l_endzahl)
    {
        fstream readwrite("trash.txt", ios::in | ios::app );    //datei öffnen lesen/schreiben
        ofstream write("ok.txt", ios::app);            //datei öffnen schreiben    
        
        //prüfe ob Dateiende erreicht
        while(dateiende <= 50)//nur zum test, da muss noch was ordentliches hin
                                //Prüfe ob alle zahlen in trash.txt verglichen wurden
                                // damit dann aufgehört wird (wenn letzte zahl in datei geprüft höre auf)
        {//wenn nicht mach folgendes:
            //aus datei lesen
            readwrite.getline(read_from_file,sizeof(read_from_file)/sizeof(char),delim);
            /* getline liesst in dass array "read_from_file" bis zum nächsten "delim" */
            l_checkzahl_tmp=atoi(read_from_file);
            /* checkzahl _tmp bekommt den int aus der datei weil wir aber in nen array lesen müssen
            wir mittels atoi in nen int wandeln ..nun kannste mit checkzahl_tmp weitermachten
            z.b mit dem wert von checkzahl vergleichen oder sonst was */
        
            if(l_checkzahl == l_checkzahl_tmp)
            {    //stimmt checkzahl mit zahl aus datei überein erhöhe checkzahl und prüfe nächste zahlh
                l_checkzahl++; //checkzahl++ wird doch nicht zweimal ausgeführt (entwerder bei if oder else)
                cout << l_checkzahl << "if true" <<"\n";
            }
            else
            {
                //wenn checkzahl nicht trash.txt steht folgendes:        
                write<<l_checkzahl<<delim;    //in die datei ok.txt

                //rechne neue trash zahlen aus
                for(int j=2;j<=5;j++)
                {
                    cout << l_checkzahl_tmp; //is irgendwie 0
                    readwrite<<l_checkzahl_tmp*j<<delim; //schreibt in trash.txt
                }//for schreiben ende
                l_checkzahl++;
            }
            dateiende++;        //nur zum testen
        }//while lesen ende

        readwrite.close (); //trash.txt
        write.close (); //ok.txt
    }

    getchar();
    return 0;
}


Es gibt aber noch ein problem.
Die variable checkzahl_tmp ist in der for-schleife irgendwie 0. Woran kann das liegen?

in der trash.txt stehen folgende werte: 1x2x3x4x5x6x7x

Deine frage bezüglich der 6erschritte hab ich nich verstanden
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
041
25.07.2004, 20:28 Uhr
invalid_username



du kannst doch nicht checkzahl tmp für die schleife nehmen ..
ausserdem ist es nicht so gut wenn eu wärend der read-session write nimmst .. ich schick dir mal nen anderen ansatz ,... ist aber noch nicht fertig ... nua mal bissel rumgeespielt...


zur trash .. du schreibst doch 2,3,4,5 rein.. dann kommt 6 in ok
als nächstes ist checkzahl doch 6 und du willst doch ... nun wieder schreiben also mit
6* 2,3,4,5,--- also sind es nun 6er schritte

-> hier mal dein code bissel anders

C++:
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    unsigned int l_endzahl;
    unsigned long l_checkzahl = 1;
    unsigned long l_checkzahl_tmp=l_checkzahl;
    int factor=1;
    bool found=false;
    const char delim ='x';
    char read_from_file[20];
    ofstream write;
    ifstream read;
    ofstream write2("ok.txt");

    cout << "Bitte letzte zu testende Zahl eingeben: ";
    cin >> l_endzahl;

        for(unsigned int loops=0;loops< l_endzahl;loops++){
                (l_checkzahl==1)?write.open("trash.txt"):write.open("trash.txt",ios::app);
//                l_checkzahl_tmp=l_checkzahl;
                for(int j=2;j<=5;j++){
                        cout<<"write<< "<<(l_checkzahl_tmp*j)<<endl;
                        write<<(l_checkzahl_tmp*j)<<delim;
                        l_checkzahl_tmp=l_checkzahl;
                }
                write.close();//die datei schliessen
                read.open("trash.txt");    //datei öffnen
                l_checkzahl=(factor==1)?2:2*factor;
                cout<<loops<<" "<<l_checkzahl<<endl;  //bis hier gehts
                while(read.getline(read_from_file,sizeof(read_from_file)/sizeof(char),delim)){
                        l_checkzahl_tmp=atoi(read_from_file);
                        cout<<l_checkzahl_tmp<<endl;;

                        if(l_checkzahl_tmp==l_checkzahl){
                                l_checkzahl+=factor;
                                found=true;
                        }
                }//while lesen ende
                if(found==true){
                        write2<<l_checkzahl<<delim;
                        factor=l_checkzahl;
                        l_checkzahl_tmp=l_checkzahl;
                        //found=false;
                }

                else{
                        cout<<"not found"<<endl;
                        getchar();
                        getchar();
                        exit(EXIT_SUCCESS);
                }
                read.close();//Datei schließen
                cout<<"l_checkzahl = "<<l_checkzahl<<" "<<factor<<endl;
        }//for
        getchar();
        getchar();
        return 0;
}


hoffe du kannst hiermit mehr anfangen -- >ich will es aber nicht für dich schreiben also sach ich nicht zuviel.. wenn du von hier nicht drauf kommst, dann weiss ich auch nicht
--
((void)*)0

Dieser Post wurde am 25.07.2004 um 20:28 Uhr von invalid_username editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
042
25.07.2004, 21:16 Uhr
~Nachtträumer
Gast


Bei mir siehts nu so aus (habe die sachen mal beschriftet)


C++:
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    unsigned int l_endzahl;
    unsigned long l_checkzahl = 1;
    unsigned long l_checkzahl_tmp=l_checkzahl;
    int factor=1;
    bool found=false;
    const char delim ='x';
    char read_from_file[20];
    ofstream write;
    ifstream read;
    ofstream write2("ok.txt");

    cout << "Bitte letzte zu testende Zahl eingeben: ";
    cin >> l_endzahl;


    
    
    
    
    for(unsigned int loops=0;loops< l_endzahl;loops++){    //ist endzahl kleiner loops, dann stop
                (l_checkzahl==1)?write.open("trash.txt"):write.open("trash.txt",ios::app);
                //trash zum schreiben öffnen
//             l_checkzahl_tmp=l_checkzahl;
                for(int j=2;j<=5;j++){
                        //cout<<"write<< "<<(l_checkzahl_tmp*j)<<endl; //kontrollausgabe
                        write<<(l_checkzahl_tmp*j)<<delim;        //checkzahl_tmp multiplizieren mit 2,3,4 oder 5
                                                                //und in trash.txt schreiben
                        l_checkzahl_tmp=l_checkzahl;            //tmp wieder auf eins setzen
                }
                write.close();//die datei schliessen

                read.open("trash.txt");    //datei öffnen
                l_checkzahl=(factor==1)?2:2*factor;            //was is das? :)
                //cout<<loops<<" "<<l_checkzahl<<endl;  //bis hier gehts // kontrollausgabe
                
                //trash.checkzahl_tmp = eine zahl aus trash.txt
                while(read.getline(read_from_file,sizeof(read_from_file)/sizeof(char),delim)){
                        l_checkzahl_tmp=atoi(read_from_file);
                        cout<<l_checkzahl_tmp<<endl;;        //kontrollausgabe

                        if(l_checkzahl_tmp==l_checkzahl){ //wenn tmp = checkzahl dann checkzahl*factor
                                l_checkzahl+=factor; //addieren dann zuweisen(checkzahl + factor)
                                found=true;
                        }
                }//while lesen ende
                if(found ==false){ //wenn checkzahl nicht in trash.txt gefunden wurde
                        write2<<l_checkzahl<<delim; //schreibe checkzahl in ok.txt
                        factor=l_checkzahl;        //faktor ist jetzt checkzahl
                        l_checkzahl_tmp=l_checkzahl;    //checkzahl_tmp ist checkzahl
                        //found=false;
                }

                else{
                        cout<<"found"<<endl;
                        getchar();
                        getchar();
                        exit(EXIT_SUCCESS);
                }
                read.close();//Datei schließen
                //cout<<"l_checkzahl = "<<l_checkzahl<<" "<<factor<<endl; //kontrollausgabe
        }//for
        getchar();
        getchar();
        return 0;
}





Zitat von ((void)*)0:

wenn du von hier nicht drauf kommst, dann weiss ich auch nicht





Nach deinem programm schreibt er zuerst in die trash.txt und schau später nach ob was drinsteht. Es soll aber erst geschaut werden ob checkzahl schon drinne steht und dann erst in trash.txt bzw in ok.txt.

Dann müsste der untere teil doch nach oben oder? Wollte jetzt nicht alles auseinanderreissen . Da frag ich lieber vorher
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
043
25.07.2004, 21:35 Uhr
invalid_username



sorry hatte ich falsch verstanden -->
dann überspring es beim ersten durchlauf
wär auch froh wenns sagen würdest wofürs ist .. damit ich nach sinn helfen kann

2. ich heisse nicht ((void)*)0
aber passt schon
soll er am anfang trash oder ok überprüfen
winxxx
--
((void)*)0

Dieser Post wurde am 25.07.2004 um 21:37 Uhr von invalid_username editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
044
25.07.2004, 21:46 Uhr
~Nachträumer
Gast


Es geht darum bestimmte zahlen zu trennen (die einen in trash die anderen in ok, wie bei aschenputtel ).

Erst soll überprüft werden ob checkzahl in trash steht.

Wenn ja, dann muss checkzahl um eins erhöht werden.

Steht checkzahl nicht in trash, muss checkzahl in ok geschrieben werden und:
checkzahl * 2
checkzahl * 3
checkzahl * 4
checkzahl * 5
gerechnet werden, diese ergebnisse kommen dann in trash.
Dann wieder checkzahl++

Ab hier solls wieder von vorn losgehen.


Wie schauts denn aus? Lag ich mit meinem entwurf so weit weg von der lösung? Oder sollte ich lieber mit deinem weitermachen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
045
25.07.2004, 23:23 Uhr
invalid_username



ich habe dia nua ne idee geschrieben wasde machst musst du wissen
ps ich kenn aschenpuddel nicht ^^
--
((void)*)0

Dieser Post wurde am 25.07.2004 um 23:35 Uhr von invalid_username editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
046
26.07.2004, 07:17 Uhr
~Nachtträumer
Gast


Hi,

ich will die sache weitermachen, kann aber damit nix anfangen:

C++:
l_checkzahl=(factor==1)?2:2*factor;



Was macht das?

Nu muss ich erstma arbeiten, bis später

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
047
26.07.2004, 07:25 Uhr
typecast
aka loddab
(Operator)


Das bedeutet das gleiche wie:

C++:
if ((factor==1))
  l_checkzahl = 2;
else
  l_checkzahl = 2*factor

//und das bedeutet, weil es einfach nur unnoetig ist
l_checkzahl = 2*factor; // ;-)


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
048
26.07.2004, 21:08 Uhr
~Nachtträumer
Gast


Danke für eure tipps,

ich glaube ich bin dicht dran an der lösung des problems.

Es gibt allerdings noch ein problem mit der ersten whileschleife. Wie kann ich die so hinbekommen das sie einwandfrei funktioniert. Ich habe mal die klammer hingeschrieben damit man sieht was passieren soll.

Der inhalt der klammer soll solange durchlaufen werden bis die datei zu ende ist.


C++:
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
    unsigned long endzahl;
    unsigned long checkzahl = 1;
    unsigned long checkzahl_tmp = checkzahl;
    const char delim ='x';
    char read_from_file[20];
    bool found =false;
    ifstream readtrash ("trash.txt");
    ofstream writeok ("ok.txt", ios::app);
    ofstream writetrash ("trash.txt", ios::app);

    cout << "Bitte letzte zu testende Zahl eingeben: ";
    cin >> endzahl;
    

    for(unsigned int loops=0;loops < endzahl;loops++)
    {

//checkzahl in trash.txt?//

///////////////////////Problem/////////////////////
        while(readtrash.getline(read_from_file,sizeof(read_from_file)/sizeof(char),delim))
{//ich weiß das diese klammer falsch ist
            cout << checkzahl << " checkzahl\n";
            checkzahl_tmp=atoi(read_from_file);
            if(checkzahl==checkzahl_tmp)
            {
                found = true;
            }
        }///ich weiß das diese klammer falsch ist
//checkzahl in trash.txt? ende//

//checkzahl in ok.txt schreiben//
        if (found == false)
        {
            writeok << checkzahl << delim;
            for(int j=2;j<=5;j++)
            {
                writetrash<<(checkzahl*j)<<delim;
            }
        }
//checkzahl in ok.txt schreiben ende//
        checkzahl++;
        found=false;
    }

    return 0;
}



Bitte nochmal um hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
049
26.07.2004, 21:48 Uhr
~Nachtträumer
Gast


Die klammer schein doch richtig zu sein?

Aber wenn man das unterstehende programm ausführt sieht man das problem.


C++:
#include <iostream>
#include <fstream>

using namespace std;


int main(int argc, char* argv[])
{
    unsigned long endzahl;
    unsigned long checkzahl = 1;
    unsigned long checkzahl_tmp = checkzahl;
    const char delim ='x';
    char read_from_file[20];
    bool found =false;
    ifstream readtrash ("trash.txt");
    ofstream writeok ("ok.txt", ios::app);
    ofstream writetrash ("trash.txt", ios::app);

    cout << "Bitte letzte zu testende Zahl eingeben: ";
    cin >> endzahl;




    for(unsigned int loops=0;loops < endzahl;loops++)
    {

//checkzahl in trash.txt?//
        while(readtrash.getline(read_from_file,sizeof(read_from_file)/sizeof(char),delim))
            {
            cout << checkzahl << " checkzahl\n";
            checkzahl_tmp=atoi(read_from_file);
            if(checkzahl==checkzahl_tmp)
            {
                found = true;
            }
        }
//checkzahl in trash.txt? ende//

//checkzahl in ok.txt schreiben//
        if (found == false)
        {
            writeok << checkzahl << delim;
            for(int j=2;j<=5;j++)
            {
                writetrash<<(checkzahl*j)<<delim;
            }
        }
//checkzahl in ok.txt schreiben ende//
        checkzahl++;
        found=false;
        cout << "wird nur am ende ausgeführt"; //warum?
    }

    return 0;
}



Warum wird:


C++:
        checkzahl++;
        found=false;
        cout << "wird nur am ende ausgeführt"; //warum?



Nur zum schluss ausgeführt? checkzahl++ soll immer nach der if oder while sache ausgeführt werden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] > 5 < [ 6 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: