[C++] Program do obliczania wyznacznika macierzy 3x3

jackbriggs
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 27 lis 2017, o 12:33
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 5 razy

[C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: jackbriggs »

Witam napisałem na szybko program do liczenia wyznacznika macierzy \(\displaystyle{ 3\!\times\!3}\) . Jakieś sugestie co do jakości kodu? A może jest go za dużo? Proszę o rady.

Kod: Zaznacz cały

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
	int a,b,c,d,e,f,g,h,i,calc1,calc2,calc3,calc4,calc5,calc6,det;
	cout<<"Program sluzy do obliczania wyznacznika macierzy 3x3.
";
	cout<<"Wpisz po kolei, idac pionowo skladniki macierzy.
";
	cout<<"Podaj pierwszy skladnik: ";
	cin>>a;
	cout<<"Podaj drugi skladnik: ";
	cin>>b;
	cout<<"Podaj trzeci skladnik: ";
	cin>>c;
	cout<<"Podaj czwarty skladnik: ";
	cin>>d;
	cout<<"Podaj piaty skladnik: ";
	cin>>e;
	cout<<"Podaj szosty skladnik: ";
	cin>>f;
	cout<<"Podaj siodmy skladnik: ";
	cin>>g;
	cout<<"Podaj osmy skladnik: ";
	cin>>h;
	cout<<"Podaj dziewiaty skladnik: ";
	cin>>i;
	calc1 = a*e*i;
	calc2 = b*f*g;
	calc3 = c*d*h;
	calc4 = c*e*g;
	calc5 = b*d*i;
	calc6 = a*f*h;
	det = calc1 + calc2 + calc3 - calc4 - calc5 - calc6;
	cout<<"
Wyznacznik macierzy to: "<<det;
	return 0;
}
Ostatnio zmieniony 23 gru 2017, o 16:36 przez SlotaWoj, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
mortan517
Użytkownik
Użytkownik
Posty: 3359
Rejestracja: 6 lis 2011, o 15:38
Płeć: Mężczyzna
Lokalizacja: Krk
Podziękował: 112 razy
Pomógł: 662 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: mortan517 »

1. Używaj cmath zamiast math.h .
2. Zmienne powinny coś oznaczać, nie być jednoliterowe.
3. Jako użytkownik nie chciałoby mi się wprowadzać po kolei każdego składnika (proponuje raczej wejście w stylu 1 2 3;4 5 6;7 8 9).
4. A co jeśli się pomylę? Wszystko wpisuję od nowa?
5. Program liczy wyznaczniki jedynie macierzy, które mają całkowite składniki.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: SlotaWoj »

jackbriggs pisze:cout<<"Wpisz po kolei, idac pionowo skladniki macierzy.
";
A jak to się idzie pionowo?

Jak będziesz wprowadzał macierz \(\displaystyle{ 12\!\times\!12}\) to pewnie będzie:

Kod: Zaznacz cały

...
cout<<"Podaj stodziewiąty skladnik: ";
...
jackbriggs
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 27 lis 2017, o 12:33
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 5 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: jackbriggs »

Dzięki bardzo, bo właśnie mi podpowiedziałeś gruby błąd. Składniki w programie wpisuje się poziomo, a nie pionowo, a instrukcji napisałem pionowo. Już to zmieniam. Biblioteka zmieniona na cmath, typ zmiennej zmieniony na double.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: SlotaWoj »

Żadne pionowo czy poziomo!. Kolumnami lub wierszami!
jackbriggs
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 27 lis 2017, o 12:33
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 5 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: jackbriggs »

Kolejna cenna uwaga.
Awatar użytkownika
Igor V
Użytkownik
Użytkownik
Posty: 1605
Rejestracja: 16 lut 2011, o 16:48
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 18 razy
Pomógł: 604 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: Igor V »

A jeszcze lepiej zamiast, stosować osobne zmienne do każdego elementu to trzymać to wszystko w tablicy dwuwymiarowej (czyli normalna macierz 3x3). Wtedy zamiast litanii cin/cout robisz podwójnego for-a i wypisujesz np: "wpisz element [1][2]", gdzie jedna liczba odpowiada wierszom a druga kolumną (czy tam odwrotnie).

-- 23 gru 2017, o 18:40 --

I taki sposób pozwala na lepsze skalowanie dla większych macierzy.
jackbriggs
Użytkownik
Użytkownik
Posty: 20
Rejestracja: 27 lis 2017, o 12:33
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 5 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: jackbriggs »

Zaraz zrobię konwersję do tablicy i zobaczymy jak to śmiga.
a4karo
Użytkownik
Użytkownik
Posty: 22207
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3754 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: a4karo »

Skalowanie ma może sens, ale nie w przypadku algorytmu, który działa tylko w przypadku \(\displaystyle{ 3\!\times\!3}\) .
Awatar użytkownika
Igor V
Użytkownik
Użytkownik
Posty: 1605
Rejestracja: 16 lut 2011, o 16:48
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 18 razy
Pomógł: 604 razy

Re: [C++] Program do obliczania wyznacznika macierzy 3x3

Post autor: Igor V »

Istnieje coś takiego jak redundancja. Pisanie czegoś takiego jak w pierwszym poście nie jest dobrą praktyką programistyczną.
ODPOWIEDZ