Witam. Piszę program na zaliczenie. Temat to działania macierzowe. Wszystko co potrzebne już napisałem. Teraz chcę złożyć wszystko w całość i tu pojawia się problem. Wykładowca powiedział żebyśmy zrobili menu na funkcji switch. Do tej pory Napisałem tyle:
#include <iomanip>
#include <cmath>
#include <iostream>
// prototypy
int menu();
void DoTaskOne();
void DoTaskMany(int);
using namespace std;
int main()
{
bool exit = false;
for (;;)
{
int choice = menu();
switch(choice)
{
case (1):
DoTaskOne();
break;
case (2):
DoTaskMany(2);
break;
case (3):
DoTaskMany(3);
break;
case (4):
DoTaskMany(4);
break;
case (5):
DoTaskMany(5);
break;
case (6):
exit=true;
break;
default:
cout << "Prosze wybrac ponownie!\n";
break;
} // koniec instrukcji switch
if (exit)
break;
} // koniec petli for(;;)
return 0;
} // koniec main()
int menu()
{
int choice;
cout << " **** Menu ****\n\n";
cout << "(1) Dodawanie Macierzy.\n";
cout << "(2) Odejmowanie Macierzy.\n";
cout << "(3) Mnozenie Maceirzy.\n";
cout << "(4) Transponowanie Macierzy.\n";
cout << "(5) Wyznacznik Macierzy.\n";
cout << "(6) Wyjście.\n\n";
cout<<": ";
cin >> choice;
return choice;
}
void DoTaskOne()
{
int n, m;
cout << "Podaj wymiar Macierzy: ";
cin >> n;
double macierz1[n][n];
double macierz2[n][n];
double macierz3[n][n];
{
for(int i = 0; i < n; i++) //wstawianie danych
{
for(int j = 0;j < n; j++)
{
cout << "Macierz1 [" << i << "][" << j << "]: ";
cin >> macierz1[i][j];
}
}
cout<<"\n";
for(int i = 0; i < n; i++) //wstawianie danych
{
for(int j = 0;j < n; j++)
{
cout << "Macierz2 [" << i << "][" << j << "]: ";
cin >> macierz2[i][j];
}
}
for(int i = 0; i < n; i++) //mnożenie macierzy
{
for(int j = 0;j < n; j++)
macierz3[i][j]=macierz1[i][j]+macierz2[i][j];
}
cout << "Macierz1:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{
for(int j = 0;j < n; j++)
{
cout << macierz1[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Macierz2:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{
for(int j = 0;j < n; j++)
{
cout << macierz2[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Macierz Wynikowa:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy wynikowej
{
for(int j = 0;j < n; j++)
{
cout << macierz3[i][j] << " ";
}
cout << endl;
}
}
}
void DoTaskMany(int which)
{
if (which == 2)
{
int n, m;
cout << "Podaj wymiar Macierzy: ";
cin >> n;
double macierz1[n][n];
double macierz2[n][n];
double macierz3[n][n];
{
for(int i = 0; i < n; i++) //wstawianie danych
{
for(int j = 0;j < n; j++)
{
cout << "Macierz1 [" << i << "][" << j << "]: ";
cin >> macierz1[i][j];
}
}
cout<<"\n";
for(int i = 0; i < n; i++) //wstawianie danych
{
for(int j = 0;j < n; j++)
{
cout << "Macierz2 [" << i << "][" << j << "]: ";
cin >> macierz2[i][j];
}
}
for(int i = 0; i < n; i++) //mnożenie macierzy
{
for(int j = 0;j < n; j++)
macierz3[i][j]=macierz1[i][j]-macierz2[i][j];
}
cout << "Macierz1:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{
for(int j = 0;j < n; j++)
{
cout << macierz1[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Macierz2:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{
for(int j = 0;j < n; j++)
{
cout << macierz2[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Macierz Wynikowa:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy wynikowej
{
for(int j = 0;j < n; j++)
{
cout << macierz3[i][j] << " ";
}
cout << endl;
}
}
}
else if (which==3)
{
int n, m;
cout << "Podaj wymiar Macierzy: ";
cin >> n;
double macierz1[n][n];
double macierz2[n][n];
double macierz3[n][n];
{
for(int i = 0; i < n; i++) //wstawianie danych
{
for(int j = 0;j < n; j++)
{
cout << "Macierz1 [" << i << "][" << j << "]: ";
cin >> macierz1[i][j];
}
}
cout<<"\n";
for(int i = 0; i < n; i++) //wstawianie danych
{
for(int j = 0;j < n; j++)
{
cout << "Macierz2 [" << i << "][" << j << "]: ";
cin >> macierz2[i][j];
}
}
for(int i = 0; i < n; i++) //mnożenie macierzy
{
for(int j = 0;j < n; j++)
macierz3[i][j]=macierz1[i][j]*macierz2[i][j];
}
cout << "Macierz1:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{
for(int j = 0;j < n; j++)
{
cout << macierz1[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Macierz2:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{
for(int j = 0;j < n; j++)
{
cout << macierz2[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Macierz Wynikowa:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy wynikowej
{
for(int j = 0;j < n; j++)
{
cout << macierz3[i][j] << " ";
}
cout << endl;
}
}
}
else if (which==4)
{
//Deklaracja Zmiennych
int n, m;
//Określanie wymiaru Macierzy
cout << "Podaj wymiar Macierzy: ";
cin >> n;
//Deklaracja tablic macierzy
double macierz[n][n];
double macierzT[n][n];
//wstawianie danych
for(int i = 0; i < n; i++)
{
for(int j = 0;j < n; j++)
{
cout << "Wyraz [" << i << "][" << j << "]: ";
cin >> macierz[i][j];
}
}
//transponowanie macierzy
for(int i = 0; i < n; i++)
{
for(int j = 0;j < n; j++)
macierzT[j][i]=macierz[i][j];
}
//wyswietlanie macierzy
cout << "Macierz:" << endl;
for(int i = 0; i < n; i++)
{
for(int j = 0;j < n; j++)
{
cout << macierz[i][j] << " ";
}
cout << endl;
}
cout << endl;
//wyswietlanie macierzy transponowanej
cout << "Macierz transponowana:" << endl;
for(int i = 0; i < n; i++)
{
for(int j = 0;j < n; j++)
{
cout << macierzT[i][j] << " ";
}
cout << endl;
}
}
else if (which==5){}
else
cout << "Opcja trzecia!\n";
}
Teraz w miejsce
else if (which==5){}
chciałbym dodać kolejną część programu która wygląda tak:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const double eps = 1e-12;
bool lu(int n, double ** A)
{
int i,j,k;
for(k = 0; k < n - 1; k++)
{
if(fabs(A[k][k]) < eps) return false;
for(i = k + 1; i < n; i++)
A[i][k] /= A[k][k];
for(i = k + 1; i < n; i++)
for(j = k + 1; j < n; j++)
A[i][j] -= A[i][k] * A[k][j];
}
return true;
}
// Program główny
int main()
{
double ** A,det;
int n,i,j;
cout << setprecision(1) << fixed;
// odczytujemy stopień macierzy A
cout<<"Podaj n: ";
cin >> n;
// tworzymy macierz A o odpowiednich rozmiarach
A = new double * [n];
for(i = 0; i < n; i++) A[i] = new double [n];
// odczytujemy dane dla macierzy A
for(i = 0; i < n; i++){
cout<<"\n";
for(j = 0; j < n; j++){
cout<<"wpisz A ["<<i<<"]["<<j<<"]: ";
cin >> A[i][j];
}
}
const double eps = 1e-12;
// Funkcja realizuje algorytm rozkładu LU
// obliczamy wyznacznik
if(lu(n,A))
{
det = A[0][0];
for(i = 1; i < n; i++) det *= A[i][i];
cout<<"\n";
cout <<"Det(A)= "<<det <<"\n";
}
else
cout << "DZIELNIK ZERO\n";
// usuwamy macierz z pamięci
for(i = 0; i < n; i++) delete [] A[i];
delete [] A;
system("pause");
return 0;
}
Jednak Gdy zamieszczam program w tym miejscu, przy kompilowaniu programu wyskakują mi błędy (używam Dev C++) :
*318 - a function-definition is not allowed here before '{' token
*335 - expected primary-expression before "int"
Byłbym wdzięczny za każdą pomoc, szukałem już w wielu miejscach, czytałem książkę, nic nie pozwoliło mi pójść dalej.
Za wszelkie błędy przepraszam.
Pozdrawiam.
Mateusz