Mnożenie, dodawanie i odejmowanie macierzy - błąd po skończeniu obliczeń

0

Witam. Miałem do napisania program który mnoży, dodaje i odejmuje macierze 2x2. Jednak po wykonanych obliczeniach i podaniu wyniku program przestaje działać. Pojawia się błąd i przerywa proces. Czy ktoś może wie w czym tkwi błąd?

#include <stdio.h>

void mnozenie(int macierz[2][2], int macierz2[2][2]);
void dodawanie(int macierz[2][2], int macierz2[2][2]);
void odejmowanie(int macierz[2][2], int macierz2[2][2]);
void wypisz(int tab[2][2]);

main()
{
int macierz[2][2];
int macierz2[2][2];

printf("Podaj elementy pierwszej macierzy A\n");
printf("A[1.1]= ");
scanf("%d", &macierz[1][1]);
printf("A[1.2]= ");
scanf("%d", &macierz[1][2]);
printf("A[2.1]= ");
scanf("%d", &macierz[2][1]);
printf("A[2.2]= ");
scanf("%d", &macierz[2][2]);

printf("Podaj elementy drugiej macierzy B\n");
printf("B[1.1]= ");
scanf("%d", &macierz2[1][1]);
printf("B[1.2]= ");
scanf("%d", &macierz2[1][2]);
printf("B[2.1]= ");
scanf("%d", &macierz2[2][1]);
printf("B[2.2]= ");
scanf("%d", &macierz2[2][2]);
mnozenie(macierz,macierz2);
dodawanie(macierz,macierz2);
odejmowanie(macierz,macierz2);



}

void mnozenie(int macierz[2][2], int macierz2[2][2])
{
int wynik1[2][2];
wynik1[1][1]=((macierz[1][1]*macierz2[1][1])+(macierz[1][2]*macierz2[2][1]));
wynik1[1][2]=((macierz[1][1]*macierz2[1][2])+(macierz[1][2]*macierz2[2][2]));
wynik1[2][1]=((macierz[2][1]*macierz2[1][1])+(macierz[2][2]*macierz2[2][1]));
wynik1[2][2]=((macierz[2][1]*macierz2[1][2])+(macierz[2][2]*macierz2[2][2]));
wypisz(wynik1);
}

void dodawanie(int macierz[2][2], int macierz2[2][2])
{
int wynik2[2][2];
wynik2[1][1]=(macierz[1][1])+(macierz2[1][1]);
wynik2[1][2]=(macierz[1][2])+(macierz2[1][2]);
wynik2[2][1]=(macierz[2][1])+(macierz2[2][1]);
wynik2[2][2]=(macierz[2][2])+(macierz2[2][2]);
wypisz(wynik2);
}

void odejmowanie(int macierz[2][2], int macierz2[2][2])
{
int wynik3[2][2];
wynik3[1][1]=(macierz[1][1])-(macierz2[1][1]);
wynik3[1][2]=(macierz[1][2])-(macierz2[1][2]);
wynik3[2][1]=(macierz[2][1])-(macierz2[2][1]);
wynik3[2][2]=(macierz[2][2])-(macierz2[2][2]);
wypisz(wynik3);
}

void wypisz(int tab[2][2])
{
   printf("\n%d %d \n%d %d\n",tab[1][1],tab[1][2],tab[2][1],tab[2][2]);
}
 
0

brakuje void przed main, ale to nie w tym rzecz

0

Tablice w C indeksuje się od zera...

0
bart_vv napisał(a)

Tablice w C indeksuje się od zera...

Witaj. To niczego nie zmiania. Windows wypluwa "program zadanie przestal dzialac"

#include <stdio.h>

void mnozenie(int macierz[1][1], int macierz2[1][1]);
void dodawanie(int macierz[1][1], int macierz2[1][1]);
void odejmowanie(int macierz[1][1], int macierz2[1][1]);
void wypisz(int tab[1][1]);

void main()
{
int macierz[1][1];
int macierz2[1][1];

printf("Podaj elementy pierwszej macierzy A\n");
printf("A[1.1]= ");
scanf("%d", &macierz[0][0]);
printf("A[1.2]= ");
scanf("%d", &macierz[0][1]);
printf("A[2.1]= ");
scanf("%d", &macierz[1][0]);
printf("A[2.2]= ");
scanf("%d", &macierz[1][1]);

printf("Podaj elementy drugiej macierzy B\n");
printf("B[1.1]= ");
scanf("%d", &macierz2[0][0]);
printf("B[1.2]= ");
scanf("%d", &macierz2[0][1]);
printf("B[2.1]= ");
scanf("%d", &macierz2[1][0]);
printf("B[2.2]= ");
scanf("%d", &macierz2[1][1]);
mnozenie(macierz,macierz2);
dodawanie(macierz,macierz2);
odejmowanie(macierz,macierz2);

return 0;



}

void mnozenie(int macierz[1][1], int macierz2[1][1])
{
int wynik1[1][1];
wynik1[0][0]=((macierz[0][0]*macierz2[0][0])+(macierz[0][1]*macierz2[1][0]));
wynik1[0][1]=((macierz[0][0]*macierz2[0][1])+(macierz[0][1]*macierz2[1][1]));
wynik1[1][0]=((macierz[1][0]*macierz2[0][0])+(macierz[1][1]*macierz2[1][0]));
wynik1[1][1]=((macierz[1][0]*macierz2[0][1])+(macierz[1][1]*macierz2[1][1]));
}

void dodawanie(int macierz[1][1], int macierz2[1][1])
{
int wynik2[1][1];
wynik2[0][0]=(macierz[1][1])+(macierz2[1][1]);
wynik2[0][1]=(macierz[0][1])+(macierz2[0][1]);
wynik2[1][0]=(macierz[1][0])+(macierz2[1][0]);
wynik2[1][1]=(macierz[1][1])+(macierz2[1][1]);
}

void odejmowanie(int macierz[1][1], int macierz2[1][1])
{
int wynik3[1][1];
wynik3[0][0]=(macierz[0][0])-(macierz2[0][0]);
wynik3[0][1]=(macierz[0][1])-(macierz2[0][1]);
wynik3[1][0]=(macierz[1][0])-(macierz2[1][0]);
wynik3[1][1]=(macierz[1][1])-(macierz2[1][1]);
}

void wypisz(int tab[1][1])
{
   printf("\n%d %d \n%d %d\n",tab[0][0],tab[0][1],tab[1][0],tab[1][1]);
}
 

UPDATE: Juz wiem. Kolega wyzej mial racje jednak nie zrozumialem. Deklaruje tablice [2][2] ale przy obliczeniach indeksuje od 0. dziekuje i pozdrawiam.

0

Indeksuje się owszem od zera ale rozmiar się podaje w sztukach.
int Tb[2];
Tb[0]=1;
Tb[1]=2;

0

funkcja main powinna być typu int jeżeli zwracasz na końcu return 0.... poza tym nie ma czegoś takiego jak void main (bynajmniej w ansi c)

1 użytkowników online, w tym zalogowanych: 0, gości: 1