Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <ctime> //zur Laufzeitdarstellung
- using namespace std;
- int Ax, Ay, Bx, By;
- void s_array() {
- //LAUFZEIT-INIT
- clock_t start;
- double laufzeit;
- start = clock();
- //MATRIX A
- ifstream fileA("A.txt");
- fileA >> Ax >> Ay;
- double arrayA[Ax][Ay];
- for (int i = 0; i < Ax ; i++) {
- for (int j = 0; j < Ay ; j++) {
- fileA >> arrayA[i][j];
- //cout << arrayA[i][j] << " ";
- }
- }
- fileA.close();
- //MATRIX B
- ifstream fileB("B.txt");
- fileB >> Bx >> By;
- double arrayB[Bx][By];
- for (int j = 0; j < Bx ; j++) {
- for (int k = 0; k < By ; k++) {
- fileB >> arrayB[j][k];
- //cout << arrayB[j][k] << " ";
- }
- }
- fileB.close();
- //MATRIXMULTIPLIKATION + DATEIAUSGABE
- ofstream fileC("sC.txt");
- double res=0;
- for (int i = 0; i < Ax ; i++) {
- for (int k = 0; k < By ; k++) {
- for (int j = 0; j < Ay ; ++j) {
- res += arrayA[i][j] * arrayB[j][k];
- }
- fileC << res << " ";
- res=0;
- }
- fileC << "\n";
- }
- fileC.close();
- //LAUFZEITBERECHNUNG
- laufzeit = (double)(clock() - start) / CLOCKS_PER_SEC;
- cout << "Laufzeit: " << laufzeit << " Sekunden" << endl;
- }
- void d_array() {
- //LAUFZEIT-INIT
- clock_t start;
- double laufzeit;
- start = clock();
- //MATRIX A
- ifstream fileA("A.txt");
- fileA >> Ax >> Ay;
- double *arrayA = new double[Ax*Ay];
- /*
- * Anstatt fuer jede Zeile einen neuen Speicherblock im Heap zu reservieren,
- * wird ein großer Block reserviert.
- * Zugriff auf Element a[x][y] erfolgt mit a[x*SPALTEN+y]
- * Dadurch muss am Ende auch nur ein Speicherblock wieder per delete freigegeben werden.
- */
- for (int i = 0; i < Ax ; i++) {
- for (int j = 0; j < Ay ; j++) {
- fileA >> arrayA[i*Ay+j];
- }
- }
- fileA.close();
- //MATRIX B
- ifstream fileB("B.txt");
- fileB >> Bx >> By;
- double *arrayB = new double[Bx*By];
- for (int j = 0; j < Bx ; j++) {
- for (int k = 0; k < By ; k++) {
- fileB >> arrayB[j*By+k];
- }
- }
- fileB.close();
- //MATRIXMULTIPLIKATION + DATEIAUSGABE
- ofstream fileC("dC.txt");
- double res=0;
- for (int i = 0; i < Ax ; i++) {
- for (int k = 0; k < By ; k++) {
- for (int j = 0; j < Ay ; j++) {
- res += arrayA[i*Ay+j] * arrayB[j*By+k];
- }
- fileC << res << " ";
- res=0;
- }
- fileC << "\n";
- }
- fileC.close();
- delete [] arrayA; //da wie oben beschrieben nur ein einzelner Speicherblock pro Array reserviert wird,
- delete [] arrayB; //muss auch pro Array nur ein Block wieder freigegeben werden
- //LAUFZEITBERECHNUNG
- laufzeit = (double)(clock() - start) / CLOCKS_PER_SEC;
- cout << "Laufzeit: " << laufzeit << " Sekunden" << endl;
- }
- int main() {
- int typ;
- cout << "\n\nWAEHLEN SIE ( 0 | 1 ): \n"
- << "0 - Matrixmultiplikation mit statischen Arrays \n"
- << "1 - Matrixmultiplikation mit dynamischen Arrays \n";
- cin >> typ;
- if (typ == 0) {s_array();}
- if (typ == 1) {d_array();}
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement