Bercik97 Temat założony przez niniejszego użytkownika |
Macierze, wpisywanie wartosci » 2017-12-14 14:00:12 Witam. Mam taki problem, chce stworzyć program do macierzy który wykonuje mi działania, dodawanie, odejmowanie, transponowanie itp. I zatrzymałem się na momencie w którym wpisuje liczby do macierzy. Tzn. program rysuje mi macierz dowolną, zdefiniowaną przez użytkownika ale nie wiem jak zrobić żeby wpisywał mi wartości w puste miejsca i w tym samym czasie stopniowo rysował. Nie wiem jak to wytłumaczyć, na screenie widać o co mi chodzi. screen -> https://imgur.com/a/lhugq kod: void rysuj_macierz( int k, int w, int k2, int w2 ) { system( "cls" ); printf( "Wymiary: %dx%d\n", k, w ); int n = k * w; int tab[ n ]; int i, j; printf( "Macierz 1:\n" ); for( i = 0; i < k; i++ ) { printf( "\n%c", 179 ); for( j = 0; j < w; j++ ) { printf( " _\b" ); scanf( "%d", tab[ i ] ); } printf( "%c", 179 ); } }
Pomoże ktoś? |
|
nanoant20 |
» 2017-12-14 15:48:05 ten zapis jest zły int n = k * w; int tab[ n ];
Poprawilem ci bez zbednych ozdobników, ozdobniki dodasz sobie sam void rysuj_macierz( int k, int w ) { printf( "Wymiary: %dx%d\n", k, w ); int tab[ k ][ w ]; int i, j; printf( "Macierz 1:\n" ); for( i = 0; i < k; i++ ) for( j = 0; j < w; j++ ) { printf( "[%d.%d] ", i, j ); scanf( "%d", & tab[ i ][ j ] ); if( j == w - 1 ) printf( "\n" ); } printf( "\nTwoja Macierz\n" ); for( i = 0; i < k; i++ ) for( j = 0; j < w; j++ ) { printf( "%d ", tab[ i ][ j ] ); if( j == w - 1 ) printf( "\n" ); } } int main() { rysuj_macierz( 3, 3 ); return 0; }
@EDIT chce stworzyć program do macierzy który wykonuje mi działania, dodawanie, odejmowanie, transponowanie itp |
Jezeli chcesz robić działania na macierzech to trzeba zrobić osobne funkcje na wyswietlanie macierzy, inna na dodawanie itd. a tablice 2D twórz w main(), a przynakmniej je tam zadeklaruj |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-14 16:05:57 Ok, własnie tak robię bo bez funkcji trochę za dużo kodu by było, będę tu pisał jak będzie coś nie tak :P edit: Zrobiłem dodawanie, odejmowanie, transponowanie, mnożenie przez liczbę + menu, zabezpieczenia i zostało mi jeszcze mnożenie dwóch macierzy, coś mi nie wychodzi ale wstrzymam się jeszcze z dodawaniem i pytaniem o kod tutaj =D, jak nie będę już kompletnie wiedział to dodam go tutaj jutro albo dziś jeszcze, nie chce na neta wchodzić i brać gotowe rozwiązanie. :P |
|
nanoant20 |
» 2017-12-15 16:39:48 zostało mi jeszcze mnożenie dwóch macierzy, coś mi nie wychodzi |
Wynikiem mnożenia dwóch macierzy jest suma iloczynów kolejnych elementów 1-go wiersza macierzy A przez elementy 1-ej kolumny macierzy B: np. wynik czastkowy = (1x10)+(2x40)+(3x70); Potrzebne są 3 petelki |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-16 11:11:18 Nie wiem jak to zrobić, jestem już bardzo blisko, program liczy mi tylko 1 wiersz i 1 kolumnę. Rozrysowałem to sobie wszystko na kartce, wiem na czym polega błąd ale nie wiem jak to przenieść na kod. Próbowałem coś ze zmienna pomocniczą, jakieś konstrukcje if ale no nie działa tak jakbym chciał. Proszę o pomoc. Oto kod: for( i = 0; i < k; i++ ) { for( j = 0; j < w; j++ ) { for( z = 0; z < k2; z++ ) { wynik = tab[ i ][ z ] * tab2[ z ][ i ]; printf( "%d\n", wynik ); } } }
|
|
nanoant20 |
» 2017-12-16 12:07:06 nie wiem czy to jest macierz kwadratowa, czyli np. 3x3 jezeli tak int k, wynik; for( i = 0; i < 3; i++ ) for( j = 0; j < 3; j++ ) { wynik = 0; for( k = 0; k < 3; k++ ) wynik += tab1[ i ][ k ] * tab2[ k ][ j ]; tab3[ i ][ j ] = wynik; }
|
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-16 12:12:26 Program ma być zrobiony dla dowolnego rozmiaru no i warunek jest taki, że liczba kolumn M1 == liczba wierszy M2 |
|
nanoant20 |
» 2017-12-16 12:40:11 uczono mnie, ze mnozy sie kolejne elementy wiersza macierzy M1 przez elementy kolumny macierzy M2 i wynikiem mnożenia dwóch macierzy jest nowa macierz M3 wystarczy zamiast tych 3-ek podstawić odpowiednie zmienne i jeszcze jedno, piszesz Program ma być zrobiony dla dowolnego rozmiaru |
jeżeli tak to musisz tworzyć macierz za pomocą malloc, inaczej wynik przyjmie wartości fluktuacyjne, już Ci to kiedyś pisałem przy tablicach |
|
« 1 » 2 |