Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datein in Matrixform einlesen

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 <
000
31.10.2007, 15:58 Uhr
~Gast
Gast


Hallo zusammen,

bin neu in C++ und habe mal ne Frage.
Ich habe ne .dat mit einer Matrix.

1 2 3 4 1 2 3 1 1 2 3 1 2 3 2 1 2
2 3 3 2 1 1 2 2 3 1 2 2 3 3 1 2 3
3 2 3 4 2 1 2 3 4 2 1 2 3 4 2 1 2

und so weiter halt.

Anzahl der Zahlen ist bekannt. 400x800

Wie würde eine for schleife in c++ aussehen die mit eine zahl nach den anderen einliest?

irgendwas wie :


Code:

for (i=0; i<800; i++){
for (j=0; j<400; j++){

//Lese das Interger

}
}




Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.10.2007, 16:13 Uhr
xXx
Devil


Naja kannst dann bsw. einfach machen:

C++:
std::ifstream file_stream("matrix.dat");
std::vector<unsigned int> data(400 * 800);

for (std::size_t y = 0; y < 400; ++y)
    for (std::size_t x = 0; x < 800; ++x)
        file_stream >> data[y * 800 + x];

// ausgeben ...
std::copy(data.begin(), data.end(), std::ostream_iterator<unsigned int>(std::cout, " "));
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.10.2007, 16:47 Uhr
~Gast
Gast


Hmm... versteh ich nicht ganz. Ist aber auch glaube ich nicht ganz das was ich suche.

ich brauche die Werte nur ganz kurz wissen damit ne andere funktion aufrufen und wieder wegschmeissen. Aber ichbrauche jeden einzelnen Wert mit seiner Position in der Matrix.

Code:

for (i...){
for (j...){
das int lesen;
funktionbla(i,j);
}
}


habe bisher nur C gemacht Muss mich umbedingt mal in C++ einarbeiten. Nur während ner Präsentationserstellung ist immer nicht so viel Zeit.

Gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.10.2007, 16:50 Uhr
xXx
Devil


Naja du hast jetzt halt im Vector data alle Daten drin ^^

C++:
data.at(y * width + x)

width = 800 in deinem Fall ...
So kannst du dir die einzellnen Werte dann ansprechen ... wenn du sie direkt verarbeiten willst,

C++:
file_stream >> data[y * 800 + x];
durch

C++:
{
    unsigned int i(0);
    file_stream >> i;
    do_foo(i, x, y);
}
wobei do_foo deine Funktion ist und i der Wert an der Stelle (x, y) ... ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.10.2007, 18:04 Uhr
~Gast
Gast



Code:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,a,b,c,k,x,y;
char   dateiname[]={"x_y_Matrix_001.dat"};
unsigned int n(0);

FILE *x_y_mx_ptr;

for(k=0; k<1000; k++)
{
    c=k/100; c=c+48;
    b=(k-(100*(c-48)))/10; b=b+48;
    a=(k-(100*(c-48))-(10*(b-48))); a=a+48;
    dateiname[13]=c;
    dateiname[14]=b;
    dateiname[15]=a;


std::ifstream file_stream(dateiname);
std::vector<unsigned int> data(400 * 800);

for (std::size_t y = 0; y < 400; ++y){
    for (std::size_t x = 0; x < 800; ++x){
        file_stream >> data[y * 800 + x];
        file_stream >> n;
    //hier die Funktion(n,x,y)

    }
    }

}
system("Pause");
return(0);
}



Habe das mal so eingefügt. Er kompiliert es aber nicht
Das mit dem Dateinamen ist weil er es auch für 1000 Datein machen soll. Das habe ich mal so aus dem alten C Programm geklaut Danke schonmal für die hilfe. Ich hoffe ich kann mein baby heute nacht rechnen lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.10.2007, 19:59 Uhr
xXx
Devil



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

int main()
{
    for (std::size_t i = 0; i < 1000; ++i)
    {
        std::ostringstream ss;
        ss << "x_y_Matrix_" << std::setw(3) << std::setfill('0') << i;
        
        std::ifstream file_stream(dateiname);
        if (!file_stream) { std::cerr << "FEHLER: Datei \"" << ss.str() << "\" konnte nicht geöffnet werden!" << std::endl; continue; }

        for (std::size_t y = 0; y < 400; ++y)
            for (std::size_t x = 0; x < 800; ++x)
            {
                unsigned int tmp(0);
                file_stream >> tmp;
                // function(tmp, x, y);
            }
    }
    std::cout << "Drücken Sie eine Taste zum Beenden" << std::endl;
    std::cin.get();
}
und schon geht es
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.10.2007, 20:50 Uhr
~Gast
Gast


Nein, habs eingefügt. Geht aber nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.11.2007, 01:22 Uhr
xXx
Devil


Was geht denn da nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.11.2007, 10:29 Uhr
Bruder Leif
dances with systems
(Operator)


Theorie: Hast Du den Source in eine .c-Datei eingefuegt, oder in eine .cpp/.cc?
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: