Elektronika i Telekomunikacja POLSL
Forum Elektroników Wydziału AEI Politechniki Śląskiej
FAQ  ::  Szukaj  ::  Użytkownicy  ::  Grupy  ::  Galerie  ::  Rejestracja  ::  Profil  ::  Zaloguj się, by sprawdzić wiadomości  ::  Zaloguj


Macierze - mnożenie i dodawanie - macie i sie cieszcie

 
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr II / PPK
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Giwer
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 17 Paź 2006
Posty: 540
Przeczytał: 0 tematów

Skąd: Rybnik

PostWysłany: Pon 20:49, 12 Mar 2007    Temat postu: Macierze - mnożenie i dodawanie - macie i sie cieszcie

Kod na dodawanie i mnożenie macierzy (+transpozycja) (mnozenie tylko na macierzach tylesamo wymiarowych, kwadratowych, nie wiem czy działa na innych - nie chcialo mi się już sprawdzać. Program robiony do tablic 3x3. Wszedzie w pętlach i deklaracjach tablic zmieniacie wartości dla innej wielkości tablic).

Najpierw należy podać wartości do 2. tablic 3x3, program potem je wyświetla, wyświetla ich sume i ich mnożenie, jak coś jeszcze napisze ciekawego to zEdytkuje
EDIT: Dodana transpozycja

(pisane w dev)
Kod:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int i, j, k, w=0, tab[3][3], tab2[3][3], tab3[3][3];
 
  for (i=0;i<3;i++)
  {
      for(j=0;j<3;j++)
      {
                      printf("\n Podaj wartosc do komorki TAB[%d][%d]  ",i,j);
                      scanf("%d",&tab[i][j]);
      }
  }
 
  for (i=0;i<3;i++)
  {
      for(j=0;j<3;j++)
      {
                      printf("\n Podaj wartosc do komorki TAB2[%d][%d]  ",i,j);
                      scanf("%d",&tab2[i][j]);
      }
  }
 
  for (i=0;i<3;i++)
  {
      printf("\n");
      for(j=0;j<3;j++)
      {
                      printf(" %d ",tab[i][j] );
      }
  }
  printf("\n\n\n");
 
  for (i=0;i<3;i++)
  {
      printf("\n");
      for(j=0;j<3;j++)
      {
                      printf(" %d ",tab2[i][j] );
      }
  }
//  ==SUMOWANIE MACIERZY== 
  printf("\n\n suma:");
 
  for (i=0; i<3;i++)
  {
    printf("\n");
    for(j=0; j<3; j++)
    {
             w=tab[i][j]+tab2[i][j];
            printf(" %d ",w);
    }
  }
     

// ==MNOZENIE MACIERZY==
printf("\n\n TAB*TAB2=TAB3: \n");

for (k=0; k<3; k++)
{
    for (i=0; i<3; i++)
    {
        w=0;
        for (j=0; j<3; j++)
        {
            w=w+tab[k][j]*tab2[j][i];
        }
    tab3[k][i]=w;
    }
}   
     
  for (i=0;i<3;i++)
  {
      printf("\n");
      for(j=0;j<3;j++)
      {
                      printf(" %d ",tab3[i][j] );
      }
  }
// ==TRANSPOZYCJA==
printf("\n\n Transpozycja pierwszej tablicy");
for (i=0; i<3; i++)
{
    printf("\n");
    for (j=i+1; j<3; j++)
    {
              w=tab[i][j];
              tab[i][j]=tab[j][i];
              tab[j][i]=w;
    }
}
  for (i=0;i<3;i++)
  {
      printf("\n");
      for(j=0;j<3;j++)
      {
                      printf(" %d ",tab[i][j] );
      }
  }

  getchar();
  getchar();   
  return 0;
}
[/b]
Powrót do góry
Zobacz profil autora
misio666
Tłuste zero



Dołączył: 07 Mar 2007
Posty: 45
Przeczytał: 0 tematów

Skąd: Bielsko/E5

PostWysłany: Pon 21:31, 12 Mar 2007    Temat postu:

A wie kto może jak zrobić na macierzach ten przykład co go podali na instrukcjach.. Przykład 2b) chodzi o zrobienie macierzy która po prinft będzie wyglądała mniej więcej tak:

1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 1 1 1 0 1
1 0 1 0 1 0 1
1 0 1 1 1 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1

Gupie to jest...
Powrót do góry
Zobacz profil autora
Giwer
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 17 Paź 2006
Posty: 540
Przeczytał: 0 tematów

Skąd: Rybnik

PostWysłany: Pon 21:37, 12 Mar 2007    Temat postu:

Nie widzę innej możliwości jak dać
if ((i=0) lub (j=0) lub (i=2) lub (j=2) lub( i=4) lub(l=4) lub(i=6) lub(l=6))
tab[i][j]=1
else tab[j][i]=0


a "lub" nie pamiętam jak było, jakieś || czy coś w ten deseń

EDIT: ew. uniwersalnie zrobić na parzystą/nieparzystą (+0). Jak sprawdzić warunek parzystości to już chyba wpadniesz Wink
Powrót do góry
Zobacz profil autora
misio666
Tłuste zero



Dołączył: 07 Mar 2007
Posty: 45
Przeczytał: 0 tematów

Skąd: Bielsko/E5

PostWysłany: Pon 21:45, 12 Mar 2007    Temat postu:

Mhm.. Na pewno to trzeba zrobić z parzystością i nieparzystością, ale chyba nie do końca tak jak piszesz.. Po prostu nie mogę wpaść jak ten warunek do ifa szczelić żeby działało.. Wrrrrr...
Powrót do góry
Zobacz profil autora
gorush
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 12 Paź 2006
Posty: 644
Przeczytał: 0 tematów

Skąd: Żory/RE

PostWysłany: Pon 22:11, 12 Mar 2007    Temat postu:

dzieki ;D
Powrót do góry
Zobacz profil autora
Ice
ELEKTRONIK - on już ciągnie druty



Dołączył: 03 Lis 2006
Posty: 301
Przeczytał: 0 tematów

Skąd: Świętochłowice

PostWysłany: Pon 23:18, 12 Mar 2007    Temat postu:

Chcialem tylko napisac ze jezeli chcemy tylko wypisac te transpozycje to po zdefiniowaniu macierzy wystarczy ze wypiszemy to tak ( w przypadku tego przykładu):


for (i=0;i<3;i++)
{
printf("\n");
for(j=0;j<3;j++)
{
printf(" %d ",tab[j][i] );
}
}

zamienimy i z j ;]
Powrót do góry
Zobacz profil autora
Giwer
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 17 Paź 2006
Posty: 540
Przeczytał: 0 tematów

Skąd: Rybnik

PostWysłany: Pon 23:26, 12 Mar 2007    Temat postu:

Jak najbardziej, do WYPISANIA to wystarczy Wink



Co do zad 3b jednak jest to jakaś trudniejsza zależność Smile nie potrafię wpaść jaka :/
Powrót do góry
Zobacz profil autora
gradzik
Tłuste zero



Dołączył: 09 Paź 2006
Posty: 69
Przeczytał: 0 tematów

Skąd: Cieszyn

PostWysłany: Wto 17:31, 13 Mar 2007    Temat postu:

misio666 napisał:
A wie kto może jak zrobić na macierzach ten przykład co go podali na instrukcjach.. Przykład 2b) chodzi o zrobienie macierzy która po prinft będzie wyglądała mniej więcej tak:

1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 1 1 1 0 1
1 0 1 0 1 0 1
1 0 1 1 1 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1

Gupie to jest...


ja do tego wymyśliłem coś takiego

for(b=0;b<(a/2)+1;b++)
{
if(i%2==0&&i==j)
{
for(i=0;i<(a-2*b);i++)
for(j=0;j<(a-2*b);j++)
tab[i+b][j+b]=1;
}
else
{
for(i=0;i<(a-2*b);i++)
for(j=0;j<(a-2*b);j++)
tab[i+b][j+b]=0;
}
i=b+1,j=b+1;
}
tablica to tab[a][a], mozna wpisać z klawiatury
pewnie da się to zrobić krócej, ale nie chciało mi się już kombinować Smile
Powrót do góry
Zobacz profil autora
GrzeKrass
ELEKTRONIK - on już ciągnie druty



Dołączył: 22 Paź 2006
Posty: 426
Przeczytał: 0 tematów

Skąd: Żory

PostWysłany: Wto 21:13, 13 Mar 2007    Temat postu:

misio666 napisał:
A wie kto może jak zrobić na macierzach ten przykład co go podali na instrukcjach.. Przykład 2b) chodzi o zrobienie macierzy która po prinft będzie wyglądała mniej więcej tak:

1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 1 1 1 0 1
1 0 1 0 1 0 1
1 0 1 1 1 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1

Gupie to jest...



#include <stdio.h>


#define N 13


int main()
{

int tab4 [N][N],i,j,k;

for(k=0;k<N;k++)
for(i=k;i<N-k;i++)
for(j=k;j<N-k;j++)
tab4[i][j]=(k+1)%2;

for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
printf("%d ",tab4[i][j]);
}
printf("\n");
}

getchar();

return 0;
}


kolega wymyślił ... i twierdzi, że jest za długie Smile)
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr II / PPK Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
  ::  
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group   ::   template subEarth by Kisioł. Programosy   ::  
Regulamin