Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Macierze, wpisywanie wartosci

Ostatnio zmodyfikowano 2017-12-16 14:51
Autor Wiadomość
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:
C/C++
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" ); // BEZ '\b' RYSUJE MACIERZ
            scanf( "%d", tab[ i ] ); // WYWALA BŁĄD, BEZ TEJ LINII KODU RYSUJE MI PO PROSTU MACIERZ
        }
        printf( "%c", 179 );
    }
}

Pomoże ktoś?
P-167900
nanoant20
» 2017-12-14 15:48:05
ten zapis jest zły
C/C++
int n = k * w;
int tab[ n ];
Poprawilem ci bez zbednych ozdobników, ozdobniki dodasz sobie sam
C/C++
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
P-167905
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
P-167906
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.
1;2;3; 10;20;30;
4;5;6; 40;50;60;
7;8;9; 70;80;90;

wynik czastkowy = (1x10)+(2x40)+(3x70);
Potrzebne są 3 petelki
P-167928
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:
C/C++
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 );
        }
    }
}
P-167932
nanoant20
» 2017-12-16 12:07:06
nie wiem czy to jest macierz kwadratowa, czyli np. 3x3 jezeli tak
C/C++
//mnozymy macierz tab1 x tab2
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; //tutaj zapisuje wynik do nowej macierzy
}
P-167933
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
P-167934
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

P-167936
« 1 » 2
  Strona 1 z 2 Następna strona