Prosze o pomoc w błedzie

Programowanie w języku C i językach pochodnych, jak C++, C#
ola22222xd
Posty: 1
Rejestracja: 3 cze 2013, 21:33

Prosze o pomoc w błedzie

Post autor: ola22222xd » 3 cze 2013, 21:54

Witam!
potrzebuje pomocy w programie, to znaczy chodzi mi o bład który tam jest i nie wiem jak go zmodyfikowac cos jest nie tak z wyznacznikami, program sie kompiluje wszystko działa tylko wyznaczniki wychodza nie takie. czyli cos musi byc z działaniem nie tak ale nie wiem co. Prosze o pomoc. Jakby ktos znalazł wiecej błedów była bym wdzieczna o ich poprawienie. bardzo dziekuje.


#include <cstdio>
//----------------------------------------------------------------------

void msuma(int **m1, int **m2, int x, int y);
void mroznica(int **m1, int **m2, int x, int y);
void miloczyn(int **m1, int **m2, int x, int y, int x2, int y2);
int dett(int **tab, int rozmiar);
void clrscr(void);
//----------------------------------------------------------------------

int main(int argc, char **argv)
{
int w;
int x, y, x2, y2;
int **m1, **m2;
bool t = false;

while(t == false)
{
printf("1 - Dodawanie\n2 - Odejmowanie\n3 - Mnozenie\n4 - Wyznacznik\n5 - Wyjscie\n\nWpisz cyfre i nacisnij enter: ");
scanf("%d", &w);
clrscr();

switch(w)
{
case 1:
printf("Podaj liczbe wierszy i kolumn (Przy dodawaniu obie macierze musza miec takie same wymiary)\nLiczba wierszy: ");
scanf("%d", &x);
printf("Liczba kolumn: ");
scanf("%d", &y);

m1 = new int *[x];
for(int i = 0; i < x; ++i)
m1 = new int [y];
m2 = new int *[x];
for(int i = 0; i < x; ++i)
m2 = new int [y];

for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
{
printf("Podaj liczbe (%d, %d) pierwszej macierzy: ", i, j);
scanf("%d", &m1[j]);
}
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
{
printf("Podaj liczbe (%d, %d) drugiej macierzy: ", i, j);
scanf("%d", &m2[j]);
}
clrscr();
msuma(m1, m2, x, y);

for(int i = 0; i < x; ++i )
{
delete [] m1;
delete [] m2;
}
delete [] m1;
delete [] m2;

printf("\n");

break;

case 2:
printf("Podaj liczbe wierszy i kolumn (Przy odejmownaiu obie macierze musza miec takie same wymiary)\nLiczba wierszy: ");
scanf("%d", &x);
printf("Liczba kolumn: ");
scanf("%d", &y);

m1 = new int *[x];
for(int i = 0; i < x; ++i)
m1 = new int [y];
m2 = new int *[x];
for(int i = 0; i < x; ++i)
m2 = new int [y];

for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
{
printf("Podaj liczbe (%d, %d) pierwszej macierzy: ", i, j);
scanf("%d", &m1[j]);
}
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
{
printf("Podaj liczbe (%d, %d) drugiej macierzy: ", i, j);
scanf("%d", &m2[j]);
}
clrscr();
mroznica(m1, m2, x, y);

for(int i = 0; i < x; ++i )
{
delete [] m1[i];
delete [] m2[i];
}
delete [] m1;
delete [] m2;

printf("\n");

break;

case 3:
printf("Podaj wymiary obu macierzy (Liczba kolum drugiej macierzy musi byc rowna liczbie wierszy pierwszej macierzy)\n");
printf("Podaj liczbe wierszy pierwszej macierzy: ");
scanf("%d", &x);
printf("Podaj liczbe kolumn pierwszej macierzy: ");
scanf("%d", &y);
printf("\nPodaj liczbe wierszy drugiej macierzy: ");
scanf("%d", &x2);
printf("Podaj liczbe kolumn drugiej macierzy: ");
scanf("%d", &y2);
printf("\n");

if(x != y2)
break;

m1 = new int *[x];
for(int i = 0; i < x; ++i)
m1[i] = new int [y];
m2 = new int *[x2];
for(int i = 0; i < x2; ++i)
m2[i] = new int [y2];

for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
{
printf("Podaj liczbe (%d, %d) pierwszej macierzy: ", i, j);
scanf("%d", &m1[i][j]);
}

printf("\n");

for(int i = 0; i < x2; i++)
for(int j = 0; j < y2; j++)
{
printf("Podaj liczbe (%d, %d) drugiej macierzy: ", i, j);
scanf("%d", &m2[i][j]);
}
clrscr();
miloczyn(m1, m2, x, y, x2, y2);

for(int i = 0; i < x; ++i )
{
delete [] m1[i];
}
for(int i = 0; i < x2; ++i )
{
delete [] m2[i];
}
delete [] m1;
delete [] m2;

printf("\n");

break;

case 4:
printf("Podaj dlugosc boku macierzy: ");
scanf("%d", &x);

m1 = new int *[x];
for(int i = 0; i < x; ++i)
m1[i] = new int [x];

for(int i = 0; i < x; i++)
for(int j = 0; j < x; j++)
{
printf("Podaj liczbe (%d, %d) macierzy: ", i, j);
scanf("%d", &m1[i][j]);
}

printf("Wyznacznik wynosi: %d\n", dett(m1, x));

for(int i = 0; i < x; ++i )
delete [] m1[i];

break;

case 5:
return 0;

break;

default:
printf("Operacja niemozliwa\n");
printf("\n");

break;
}
}

return 0;
}
//----------------------------------------------------------------------

void msuma(int **m1, int **m2, int x, int y)
{
printf("Suma macierzy m1 i m2 zostala wyswietlona ponizej\n");
for(int i=0; i<x; i++)
{
printf("[");
for(int j = 0; j < y; j++)
{
printf("%d, ",m1[i][j] + m2[i][j]);
}
printf("]\n");
}
}
//----------------------------------------------------------------------

void mroznica(int **m1, int **m2, int x, int y)
{
printf("Roznica macierzy m1 i m2 zostala wyswietlona ponizej\n");
for(int i = 0; i < x; i++)
{
printf("[");
for(int j = 0; j < y; j++)
{
printf("%d, ", m1[i][j] - m2[i][j]);
}
printf("]\n");
}
}
//----------------------------------------------------------------------

void miloczyn(int **m1, int **m2, int x, int y, int x2, int y2)
{
int **m = new int *[x];
for(int i = 0; i < x; ++i)
m[i] = new int [y2];

for(int i = 0; i < x; i++)
for(int j = 0; j < y2; j++)
m[i][j]=0;

for(int i = 0; i < x; i++)
for(int j = 0; j < y2; j++)
for(int k = 0; k < y; k++)
m[i][j] +=m1[i][k]*m2[k][j];

printf("Iloczyn macierzy m1 i m2 zostala wyswietlona ponizej\n");
for(int i = 0; i < x; i++)
{
printf("[");
for(int j = 0; j < y2; j++)
{
printf("%d, ", m[i][j]);
}
printf("]\n");
}
}
//----------------------------------------------------------------------
TU COŚ JEST CHYBA NIE TAK :oops:
int dett(int **tab, int rozmiar)
{
float det = 1.0;

for (int k = 0; k < rozmiar - 1; k++)
{
for (int i = k + 1; i < rozmiar; i++)
for (int j = rozmiar - 1; j >= k; j--)
tab[i][j] = tab[i][j] - tab[i][k] * tab[k][j] / tab[k][k];
}

for(int i = 0; i < rozmiar; i++)
det = det * tab[i][i];

return det;
}
//----------------------------------------------------------------------

void clrscr(void)
{
printf("\033[2J");
printf("\033[0;0f");
}
//----------------------------------------------------------------------