Problem przy Dokończeniu programu.

0

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

0

Najwidoczniej źle przeklejasz. Da się to zrobić bez większego problemu, ale nie wiem czego oczekujesz, że użyję ctrl +c ctrl + v za Ciebie? Spróbuj jeszcze raz i pokaż jak wygląda po zmianie kod main oraz funkcji utworzonej z przeklejonego kodu.

0

Nie, nie oczekuje że zrobisz to za mnie, ale nie wiem co mam dokładnie przekleić ja kopiowałem w to miejsce ten fragment :

 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;
  
  
}

i wyrzuca błędy. Przyznaję się że jestem zielony w c++.

0

ok Udało mi się, nie wiem czy poprawnie to zrobiłem ale dałeś mi do zrozumienia że nie powinienem całości w jedno miejce wklejać. Teraz calość wygląda tak i działa.:

 #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()
const double eps = 1e-12;
// Funkcja realizuje algorytm rozkładu LU
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;
}
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){{
  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];
    
}
}
// 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");
  
  
  
}
}
else
		cout << "Opcja trzecia!\n";
}


0

Wszystko co potrzebne już napisałem.

Wierzę, że sam napisałeś, ale powinieneś zaznaczyć, że większość to zlepek innych czyichś programów (jeżeli tak jest oczywiście ;) ). Odpowiadający dopasowuje poziom odpowiedzi do poziomu pytającego i widząc tyle naskrobanego kodu można się spodziewać, że wiesz co to main() i TaskXXXX().

Wracając do tematu. Powinieneś raczej podzielić funkcję TaskMany. Każdy if (which == ...) powinien być osobną funkcją. Nazwij te funkcje tak żeby opisywały mniej więcej co robią (AddMatrix,SubtractMatrix itp)

0

Masz rację, ponazywam je inaczej. w tym programie tylko wyznacznik i macierz odwrotna są programami innych resztę napisałem sam. Menu pisaliśmy na ćwiczeniach.
Dziękuję za pomoc :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1